Empirismo de Red (probar minimamente nuestro firewall ) II

Técnicas y estrategias

Usar scripts y programas de escaneo o pen test, es muy simple, sin embargo, para obtener información valiosa, es necesario saber que es lo que se esta haciendo.
En el artículo anterior llegamos a ver una técnica de ‘port scann’  muy común llamada SYN Scann. Su nombre indica justamente que se utiliza el flag SYN para escanear el/los puertos, tal cual lo hicimos en las pruebas del artículo anterior.
Esta vez repasaremos otras tecnicas de escaneo de puertos.
Vale aclarar que estas tecnicas de escaneo, se pueden realizar con nmap de manera muy simple, pero si no lo hacemos de esta manera, nunca sabremos como funcionan.

Xmas

Esta técnica consiste en enviar un paquete TCP con los flags FIN, PSH, y URG.
Para esto usamos:

Onix:~# hping -F -P -U -p 22 192.168.3.4

Demás esta decir que con -F activamos el flag FIN, -P -> PSH y -U -> URG.
Ahora bien, si la implementacion TCP del target (en este caso 192.168.3.4) es correcta, cuando nos encontremos ante un puerto abierto, no deberia responder nada, y en caso de ser un puerto cerrado responderia con un RST.

Onix:~# hping -c 5  -F -P -U -p 22  192.168.3.4
HPING 192.168.3.4 (eth1 192.168.3.4): FPU set, 40 headers + 0 data bytes

--- 192.168.3.4 hping statistic ---
5 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

En este caso tenemos un puerto 22 abierto, ya que no recibimos ningún RST.
Y por el contrario si revisamos el puerto 23, vemos que este se encuentra cerrado (recibimos un RST/ACK (RA) )

Onix:~# hping -c 5  -F -P -U -p 23 192.168.3.4
HPING 192.168.3.4 (eth1 192.168.3.4): FPU set, 40 headers + 0 data bytes
len=46 ip=192.168.3.4 ttl=64 DF id=0 sport=23 flags=RA seq=0 win=0 rtt=9.5 ms
len=46 ip=192.168.3.4 ttl=64 DF id=0 sport=23 flags=RA seq=1 win=0 rtt=0.3 ms
len=46 ip=192.168.3.4 ttl=64 DF id=0 sport=23 flags=RA seq=2 win=0 rtt=0.3 ms
len=46 ip=192.168.3.4 ttl=64 DF id=0 sport=23 flags=RA seq=3 win=0 rtt=0.6 ms
len=46 ip=192.168.3.4 ttl=64 DF id=0 sport=23 flags=RA seq=4 win=0 rtt=0.3 ms

--- 9.6.166.207 hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.3/2.2/9.5 ms

Esta técnica tiene la ventaja de ser muy sileciosa, sin embargo, es facil de filtrar. Pero además se debe recalcar, que el hecho de que no responda, puede significar, que fue interceptado por el firewall y este lo dropeó y necesariamente de que el puerto esta abierto.
Para filtrar este tipo de escaneo, deberiamos decirle al firewall que no acepte segmentos TCP con los flags FIN,PSH,URG si no pertenece a una conexión ya existente.

NULL y FIN

Tanto NULL scan, como FIN scan utilizan el mismo concepto que Xmas, envian un paquete mal formateado, si responde un RST esta cerrado, en caso contrario, es probable que este abierto.

NULL scan, como dice su nombre envia un paquete sin flags TCP:

Onix:~# hping -c 5 -p 23 192.168.3.4
HPING 192.168.3.4 (eth1 192.168.3.4): NO FLAGS are set, 40 headers + 0 data bytes

--- 192.168.3.4 hping statistic ---
5 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
Onix:~# hping -c q -p 23 192.168.3.4
HPING 192.168.3.4 (eth1 192.168.3.4): NO FLAGS are set, 40 headers + 0 data bytes
len=46 ip=192.168.3.4 ttl=64 DF id=0 sport=23 flags=RA seq=0 win=0 rtt=1.2 ms

---192.168.3.4 hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.3/0.5/1.2 ms

De la misma manera funciona con el escaneo FIN, solo que en lugar de no enviar flags, se envia solo el flag FIN.

Onix:~# hping -c 5 -F -p 23 192.168.3.4

Es importante recalcar, que el hecho de que no recibamos una respuesta, no es una garantia de que el puerto este abierto, ya que por ejemplo si usamos estos paquetes contra un host que no existe, no recibiremos respuesta!

ACK Scan

A diferencia de Xmas, FINScan, y Nullscan, ACK Scan no intenta encontrar los puertos abiertos/cerrados, si no mas bien los silenciosos y los hosts que deniegan las conecciones que comienzan con el flag SYN. No hace falta dar un ejemplo, ya que solo hay que activar el flag ACK y si no responde, es probable que ese puerto este filtrado.

Si leistes los articulo sobre iptables podras imaginar como bloquear estos escaneos, pero si todabia no caes, te doy una ayuda:
Para el Null Scan:  iptables -t nat -A PREROUTING -p tcp –tcp-flags ALL NONE -j DROP
Para el Xmass: iptables -t nat -A PREROUTING -p tcp –tcp-flags ALL FIN,PSH,URG -j DROP

Ok, esto son solo algunas de las utilidades que le podemos dar al hping, tiene mucho mas para darnos, por lo que te invito a que no te pierdas el proximo artículo.

/* A partir de marzo nos estamos mudando a http://netsecure.com.arhttp://www.netvulcano.com.ar */

Publicado en Articulos. Etiquetas: , , , , . 1 Comment »

Empirismo de red (Probar minimamente nuestro firewall) I

Probando nuestro Firewall

En realidad, comprobar si nuestra red es segura, es infinita mente mas trabajoso que comprobar que puertos abiertos tenemos. Sin embargo, cuando hablamos de una pc hogareña, comprobar los puertos de nuestro host, es importante, pero mucho, muchísimo mas importante es tener una noción de que hablamos cuando hablamos de puertos y como funcionan.
En conclusión, voy a tratar de explicar , para todos aquellos que busquen, por ejemplo, como comprobar si su firewall de iptables  esta funcionando adecuadamente, o si tal o cual puerto esta ‘abierto’ o ‘cerrado’. Ya que lo cierto, es que abundan ese tipo de consultas, así que sin mas adentre monos en el tema.

Si ya leistes un poco sobre como configurar tu red, y luego te aventuraste a hacerte un firewall, o (tristemente) a usar uno ya hecho, pero aún quieres probar si todo funciona como esperabas, esto quizas te ayude.

Probablemente, has leido repetidas veces acerca de los ‘puertos’, y pareciera, que si cerramos todos los puertos de nuestro host / server, entonces estaríamos seguros. Esto no es tan así, como dije antes, ‘cerrar’ un puerto no lo es todo en la vida, pero puede ser útil, o muy útil si razonas lo que estas haciendo.

Repasemos para aclarar:

Los sistemas informáticos, necesitan comunicarse entre si, y la red mas grande del mundo, para la comunicación es Internet. Esta esta basada en una arquitectura que es similar a la de una red, donde un ‘nodo’ de la red, se puede ‘comunicar’ con otro directamente, o saltando algunos otros nodos intermedios.
Por razones etimologícas, para el funcionamiento de la internet actual, se utiliza un protocolo llamado IP, al cual, en la mayoría de los casos, se lo acopla con el protocolo TCP, y en otros casos con UDP.
Estos protocolos, fueron construidos con la intención, de que una máquina pueda tener varias conexiones simultaneas utilizando el mismo protocolo.
Ahora bien, para diferenciar los datos pertenecientes a una conexión, con los datos de la otra conexión, se les asigno un rango de números, que el sistema debe implementar sobre los datos. Este número, es lo que nosotros conocemos como ‘puerto tcp’, ó ‘puerto udp’.
Estos protocolos (TPC y UDP), estan diseñados teniendo en cuenta, el modelo ‘cliente-servidor’, donde ‘un servidor’ es un sistema que espera, que un ‘cliente’ se contacte con el, para que le pueda brindar el servicio para el cual esta programado.
Entonces, por ejemplo, Apache, es un servidor web, programado para que cuando un cliente (firefox,chrome,netscape,opera,konqueror o el que usen) se conecte a él, este les brinde un servicio, en el caso de Apache, una pagina web.
Para continuar el ejemplo, los servidores web, por ser un standar, deben funcionar en el puerto 80.

Todo navegador (cliente web), buscará conectarse al puerto 80, para recibir las paginas web que se le soliciten.
Todo servidor web, funciona por defecto, brindando paginas en el puerto 80, por que es donde los navegadores la buscaran. ( Si lo se, parece recursivo)

Una vez que sabemos esto, el resto es simple:

Cuando un servidor esta corriendo, ‘abre’ un puerto a la espera de conexiones y una vez que ese servidor se para, entonces el puerto queda ‘cerrado’, por que no hay ningún programa esperando a recibir peticiones.

Vamos a los bifes

Existe un programa hyper-super-recontra-conocido, llamado Nmap, escaner de puertos y algo mas, con varios tipos de escaneo. Creo que es mas que suficiente decir que ejecutando nmap <direccion-ip>, hacer un escaneo básico, y nos informa los puertos tcp que tenemos a la escucha.
Esto nos da una mirada superficial y amplia del estado en que dicha ip se encuentra. Pero existen muchisimos manuales que hablan del nmap, por lo que no es la intención hablar de este programa. Si no que vamos a ir a otro programa, un poco menos conocido, pero super util:

Puerto abierto Puerto cerrado

Cuando un puerto tcp ( por ejemplo 80/TCP (web) , 25/TCP (smtp), 110/TCP (pop3)), se encuentra ‘abierto’, responde de una manera diferente que cuando se encuentra cerrado (obvio? no del todo.. ), justamente, tcp define una seria de saludos y respuesta necesarias para iniciar una conexión, que es llamada comunmente Three-way hand-shake, o “apreton de manos en 3 pasos”.
Básicamente consiste en lo siguiente:

CLIENTE ——-SYN——-> SERVIDOR
CLIENTE<—SYN/ACK—–SERVIDOR
CLIENTE——-ACK———>SERVIDOR

El cliente envia un ‘paquete’ TCP con el flag SYN activado, a lo que el servidor debe responder SYN/ACK (es decir las flags SYN y ACK activdas) si el puertos solicitado se encuentra a la escucha, y para que la conexión quede establecida, el cliente envia otro SYN, confirmando la conexión.
Por el contrario, si el puerto se encuentra cerrado, sucede lo siguiente:

CLIENTE——-SYN——>SERVIDOR
CLIENTE<–RST/ACK—SERVIDOR

Si el puerto se encuentra cerrado, el servidor, solo responde con un RST/ACK.

Hping
En www.hping.org/ encontraremos el download e info.
Hping nos permite confeccionar paquetes (tcp,udp,icmp) un poco mas personalizados, para hacer escaneos mas específicos.
Por ejemplo:

 hping -c 1 -n -1  2x0.x9.xx.4x

Enviará un (uno solo) simple ping.
Si pensas que para hacer eso, usas el ping normal y es menos historia, tenes razón, pero seguí leyendo y vas a ver que hay cosas que no podes hacer con un simple ping.

Con hping podemos enviar paquetes TCP con los flags que querramos:

hping -c 1 -n -p 80 -S http://www.google.com

En este caso, enviaremos un paquete tcp con el flag SYN activado, al puerto 80 de google.

Onix:~# hping -c 1 -n -p 80  -S www.google.com
HPING www.google.com (eth1 74.125.93.99): S set, 40 headers + 0 data bytes
len=46 ip=74.125.93.99 ttl=56 id=30167 sport=80 flags=SA seq=0 win=512 rtt=5.7 ms

--- www.google.com hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 5.7/5.7/5.7 ms

Como el puerto 80 de google se encuentra abierto (esperando conexiones) y responde con los flags SYN y ACK activados.
Esto mismo pasará con cualquier puerto que este abierto.

Con las siguiente opciones podes setear las distintas flags de un paquete TCP y podras experimentar los distintos resultados.

  -L  --setack     set TCP ack
  -F  --fin        set FIN flag
  -S  --syn        set SYN flag
  -R  --rst        set RST flag
  -P  --push       set PUSH flag
  -A  --ack        set ACK flag
  -U  --urg        set URG flag
Si lees el RFC de tcp, encontraras que tenes mucho para experimentar ahi.

Ahora, existe una funcionalidad interesante, que te va a ser util si la sabes implementar.
Supongamos que queremos escanear un rango de puertos de nuestro Host (digamos del 21 al 90 /TCP).
Podemos usar muchas lineas de hping tirando una vez a cada puerto o bien:

Onix:~# hping -n -p 21  -S 9.6.166.1
HPING 9.6.166.1 (eth1 9.6.166.1): S set, 40 headers + 0 data bytes
len=46 ip=9.6.166.1 ttl=255 id=49466 sport=21 flags=RA seq=0 win=0 rtt=1.8 ms
len=46 ip=9.6.166.1 ttl=255 id=22495 sport=21 flags=RA seq=1 win=0 rtt=1.2 ms
22: len=46 ip=9.6.166.1 ttl=255 id=18905 sport=22 flags=SA seq=2 win=4128 rtt=1.3 ms
len=46 ip=9.6.166.1 ttl=255 id=49665 sport=22 flags=SA seq=3 win=4128 rtt=2.2 ms
23: len=46 ip=9.6.166.1 ttl=255 id=9520 sport=23 flags=RA seq=4 win=0 rtt=1.4 ms
len=46 ip=9.6.166.1 ttl=255 id=45949 sport=23 flags=RA seq=5 win=0 rtt=1.2 ms
24: len=46 ip=9.6.166.1 ttl=255 id=25211 sport=24 flags=RA seq=6 win=0 rtt=1.2 ms
....

Aca hping comienza enviando paquetes TCP con el flag SYN activado al puerto 21, pero pronto es interrumpido por mi (presionando control-z) y comienza enviar los mismos paquetes pero al puerto 22 y asi susecivamente.

Si especificamos -z en lugar de cambiar el puerto ira aumentando el ttl y si usamos -Z, cuando presionemos control-z, el proceso tomará un curso normal poniendose en background.

Establecidos ya algunos conocimientos básicos… podremos ver (en el proximo articulo) algunas herramientas mas que nos da hping y otras herramientas.

/* A partir de marzo nos estamos mudando a http://netsecure.com.arhttp://www.netvulcano.com.ar */

Manual tutoria de hacking con hping

Publicado en Articulos. Etiquetas: , , , , . 6 Comments »