O que é um ROA incorreto e onde posso conferir as minhas informações?

Guillermo Cicileo
@ssrlac

Nos últimos anos, a adoção do RPKI cresceu a nível global, tanto por parte dos usuários que assinam seus recursos e geram seus ROA 1 2, quanto das organizações que realizam validação de origem para os anúncios BGP. Um número maior de implementações de software de validação RPKI surgiu no último ano. Por sua vez, existem propostas no IETF que apresentam possíveis extensões para as funcionalidades básicas do RPKI. Todos esses são sintomas da aceitação que o RPKI está tendo nos operadores para garantir a segurança do roteamento global.

Recentemente, grandes operadoras como a NTT ou AT&T, e importantes provedores de conteúdo como Cloudflare, começaram a descartar os anúncios BGP inválidos em relação às informações do RPKI. Esta mesma situação se estende na maioria dos IXPs no mundo todo. É de vital importância, então, verificar que as informações definidas no RPKI por parte de cada organização sejam corretas: no caso de ter ROAs criados de forma errada, é possível que determinados prefixos sejam descartados, com o qual atingir as redes que estão realizando validação, perdendo eventualmente a conectividade com operadores importantes, seria impossível.

Esta situação foi observada e explicada na lista de correio do LACNOG (https://mail.lacnic.net/pipermail/lacnog/2018-September/006484.html) e neste site: https://nusenu.github.io/RPKI-Observatory/index.html

Este problema é descrito com mais detalhes abaixo.

O que são os ROA?
Os ROA (Route Origin Attestations) são objetos assinados digitalmente que descrevem uma associação entre um conjunto de prefixos (IPv4 ou IPv6) e o sistema autônomo autorizado para originar esses prefixos em anúncios BGP. Adicionalmente, os ROAs definem o comprimento máximo com o que esses prefixos podem ser anunciados.

Desta forma, é possível contrastar as informações recebidas pelo BGP com as definições contidas nos ROA do RPKI: ao receber um anúncio de um prefixo por BGP é possível verificar o sistema autônomo que origina o anúncio e o comprimento do prefixo com o declarado no RPKI. Se esta informação coincidir, o anúncio BGP será considerado válido; se não coincidir - seja por ser originado em um sistema autônomo diferente ou por violar o comprimento máximo do prefixo declarado - o anúncio BGP será considerado inválido; um terceiro estado é adicionado caso o anúncio não seja coberto por qualquer ROA, quer dizer, não existam informações no RPKI: nesse caso, o estado é chamado de "unknown" ou "not found".

Por mais informações, confira RFC 6482 e 6483.

Por que implementar o RPKI é tão importante?
A base do roteamento na Internet é o protocolo BGP, que não inclui mecanismos para verificar o direito de uso dos recursos IP por parte de uma organização. A fim de verificar se as informações recebidas pelo BGP são legítimas, diferentes técnicas foram usadas ao longo do tempo, desde a LoA (carta de autorização) até os IRRs (Internet Routing Registries) para declarar o conjunto de prefixos que um sistema autônomo vai anunciar a outro. O RPKI é o método mais recente especificado como padrão no IETF para poder verificar as informações que são publicadas no BGP (veja o RFC 6480 e seguintes).

Através do uso do RPKI, as organizações podem certificar seus recursos e anúncios do BGP, protegendo-se de um uso inapropriado ou do sequestro de rotas (hijacking).

O que é a validação de origem?
A validação de origem consiste em verificar qual é o sistema autônomo autorizado a originar um anúncio de um prefixo no BGP. Por meio desta verificação, é possível evitar anúncios não autorizados, descartando aquelas rotas originadas em sistemas autônomos diferentes daqueles autorizados. Para realizar a validação de origem é necessário ter uma fonte externa de informações, uma vez que o BGP não possui mecanismos incluídos no protocolo para isso. Uma das maneiras mais difundidas de realizar validação de origem é contrastar os anúncios recebidos com as informações disponíveis no banco de dados do RPKI (repositórios RPKI, detalhado no RFC 6481).

O que é um ROA incorreto?
Um ROA incorreto é aquele que não cobre adequadamente as publicações que uma organização faz por BGP:

  • Um ROA que declara um sistema autônomo de origem diferente ao sistema autônomo que publica o prefixo no BGP.
  • Um ROA que especifica um comprimento máximo de prefixo menor que o anunciado por BGP (a rota no BGP é mais específica que o comprimento máximo declarado no ROA).

 Em ambos os casos, os prefixos anunciados que não se correspondem com o ROA poderão ser descartados por organizações que realizam validação de origem. Isso pode causar problemas de conectividade caso não tenha outra rota que cubra esses prefixos.

Um ROA incorreto pode ter sido gerado devido a um erro de configuração ou devido a informações desatualizadas criadas no repositório (por exemplo: ao trocar de provedor, trocar de sistema autônomo, desagregação incorreta etc.). Por esse motivo, é muito importante verificar que os ROAs declarados no sistema MiLACNIC se correspondam com as publicações do BGP que se quer realizar.

Aonde verificar a minha informação?
No sistema MiLACNIC, podem ser vistos os blocos IPv4 e IPv6 designados a uma organização. Também é possível verificar os ROAs criados na aba RPKI. É importante verificar que os ROAs cobrem todos os prefixos que a organização está anunciando na Internet (ou pretende anunciar). Também é conveniente ter todos os blocos IP cobertos com algum ROA, de modo que, se algum invasor pretender usar um prefixo deste bloco, o anúncio por BGP seja declarado inválido.

Na página https://nusenu.github.io/RPKI-Observatory/unreachable-networks.html, os ROA incorretos selecionados por ROA, por prefixo ou por sistema autônomo podem ser verificados.  Nesta página, o termo "RPKI unreachable network" é usado para se referir àqueles prefixos cuja publicação no BGP não corresponde aos ROAs criados. Este site pode ser usado para verificar que nenhum dos prefixos IP da nossa organização esteja nesse estado.

Referências:

CHK_LACNIC