Nmap Scripting Engine (NSE)

insecurelogoEl Nmap Scripting Engine (NSE) es una potente funcionalidad del Nmap que permite la ejecución de scripts, que además permite que los usuarios puedan escribir y compartir scripts para realizar multitud de tareas. El propio Nmap en sus últimas versiones incorpora varios scripts, algunos de los cuales me han resultado muy útiles últimamente. Las tareas que se pueden realizar con el NSE se agrupan en:

  • Descubrimiento de red.
  • Detección de versiones de servicios mejorada.
  • Detección de vulnerabilidades.
  • Detección de gusanos y backdoors.
  • Explotación de vulnerabilidades.

Estos scripts nos permiten de una forma muy cómoda tanto prepararnos, para prevenir una posible intrusión como identificar si la hemos sufrido, y tenemos Malware, Backdoors o Troyanos en nuestros sistemas. Para aquellos que deseen más información o indagar en los aspectos técnicos de la herramienta, pueden consultar la página de NSE o leer el libro publicado por Fyodor, ya que esta entrada tiene un propósito introductorio.

A continuación veremos un par de ejemplos prácticos de detección.

Vulnerabilidad WebDAV

La vulnerabilidad en esta extensión del Internet Information Services (IIS) ha aparecido recientemente en los medios y organismos especializados. Haciendo uso de NSE, podremos verificar que nuestros servidores están seguros (antes de que lo haga un posible atacante) siguiendo los siguientes pasos:

1. Descargamos nmap versión 4.85 beta 9 o superior.
2. Descargarmos el script si no lo tenemos ya:

$ cd /usr/local/share/nmap/scripts
$ sudo wget http://nmap.org/svn/scripts/http-iis-webdav-vuln.nse

3. Lanzamos el script (nuestro servidor se llamará “pruebas”):

$ nmap --script http-iis-webdav-vuln -p80,443 pruebas

4.Si conocemos la ruta de un directorio y una contraseña de acceso podemos utilizar:

$ nmap --script http-iis-webdav-vuln --script-args=webdavfolder=secret -p80,443 pruebas

Si tras ejecutar el comando vemos esto:

Starting Nmap 4.85BETA9 ( http://nmap.org ) at 2009-05-25 10:02 CEST
Interesting ports on iis (192.168.1.1):
PORT STATE SERVICE
80/tcp open http
|_ http-iis-webdav-vuln: WebDAV is ENABLED. Vulnerable folders discovered: /secret, /webdav
443/tcp open https

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

significa que tenemos un problema. Para solventarlo podemos seguir las instrucciones dadas aquí.

Gusano Conficker

El script smb-check-vulns.nse, que pasamos a utilizar como segundo ejemplo de la utilización del NSE, comprueba si el RPC de un sistema Windows es vulnerable (descrita en el boletín MS08-067). Esta vulnerabilidad no sólo permite realizar un DoS a regsvc, sino que además es utilizada por Conficker para ejecutar código, lo que vamos a intentar prevenir detectando si es o no vulnerable. Al respecto, mucho ojo al utilizarlo porque podría tumbar el servicio en caso de ser vulnerable.

La presencia o no de esta vulnerabilidad la comprobaremos así:

$ nmap --script-trace -sC smb-check-vulns -p445 pruebas
$ sudo nmap -sU -sS --script smb-check-vulns.nse -p U:137,T:139 pruebas

Si por el contrario, hemos sufrido una intrusión o sospechamos que podemos tener algunos sistemas infectados podemos utilizar el script p2p-conficker.nse, que examina las comunicaciones P2P y detecta en función de las mismas si la máquina está infectada con Conficker.C (o superior).

$ nmap --script-trace -sC p2p-conficker pruebas

La opción –script-trace que como han visto utilizamos en este último caso es opcional, ya que sólo sirve para obtener más información. No obstante, aporta datos que nos pueden ser útiles y resulta muy interesante poder ver que es todo lo que hace.

Host script results:

|_ nbstat: NetBIOS name: PRUEBAS, NetBIOS user: , NetBIOS MAC: xx:xx:xx:xx:xx:xx
| smb-os-discovery: Windows Server 2003 R2 3790 Service Pack 2
| LAN Manager: Windows Server 2003 R2 5.2
| Name: TESTLAB\PRUEBAS
|_ System time: 2009-06-04 08:38:02 UTC
| p2p-conficker: Checking for Conficker.C or higher…
| | Check 1 (port 55475/tcp): CLEAN (Couldn’t connect)
| | Check 2 (port 13321/tcp): CLEAN (Couldn’t connect)
| | Check 3 (port 40191/udp): CLEAN (Failed to receive data)
| | Check 4 (port 56590/udp): CLEAN (Failed to receive data)
|_ |_ 0/4 checks: Host is CLEAN or ports are blocked

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

Si obtenemos la salida anterior podemos estar tranquilos, si no es así, significará que tenemos al bicho en casa :)

PAra acabar, creo que merece la pena prestar especial atención a la evolución de esta funcionalidad del Nmap y a los nuevos scripts que vayan siendo liberados. Les aseguro que yo pienso hacerlo.