SoloCodigo

Informática en general => Seguridad y Criptografía => Mensaje iniciado por: m0skit0 en Martes 30 de Septiembre de 2008, 13:22

Título: Escaneo de puertos
Publicado por: m0skit0 en Martes 30 de Septiembre de 2008, 13:22
Primero, aclarar que es necesario un conocimiento medio del protocolo TCP/IP. Aquí van unos enlaces para los interesados:

Introducción:
http://infase.es/FORMACION/INTERNET/tcpip.html (http://infase.es/FORMACION/INTERNET/tcpip.html" onclick="window.open(this.href);return false;)
http://es.wikipedia.org/wiki/TCP/IP (http://es.wikipedia.org/wiki/TCP/IP" onclick="window.open(this.href);return false;)
http://www4.uji.es/~al019803/tcpip/ (http://www4.uji.es/~al019803/tcpip/" onclick="window.open(this.href);return false;)
http://www.geocities.com/SiliconValley/ ... enido.html (http://www.geocities.com/SiliconValley/Bay/8259/contenido.html" onclick="window.open(this.href);return false;)

Avanzado:
http://www.rfc-es.org/ (http://www.rfc-es.org/" onclick="window.open(this.href);return false;)

¿Qué es el escaneo de puertos?

Es una técnica que nos permite saber qué puertos TCP/IP están a la escucha (estado LISTEN) en un determinado host. Un puerto TCP/IP en escucha (abierto) acepta conexiones entrantes, lo cual significa que hay un servicio que procesa dichas conexiones y sus datos, por lo tanto una posible vulnerabilidad y puerta de acceso a posibles atacantes.

Como ya sabréis, TCP/IP provee de 2 protocolos para el nivel de transporte: TCP (orientado a conexión) y UDP (no orientado a conexión). TCP establece primero una conexión entre ambos hosts, usando la siguiente secuencia:

Código: Text
  1.  
  2. Puerto Abierto
  3.  
  4. Host1 ->     SYN     -> Host2
  5. Host1 <-   SYN/ACK   <- Host2
  6. Host1 ->     ACK    -> Host2
  7.  
  8.  

Una vez completado este paso, la conexión pasa a estar establecida (estado ESTABLISHED). Para que esto ocurra, Host2 tiene que tener el puerto abierto (en escucha). Si esto no ocurre, Host2 envía un paquete TCP RST a Host1 en respuesta al paquete SYN.

Código: Text
  1.  
  2. Host1 -> SYN -> Host2
  3. Host1 <- RST <- Host2
  4.  
  5.  

Con esto podemos averiguar si un puerto TCP está abierto o cerrado.

En el caso de un puerto UDP, el tema es más complicado. UDP no está orientado a conexión, por lo tanto non establece ningún contacto previo. Simplemente se envían los datos. En este caso, si recibimos una respuesta a nuestro paquete, podemos asegurar que el puerto está abierto. Pero si no recibimos ninguna, no podemos estar seguros. ¿Llegó el paquete a su destino? ¿Eran correctos los datos para que el servicio del puerto nos responda? ¿Está el puerto cerrado? No podemos responder con certeza a estas preguntas. Por lo tanto, el uso de UDP para averiguar si un puerto está abierto es menos eficaz que el uso de TCP.
Título: Re: Escaneo de puertos
Publicado por: m0skit0 en Viernes 3 de Octubre de 2008, 13:39
¿Cómo escanear puertos?

