lunes, 21 de marzo de 2016

TFG III. Nmap-scan. Escaneo de puertos

Hola a tod@s.

Ya con los hosts escaneados, el siguiente paso es saber qué puertos tienen abiertos y sus características. ¡Vamos a ello!

 Imagen 1. TFG II. Nmap-scan. Escaneo de puertos

Introducción

En esta demo-explicación, escanearé la Raspbery Pi 2 que me ayudó en mi presentación de las Morteruelo CON2016

Primero se estudian los hosts en red para saber la dirección IP de la Raspbery.

Imagen 2. Resultados estudio de hosts para saber dirección IP de la Raspberry Pi 2

Su IP es la 192.168.1.39, estudiemos sus puertos.

Versions (opción 5)


Con esta opción se obtienen los puertos abiertos de los hosts indicados y de cada puerto información como el nombre de la aplicación que corre en él, versión, protocolo del servicio e información extra.

Respecto a la actualización de las tablas 'hosts' y 'puertos', se explica en un apartado más adelante de esta entrada.

Imagen 3. Terminal, opción Versions

Imagen 4. Resultados opción Versions

Con la información obtenida, entre otros datos, se sabe que en la Raspberry Pi está montado un servidor Web en el puerto 80 y un servidor SSH en el 22.

Con la siguiente opción se obtendrán más detalles.

Script (opción 6)


En esta opción se lanzan una serie de scripts por defecto (opción -sC de Nmap), que tal como se indica en la página de Nmap se preocupan de ser rápidos, no causar mucho "ruido", etc.

Imagen 5. Terminal, opción Script

Imagen 6. Resultados opción Script


Se ha conseguido información más detallada de los servicios en los puertos.

Se observa que se ha copiado de nuevo la información de los puertos ya obtenida; como se dijo en la anterior opción, más adelante en esta entrada se explica la actualización de las tablas 'hosts' y 'puertos'.

Vamos a analizar la información obtenida explicando brevemente la teoría detrás de ella.

http-title


Se trata del título de la página mostrada en primer lugar en el servidor web.

En este caso no se ha dado ningún título a la página.

ssh-hostkey

 
Secure Shell host keys. Se utilizan para verificar la identidad de un servidor ssh (autenticación). Es decir, que el host al que estemos conectados por ssh sea realmente el deseado, nadie suplante su identidad.

En este caso, el servidor es la Raspberry Pi 2.

De este modo se evitan ataques Man-in-the-middle. En estos ataques alguien se sitúa entre nosotros y el servidor al que queramos conectarnos, de modo que puede leer toda la información transmitida.

Los hosts keys están formados por:
  • Clave pública: enviada al cliente que se conecta al servidor. Sirve para que todos podamos desencriptar información encriptada por el servidor con su clave privada. Utilizada para leer el mensaje de autenticación enviado por el servidor.
  • Clave privada: conocida solo por el servidor y su administrador ya que al utilizarse cifrado de clave pública, quien conozca la clave privada puede cifrar los mensajes de manera que se haga pasar por el servidor.
Indicar también que para verificar que los host keys pertenecen realmente a un servidor se utilizan diferentes técnicas. Una de ellas emplea un hash de fingerprinting único de dicho servidor ssh para cada host key creado.

Las claves son creadas al instalarse y configurarse el servidor, aunque el administrador puede cambiarlas posteriormente.

En los resultados obtenidos en esta demostración, el servidor utiliza los algoritmos de encriptación DSA, RSA y ECDSA de longitud 1024, 2048 y 256 bits respectivamente.

Ports (opción 8) 


Hasta ahora las opciones de escaneo de puertos estudiaban todos los que se encontraran abiertos para las direcciones IP indicadas.

Con la siguiente opción se estudia el estado de los puertos indicados para las direcciones IP deseadas.

La actualización de las tablas 'hosts' y 'puertos' se explica en el siguiente apartado.

Imagen 7. Terminal, opción Ports

Imagen 8. Resultados opción Ports


Se ha mandado estudiar 7 puertos, de los cuales solo 2 están abiertos; el resto cerrados. En esta opción se añade a la base de datos todos los puertos estudiados sea cual sea su estado.

Aunque para este ejemplo se ha analizado una sola dirección IP; un caso muy útil es saber en cuántos ordenadores hay abiertos unos puertos determinados, para lo que se analizaría todo el rango de red.

