Por Igor Carneiro
O protocolo de endereçamento IPv4 foi criado pela IETF (Internet Engineering Task Force) em 1981 para conectar 232 dispositivos à rede mundial de computadores. Contudo, todos os Registros Regionais de Internet (RIRs) têm suprimentos limitados ou esgotaram os endereços IPv4 disponíveis em 2019[1].
Para contornar a exaustão de endereços IPv4, foi criada uma solução denominada NAT (Network Address Translator). No entanto, o NAT é problemático para muitos aplicativos, pois cria latência e possui limitações que impedem severamente as comunicações ponto a ponto[2]. Além disso, com o surgimento da internet móvel e, com o surgimento de dispositivos IoT a necessidade de endereços IP públicos aumentou exponencialmente. Consequentemente, a IETF precisou criar um novo protocolo com maior capacidade de endereçamento: assim nasceu o IPv6, com capacidade de conectar 2¹²⁸ dispositivos.
Com uma nova tecnologia, surgem novas vulnerabilidades. É comum encontrar configurações de firewall e de segurança, em geral, voltadas para o protocolo IPv4, que ainda é o protocolo da camada de rede mais utilizado na Internet. Porém, a utilização de endereços IPv6 está se expandindo, com endereços sendo distribuídos pelos ISPs (Internet Service Providers), o que nos leva a ter uma preocupação a mais com segurança das redes que já utilizam o protocolo.
Este blog post tem o propósito de explicar brevemente o funcionamento do protocolo IPv6, para posteriormente conscientizar sobre os riscos existentes — caso ocorra negligência na configuração do mesmo em firewalls, ACLs etc. A ideia central é corroborar o argumento de que uma boa configuração de regras de firewall para o protocolo IPv6 é primordial para a segurança de uma organização.
Quais as diferenças entre os protocolos IPv4 e IPv6?
Para começar, é importante notar as diferenças entre os dois protocolos. A tabela a seguir compara ambos, explicitando essas diferenças:
Não obstante, ambos os protocolos operam na camada 3 do modelo OSI — a camada de rede — assim como outros protocolos tais quais: ICMP, ARP, IPsec, MPLS. Os protocolos IPv4 e IPv6 podem ter certas diferenças, mas desempenham a mesma função.
Representação de endereços IPv6
Um endereço IPv6 é bem mais longo que um endereço IPv4. É comum vermos abreviações desses endereços na literatura e nos dispositivos. Por exemplo, é uma prática comum a omissão de zeros à esquerda dos hexadecatetos:
2001:0db8:0000:0000:0000:0000:0000:0001
2001:db8:0:0:0:0:0:1
Além disso, é comum a abreviação de zeros contínuos:
2001:db8:0:0:0:0:0:1
2001:db8::1
Porém, esta abreviação só pode ser feita uma vez, na cadeia de zeros mais longa.
A representação dos endereços IPv6 em URLs é feita em colchetes para que não haja ambiguidades caso seja necessário indicar o número de uma porta
https://[2001:db8:0:2::53]/index.html
https://[2001:db8:0:2::53]:8080
Os endereços IPv6 são divididos em duas porções principais: o prefixo de rede e o identificador de interface. Cada porção recebe, por padrão, um /64 em notação CIDR (Classless Inter-Domain Routing):
A ordem de distribuição dos endereços IP é a seguinte: a IANA distribui endereços para os RIR, que distribuem endereços para os LIR, que distribuem os endereços para os ISP, que distribuem para os usuários finais, sendo estes empresas ou pessoas físicas:
Tipos de endereço IPv6
Existem três tipos de endereçamento no protocolo IPv6: Anycast, Multicast e Unicast.
Um endereço Anycast é utilizado para máquinas em espelhamento. Servidores de DNS raiz — que são 11 no total —, o qual tem o mesmo endereço IP. Isso só é possível porque é feito o espelhamento de máquina: quando um servidor para, outro assume. Servidores NTP também funcionam desta forma; estes servidores têm o mesmo endereço IP e respondem a vários clientes diferentes.
Um endereço Multicast é um identificador para um conjunto de interfaces que normalmente pertence a nodes diferentes. Um pacote enviado para um endereço multicast é entregue a todas as interfaces identificadas por esse endereço. Se você fizer o bloqueio de um endereço multicast em um firewall, nada mais na sua rede irá funcionar; portanto, este deve ser manuseado com cuidado. Endereços multicast têm um prefixo padrão FF00::/8. Alguns exemplos de endereços multicast são:
Um endereço Unicast pode ser dividido em três categorias: Global, Unique Local, e Link-Local.
Um Global Unicast Address (GUA) é o mesmo que um IPv4 público. Essa faixa 2000::/3 é a sub-rede do total de IPv6 destinada ao mundo inteiro, o que dá 13% do total de endereços possíveis (liberados pela IANA, que usamos hoje). Um GUA é roteável na internet, e seu alcance está entre 2000::/3 e 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF.
Um Unique Local Address (ULA) é o mesmo que um IPv4 privado classe A, B e C (10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16), e pode ser usado caso você precise criar uma rede interna para ligar sua impressora, servidores locais, etc. Pode ser roteado em rede interna ou VPN, mas não na Internet. Seu prefixo é FC00::/7.
Um Link-Local Address (LLA) é o mesmo que IP privado criado automaticamente na sua interface; a título de exemplo, o endereço 169.254.0.0/16 no IPv4 — quando não há atribuição dinâmica de endereços (DHCP). O LLA foi criado para ser o Automatic Private IP Addressing (APIPA) do IPv6.
No IPv4, quando você recebe um IP fixo ou via DHCP, ele “mata” aquele 169.254.0.0/16. Já no IPv6, ele permanece como um endereço IP local de interface privada, criado automaticamente, não roteável, e usado em um único segmento de rede. Seu alcance é FE80::/64, onde os outros /64 de interface serão configurados pelo processo EUI-64 (explicado adiante).
No IPv6, alguns endereços ou faixas de endereços têm usos exclusivos como:
Coexistência do IPv4 com IPv6
A IETF criou vários protocolos e ferramentas para ajudar os administradores de rede a migrarem as redes para IPv6[3]:
Endereçamento dinâmico para GUAs IPv6
Caso você não queira configurar os endereços IPv6 de maneira manual, este pode ser configurado dinamicamente por pacotes ICMPv6 de router solicitation (RS) e router advertisement (RA). RA é usado para um dispositivo obter um endereço IPv6 global unicast e inclui:
- prefixo de rede e comprimento do prefixo
- endereço do gateway padrão (um endereço LLA IPv6, que é a origem da mensagem de RA)
- endereços DNS e nome de domínio
Roteadores IPv6 enviam mensagens ICMPv6 de RA a cada 200 segundos para todos os dispositivos habilitados para IPv6 na rede, e também enviam mensagens RA como resposta a mensagens RS.
Existem três métodos para mensagens RA:
Quando a mensagem de router advertisement é submetida via SLAAC ou SLAAC com DHCPv6 stateless, o cliente deve gerar sua própria ID da interface, e isso pode ser feito com um número aleatório de 64 bits ou pelo processo EUI-64 (Extended Unique Identifier).
Esse processo é simples: ele usa o endereço MAC Ethernet de 48 bits da máquina — composto por 24 bits do Organizationally unique identifier (OUI) — que é o código do fornecedor, e 24 bits do identificador de dispositivo (ID) — um valor exclusivo com um OUI em comum, inverte o 7o bit do OUI, e insere um valor FFFE entre o OUI e o ID, ou seja:
EUI-64: MAC OUI (24 bits) com 7o bit invertido + FFFE (16 bits) + MAC ID (24 bits) = ID da interface de 64 bits:
Problemas de segurança do protocolo IPv6
Agora que entendemos como o protocolo IPv6 funciona, vamos entender alguns problemas que ele carrega. Existem algumas vulnerabilidades similares às do protocolo IPv4, porém algumas são novas e inerentes ao funcionamento do protocolo IPv6.
Os desafios e problemas de segurança inerentes ao funcionamento do protocolo criam margem para a existência de vulnerabilidades nos dispositivos. A Agência de Segurança Nacional dos Estados Unidos lançou um paper em janeiro de 2023, sobre preocupações e recomendações de segurança do IPv6. É possível notar que essas preocupações e desafios estão interconectados de alguma forma:
ICMP e Multicast
É comum bloquearmos pacotes ICMP no IPv4 como medida de segurança. Contudo, o funcionamento do IPv6 depende do ICMPv6 para mensagens de erro, descoberta de unidade de transmissão máxima (maximum transmission unit – MTU) de caminho, gerenciamento de grupo multicast e descoberta de vizinhos. A maneira como o multicast funciona é um desafio para firewalls, detecção de intrusão e ACLs.
Pilha Dupla
Dual stack (pilha dupla) significa a coexistência dos protocolos IPv4 e IPv6. É um dos métodos de transição essencial para IPv6 e o mais utilizado no mundo hoje. Contudo, isso significa que a segurança deve ser mantida para ambos, o que aumenta os custos de tempo e esforço, fazendo com que organizações como o Facebook adotem IPv6 em suas redes internas e usem técnicas de conversão nas bordas da rede.
Túneis Automáticos
Tunelamento significa que os pacotes de um protocolo são encapsulados por outro. Os túneis também são uma técnica de transição IPv6 essencial. No entanto, alguns sistemas operacionais prontos para uso estabelecerão automaticamente uma rede IPv6 quando um cliente estiver conectado a um servidor, por exemplo, várias versões do Windows. Novos caminhos potencialmente indesejados para hosts podem ser configurados e os firewalls podem não estar preparados.
Autoconfiguração
É um processo eficiente e econômico, tende a produzir a existência de vulnerabilidades. Quando o SLAAC utiliza o processo EUI-64, este expõe o endereço MAC do cliente, o que pode permitir a identificação do host por meio do ID de interface, do fabricante de NIC ou do fornecedor de host. Endereços gerados por meios aleatórios, temporários ou criptográficos são a melhor opção. Outra solução é usar um DHCPv6.
Hosts com vários endereços
É comum um host ter vários endereços no IPv6 por consequência do SLAAC, DHCPv6 temporário, endereços LLA, prefixos múltiplos, tempos de vida sobrepostos, além dos endereços IPv4. Os administradores devem estar cientes de todos os endereços de interface possíveis.
Varreduras no IPv6
Varreduras sequenciais em uma sub-rede /64 são inúteis. Levaria 500.000 anos para escanear um único /64 a um milhão de sondas por segundo. No entanto, a varredura sugerida (usando outras fontes para obter informações sobre intervalos de endereços) ainda pode ser possível. Isso pode ser feito, por exemplo, com a ajuda de hitlists públicas como: Alexa domains e Cisco Umbrella, NDP, tabela de roteamento, whois ou DNS reverso, SLAAC + EUI-64 + invasor com informações anteriores suficientes. Por exemplo, em uma configuração estática/manual ou com DHCPv6 stateful, endereços IPv6 da rede podem ter uma estrutura conhecida (organizações que numeram seus hosts sequencialmente), como:
::3, ::4
::aaaa, ::bbbb
::1:80, ::2:22, ::3:443 etc (portas IPv4)
::1000-2000, ::100-200, ::1:0-1000, ::1:1000-2000
Má configuração do protocolo IPv6 e suas consequências
Agora que entendemos como o protocolo funciona, como é representado, quais são seus tipos e como ele é configurado, podemos chegar a algumas conclusões:
- O fato de a pilha dupla existir e a maioria dos ISP distribuírem endereços GUA para seus clientes torna plausível a inferência de que que grande parte dos dispositivos têm mais de um endereço IP ativo.
- Em geral, as proteções e regras de firewall padrão dos roteadores vêm com medidas básicas de segurança. Caso alguém conheça o endereço GUA de seu dispositivo, este poderá ser acessado diretamente de qualquer lugar do mundo e, consequentemente, explorado.
- Um atacante usando técnicas de reconhecimento de rede poderia acessar servidores e arquivos pessoais, simplesmente, por não haver nenhum tipo de configuração de segurança estabelecida para o protocolo IPv6.
Como demonstração de como isso poderia acontecer, podemos tomar como referência a RFC 7707, na qual são descritas técnicas de reconhecimento de rede dentro do âmbito IPv6 que podem ser usadas para explorar uma má configuração de segurança dos sistemas. Portanto, estas técnicas podem ajudar um atacante a acessar máquinas e explorá-las.
Para demonstrar os perigos da má configuração — ou negligência na configuração — do protocolo IPv6, foi criado um laboratório com a seguinte topologia:
Neste laboratório, máquinas foram configuradas de maneira a simular um DHCPv6 stateful, no qual os dispositivos recebem endereçamento de forma sequencial low byte.
Podemos notar que existem duas LANs diretamente conectadas (distância administrativa 0) a um firewall pfSense; e que ambas as LANs receberam um endereçamento IPv4 e um endereçamento IPv6. Neste laboratório, o atacante está operando um Debian na LAN OPT1, enquanto a vítima está operando um Debian na LAN OPT0.
O pfSense está com suas interfaces configuradas da seguinte maneira:
Além disso, podemos notar que as regras de firewall do pfSense estão configuradas para bloquear pacotes ICMPv4, TCPv4 e UDPv4 advindos da lan OPT1, enquanto os pacotes do protocolo IPv6 não foram configurados:
Além do firewall pfSense, a vítima tem em seu dispositivo um firewall IPTables configurado com a política DROP para ICMPv4, TCPv4 e UDPv4, liberando apenas portas para funcionamento da internet, DNS, traceroute e loopback:
Podemos notar que, em teoria, nenhum pacote ICMP ou segmento TCP/UDP advindos da LAN OPT1 chegará à LAN OPT0. Para demonstrar que ambos firewalls estão ativos e funcionais, foram utilizadas as ferramentas ping e traceroute da máquina do atacante para a máquina da vítima e vice-versa:
Utilizando o nMAP, podemos ver que não há retorno de hosts ativos na LAN da vítima, ou que pacotes ICMP estão sendo bloqueados:
Podemos então concluir que a rede da vítima está protegida… ou será que realmente podemos afirmar isso?
Como vimos anteriormente, não há nenhum tipo de configuração no pfSense ou no IPTables para o protocolo IPv6. Podemos tentar fazer uma varredura sugerida na LAN da vítima para descobrir hosts ativos com a flag -sn do nMAP:
No exemplo acima, podemos observar que existem dois hosts ativos na rede 2001:db8:56::0/64. Utilizando a flag -sV do nMAP, podemos obter mais informações a respeito destes hosts ativos:
É possível notar que existem servidores rodando na porta 80 em ambos os hosts ativos: um NGINX e um Apache. Podemos, inclusive, observar a versão do servidor Apache e o sistema operacional em que ele está sendo rodado. Como sabemos que há um servidor web rodando em cada host, podemos tentar acessar este servidor pelo browser:
Podemos notar que a má configuração do protocolo IPv6 em ambos os firewalls nos forneceu acesso ao pfSense e a uma página interna da empresa, mesmo com todo acesso sendo restrito pelo protocolo IPv4.
Conclusões e recomendações
Má configuração é sempre um grande problema para as empresas. Podemos observar que é claramente mais difícil realizar uma varredura em endereços IPv6 quando consideramos, como referência, os moldes do IPv4, entretanto uma varredura sugerida ainda é bem possível. Caso não haja uma configuração bem definida em firewalls, ACLs, etc, e uma varredura deste tipo seja efetiva, ou seja, hosts ativos sejam encontrados, explorações tornam-se plausíveis.
Este post teve o propósito de servir como um whitepaper para veicular a conscientização de que, tanto o protocolo IPv4 quanto IPv6, devem ser configurados levando-se em consideração conceitos doutrinários de segurança da informação. Desta forma, estabelecendo-se a relevância desta premissa, a seguir são elencadas algumas recomendações:
- Ao que tange o contexto de pilha dupla: mecanismos de segurança devem ser implementados em ambos os protocolos IP com o propósito de proteger a rede;
- Deve-se evitar configuração de endereços IPv6 utilizando uma estrutura padronizada (SLAAC com EUI-64 (RFC 4941), tunelamento e NAT64);
- Mudar o mindset de security by obscurity, ou seja, só porque é mais difícil descobrir um endereço IPv6 não quer dizer que você está seguro puramente por isso;
- Filtrar tráfego IPv6: a RFC 4890 mostra como fazer isso para ICMPv6;
- Cuidados com má configuração: RFC 9099;
- Configurar seu firewall para IPv6.
Mais uma vez, o laboratório montado nesta pesquisa teve o objetivo específico de demonstrar como uma falha de segurança envolvendo má configuração do protocolo IPv6 pode deixar seu dispositivo vulnerável. Contudo, outros testes poderiam ser feitos com outros sistemas operacionais, IoT e mobile, simulando diferentes configurações de infraestrutura; topologia e distâncias administrativas, além de testar todos os tipos de endereçamento dinâmico e outros protocolos de migração.
Referências
ANBAR, Mohammed; BELATON, Bahari; ELEJLA, Omar. ICMPv6-Based DoS and DDoS Attacks and Defense Mechanisms: Review. IETE Technical Review, v. 34, p. 1-18, 2016. DOI: 10.1080/02564602.2016.1192964.
APNIC BLOG. Disponível em: https://blog.apnic.net.
[1] APNIC. Gerenciamento de IP – Esgotamento do IPv4. Disponível em: https://www.apnic.net/manage-ip/ipv4-exhaustion/#globalipv4-run-out.
CAICEDO, Carlos; A. RAWAL; GOPAL, S.; KAMAT, R.; BEJAR, J.. Study of IPv6 Security Vulnerabilities. 2014.
[2] CISCO NETWORKING ACADEMY. CCNA1.
[3] CISCO NETWORKING ACADEMY. CCNA1 – Introdução a redes. São Paulo: Cisco
GOODIN, Dan. Using IPv6 with Linux? You’ve Likely Been Visited by Shodan and Other Scanners. Ars Technica, 1 Feb. 2016. Disponível em: http://arstechnica.com/information-technology/2016/02/using-ipv6-with-linux-youve-likely-been-visited-by-shodan-and-other-scanners. Acesso em Jan. 2023.
IPV6.BR. Disponível em: https://ipv6.br.
NATIONAL SECURITY AGENCY (NSA). IPv6 Security Guidance. Disponível em: https://media.defense.gov/2023/Jan/18/2003145994/-1/-1/0/CSI_IPV6_SECURITY_GUIDANCE.PDF. Acesso em Janeiro de 2023.
ROHRER, Justin P. Hacking IPv6: Security and Attacks vs IPv4 | Network Traffic Analysis Ep. 11 | CS4558. Disponível em: https://www.youtube.com/watch?v=aEYeWy4Zf68. Acesso em Janeiro de 2023.
RFC. RFC 2373, RFC 4443, RFC 4890, RFC 7123, [4] RFC 7707, RFC 7721, RFC 9099.
ULLRICH, Johannes. Targeted IPv6 Scans Using Pool.ntp.org. SANS Internet Storm Center, 2 Fev. 2016. Disponível em: https://isc.sans.edu/diary/Targeted+IPv6+Scans+Using+poolntporg/20681. Acesso em Jan. 2023.
ULLRICH, Johanna; KROMBHOLZ, Katharina; HOBEL, Heidelinde; DABROWSKI, Adrian; WEIPPL, Edgar. IPv6 Security: Attacks and Countermeasures in a Nutshell. 2014.