En mi humilde opinión el mejor escaneador de puertos es sin duda nmap (http://nmap.org/download.html) de Fyodor, una utilidad imprescindible para aquellos que os interese la seguridad informática. Ahora viene con interfaz gráfica en la versión Windows, pero yo siempre he sido gran fan de Linux y su consola  ^_^

En la ayuda nos indican que la sintaxis del programa sigue la siguiente regla:

nmap [Scan Type(s)] [Options] {target specification}

En los tipos de escaneos, nmap ofrece una variedad insuperable. Veamoslo paso a paso:

Una de las mayores ventajas de este escaneo es descubrir qué IPs están permitidas a través de un firewall.[/li][/list]

Como el escaneo IP pasivo es un poco complicado de entender, voy a mostrar un ejemplo más detallado. Supongamos que nuestra IP es 192.168.1.120, la del equipo que queremos escanear 10.1.1.1 y la del equipo tercero o "zombi" 128.0.0.1.

[/li]
[li]Caso 2: Puerto cerrado
[list type=3]
[li]Se manda un SYN/ACK a 128.0.0.1, que responde con un RST, revelando su IP ID.[/li]
[li]Se manda un SYN a 10.1.1.1 con IP de origen 128.0.0.1. El puerto está cerrado, así que 10.1.1.1 responde con RST a 128.0.0.1, que obviamente no hace nada.[/li]
[li]Se manda otro SYN/ACK a 128.0.0.1, que responde con RST revelando su nueva IP ID, que vemos que ha aumentado en 1 esta vez, por tanto el puerto no está abierto.[/li][/list][/li]
[li]Caso 3: Puerto filtrado
[list type=3]
[li]Se manda un SYN/ACK a 128.0.0.1, que responde con un RST, revelando su IP ID.[/li]
[li]Se manda un SYN a 10.1.1.1 con IP de origen 128.0.0.1. El puerto está filtrado, no hay respuesta[/li]
[li]Se manda otro SYN/ACK a 128.0.0.1, que responde con RST revelando su nueva IP ID, que vemos que ha aumentado en 1 esta vez, por tanto el puerto no está abierto.[/li][/list][/li][/list]

Como vemos, es imposible para el atacante distinguir entre un puerto cerrado y filtrado con este escaneo. Pero como hemos dicho, podemos descubrir que IPs tienen permiso para atravesar el firewall, simplemente probando IPs (de un rango concreto) y viendo si el puerto está abierto o no mediante el escaneo. Si para algunos está abierto y para otros no, entonces ya sabemos qué IPs están permitidas a través del firewall, ¿no?  :devil:

Los principales problemas del IP Pasivo es que hay que poder mandar paquetes con la IP suplantada, caso harto difícil si tenemos un router con NAT, y que hay que hallar un "zombi" pasivo, es decir, con tráfico casi nulo para no falsificar los resultados del IP ID.
Título: Re: Escaneo de puertos
Publicado por: m0skit0 en Sábado 18 de Octubre de 2008, 01:56
Vamos ahora con un ejemplo práctico a la par que sencillo:

nmap -sS -P0 -O -v http://www.# (http://www.#" onclick="window.open(this.href);return false;)#####.es


y obtenemos:

Cita de: "nmap"
Starting Nmap 4.76 ( http://nmap.org (http://nmap.org" onclick="window.open(this.href);return false;) ) at 2008-10-18 01:50 Hora estándar romance
Initiating Parallel DNS resolution of 1 host. at 01:50
Completed Parallel DNS resolution of 1 host. at 01:50, 0.03s elapsed
Initiating SYN Stealth Scan at 01:50
Scanning ###.###.###.### [1000 ports]
Discovered open port 80/tcp on ###.###.###.###
Discovered open port 22/tcp on ###.###.###.###
Discovered open port 443/tcp on ###.###.###.###
Discovered open port 9001/tcp on ###.###.###.###
Discovered open port 500/tcp on ###.###.###.###
Discovered open port 9050/tcp on ###.###.###.###
Discovered open port 9000/tcp on ###.###.###.###
Completed SYN Stealth Scan at 01:50, 4.45s elapsed (1000 total ports)
Initiating OS detection (try #1) against ###.###.###.###
Warning: Hostname http://www.# (http://www.#" onclick="window.open(this.href);return false;)#####.es resolves to 2 IPs. Using ###.###.###.###
Retrying OS detection (try #2) against ###.###.###.###
Host ###.###.###.### appears to be up ... good.
Interesting ports on###.###.###.###:
Not shown: 993 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
500/tcp  open  isakmp
9000/tcp open  unknown
9001/tcp open  unknown
9050/tcp open  tor-socks
Aggressive OS guesses: Linux 2.6.5 - 2.6.9 (96%), Aladdin eSafe security gateway (runs Linux 2.4.21) (92%), Linux 2.6.5 - 2.6.8 (91%), Linux 2.6.5-7.283-smp (SuSE Enterprise Server 9, x86) (91%), Linux 2.4.21 - 2.4.33 (91%), Linux 2.4.31 w/grsec (x86) (91%), Linux 2.4.32 (x86) (91%), QLogic SANbox2-8 FC switch or Sharp Zaurus PDA (Linux 2.4.18) (91%), Linux 2.6.5 - 2.6.19 (90%), Linux 2.6.9 - 2.6.20 (90%)
No exact OS matches for host (test conditions non-ideal).
Uptime guess: 21.136 days (since Fri Sep 26 22:34:46 2008)
Network Distance: 6 hops
TCP Sequence Prediction: Difficulty=198 (Good luck!)
IP ID Sequence Generation: All zeros

Read data files from: K:Archivos de programaNmap
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ (http://nmap.org/submit/" onclick="window.open(this.href);return false;) .
Nmap done: 1 IP address (1 host up) scanned in 9.46 seconds
           Raw packets sent: 1143 (51.816KB) | Rcvd: 1146 (47.416KB)

Tenemos el listado de los puertos abiertos (sólo ha probado los puertos por defecto, los servicios más comunes, se pueden espcificar los puertos con -p) y la lista de posibles SOs con su correspondiente porcentaje de compatibilidad.  :good: