Pwnagotchi: segurança de redes e inteligência artificial

Além da área de ciência de dados, um tema que eu gosto muito é o de pentesting, abreviação de penetration test, teste de penetração/intrusão, onde (legalmente) testamos sistemas para explorar suas falhas, comprovar fraquezas e então consertá-las. Em um mundo que é direcionado aos dados, a segurança dos mesmos é fundamental. Acompanho a área há alguns anos, mas por conta do mestrado, fiquei um pouco por fora.

Felizmente, agora eu posso dizer que pentesting não é mais tão fora dos meus estudos assim :)

Conheci um projeto muito interessante chamado Pwnagotchi que utiliza reinforcement learning, um algoritmo de machine learning (e que, de certa forma, podemos chamar de inteligência artificial) para capturar dados wifi e testar a segurança dessas redes, tudo isso utilizando um simples Raspberry Pi Zero W, como o da foto abaixo, que apesar de medir somente 6,5cm x 3 cm, é equipado com módulo Wifi, mini-HDMI, 512mb de RAM, bluetooth, 1 Ghz de CPU e conector de câmera, tudo isso funcionando com um cartão SD! Fonte: raspberrypi.org Para um computador pessoal, o Raspberry PI Zero W pode deixar a desejar, mas para tarefas mais simples, como a que veremos hoje, ele funciona muito bem e possui um baixo preço (entre R$ 120,00 e R$ 200,00 ), rodando linux em versões próprias do kernel, que permitem a máxima potência disponível no produto.

Redes Wi-Fi

Mas antes de falarmos do Pwnagotchi, vamos falar sobre redes Wi-fi e entender qual o problema por trás delas. Redes sem-fio apresentam um sem número de falhas, que não são verdadeiros problemas das redes em si, mas que são descobertos dado o seu uso disseminado em praticamente todas as coisas atualmente (de routers pessoais à geladeiras e lâmpadas - IoT - internet of things). Essa é quase um mandamento da informática: quanto mais fechado é um sistema e mais usado ele é, mais falhas serão descobertas nele. Com o Wi-Fi não é diferente.

Alguns podem perguntar: qual o problema de uma pessoa invadir a minha rede e utilizar a minha internet? Bom, quando sujeitamos nossas redes à outros, essas pessoas podem efetuar ataques à estabilidade da mesma, inserir grampos e filtrar dados (descobrindo senhas, sites visitados, etc), desviar o tráfego (te direcionando para um site malicioso com o intuito de roubar seus dados), dentre outras coisas. Por isso a força em uma senha é fundamental, ou seja, conter mais de 8 dígitos, misturar letras (maiúsculas e minúsculas), números e símbolos, não utilizar palavras prontas, mas uma mistura delas, são coisas fundamentais. Seres humanos não conseguem adivinhar senhas por tentativa-e-erro, mas computadores sim, e podem fazê-lo numa velocidade impressionante (com mais de 100 mil tentativas por segundo!).

OK, mas como eles invadem meu Wi-Fi? Bom, a grosso modo, o Wi-Fi, por ser transmitido pelo ar, mesmo que tenha senha, alguns dados ficam abertos. Esses dados se referem à autenticação, ou seja, quando conectamos ao modem/router. Para conectarmos, ocorre um processo entre o computador e o router chamado 4-way handshake (no caso de redes que utilizam a chave WPA), um “aperto de mão” entre as máquinas, que gera pacotes no ar, e esses pacotes, quando sniffados (capturados), permitem que uma pessoa mal intencionada possa fazer testes de tentativa-e-erro para encontrar a senha. No caso de redes WEP, mais antigas, é mais fácil e rápido.

Aí entra o papel da senha forte: para encontrar a senha, o hacker precisa de wordlists, que são listas de palavras com possibilidades de senha. Ao tentar uma por uma, ao chegar na certa, a criptografia é quebrada e a senha se torna visível. Todavia, se a senha não estiver na wordlist, isso nunca acontecerá, ou se for grande demais, pode até ser previsível, mas levaria anos para testar combinação por combinação.

Para capturar os handshakes (mais detalhes do funcionamento aqui) e testar a vulnerabilidade da rede, um conjunto de ferramentas é utilizado, como o aircrack-ng, wireshark, bettercap, dentre outros, cuja utilização foge ao escopo do post (quem sabe um dia…). E essas ferramentas possuem um grande número de configurações que precisam ser testadas, iteradas e alteradas para que consigamos esses pacotes, como os canais monitorados (que precisam variar todo instante), o sinal do Wi-fi, o tempo de reconhecimento em cada canal, o tempo para saltar de um canal para outro, o número de associações que podemos fazer, quantas vezes podemos tentar reconectar com a rede antes de tentar uma outra, etc. Para quem fazia manualmente (como eu), era um trabalho hercúleo que exigia paciência e técnica, e às vezes simplesmente não funcionava (quando um dos dois faltavam, geralmente paciência). E é aí que entra o Pwnagotchi.

Fonte: Wifi-Professionals.com

Pwnagotchi

