ATENCION: Los ejemplos que se van a mostrar y “tutoriales” tan solo tienen carácter educativo. En ningún aspecto comparto filosofías de invasión a la intimidad, ataques contra un sistema informático o cuestiones similares. En la medida que sea posible siempre se usarán ejemplos y formas que puedan ser usados por cualquier persona, de forma que pueda verificar los contenidos escritos. No obstante, por motivos más que obvios, materiales como contraseñas, nombres de usuarios o de hosts, serán omitidos o modificado en las capturas de pantallas realizadas (o las lineas escritas). Es decir, los ejemplos serán completamente reales, los datos mostrados a vosotros necesarios para poder pertrechar estos ejemplos no siempre lo serán (Sí lo serán los resultados). Para que esto conste de forma clara, todo material sensible modificado o falso estará resaltado en ROJO. Por motivos de seguridad, todo el material que sea expuesto aquí (exceptuando software propietario o libre, citaciones expresas o código de terceros) tanto texto, imágenes y código son propiedad del autor y está completamente prohibido su reproducción completa o parcial en otros lugares, espero que se comprenda.

 

IP Spoofing

Por IP Spoofing entendemos la técnica por la cual falseamos una IP origen (normalmente) con el objetivo habitual de burlar Firewalls, ocultar la identidad (Decoy), poner aprueba nuestros propios servidores, evitar que puedan ser bloqueados por sistemas de filtrados IPs…

A estas alturas todos deberíamos de saber que es una IPv4 y la importancia que tiene. Cualquier equipo conectado a Internet posee una dirección única llamada dirección IP. Por lo tanto, no es ninguna extrañeza poder modificar esta IP para los medios explicados. Si una dirección IP es falseada, se podría por consiguiente engañar al enrutador que se encuentre por encima de dicha persona, de forma que para el destino alcanzado el origen no sea realmente el atacante, lo que brinda diferentes capas de seguridad.


Quizás el ejemplo más extendido a todo esto no deja de ser lo que comúnmente conocemos por servidores Proxys. Los servidores Proxys es un servicio instalado (Proxy) en un servidor (generalmente) que actúa simplemente como intermediario de cierto tipo de peticiones a través de la red. Dado que se encuentra en medio de un cliente y un destino, este Proxy puede realizar cualquier tipo de modificación en los datos recibidos (tanto por el origen como el destino). Por ejemplo pueden usarse para filtrar Spam, cambiar Users Agents, eliminar o añadir publicidad… aunque quizás su uso más extendido es el evitar los filtros en Internet basados en IP, es decir… actuar como sistemas de IP Spoofing. ¿Por qué? Es simple. Cada vez que realizamos una petición web (por ejemplo) a un servidor, este recibe la IP de origen. El servidor por tanto puede actuar según esa IP:

  • Conexiones por tiempo limitado a dicha IP. Pasado X tiempo no es posible volver a conectar por dicha IP.
  • Seleccionar el contenido según la IP: Si la IP pertenece a españa contenido A, si la IP pertenece a Francia contenido B.
  • Filtrar el contenido: Si la IP pertenece a españa, no hay filtración, si la IP pertenece a China, filtrar contenidos en contra del régimen Chino.
  • Etc…

¿Pero qué sucede cuando dicha conexión la realizamos a través de un servidor Proxy?

Si el servidor se encuentra en nuestra misma red, la IP pública saliente de nuestra red sería la misma. Por el contrario, si el servidor proxy al cual accedemos se encuentra situado por ejemplo en francia, todas nuestras peticiones que salgan de él (o no, dependiendo del tipo de servidor proxy que sea) tendrán la IP “falsificada”, más correctamente, “modificada”, de forma que de cara al servidor web del que deseamos información, tan solo obtendrá la IP del servidor proxy intermediario. El límite de la aplicación práctica de esto tan solo lo tiene la imaginación. Tener en cuenta que prácticamente cualquier “ataque” o investigación que se quiera hacer de forma efectiva, la primera pauta es la invisibilidad y no llamar la atención. También hay que tener en cuenta que esto no garantiza en modo alguno el anonimato pleno. Hay servidores Proxys que no son realmente anónimos, e incluso los que puedan ofrecer la mejor anonimidad (por ley) suelen guardar registros que pueden ante una orden judicial obtener el origen real.


Veamos un ejemplo de IP Spoofing por medio de un servidor Proxy. Para tal efecto y comprender el alcance de este tipo de prácticas, voy a dirigirlo hacia una cuenta de correos Gmail. Para quien no lo sepa, Gmail guarda un registro de las IPs que han accedido a dicha cuenta, de forma que podríamos saber (con suerte) si alguien está accediendo a nuestra cuenta. Para ello ilustraremos dos accesos. El primero un acceso normal a través de mi dinámica de telefónica, y en segundo lugar un acceso a través de un servidor proxy de Korea:

 

Fase 1: Conexión Normal, Petición de mi explorador:

Host mail.google.com <- Host al que se solicita la conexión, IP del destino la corespondiente a dicho host: 209.85.229.19
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1pre) Gecko/20100128 Minefield/3.7a1pre
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive


Fase 1: Conexión Normal, respuesta de Gmail:

Access Type [ ? ] (Browser, mobile, POP3, etc.) IP address [ ? ] Date/Time (Displayed in your time zone)
Browser * 79.145.120.209 6:33 pm (0 minutes ago)

This computer is using IP address 79.145.120.209


Fase 2: Conexión mediante Proxy, Petición de mi explorador

Host mail.google.com <- Host al que se solicita la conexión, IP del destino NO corespondiente a dicho host: 121.128.203.159
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1pre) Gecko/20100128 Minefield/3.7a1pre
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive

Podemos observar la IP por ejemplo con un Sniffer:

Fase 2: Conexión mediante Proxy, respuesta desde Gmail:

Access Type [ ? ] (Browser, mobile, POP3, etc.) IP address [ ? ] Date/Time (Displayed in your time zone)
Browser * 121.128.203.159 6:33 pm (0 minutes ago)

This computer is using IP address 121.128.203.159


Si realizásemos una consulta en servidores Whois para determinar la localizción de cada una de las dos IPs registradas en Gmail, obtendríamos lo siguiente:

Whois 79.145.120.209

IP address: 79.145.120.209
ASN Name: Telefonica-Data-Espana (Internet Access Network of TDE) <- Pais y proveedor de dicho acceso a Gmail
Registrar (per ASN): RIPE
Country (per IP registrar): ES [Spain]
Country IP Range: 79.144.0.0 to 79.159.255.255
Country fraud profile: Normal
City (per outside source): Sevilla, Andalucia <- Este dato NO es fiable. En mi caso es cierto, podría obtener también Ciudad.
Private (internal) IP? No
IP address registrar: whois.arin.net
Known Proxy? No


Whois 121.128.203.159

IP address: 121.128.203.159
ASN Name: KIXS-AS-KR (Korea Telecom) <- Callejón sin salida, la conexión se realizó desde Korea Telecom [Korea]
Registrar (per ASN): APNIC
Country (per IP registrar): KR [Korea-KR]
Country Currency: KRW [Korea (South) Won]
Country IP Range: 121.128.0.0 to 121.191.255.255
Country fraud profile: Normal
City (per outside source): Unknown <- Sin ciudad aproximada
Private (internal) IP? No
IP address registrar: whois.arin.net
Known Proxy? No


¿Como podemos evitar que puedan usar contra nosotros Proxys? ¿Como podemos protegernos o descubrir la identidad de aquellos que actuan detrás? No podemos. Dado que las conexiónes Proxys se realizan a equipos físicos externos, a veces será posible detectar que dicha persona se encuentra detrás de un Proxy e incluso su IP real, y a veces en el mejor de los casos podremos conocer tan solo que dicho usuario accedió por medio de un Proxy. De nuevo en dicho caso, tan solo en el mejor de los casos podríamos conocer a dicho atacante por medio de una orden judicial siempre y cuando dicho servidor proxy detectado guardara Logs y otros que puedan identificar el verdadero origen.

En caso de Proxys trasnparentes existen técnicas para intentar detectar a los clientes, por ejemplo mediante el uso de resoluciones DNS inversas, scripts, scan a puertos específicos de dicha IP para ver si pueda tratarse de un servidor proxy… etc. Eso deja muy pocas opciones para la detección, tan solo bases de datos actualizables con listados de servidores proxys que se desean filtrar.

Por otro lado el uso de servidores proxys es peligroso y son lentos. Son lentos dado a que tus peticiones tienen que circular mucho más allá que meramente el host destino, y además depende de la capacidad del servidor proxy. Por otro lado son altamente inseguros, dado que la confianza la depositas a un equipo que no conoces. Este servidor proxy puede ser creado con fines malignos por ejemplo, y registrar todo el tráfico que circula por ellos, recolectando por ejemplo todo tipo de usuarios o contraseñas que sean transmitidos en formato plano.


Pero no todo se cierne sobre servidores Proxys. Otro uso habitual es la ocultación de huellas que puedan ser dejadas bajo un ataque. Dado que cualquier actividad en Internet deja el rastro de la IP, si cualquier usuario quiere pertrechar un escaner, un ataque, un acceso… lo último que a dicha persona le gustaría sería ser detectado. Por supuesto siempre se podría intentar eliminar los registros de entrada… pero aun así, sería un suicidio actuar por medio de su IP real. Para ello existen dos métodos clásicos. PCs Zombis e IP Spoofing. Un PC zombi no es más que un PC que por una cosa u otra está a mercé de un atacante, ya sea porque se ha tomado control de él anteriormente o por otras técnicas. Estos PCs zombis se usan mas tarde para realizar desde elilos los diferentes escaners o ataques, de modo que a todos los efectos, dicho PC Zombi es el culpable de todo.

