Escanejar la seguretat de la xarxa: Nmap, Nessus

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció: utilitats Linux relacionades amb la seguretat

Les categories que es comenten en l'article són:

Nmap

nmap és una eina fantàstica per depurar. Hi ha moltes situacions en què necessites saber si un port en el servidor està obert, o potser bloquejat per un firewall, o has de testejar les regles definides en els iptables.

Nmap (Network Mapper) és una eina open source per a l'exploració de la xarxa i l'auditació de la seguretat. Es va dissenyar per escanejar de forma ràpida grans xarxes, encara que també funciona contra servidors únics. Nmap utilitza els paquets IP de moltes maneres diferents per tal de determinar quins hosts estan disponibles a la xarxa, quins serveis estan corrent (nom de l'aplicació i versió) en aquests servidors, quin sistema operatiu està funcionant (i versió), quin tipus de filtratge de paquets i/o firewalls hi ha a la xarxa, i moltes més característiques. Encara que Nmap es va pensar per a tasques d'auditació de seguretat, molts administradors de sistema i de xarxa el troben útil en les seves tasques rutinàries com ara inventariar la xarxa, gestionar la planificació de fer actualitzacions, monitoritzar el temps que les màquines estan en ús,...

Usos típics

Instal.lació:

$ sudo apt-get install nmap

Com sempre:

$ man nmap

El més bàsic, analitzar els ports oberts:

$ nmap 192.168.1.128

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 22:17 CET
Interesting ports on 192.168.1.128:
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.38 seconds

Analitzar els ports oberts: (opció -A)

$ nmap -A 192.168.1.128

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 22:48 CET
Interesting ports on 192.168.1.128:
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
|  ssh-hostkey: 1024 38:18:4c:49:42:a7:19:e3:6c:57:01:d0:02:e4:33:d5 (DSA)
|_ 2048 a5:e1:35:06:c0:e6:1d:cb:30:7d:cc:3d:a0:1c:ad:c4 (RSA)
80/tcp open  http    Apache httpd 2.2.14 ((Ubuntu))
|_ html-title: 403 Forbidden
Service Info: OS: Linux

Analitzar els ports oberts, amb més informació:

$ nmap -v -A 192.168.1.128

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 22:18 CET
NSE: Loaded 30 scripts for scanning.
Initiating Ping Scan at 22:18
Scanning 192.168.1.128 [2 ports]
Completed Ping Scan at 22:18, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 22:18
Completed Parallel DNS resolution of 1 host. at 22:18, 0.16s elapsed
Initiating Connect Scan at 22:18
Scanning 192.168.1.128 [1000 ports]
Discovered open port 22/tcp on 192.168.1.128
Discovered open port 80/tcp on 192.168.1.128
Completed Connect Scan at 22:18, 0.07s elapsed (1000 total ports)
Initiating Service scan at 22:18
Scanning 2 services on 192.168.1.128
Completed Service scan at 22:18, 6.01s elapsed (2 services on 1 host)
NSE: Script scanning 192.168.1.128.
NSE: Starting runlevel 1 scan
Initiating NSE at 22:18
Completed NSE at 22:18, 0.18s elapsed
NSE: Script Scanning completed.
Host 192.168.1.128 is up (0.0013s latency).
Interesting ports on 192.168.1.128:
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
|  ssh-hostkey: 1024 38:18:4c:49:42:a7:19:e3:6c:57:01:d0:02:e4:33:d5 (DSA)
|_ 2048 a5:e1:35:06:c0:e6:1d:cb:30:7d:cc:3d:a0:1c:ad:c4 (RSA)
80/tcp open  http    Apache httpd 2.2.14 ((Ubuntu))
|_ html-title: 403 Forbidden
Service Info: OS: Linux

Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.74 seconds
$ sudo nmap -sS 192.168.1.128

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 22:34 CET
Interesting ports on 192.168.1.128:
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 00:13:20:1C:59:94 (Intel Corporate)

Per exemple, dues màquines on està instal.lat el Mysql. En una màquina es pot accedir al servidor mysql des de la xarxa. En l'altra només es pot accedir localment:

$ nmap -p3306 -A 192.168.0.15

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-21 16:55 CET
Interesting ports on 192.168.0.15:
PORT     STATE SERVICE VERSION
3306/tcp open  mysql   MySQL 5.0.26
|  mysql-info: Protocol: 10
|  Version: 5.0.26
|  Thread ID: 223826
|  Some Capabilities: Connect with DB, Compress, Transactions, Secure Connection
|  Status: Autocommit
|_ Salt: ~sGJzLIk^uQtsf%$"~ya

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds

$ nmap -p3306 -A 192.168.0.10

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-21 16:58 CET
Interesting ports on 192.168.0.10:
PORT     STATE  SERVICE VERSION
3306/tcp closed mysql

Per saber el SO:

$ sudo nmap -O 192.168.1.128

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 22:21 CET
Interesting ports on 192.168.1.128:
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 00:13:20:1C:59:94 (Intel Corporate)
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=5.00%D=11/14%OT=22%CT=1%CU=34215%PV=Y%DS=1%G=Y%M=001320%TM=4EC186
OS:70%P=i686-pc-linux-gnu)SEQ(SP=C7%GCD=1%ISR=D0%TI=Z%CI=Z%II=I%TS=8)SEQ(SP
OS:=C7%GCD=3%ISR=D0%TI=Z%CI=Z%II=I%TS=8)OPS(O1=M5B4ST11NW6%O2=M5B4ST11NW6%O
OS:3=M5B4NNT11NW6%O4=M5B4ST11NW6%O5=M5B4ST11NW6%O6=M5B4ST11)WIN(W1=16A0%W2=
OS:16A0%W3=16A0%W4=16A0%W5=16A0%W6=16A0)ECN(R=Y%DF=Y%T=40%W=16D0%O=M5B4NNSN
OS:W6%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=Y%T=4
OS:0%W=16A0%S=O%A=S+%F=AS%O=M5B4ST11NW6%RD=0%Q=)T4(R=Y%DF=Y%T=40%W=0%S=A%A=
OS:Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF
OS:=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=
OS:%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G
OS:)IE(R=Y%DFI=N%T=40%CD=S)

