43. Utiliser des outils d'audit de sécurité

43.1. Nmap

Nmap est un outil, très populaire dans le milieu de la sécurité informatique, créé par un certain Fyodor.

Dans un premier temps, nous allons simplement lancer un scan simple pour voir comment réagit le logiciel :


adminbdd ~ # nmap 127.0.0.1

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-04-26 11:37 CEST
Interesting ports on adminbdd (127.0.0.1):
Not shown: 1671 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
199/tcp  open  smux
443/tcp  open  https
3306/tcp open  mysql
5432/tcp open  postgres
8009/tcp open  ajp13

Nmap finished: 1 IP address (1 host up) scanned in 0.063 seconds

Le scanne s'effectue très rapidement. Véfifions avec la commande netstap si les informations correspondent :


adminbdd ~ # netstat -tpan | grep LISTEN
tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      23441/snmpd         
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      15040/mysqld        
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      7633/vsftpd         
tcp        0      0 0.0.0.0:8182                0.0.0.0:*                   LISTEN      29881/imdc          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      5675/sshd           
tcp        0      0 127.0.0.1:5432              0.0.0.0:*                   LISTEN      29697/postmaster    
tcp        0      0 127.0.0.1:8185              0.0.0.0:*                   LISTEN      29870/imdc          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      5487/sendmail       
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      9960/sshd           
tcp        0      0 0.0.0.0:8091                0.0.0.0:*                   LISTEN      3350/mysqld         
tcp        0      0 :::8009                     :::*                        LISTEN      3298/java           
tcp        0      0 :::80                       :::*                        LISTEN      17075/httpd         
tcp        0      0 :::8181                     :::*                        LISTEN      28261/intermapperd  
tcp        0      0 :::22                       :::*                        LISTEN      5675/sshd           
tcp        0      0 ::1:6010                    :::*                        LISTEN      9960/sshd           
tcp        0      0 :::8090                     :::*                        LISTEN      3298/java           
tcp        0      0 :::443                      :::*                        LISTEN      17075/httpd         
tcp        0      0 ::ffff:127.0.0.1:8092       :::*                        LISTEN      3298/java           

On peut constater une légère différence entre ce que nmap et netstat mais globalement cela correspond.

Essayons maintenant l'option pour découvrir sur quel système je tourne actuellement :


adminbdd ~ # nmap -O 127.0.0.1

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-04-26 11:45 CEST
Interesting ports on adminbdd (127.0.0.1):
Not shown: 1671 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
199/tcp  open  smux
443/tcp  open  https
3306/tcp open  mysql
5432/tcp open  postgres
8009/tcp open  ajp13
No exact OS matches for host (If you know what OS is running on it, see http://www.insecure.org/cgi-bin/nmap-submit.cgi).
TCP/IP fingerprint:
SInfo(V=4.11%P=x86_64-redhat-linux-gnu%D=4/26%Tm=4F99193E%O=21%C=1)
TSeq(Class=RI%gcd=1%SI=45E7A0%IPID=Z%TS=1000HZ)
TSeq(Class=RI%gcd=1%SI=45E799%IPID=Z%TS=1000HZ)
TSeq(Class=RI%gcd=1%SI=45E8AC%IPID=Z%TS=1000HZ)
T1(Resp=Y%DF=Y%W=8000%ACK=S++%Flags=AS%Ops=MNNTNW)
T2(Resp=N)
T3(Resp=Y%DF=Y%W=8000%ACK=S++%Flags=AS%Ops=MNNTNW)
T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)


Uptime 20.997 days (since Thu Apr  5 11:49:42 2012)

Nmap finished: 1 IP address (1 host up) scanned in 10.737 seconds

Le scanne a un peu de mal à trouver les bonnes informations. Que nous dit uname ?


adminbdd ~ # uname -a
Linux adminbdd 2.6.18-164.11.1.el5 #1 SMP Wed Jan 20 07:32:21 EST 2010 x86_64 x86_64 x86_64 GNU/Linux

On se rapproche de la vérité mais je n'ai pas eu la bonne réponse. En fait, je suis actuellement sur un serveur VMware ESXi dans une machine virtuelle sous CentOS 5.4