Imagen 9. Terminal, opción Ports. Qué hosts poseen ciertos puertos abiertos

Imagen 10. Resultados, opción Ports. Qué hosts poseen ciertos puertos abiertos

En este ejemplo se observa que ningún host posee el puerto 20 abierto y que dos hosts tienen el puerto 80 abierto.

Actualización tabla hosts y puertos


Tabla hosts


Siempre que se lleva acabo una de las opciones anteriores para el escaneo de puertos, en la tabla 'hosts' se añaden a 'up' los hosts conectados en la red.

Pero no se actualizan como 'down' ya que si todos los puertos están cerrados, Nmap no devuelve información del host, pero esto no significa que no esté en red; para verificar esto hay que usar las opciones de escaneo de hosts.

Imagen 11. Hosts up se añaden a la base de datos al escanear los puertos

Tabla puertos


Respecto a los puertos, se actualiza su estado a 'open', 'closed', 'filtered', etc. según Nmap detecte que admite conexiones, no lo haga o según responda a las peticiones realizadas para saber su estado.

Una definición de cada estado puede consultarse en el enlace del final de esta entrada.

Como se ha podido ver en los ejemplos mostrados; en cada escaneo de puertos, en la tabla 'puertos' de la base de datos la información del escaneo anterior  para cada hosts vuelve a copiarse. 

Esto se debe a que cada host escaneado con estado 'up' se añade con un nuevo id a la tabla 'hosts' por lo que para recordar la información de los puertos asociados a dicho host, esta se copia pero ahora asociada al nuevo id, al que por supuesto también se añade la nueva información que se escanee.

Generate file ports (opción 9)


Tras realizar el escaneado de la red, de la información almacenada en la base de datos seguramente se quiera conocer aquellas direcciones IP con ciertos puertos abiertos para realizar otras pruebas.

Esta opción generará un archivo .txt por cada puerto que se le indique de modo que en cada archivo se guardarán las direcciones IP con el puerto abierto. Recordar que en todas las opciones anteriores que estudian los puertos, el estado de estos es actualizado, así como añadidos los hosts up.

Los archivos se generan en carpeta 'ports' que se encuentra en la siguiente ruta:
/pentesting-core-master/modules/nmap-scan/model/ports.

El nombre del archivo generado está formado por:
nombreAuditoría_nombreRevisión_númeroDePuerto.txt

Imagen 12. Terminal, opción Generate file ports
  
Imagen 13. Archivos creados

Podemos ver cómo de estar el puerto cerrado en la base de datos, se nos avisa que el archivo creado estará vacío. Y de ya existir el archivo, se nos pregunta si queremos generar uno nuevo o sobreescribir el ya existente.

Otras opciones


Con esta entrada y la anterior podemos escanear hosts y sus puertos con las opciones del módulo nmap-scan.

Aun así, el modulo ofrece otras, como 'Custom Parameters' en la que el usuario indica las órdenes a Nmap a ejecutar, o la opción 'Get all information for a host' donde se exportará o mostrará por pantalla la información del host deseado.

Estas opciones están en desarrollo por lo que cuando estén disponibles se realizará una entrada sobre ellas.

Conclusión


Como se acaba de comentar, aún no se han explicado todas las opciones que ofrece el módulo nmap-scan; y no olvidar que será ampliado junto con otro módulo para poder buscar exploits de manera cómoda a partir de la información obtenida con el módulo que ha ocupado estas entradas.

Por ahora, ha quedado claro el objetivo y funcionamiento de este módulo y lo que permite llevar acabo.


Por tanto, simplemente terminar agradeciéndoos vuestro interés y ojalá os ayude en vuestros descubrimientos de la red.

¡Un saludo!

Carlos A. Molina

Recursos



Grupo SecuryPi
https://github.com/securipy/


Python y Nmap. Utilización

MorterueloCON 2016
http://cmoli.blogspot.com.es/2016/02/morteruelocon-2016.html

Nmap
- Version
- Script
- http-title

Ssh hosts-keys

Clave pública
(2014), Seguridad perimetral, monitorización y ataques en redes, Ra-Ma

Estado de cada puerto

Letras título

No hay comentarios:

Publicar un comentario