O Pwnagotchi utiliza um algoritmo chamado A2C (Advantage-Actor-Critic), que é uma espécie de algoritmos de reinforcement learning, fazendo parte do que é comumente (e muitas vezes, erroneamente) chamado de Inteligência Artificial. O que o A2C faz? De modo simples, ele (o ator) executa ações em busca de recompensas, tendo um valor esperado de recompensas, então a outra parte (o crítico) mensura, dentre aquelas ações, quais geraram mais recompensas, e essas passarão a ser mais utilizadas (ou utilizadas primeiro) para que a recompensa seja maximizada. Em um famoso exemplo, o algoritmo programado aprende a jogar Sonic the Hedgehog e consegue passar todas as fases : https://www.youtube.com/watch?v=GCfUdkCL7FQ

O que está acontecendo? Ao algoritmo, é dado o jogo (com suas fases, obstáculos, argolas, etc) e os comandos possíveis: avançar, voltar, pular, rolar. É ensinado também que existem argolas, que representam a recompensa para o algoritmo: quanto mais, melhor. Inicialmente, ele jogará de maneira quase que aleatória. Ao longo do tempo, ele vai percebendo que, em certos momentos, pular foi mais vantajoso que avançar, ou que rolar em determinada parte garantiu mais argolas, e guarda essas informações. Aos poucos, ele vai executando essas ações nos momentos certos para que sempre consiga o maior número possível de recompensas. Em algumas milhares de execuções (feitas em segundos/minutos pelo computador), o algoritmo já consegue jogar Sonic com destreza.

Para entender melhor o algoritmo A2C, recomendo o site hackernoon.com, que, com os quadrinhos (muito fofos, aliás!) do @embermarke, permite uma compreensão melhor dos fundamentos do algoritmo.

A mesma coisa é feita pelo Pwnagotchi: as configurações que citei anteriormente são as ações possíveis, e os handshakes são as recompensas. Com o uso, o aparelho executa um cálculo pra determinar o valor da recompensa em determinadas configurações, e busca sempre maximizá-lo, em tempo real. Ou seja, quanto mais você utiliza o Pwnagotchi, mais ele aprende e melhor consegue capturar os handshakes, já que ele, de forma inteligente, consegue alterar as próprias configurações para aquele cenário.

Para utilizá-lo, basta gravar a imagem, disponível aqui em um cartão SD, alterar as configurações iniciais (como o nome do seu pwnagotchi), inserí-lo no RaspberryPi Zero W, ligar em uma bateria (aqueles carregadores portáteis de celular são ótimos para isso!) e sair por aí, enquanto ele tenta capturar handshakes. Algumas pessoas inserem telas e-ink (como a do Kindle ou do Lev) para que possam observar o trabalho do sistema em tempo real. A graça disso é que o desenvolvedor inseriu uma interface ultra amigável que aparece nessa tela, com pequenos rostinhos que indicam a atividade realizada, além de alguns outros dados. Esses rostinhoslembram muito um Tamagotchi, daí o nome: Pwnagotchi.

Parece mesmo um Tamagotchi!

Para aqueles que, como eu, não desejam soldar uma tela e-ink no Pi, é possível acessar pela Web e ter uma ideia do que está acontecendo naquele momento. Além disso, o sistema também é acessado por SSH, permitindo alteração das configurações, download dos handshakes, atualizações, etc.

Meu pwnagotchi, sendo exibido na tela do computador quando conectado no USB

O sistema suporta scripts que aprimoram a utilização do pwnagotchi, como por exemplo, registrar a localização GPS, fazer upload dos handshakes para plataformas de quebra de senhas, inserir temperatura, CPU e uso da memória na tela, fazer tethering pelo bluetooth, além de muitos outros.

Acima, minha montagem do Pwnagotchi, com o raspberry inserido em uma case que imprimi em 3D, para proteger de poeira e contatos. Lembram que afirmei disse que era preciso escolher um nome para o seu pwnagotchi? O motivo por trás disso se chama PwnGrid, a rede de todos os Pwnagotchi (que você pode optar participar ou não). Nela, existe um rank de pwnagotchis, mostrando quantas redes você já “capturou”, por quanto tempo rodou e por quanto tempo seu algoritmo treinou! É como um PokemonGo para redes wi-fi. O mapa da PwnGrid pode ser visto aqui https://pwnagotchi.ai/map/,

A PwnGrid também é equipada com o PwnMail, um serviço de mensagens criptogradas e seguras pela internet, utilizando o dispositivo. Cada pwnagotchi tem sua própria chave pública, que permite o envio e recebimento de mensagens.

Se alguém quiser me contatar por lá, minha chave é:

873471cc5a10aa546947327da150bf0407a4d21fb091183cf3be2b2a19d7720c

Aguardo mensagens de vocês :)

Para mais informações, acessem o site do pwnagotchi, que é https://pwnagotchi.ai/, onde você consegue aprender sobre a instalação, configuração, e uso. Para dúvidas, é possível acessar a comunidade e o sub-reddit. No próximo post, aprenderemos a mexer em APIs no R utilizando a API da PwnGrid!

Bom, por hoje é só! Vimos um interessante exemplo de inteligência artificial aplicada à segurança de redes, mostrando todo o potencial que a ciência de dados pode exercer no mundo, em todas as áreas. Qualquer dúvida, correção ou sugestão pode ser enviada para o meu email

Avatar
Mateus C. Pestana
Doutorando e Mestre em Ciência Política

Interessado em ciência de dados, ciência política, política russa e métodos de impressão 3d.