Sobre Vulnerabilidades e Abridores de Garagem

Na parte superior da figura ao lado podemos ver um aparelhinho muito comum: um controle remoto de um abridor de garagem sem fio. Você se aproxima da porta da sua garagem (em geral dentro do seu carro), aperta um botão e a porta começa a abrir. Aperta de novo e ela fecha. Muito prático... e muito vulnerável.

Abaixo, você vê uma foto que eu tirei das entranhas do aparelho após abri-lo. Dá pra ver claramente uns fios prateados ao redor do chip cheio de perninhas, onde está numerado 1, 2, 3... até 8. Há um nono fio junto ao interruptor, mas o "9" está quase totalmente apagado. Dá pra ver que alguns fios estão inteiros e outros estão cortados.

Esse transmissor funciona assim: ele verifica os fios em sequência, verificando se estão cortados ou não. Se o fio estiver inteiro, ele transmite um pulso de rádio frequência que vai ser detectado pelo receptor. Se o fio estiver cortado, ele dá uma pausa sem transmitir nada.

Imagine agora que você tenha instruído o pessoal da sua casa a só abrir o portão se ouvirem um "toc-toc" em um determinado padrão que vocês combinaram (e presumem que só vocês conhecem). O abridor de garagem funciona pelo mesmo princípio: ele faz "toc-tocs" (mas via ondas de rádio, não por som) segundo o padrão determinado pelos nove fios inteiros ou cortados. Se ele fizer o mesmo padrão que o receptor espera ouvir, o portão da garagem abre/fecha. Se for diferente, o receptor ignora e mantém o portão como está – é por isso que quando o seu vizinho aperta o botão no controle dele, é a porta dele que abre, e não a sua: o padrão dos fiozinhos inteiros e cortados no receptor dele é diferente.

Se o abridor de garagem usasse som ao invés de ondas de rádio, nós poderíamos ouvir o toc-toc sem a necessidade de aparelhos especiais e seria óbvio para todo mundo que esse sistema é vulnerável – ouviríamos quando os vizinhos chegassem e aprenderíamos os "toc-tocs" deles. Todo mundo poderia facilmente abrir os portões das casas dos outros.

Mas, como o abridor de garagem usa ondas de rádio ao invés do som, quase ninguém percebe nada disso e muita gente assume que não tem como a coisa dar errado. Mas, tem, sim: se eu usar um receptor de rádio apropriado e sintonizar o dial na frequência certa, e usando um gravador especial, eu posso ficar esperando você chegar ou sair de casa e apertar o botão do seu abridor. Nesse momento, eu e o meu aparato, de tocaia, vamos conseguir gravar o "toc-toc" específico que abre o portão da sua casa – e violar sua premissa de que só vocês conhecem o "abre-te sésamo".

Vale ressaltar que o rádio capaz de sintonizar a frequência do seu abridor de garagem pode ser comprado a um preço bem acessível (menos que R$ 100) em qualquer boa loja de eletrônicos. O gravador pode ser qualquer um, desde os antigões de fita cassete (ainda existem?) aos gravadores digitais ou embutidos nos MP3 players. Ou seja, esse ataque não requer nada de muito especializado nem difícil de encontrar.

Posso então comprar eu mesmo um abridor de garagens "virgem" e, ouvindo o padrão dos toc-tocs que gravei, cortar ou emendar os fios de forma a que meu abridor transmita o mesmo padrão de toc-tocs que o seu. O receptor não vai notar a diferença e eu vou poder abrir a porta da sua casa quando eu quiser. No jargão de segurança de sistemas de informação, essa estratégia chama-se "ataque de replay."

Grande parte dos sistemas na Internet também é vulnerável a esse tipo de ataque. Muitos sites web requerem que você digite um nome e senha; se alguém no meio do caminho tiver um gravador especial, ele poderá capturar sua senha. Existem meios de dificultar esse ataque; de fato, quase todos os sites de bancos via Internet já tratam esse problema específico. Mas o que me impressiona é que ainda não sejam todos os sites; o que me impressiona é que ainda há muitos, muitos sites e sistemas de informática vulneráveis a interceptação e ataque de replay.

No próximo post dessa série, vou mostrar que esse sistema abridor de garagens também é vulnerável a um outro tipo de ataque bem primário e vou traçar paralelos com vulnerabilidades similares em sistemas de informática. No post seguinte, vou mostrar como resolver essas vulnerabilidades e um caso prático, bem do dia-a-dia, de onde elas foram resolvidas e, mais importante, por que elas foram resolvidas nesse caso em particular, além de algumas conclusões inesperadas sobre isso tudo.

No post anterior, eu defini "vulnerabilidade" como um erro de projeto ou de implantação que permite que algo indesejado aconteça. Por hoje, vou encerrar deixando algumas perguntas pro leitor em face a essa definição: no caso dessa vulnerabilidade do abridor de garagens, estamos falando de um erro de projeto ou erro de implantação? Como exatamente você definiria o "evento indesejado" que não queremos que aconteça e que, por força desse erro, acaba podendo acontecer?

Parte anterior

Próximas partes

Comentários
Aceita-se formatação à la TWiki. HTML e scripts são filtrados. Máximo 15KiB.

 
Enviando... por favor aguarde...
Comentário enviado com suceso -- obrigado.
Ele aparecerá quando os moderadores o aprovarem.
Houve uma falha no envio do formulário!
Deixei uma nota para os admins verificarem o problema.
Perdoe-nos o transtorno. Por favor tente novamente mais tarde.
Marco Carnut | 2010-08-05 15:49:06 | permalink | topo

Oi Marcos! Bom vê-lo por aqui!

O complicado de ter leitores inteligentes como você é que fica difícil fazer suspense – você descobriu exatamente o tema do próximo post da série. :)

Marcos Álvares | 2010-08-04 12:48:51 | permalink | topo

Oi Kiko,

em primeiro lugar, parabéns pelo artigo, está bem didático. Estava pensando aqui que nem é muito complicado para fazer um dispositivo "abridor" de portas de garagem universal. Só precisaria de 511 testes para percorrer todo o espaço de busca.

>> (1..9).to_a.collect {|x| factorial(9)/(factorial(x)*factorial(9-x)) }.sum >> 511

Confere?

Thiago Arrais | 2010-08-04 10:42:51 | permalink | topo

Tudo funcionando agora! Ótimo conteúdo, que agora posso acompanhar pelo feed reader.

Marco Carnut | 2010-08-03 21:56:26 | permalink | topo

Tem razão, Thiago, tinha sim um .html faltando no template do site externo.

Obrigado pelo aviso!

Thiago Arrais | 2010-08-03 14:12:57 | permalink | topo

Acho que o feed de vocês está com problema. Os links não incluem o sufixo ".html" obrigatório para chegar às páginas dos artigos. Quando se clica no link para abrir o artigo no leitor de feed, o browser não consegue encontrar a página.