Network Distance: 1 hop

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.74 seconds

Tot això que es volca per pantalla és la petjada (fingerprint) TCP/IP (TCP/IP fingerprint) que posseeix cada Sistema Operatiu en particular. Nmap ens mostraaixò cada vegada que no aconsegueix identificar amb exactitud quin Sistema Operatiu està corrent en el Host destí.

I com s'ho fa el nmap, per tal de reconèixer el sistema operatiu, que s'està executant en el host destí?.

Bàsicament, cada sistema operatiu respon de manera diferent quan se li envien paquets TCP específics (en realitat no tan específics, més aviat incoherents), i així s'aconsegueix determinar amb una bona exactitud de quin SO es tracta.

Ara bé, si és realment necessari conèixer quin SO està corrent en el host remot és millor utilitzar una altra eina, juntament amb nmap, com per exemple QueSO.


Descobrir equips actius en una xarxa:

$ nmap -sP 192.168.1.1-255

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 22:24 CET
Host 192.168.1.1 is up (0.0016s latency).
Host 192.168.1.33 is up (0.0039s latency).
Host 192.168.1.36 is up (0.00013s latency).
Host 192.168.1.128 is up (0.00078s latency).
Nmap done: 255 IP addresses (4 hosts up) scanned in 20.98 seconds

nota: Aquesta comand ens ha sigut d'utilitat per descobrir quina és la IP del nostre disc de xarxa NDAS. Executem la comanda amb el NDAS desconnectat, i després amb el NDAS connectat, i comprant les dues sortides podem veure quina IP agafa el NDAS.

nmap té interfícies gràfiques. Per exemple:

$ sudo aptitude install nmapfe
$ sudo aptitude install knmap (KDE)

