Jogos com Wifi no ESP32

Jogos com Wifi no ESP32

O que me deu a ideia de fazer uma ferramenta de bolso para análise de redes WiFi foi este artigo.

Obrigado a eles pela ideia. Eu simplesmente não tinha nada para fazer.

Todo o trabalho foi realizado como hobby com o objetivo de me divertir e ampliar meus conhecimentos na área de tecnologias de redes. Lentamente, 1..4 horas por semana, desde o início deste ano.
Não planejei nenhum uso prático. Aqueles. Esta NÃO é uma ferramenta de hacker.

No momento, todas as funcionalidades planejadas estão funcionando. Todas as fontes, totalmente prontas para montagem, postado aqui. Também existem instruções de montagem, etc. Nesta nota, não duplicarei as informações postadas no github. Direi apenas o que considero necessário descrever separadamente.

Minha opinião sobre a “ferramenta universal” e o motivo da escolha do ESP32

Não pretendo ser a verdade. Todo mundo tem o seu. Tentarei justificar minha escolha de hardware.

Proposto no artigo o caso de uso de uma combinação de Linux (inicialmente Raspberry Pi) + “periféricos” na forma de um controlador (STM32) + CC1110 (núcleo 8051) e o plano de colocar tudo o que for possível nele (125kHz, NFC, 433mHz, USB, iButton, bluetooth,?) não parecia adequado para mim. No entanto, este projeto Parece que permanecerá privado e fechado (flipper-zero github “Esta organização não tem repositórios públicos.”) e foi para um hardware não muito comum.

Talvez eu esteja errado e, no futuro, os autores disponibilizarão publicamente as fontes do software. Mas se não, eu não compraria tal peça de hardware sem o código-fonte.

Meus requisitos para a "ferramenta"

A caixa deve ser pequena (quanto menor melhor).

Portanto:

  • Não é necessária bateria embutida. Com uma corrente > 100 mA ao trabalhar com Wifi, a bateria embutida será grande ou não durará muito. Portanto, deixe a “caixa” ser alimentada por um power bank padrão. De qualquer forma, sempre tenho um power bank no bolso/carro.
  • Mantenha uma “caixa” Linux com ferramentas dentro, escrito ao longo de muitos anos em todas as línguas Com uma tela pequena e um conjunto escasso de botões de controle, não faz sentido. Os resultados podem ser visualizados/processados ​​em um laptop normal com teclado e tela completos.
  • Os componentes devem ser facilmente acessíveis e amplamente conhecidos (SDK disponível, muitos exemplos e documentação).

Como resultado, para mim a escolha foi óbvia - ESP32.

Para todas as tarefas indicadas no artigo que me levaram a agir, as capacidades do ESP32 são suficientes. Embora o máximo que eu ainda queira fazer seja:

  • Brinque com Bluetooth.
  • Brinque com a faixa de 433 MHz com o hardware mais simples (apenas modulação de amplitude, que é suficiente para necessidades práticas).

Voe na pomada no ESP32

  • O ESP32 SDK (IDF) é um tanto desajeitado.
  • Algumas das funcionalidades (pilha WiFi, por exemplo) vêm sem código-fonte na forma de bibliotecas estáticas montadas.
  • A banda de 5 GHz não é suportada e existem algumas limitações e falta de jeito no trabalho com WiFi.

Mas o preço/tamanho compensa completamente estas deficiências.

Funcionalidade principal do software

Descreverei brevemente a funcionalidade e minha opinião sobre...

Gerenciando configurações e fazendo upload de arquivos do SD

Todo o controle externo é feito através de uma simples página da Web, lançada em um item de menu separado. O ESP32 inicia no modo WiFi AP e exibe uma página em um endereço IP fixo.

Embora os núcleos ESP32 sejam bastante rápidos, como os experimentos mostraram, a operação simultânea do serviço Web integrado e, por exemplo, do modo roteador não são muito compatíveis. Portanto, não há controle dinâmico e a página não está disponível em todos os outros modos.
Além disso, o controle dinâmico não é necessário para fins de pesquisa.

Modo de trabalhar com pacotes Beacon

Os modos são banais e pouco interessantes. Feito “porque é possível”. Para verificar.
Existem exemplos nos exemplos oficiais do Espressif.

Modo de varredura de lista AP.
Na verdade, qualquer smartphone pode fazer isso.
Pois bem, neste modo a lista de AP será salva.
Spammer de farol.
O ESP32 inicia como um AP com um SSID oculto e um MAC aleatório e começa a enviar [beacon frame] de acordo com uma lista pré-criada de SSIDs (criada manualmente ou obtida anteriormente pela varredura da lista de AP)

Modo de detecção de pacotes WiFi

Os desenvolvedores do Espressif adicionaram a capacidade do software aplicativo de receber todos os pacotes WiFi “voando no ar” por meio da função de retorno de chamada. Na verdade, não todos, já que você só pode definir o modo para um canal fixo.

Restrições de tempo muito estritas são impostas ao processamento de uma função de retorno de chamada. Se isso não causa problemas para o modo simples de coleta de estatísticas, então para o modo de gravação de arquivos PCAP no cartão SD tive que mexer, organizando a gravação por meio de uma fila na memória e semáforos. Levando em consideração a peculiaridade de que o processo que chama o callback roda em um núcleo e o processo que grava no SD em outro.

Durante o “ar ruidoso”, alguns pacotes são perdidos (não há espaço na fila e são descartados), mas com um “ar” típico de um apartamento à noite (5..7 APs dentro da visibilidade), gravação em PCAP é concluído sem perda de pacotes.

Além disso, para monitoramento e gravação PCAP, existe um modo de filtragem baseado na lista MAC nos cabeçalhos dos pacotes.

Por exemplo, você pode rastrear a aparência de uma pessoa em um clube/café antes mesmo de ela entrar ou aparecer à vista. Poucas pessoas desativam o WiFi e as conexões automáticas com APs conhecidos. (Estou desligando agora..)

Visualizar o tráfego registrado no Wireshark é educativo e interessante para a compreensão dos mapas - tudo funciona.

Modo para trabalhar com pacotes deauth

Por padrão, o envio desses pacotes é proibido na biblioteca libnet80211.a, que vem sem fontes. Mas é fácil de consertar ajustando alguns detalhes. No começo duvidei se valia a pena postar patch. Mas depois de andar por diferentes lugares com o modo de varredura de quadro de desautenticação ativado, pensei: “que diabos”. Além disso, no esp8266 a entrega desses pacotes não é fechada e existem montagens no github para o esp8266.

Em muitos lugares (não direi onde) é usada a supressão de APs indesejados por meio desse método. E estes não são “valentões”...

E também fiquei surpreso que minha distribuição de Internet a partir do meu telefone não funcionasse em alguns lugares...

O modo de rastreamento do número e RSSI de tais pacotes é muito útil para entender “onde os APs da esquerda não gostam”.

modo roteador

Este recurso é provavelmente o mais interessante de todos para explorar.

ESP32 suporta operação simultânea no modo STA + SoftAP. Portanto, você pode implementar um roteador NAT clássico nele.

Para suportar a pilha de rede, o Espressif usa um fork (praticamente inalterado) da biblioteca lwip.

Mas, por padrão, na construção padrão, a biblioteca esp-lwip não fornece encaminhamento entre as interfaces netif 'ap' (SoftAP) e 'st' (STA).

Claro, você pode fazer isso sem NAT, mas há um problema ao conectar simultaneamente dois ou mais STAs à interface 'ap' e sincronizar endereços IP da interface de rede 'st' para 'ap'. Então as dificuldades não valem a pena e é mais fácil através do NAT.

Além disso, existe um fork esp-lwip do martin-ger, que adiciona uma implementação simples de NAT para IP4.

Embora minhas mãos estivessem ansiosas para refazê-lo puramente esteticamente (na minha opinião, foi mais fácil sem o fork do projeto, mas através do LWIPGANCHO funções definidas durante a montagem), mas a preguiça prevaleceu e a opção de marting-ger é usada como está.

No modo roteador, o tráfego IP4 de entrada e saída é visualizado.

Em particular, o seguinte é extraído dele para exibição na tela e coleta de estatísticas em um arquivo:

  • Nome do dispositivo conectado ao SoftAP ESP32 (pacotes DHCP)
  • URL de solicitações DNS (porta UDP 53) de um dispositivo conectado ao SoftAP ESP32.

Além disso, você pode ativar a gravação de tráfego em um arquivo PCAP.

Este modo é muito útil, por exemplo, para entender, por exemplo, o que o seu telefone envia para a rede e para onde vai.

Você pode pensar em outras maneiras de usar este modo, levando em consideração a capacidade de controlar completamente o tráfego de entrada e saída do softAP ESP32 no nível da interface de rede: Cabeçalho Ehernet (destMAC[6]+srcMAC[6]+type[2]) + carga útil (tipo IP4, IP6, DCHP, etc.).

Em princípio, o ESP32 lida muito bem com a função WiFi->WiFi Router, passando pelo tráfego normal sem atrasos especiais. Subjetivamente, os atrasos em um telefone conectado por meio de um roteador em um ESP32 não são perceptíveis.

Infelizmente, a API Espressif não tem a capacidade de definir um filtro para MAC conectado ao SoftAP EPS32. Em vez disso, propõe-se dizer “adeus” (esp_wifi_deauth_sta) às STAs já conectadas que “não são desejadas”.

A filtragem por MAC para STAs conectadas teve que ser feita através da chamada esp_wifi_deauth_sta()

Em conclusão

Embora eu não tenha inventado nada de novo no âmbito do trabalho com ESP32, talvez o resultado (código-fonte) seja interessante para alguém.

Gostaria de observar que o código foi escrito exclusivamente para fins educacionais. Para “hackear”, etc., foi deliberadamente feito não muito conveniente.

Não fiz uma placa de circuito impresso porque demorou de 1.5 a 2 horas para soldar os lenços acabados com fio.

E se você fizer isso, precisará montá-lo não com placas prontas, mas com componentes individuais. Então as dimensões serão ainda menores.

Fonte: habr.com

Adicionar um comentário