Si bien hemos usado proxys como tecnicas de Spoofing, esto no es estrictamente cierto, al igual que no lo sería un PC Zombi, dado que no estaríamos modificando la IP (modificando los frames in situ), tan solo nos valemos de dichos servidores y usuarios para ello.

Mostraré por tanto lo que sí sería estrictamente realizar IP Spoofing. Para mostrar esto, se realizará un simple escaner de puertos (cosa que será tratado en otro artículo). Primero se realizará un escaner normal, a continuación un escaner ocultando nuestra IP (IP Spoofing), y para finalizar un Decoy. Decoy no implica un IP Spoofing necesariamente, un Decoy es una técnica por la cual se puede ocultar el origen real haciendo que este se pierda entre una “nube” de otros “atacantes”, ya sean estos ficticios o reales:

Host Origen: 192.168.2.2, Host Destino: 192.168.2.5


Fase 1: Escaner estandar de los puertos 21, 22 y 80 mediante la técnica TCP Syn sin IP Spoofing:





nmap -p21,22,80 192.168.2.5





Como se observa en la imagen, queda registrado que la IP origen (192.168.2.2) es quien realiza el escaner. Primero se realizan los intentos de sincronización por parte del origen. Si el destino contesta con una señal de reset [RST] el puerto está cerrado. Si el destino responde con un [ACK] indicará que el puerto está abierto. Si no responde nada, el destino está “muerto” (al menos en apariencia). Así los puertos 21 (ftp) y 80 (web) responden cerrados, y el puerto 22 (SSH) responde abierto. Todo esto se tratará en detalle en otro capítulo que no nos atañe ahora.

 

Fase 2: Escaner estandar de los puertos 21, 22 y 80 mediante la técnica TCP Syn CON IP Spoofing:





nmap -p21,22,80 -e eth7 -S 192.168.2.222 192.168.2.5





En cambio, como se puede apreciar la supuesta IP origen ahora es 192.168.2.222, host que no existe siquiera. El verdadero host origen (192.168.2.2), el que pertrecha el escaner, queda completamente oculto.

 

Fase 3: Escaner estandar de los puertos 21, 22 y 80 mediante la técnica TCP Syn CON Decoy:





nmap -p21,22 -e eth7 -D 192.168.2.3,192.168.2.4,192.168.2.8 192.168.2.5





En esta ocasión, el escaner aparenta venir desde muchos host simultaneamente. El objetivo responderá las peticiones de cada host. Aunque solo es un concepto realizando un Decoy simple (y lleno de fallos) desde UN MISMO host (192.168.2.2) se puede hacer mucho daño. Imaginar por ejemplo aumentar el número de host a 100, 200… los que sean necesarios.

 

Todo tiene su utilidad, sus ventajas… pero también sus inconvenientes. Para poder realizar las técnicas descritas, no se puede realizar un Spoofing de la IP que se desee, si se usa una IP que no se encuentra dentro de la misma subred que el enrutador que esté por encima del atacante, este no sabrá que hacer con los paquetes enviados desde el origen con una IP falsa. Esto hace que el ámbito de IP Spoofing explicado en el escaner o en otros posibles “ataques”, sea útil tan solo efectuado sobre una red local, dado que el router por encima de esta posíblemente no sería capaz de reenviar los paquetes (o recibirlos). Por supuesto siempre se podría escapar de esta limitación con una conexión directa a Internet, con lo que la subred por encima podría ser toda la subred del ISP del atacante.

En cualquiera de los casos, el IP Spoof no solo tiene como objetivo ocultar. Existe otra utilidad quizás más importante. Evitar los Firewalls o poder acceder a recursos que de otro modo no sería imposible. Por ejemplo imaginar una sección o subred de una LAN que está protegida por un Firewall, el cual no permite el acceso a IPs por debajo de 192.168.2.50 (por ejemplo). Falseando nuestra IP podríamos alcanzar el otro lado.

Sobre Decoy exactamente lo mismo. En el ejemplo ilustrado se realiza desde el mismo Host, pero imaginar un Decoy realizado por un conjunto de 2000 PCs Zombis repartidos por todo el mundo, los cuales de forma sincronizada realizan un acceso, un escaner, un ataque hacia un servidor concreto. Aun cuando mirasen en los registros tendrían 2000 posibles IPs, de las cuales quizás tan solo una sería el origen de todo. O evidentemente siempre se podría realizar las dos técnicas simultaneamente, las aplicaciones son innumerables.

¿Pero como se puede evitar este tipo de técnicas hacia nosotros? En caso de Decoys, habría que examinar con determinación los logs de accesos con la esperanza de notar algún comportamiento anómalo o diferente de alguna de ellas… aunque siempre se podría realizar de tal forma que fuese complicado de poder localizarlo, por ejemplo aumentando el número de hosts, usando accesos entre otros hosts… ¿Y sobre IP Spoofing? Usar tablas MAC estáticas o puertos ethernet fijos para subredes delicadas, usar protocolos de encriptación, acceso a ciertas redes tan solo por medio de certificados…