Realitzant Stealth Scans

Amb aquest tipus de scan, es pretén no ser detectat per software de detecció de scans. S'envien paquets als hosts amb certs flags TCP activats o desactivats per tal d'evitar ser detectats.

Si desitgem fer un stealth scan del tipus Xmas Tree, i a més desitgem conèixer quin SO està corrent en el host de destí, executem:

$ sudo nmap -sX -O 192.168.1.128

Despistar amb un Decoy Scan:

-D: Aquesta opció s'utilitza per tal de tractar d'enganyar al host, el qual es queda escanejant. Es tracta de fer pensar que els scans s'estan generant des d'una màquina però que relament no els fa (utilitzant l'opicó -D).

En aquest exemple, realitzem un Stealth Xmas Tree scan (-sX) cap al host 192.168.0.1, en els ports 25 (SMTP), 53 (DNS), i li indiquem a nmap que no generi pings cap al host, i tractem d'enganyar al host (-D, Decoy), fent-li creure que els scans s'estan generant des dels hosts 1.2.3.4 y 5.6.7.8.

$ sudo nmap -p 25,53 -sX -P0 -D 1.2.3.4,5.6.7.8 192.168.1.128

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 22:45 CET
Interesting ports on 192.168.1.128:
PORT   STATE  SERVICE
25/tcp closed smtp
53/tcp closed domain
MAC Address: 00:13:20:1C:59:94 (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds

Guardant els resultats dels scans

Nmap permet guardar els resultats d'un scan, en varis tipus de format d'arxiu: Normal, XML, Grepable, All, i en format S (s|<ipT kiDd|3 f0rMiNto THe fiL3 U sPecfy 4s an arGuMEnT!, o més conegut com format Script Kiddie!).

Si desitgem fer un stealth scan del tipus Xmas Tree, també desitgem conèixer quin SO està corrent el host de destí, i a més a més desitgem guardar el resultat d'aquest scan en un arxiu anomenat scanresult.txt, executem:

$ sudo nmap -sX -O 192.168.1.128 -oN scanresult.txt

Un altre exemple:

$ nmap -p3306 -A 192.168.0.15 -oX mysqlport.xml

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-21 17:03 CET
Interesting ports on 192.168.0.15:
PORT     STATE SERVICE VERSION
3306/tcp open  mysql   MySQL (Host blocked because of too many connections)

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.83 seconds
$ cat mysqlport.xml 
<?xml version="1.0" ?>
<?xml-stylesheet href="file:///usr/share/nmap/nmap.xsl" type="text/xsl"?>
<!-- Nmap 5.00 scan initiated Mon Nov 21 17:03:47 2011 as: nmap -p3306 -A -oX mysqlport.txt 192.168.0.15 -->
<nmaprun scanner="nmap" args="nmap -p3306 -A -oX mysqlport.txt 192.168.0.15" start="1321891427" startstr="Mon Nov 21 17:03:47 2011" version="5.00" xmloutputversion="1.03">
<scaninfo type="connect"  protocol="tcp" numservices="1" services="3306" />
<verbose level="0" />
<debugging level="0" />
<host starttime="1321891427" endtime="1321891428"><status state="up" reason="syn-ack"/>
<address addr="192.168.0.15" addrtype="ipv4" />
<hostnames />
<ports><port protocol="tcp" portid="3306"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="mysql" product="MySQL" extrainfo="Host blocked because of too many connections" method="probed" conf="10" /></port>
</ports>
<times srtt="62517" rttvar="45228" to="243429" />
</host>
<runstats><finished time="1321891428" timestr="Mon Nov 21 17:03:48 2011" elapsed="0.83"/><hosts up="1" down="0" total="1" />
<!-- Nmap done at Mon Nov 21 17:03:48 2011; 1 IP address (1 host up) scanned in 0.83 seconds -->
</runstats></nmaprun>

Nmap d'una IP pública

Amb una IP pública de fet estem escanejant el router:

$ nmap -A wiki.joanillo.org

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 23:33 CET
Interesting ports on 120.77.221.87.dynamic.jazztel.es (87.221.77.120):
Not shown: 994 closed ports
PORT     STATE    SERVICE    VERSION
21/tcp   open     tcpwrapped
22/tcp   open     ssh        OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
|  ssh-hostkey: 1024 38:18:4c:49:42:a7:19:e3:6c:57:01:d0:02:e4:33:d5 (DSA)
|_ 2048 a5:e1:35:06:c0:e6:1d:cb:30:7d:cc:3d:a0:1c:ad:c4 (RSA)
23/tcp   open     tcpwrapped
80/tcp   open     http       Apache httpd 2.2.14 ((Ubuntu))
|  html-title: Wikijoan
|_ Requested resource was http://wiki.joanillo.org/index.php/P%C3%A0gina_principal
2222/tcp open     tcpwrapped
8080/tcp filtered http-proxy
Service Info: OS: Linux

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.10 seconds

Veiem que per als ports 22 i 80 detecta la versió del servei software que està instal.lat.

$ nmap -sV wiki.joanillo.org

Starting Nmap 5.00 ( http://nmap.org ) at 2011-11-14 23:43 CET
Interesting ports on 120.77.221.87.dynamic.jazztel.es (87.221.77.120):
Not shown: 994 closed ports
PORT     STATE    SERVICE    VERSION
21/tcp   open     tcpwrapped
22/tcp   open     ssh        OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
23/tcp   open     tcpwrapped
80/tcp   open     http       Apache httpd 2.2.14 ((Ubuntu))
2222/tcp open     tcpwrapped
8080/tcp filtered http-proxy
Service Info: OS: Linux

nmap www.google.com

Puc fer nmap a www.google.com? Sí que es pot, no hi ha cap problema... i obtinc el resultat esperat, que els ports 80 i 443 estan oberts, com es pot comprovar fent:

$ nmap www.google.com

Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-10 20:35 CET
Nmap scan report for www.google.com (173.194.34.49)
Host is up (0.019s latency).
Hostname www.google.com resolves to 5 IPs. Only scanned 173.194.34.49
rDNS record for 173.194.34.49: par03s03-in-f17.1e100.net
Not shown: 996 filtered ports
PORT    STATE  SERVICE
53/tcp  open   domain
80/tcp  open   http
113/tcp closed auth
443/tcp open   https

No és il.lícit fer nmap de www.google.com... una altra cosa és que els de Google puguin tenir alertes que diguin: compte! des de tal IP s'està intentant fer un scanner dels ports oberts!

nmap amb resultats diferents des de localhost o des de la IP

Perquè si faig nmap de localhost o de la meva IP els resultats són diferents?. La resposta està en què hi ha programes que només escolten per localhost (127.0.0.1).

Some applications decided to explicitly listen (bind actually) only on localhost, i.e. 127.0.0.1. You can do a netstat to check things out.
...
Most of system running process in Linux use loopback (127.0.0.1) ip address to communicate with each other. It doesn't require to send packet outside network. 
$ nmap localhost

Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-10 20:44 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00018s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
53/tcp   open  domain
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

$ nmap 192.168.10.231

Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-10 20:44 CET
Nmap scan report for 192.168.10.231
Host is up (0.00018s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
80/tcp   open  http
3306/tcp open  mysql

Nessus

Según Wikipedia Nessus es un programa de escaneo de vulnerabilidades en diversos sistemas operativos. Consiste en nessusd, el daemon Nessus, que realiza el escaneo en el sistema objetivo, y nessus, el cliente (basado en consola o gráfico) que muestra el avance y reporte de los escaneos. Desde consola nessus puede ser programado para hacer escaneos programados con cron.

En operación normal, nessus comienza escaneando los puertos con nmap o con su propio escaneador de puertos para buscar puertos abiertos y después intentar varios exploits para atacarlo. Las pruebas de vulnerabilidad, disponibles como una larga lista de plugins, son escritos en NASL (Nessus Attack Scripting Language, Lenguaje de Scripting de Ataque Nessus por sus siglas en inglés), un lenguaje scripting optimizado para interacciones personalizadas en redes.

Opcionalmente, los resultados del escaneo pueden ser exportados en reportes en varios formatos, como texto plano, XML, HTML, y LaTeX. Los resultados también pueden ser guardados en una base de conocimiento para referencia en futuros escaneos de vulnerabilidades.

Algunas de las pruebas de vulnerabilidades de Nessus pueden causar que los servicios o sistemas operativos se corrompan y caigan. El usuario puede evitar esto desactivando "unsafe test" (pruebas no seguras) antes de escanear.

Instal.lació de Nessus a Ubuntu 12.04

Seguim

Descarreguem la versió correcta de Nessus a:

*http://www.tenable.com/products/nessus/select-your-operating-system
Nessus-5.2.4-ubuntu1110_i386.deb

$ sudo dpkg -i Nessus-5.2.4-ubuntu1110_i386.deb

Hem de crear un usuari per a administrar Nessus. Farem servir l'usuari habitual del sistema, per ex joan:

$ sudo /opt/nessus/sbin/nessus-adduser
User rules
----------
nessusd has a rules system which allows you to restrict the hosts
that joan has the right to test. For instance, you may want
him to be able to scan his own host only.

Please see the nessus-adduser manual for the rules syntax

Your activation code for the Nessus Home is
xxxx-xxxx-xxxx-xxxx-xxxx

Please consult the Nessus 5 Installation guide located at http://www.nessus.org/products/nessus/documentation for more information on this setup process.

Un cop tenim el codi de registre que hem rebut per mail, ens registrem en línia de comandes:

$ sudo /opt/nessus/bin/nessus-fetch --register CC67-D071-FF02-D0EE-FC4D
Your Activation Code has been registered properly - thank you.
Now fetching the newest plugin set from plugins.nessus.org...
...
Your Nessus installation is now up-to-date.
If auto_update is set to 'yes' in nessusd.conf, Nessus will
update the plugins by itself.

Reiniciem i comprovem que està corrent:

sudo /etc/init.d/nessusd restart

sudo netstat -ntpl | grep nessusd
tcp        0      0 0.0.0.0:8834            0.0.0.0:*               LISTEN      4058/nessusd    
tcp6       0      0 :::8834                 :::*                    LISTEN      4058/nessusd

Nessus ha quedat instal.lat com una aplicació web pel port 8834. Per accedir-hi:

Ens loguem. Aleshores ja podem crear les nostres polítiques de escaneig, els nostres escans basats en aquestes polítiques. I podem programar aquests scans per tal de què s'executin de forma periòdica (schedules).

A l'hora de crear una nova policie, Nessus ens deixa escollir entre diferents polítiques, com ara:

Desenvolupament

A classe s'ha explicat i comentat l'article:

Tu l'has d'estudiar i aprofundir amb més deteniment.

Disposes del servidor 192.168.0.10, a part de la pròpia màquina i la dels companys, per tal de fer proves. Els serveis que hi ha oberts en el servidor 192.168.0.10 són: SSH, FTP, MySQL, PostgreSQL, Oracle (algun altre?).

Fés les diferents proves que es proposen més amunt. Per a les diferents proves que facis hauràs de generar els resultats a fitxer, que després empaquetaràs i pujaràs al Moodle.

Recorda que l'administrador de seguretat auditarà la xarxa executant amb un cron scripts que continguin l'ordre nmap, i que el fet de poder generar els logs dels nmap té l'avantatge que es poden estudiar a posteriori, i que també hi ha eines automàtiques per poder fer saltar una alarma quan un log contingui una cadena específica.

Entrega

Entrega al Moodle la documentació generada, i un fitxer README on fiquis les teves anotacioins.

Recorda la normativa per entregar les pràctiques al Moodle: ASIX-M11-SAD#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Moodle


creat per Joan Quintana Compte, novembre 2011

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines