Buenas a todos y a todas, he escrito este post como introducción a la seguridad por IPv6, ya que a veces muchos se olvidan de las reglas de Iptables para IPv6 y esto también influye para que el atacante comprometa nuestra máquina, sin más preámbulo, a darle caña!!
¿Que es Iptables?
Comenzemos con que es Iptables, Linux en su Kernel presenta integrado un subsistema de redes llamado Netfilter, este subsistema proporciona filtrado de paquetes, servicios de enmascaramiento IP, entre otras cosas. Netfilter es controlado directamente por el aplicativo Iptables.
Entonces, Iptables es un firewall el cual su funcionamiento se basa en aplicar reglas que el mismo firewall ejecutará.
¿Que que son las reglas de Iptables?…Las reglas definen como deben ser tratados los paquetes de datos entrantes y salientes, es decir, que el firewall bloqueará todo intento de conexión entrante o saliente excepto las reglas
Importancia de IPv6
El protocolo IPv6 es importante si, debido a que funciona en muchos entornos de conexiones como SMB, DNS o la propia web de la intranet. Conocer su funcionamiento es fundamental para la protección de una
red, ya que muchos de los sistemas de protección IDS están configurados para detectar la mayoría de los ataques en redes IPv4, pero no hacen lo mismo con los ataques IPv6.
Esta parte se va a centrar en la seguridad de este protocolo, que debería haber
entrado hace mucho tiempo en nuestra vida cotidiana, y sin embargo sigue siendo un gran desconocido para muchos técnicos.
Reglas para IPv6
Cuando hablamos de las reglas de Iptables nos referimos a las reglas que se aplican para IPv4, pero también existe ip6table, el cual nos permite aplicar reglas sobre el protocolo IPv6
El comando utilizado para manipular el filtrado de red de IPv6 es ip6tables. La mayoría de las directivas para este comando son idéntica a aquellas usadas por iptables, excepto que la tabla nat aún no es compatible. Esto significa que todavía no es posible realizar tareas de traducción de direcciones de red IPv6, tales como enmáscarado y reenvio de puertos.
Las reglas guardadas para ip6tables son almacenadas en el archivo /etc/sysconfig/ip6tables. Las reglas viejas guardadas por los scripts de inicio de ip6tables son guardadas en el archivo /etc/sysconfig/ip6tables.save.
El archivo de configuración para los scripts de inicio de ip6tables es /etc/sysconfig/ip6tables-config y los nombres para cada directriz varian ligeramente. Por ejemplo, la directriz iptables-config IPTABLES_MODULES es IP6TABLES_MODULES en el archivo ip6tables-config.
Ejemplo por SSH
Si tenemos corriendo en nuestra máquina el puerto 22(SSH), el atacante tiene la posibilidad de comprometer nuestra máquina conociendo nuestro usuario y debido al uso de una id_rsa autoritativa, esta id_rsa puede ser utilizada como fichero de identificación para conectarse a la máquina para nuestro usuario sin proporcionar contraseña.
El atacante crearía un fichero donde introduce la key id_rsa
->mv key_id_rsa id_rsa ->chmod 600 id_rsa |
Luego lo utilizaría como fichero de identificación para acceder a nuestro máquina.
->ssh -i id-rsa [email protected] |
De esta manera un atacante podría tener control sobre nuestra máquina para luego iniciar el proceso de post-explotación…¿Como evitar esto?
Si generamos un par de reglas Iptables:
->iptables -P INPUT DROP ->iptables -A INPUT -p tcp -L ens33 –dport 80 -j ACCEPT |
Acá estamos generando un par de reglas Iptables que cerraran todo tipo de conexiones entrantes y salientes menos las conexiones entrantes por el puerto 80 por la interfaz ens33. Ahora al atacante al realizar un escaneo le mostrara que el único puerto abierto es el 80, si hacemos un netstat veremos que el puerto 22 seguirá abierto pero digamos que una conexión privada.
Lo anterior sólo funcionará para IPv4. Que pasa… pues que muchos técnicos se olvidan de IPv6 por completo y es hay donde está el grave error. Luego de haber cerrado las conexiones por SSH el atacante no tendrá manera de comprometer nuestro equipo, aparentemente, pero si el atacante digamos que tiene la posibilidad de ejecutar comandos mediante una webshell y le permita ver nuestras interfaces de red, si tenemos IPv6 se dará cuenta de que existe una Unique Local Address, y no solo probará hacer un escaneo por IPv4, sino también lo hará por IPv6 mostrándole que el puerto 22 sigue abierto, por lo que de nada ha servido configurar nuestro firewall para IPv4 olvidandonos de IPv6
->ssh -i id_rsa ouruser@fe80::ffff:ffff:ffff:fffeth0 |
Y aquí es donde entra ip6tables, ip6tables como anteriormente expliqué, configura las reglas iptables para IPv6, ahora, aplicando las mismas reglas para Iptables que mostramos anteriormente lo haremos con ip6tables
Primero vemos que para IPv6 no existen reglas de firewall
->ip6tables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT |
Ahora configuramos las mismas reglas pero para IPv6
->ip6tables -P INPUT DROP ->ip6tables -A INPUT -p tcp -L ens33 –dport 80 -j ACCEPT |
Configurado nuestro firewall ya el atacante no podrá acceder de manera remota a nuestra máquina, tanto como para IPv4 como para IPv6
Y listo, ya tendremos bien configuradas nuestras reglas de firewall para mantener la seguridad de nuestra máquina por IPv6…Muchas gracias 🙂
Mozilla/5.0 (Linux; Android 9; SM-J810M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Mobile Safari/537.36
Muy buen post. Quisiera saber como se protegería de un ataque atraves de intercambio de cabeceras, osea, de IPv4 a IPv6