De plus, comme il est rappelé dans le cours, il y a de forte chance que la base de signature soit dépassée.

Par défaut, nmap ne scanne que les services TCP contrairement à l'UDP qui nécessite d'être demandé explicitement :


adminbdd ~ # nmap -sU 127.0.0.1

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-04-26 12:11 CEST
Interesting ports on adminbdd (127.0.0.1):
Not shown: 1484 closed ports
PORT    STATE         SERVICE
68/udp  open|filtered dhcpc
161/udp open|filtered snmp
162/udp open|filtered snmptrap

Nmap finished: 1 IP address (1 host up) scanned in 1.231 seconds

Essayons maintenant de savoir exactement quelles sont les versions des logiciels serveurs :


adminbdd ~ # nmap -A 127.0.0.1

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-04-26 12:18 CEST
Interesting ports on adminbdd (127.0.0.1):
Not shown: 1671 closed ports
PORT     STATE SERVICE   VERSION
21/tcp   open  ftp       vsftpd 2.0.5
22/tcp   open  ssh       OpenSSH 4.3 (protocol 2.0)
25/tcp   open  smtp      Sendmail 8.13.8/8.13.8
80/tcp   open  http      Apache httpd
199/tcp  open  smux      Linux SNMP multiplexer
443/tcp  open  ssl/http  Apache httpd
3306/tcp open  mysql     MySQL 5.0.77
5432/tcp open  postgres?
8009/tcp open  ajp13?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port5432-TCP:V=4.11%I=7%D=4/26%Time=4F99210D%P=x86_64-redhat-linux-gnu%
SF:r(SMBProgNeg,97,"E\0\0\0\x96SFATAL\0C0A000\0MProtocole\x20non\x20suppor
SF:t\xc3\xa9e\x20de\x20l'interface\x2065363\.19778\x20:\x20le\x20serveur\x
SF:20supporte\x20de\x201\.0\x20\xc3\xa0\n3\.0\0Fpostmaster\.c\0L1454\0RPro
SF:cessStartupPacket\0\0");
No exact OS matches for host (If you know what OS is running on it, see http://www.insecure.org/cgi-bin/nmap-submit.cgi).
TCP/IP fingerprint:
SInfo(V=4.11%P=x86_64-redhat-linux-gnu%D=4/26%Tm=4F99211D%O=21%C=1)
TSeq(Class=RI%gcd=1%SI=C46E8%IPID=Z%TS=1000HZ)
TSeq(Class=RI%gcd=1%SI=C477F%IPID=Z%TS=1000HZ)
TSeq(Class=RI%gcd=1%SI=C46CF%IPID=Z%TS=1000HZ)
T1(Resp=Y%DF=Y%W=8000%ACK=S++%Flags=AS%Ops=MNNTNW)
T2(Resp=N)
T3(Resp=Y%DF=Y%W=8000%ACK=S++%Flags=AS%Ops=MNNTNW)
T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)


Uptime 21.020 days (since Thu Apr  5 11:49:43 2012)
Service Info: Host: localhost.localdomain; OSs: Unix, Linux

Nmap finished: 1 IP address (1 host up) scanned in 22.549 seconds

Nmap a également du mal à détecter la version de certains services comme Postgres. La bonne version était :


adminbdd home # postgres --version
postgres (PostgreSQL) 8.1.23

Exercice : Vous vous trouvez sur un réseau qui possède en plus de votre ordinateur, un autre ordinateur qui possède un firewall mal configuré. Vous avez besoin de savoir quels sont les services à l’écoute sur cet ordinateur. Un premier scan vous a appris que le service 53/udp n’est pas filtré. Cherchez dans les options de nmap une solution pour passer par dessus ce filtrage et retourner les informations nécessaires, depuis votre ordinateur, sans avoir accès à l’ordinateur distant, autre que par le service dns.

De nombreuses options sont disponibles, vous permettant entre autre différents types de scans, sur des rangs de ports et d’ip. N’hésitez pas à passer par le frontend pour découvrir des options et vous plonger dans le manuel.

43.2. Nikto

Nikto est un scanner de serveur web. Contrairement à nmap, il ne va pas s’intéresser à la pile tcp/ip de la machine, mais plus principalement, dans notre cas, au serveur apache. C’est un outil très utile lorsque l'on met en place des serveurs, pour vérifier la pertinence de la sécurité web. Pour plus d'information, il peut être intéressant d'aller jeter un oeil sur le site.


$ nikto -g -h eof.eu.org
--------------------------------------------
- Nikto 1.34/1.31 - www.cirt.net
+ Target IP: 195.115.89.182
+ Target Hostname: eof.eu.org
+ Target Port: 80
+ Start Time: Wed Aug 31 00:18:50 2005
--------------------------------------------
+ Server: Apache/1.3.33 (Debian GNU/Linux)
PHP/4.3.10-15
- Retrieved X-Powered-By header: PHP/4.3.10-15
+ PHP/4.3.10-15 appears to be outdated (current
is at least 5.0.1)
+ Apache/1.3.33 appears to be outdated (current
is at least Apache/2.0.52). Apache 1.3.31 is
still maintained and considered secure.
+ PHP/4.3.10-15 appears to be outdated (current
is at least 5.0.1)
+ PHP/4.3.1 - PHP below 4.3.3 may allow local
attackers to safe mode and gain access to
unauthorized files. BID-8203.

On s’aperçoit tout d’abord que c’est un logiciel très verbeux, mais qui semble au fait de ce qui se passe sur la machine. On constatera par contre un faux positif sur la dernière ligne, c’est à dire une remontée d’alarme qui ne devrait pas nous être donnée.

Attention, ce logiciel est très bavard lorsqu'on l’utilise, mais cela va dans les deux sens, ce qui signifie que l’administrateur retrouvera votre trace dans les logs de son serveur web.

Exercice : lancez nikto sur votre propre serveur web et relevez les faux positifs. Analysez-les et remontez le tout par mail à votre professeur.

Je n'ai pas de véritable serveur Web mais pour le besoin du test, je lance un scanne sur ma propre machine équipé du daemon httpd.


adminbdd nikto-2.1.4 # perl nikto.pl -h 127.0.0.1
- ***** SSL support not available (see docs for SSL install) *****
- Nikto v2.1.4
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    adminbdd
+ Target Port:        80
+ Start Time:         2012-04-27 16:07:18
---------------------------------------------------------------------------
+ Server: Apache
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ ETag header found on server, inode: 32770, size: 57, mtime: 0x4bd66aae08f80
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3268: /manual/: Directory indexing found.
+ OSVDB-3092: /manual/: Web server manual found.
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3268: /manual/images/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ 6448 items checked: 1 error(s) and 8 item(s) reported on remote host
+ End Time:           2012-04-27 16:07:45 (27 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

D'après le rapport de Nikto, je suis vulnérable aux faille du type XST (Cross Site Tracing). Un faille XST, contrairement à la faille XSS, permet d'exploiter les contrôles qui autorise l'exécution de HTTP TRACE. Je suis loin de pouvoir donner plus de détail mais en cherchant un peu je suis tombé sur ce site qui explique pas mal de chose.

43.3. Nessus

Nessus est un scanner de sécurité, écrit par Renaud Deraison en 1998, et qui a su s’attirer les honneurs de la profession. Basé sur un langage propre à lui, le nasl, nessus utilise un grand nombre de plugin pour vérifier la vulnérabilité d’un ou plusieurs hôtes. Décomposé en une solution client-serveur, il autorise ainsi une souplesse plus grande dans son utilisation. Solution multi-utilisateurs, vous pouvez choisir d’autoriser ceux-ci sous certaines conditions et les authentifier soit par mot de passe, soit par certificat. Lorsque vous lancez nessus, il vous demande au préalable de vous authentifier. Par la suite, vous avez accès à la liste des plugins, d’abord générale, puis particulière.

En fonction de l’environnement que vous souhaitez auditer, ne sélectionnez pas toutes les options (dans le cas contraire, l’audit se voit rallongé en temps).

À la fin de son travail, une fenêtre d’analyse de résultat vous permet de prendre connaissance des faiblesses de votre système. Vous pouvez sauvegarder ces résultats sous différentes formes.

Exercice : Installez nessus et lancez un audit de votre machine, comme présenté dans la démo de nessus. Analysez les résultats.