
Script para analisar capturas do Aircrack-ng em um banco de dados SQLite e extrair informações úteis como handshakes, identidades MGT, relações interessantes entre APs, clientes e seus Probes, informações WPS e uma visão global de todos os APs vistos.
Script para analisar capturas do Aircrack-ng em um banco de dados SQLite e extrair informações úteis como handshakes (no formato 22000 do hashcat), identidades empresariais (MGT) e pares desafio/resposta EAP-MD5, os certificados X.509 e a configuração de segurança RSN/WPA de cada rede, as capacidades 802.11r/k/v, Multiple BSSID e Channel Switch anunciadas pelos APs, relações interessantes entre APs, clientes e seus Probes, informações WPS e uma visão geral de todos os APs vistos.
Certificate.AP.hashcat -m 4800) na tabela EAPMD5.Probe).SummaryAP) dos APs agrupados por ESSID e criptografia, mostrando as contagens de APs e clientes, a versão WPA e o estado PMF, e cada fabricante por grupo, para dar uma visão geral rápida do status de segurança das redes próximas (e identificar SSIDs com segurança mista/rebaixada).AP.docker pull r4ulcl/wifi_db
### Instalação manual
#### Sistemas baseados em Debian (Ubuntu, Kali, Parrot, etc.)
Dependências:
- python3
- python3-pip
- tshark
- hcxtools``` bash
sudo apt install tshark
sudo apt install python3 python3-pip
sudo apt install pkg-config libcurl4-openssl-dev libssl-dev zlib1g-dev make gcc
git clone https://github.com/ZerBea/hcxtools.git
cd hcxtools
make
sudo make install
cd ..
Instalação (usando um ambiente virtual)``` bash
git clone https://github.com/r4ulcl/wifi_db cd wifi_db
sudo apt update ; sudo apt install python3-venv python3 -m venv wifi_db_env source wifi_db_env/bin/activate
pip3 install -r requirements.txt
> O venv deve ser ativado (`source wifi_db_env/bin/activate`) em cada novo
> shell antes de executar `wifi_db.py`. Use `deactivate` para sair.
#### Arch
Dependências:
- python3
- python3-pip
- tshark
- hcxtools``` bash
sudo pacman -S wireshark-qt
sudo pacman -S python-pip python
git clone https://github.com/ZerBea/hcxtools.git
cd hcxtools
make
sudo make install
cd ..
Instalação (usando um ambiente virtual)``` bash
git clone https://github.com/r4ulcl/wifi_db cd wifi_db
python3 -m venv wifi_db_env source wifi_db_env/bin/activate
pip3 install -r requirements.txt
> O venv deve ser ativado (`source wifi_db_env/bin/activate`) em cada novo
> shell antes de executar `wifi_db.py`. Use `deactivate` para sair.
## Uso
### Exemplo de uso no [WiFiChallenge Lab](https://lab.wifichallenge.com/)
- https://r4ulcl.com/posts/wifi_db-in-wifichallenge-lab/
### Escanear com airodump-ng
Execute airodump-ng salvando a saída com -w:``` bash
sudo airodump-ng wlan0mon -w scan --manufacturer --wps --gpsd
#Folder with captures CAPTURESFOLDER=/home/user/wifi
touch db.SQLITE chmod a+rw db.SQLITE
docker run -t -v $PWD/db.SQLITE:/app/db.SQLITE -v $CAPTURESFOLDER:/captures/ r4ulcl/wifi_db
- `-v $PWD/db.SQLITE:/app/db.SQLITE`: Para salvar a saída no arquivo db.SQLITE na pasta atual
- `-v $CAPTURESFOLDER:/captures/`: Para compartilhar a pasta com as capturas com o docker

### Criar o banco de dados SQLite usando instalação manual
Assim que a captura for criada, podemos criar o banco de dados importando a captura. Para isso, coloque o nome da captura sem formato. Lembre-se de ativar primeiro o ambiente virtual (`source wifi_db_env/bin/activate`).``` bash
python3 wifi_db.py scan-01
No caso de termos múltiplas capturas, podemos carregar a pasta na qual elas estão diretamente. E com -d podemos renomear o banco de dados de saída.``` bash python3 wifi_db.py -d database.sqlite scan-folder

### Abrir banco de dados
O banco de dados pode ser aberto com:
- [sqlitebrowser](https://sqlitebrowser.org/)

Abaixo está um exemplo de uma tabela ProbeClientsConnected.

### Argumentos``` bash
usage: wifi_db.py [-h] [-v] [--debug] [-o] [-t LAT] [-n LON] [--source [{aircrack-ng,kismet,wigle}]] [-d DATABASE] capture [capture ...]
positional arguments:
capture capture folder or file with extensions .csv, .kismet.csv, .kismet.netxml, or .log.csv. If no extension is provided, all types will
be added. This option supports the use of wildcards (*) to select multiple files or folders.
options:
-h, --help show this help message and exit
-v, --verbose increase output verbosity
--debug increase output verbosity to debug
-o, --obfuscated Obfuscate MAC and BSSID with AA:BB:CC:XX:XX:XX-defghi (WARNING: replace all database)
-t LAT, --lat LAT insert a fake lat in the new elements
-n LON, --lon LON insert a fake lon in the new elements
--source [{aircrack-ng,kismet,wigle}]
source from capture data (default: aircrack-ng)
-d DATABASE, --database DATABASE
output database, if exist append to the given database (default name: db.SQLITE)
TODO
TODO
A wifi_db contém várias tabelas para armazenar informações relacionadas ao tráfego de rede sem fio capturado pelo airodump-ng. As tabelas são as seguintes:
AP: Esta tabela armazena informações sobre os pontos de acesso (APs) detetados durante as capturas, incluindo o endereço MAC (bssid), nome da rede (ssid), se a rede está oculta (cloaked), fabricante (manuf), canal (channel), frequência (frequency), operadora (carrier), tipo de encriptação (encryption) e total de pacotes recebidos deste AP (packetsTotal). Também contém as flags de capacidade/requisito de proteção de quadros de gestão (mfpc, mfpr) e os detalhes de segurança RSN/WPA analisados a partir de beacons, que são atributos 1:1 do AP e, portanto, residem na própria linha do AP: a wpa_version negociada (WPA2, WPA3, transição WPA2/WPA3, OWE), os suites de autenticação e gestão de chaves (, por exemplo, PSK, SAE, 802.1X), as e (CCMP-128, GCMP-256, TKIP, etc.), uma flag ativada quando um AKM 802.1X está presente, o estado de proteção de quadros de gestão (: Necessário, Capaz ou Desativado), o campo de bits bruto e a sua descrição legível (, por exemplo, → ). Da mesma forma, contém a configuração Wi-Fi Protected Setup (WPS), outro atributo 1:1 do AP: o nome de rede anunciado (), versão WPS (), nome do dispositivo (), nome do modelo (), número do modelo (), métodos de configuração () juntamente com a sua descrição legível (, por exemplo, → ) e métodos de configuração por teclado (). Finalmente, armazena as capacidades de gestão 802.11 analisadas a partir de beacons e probe responses: a flag Fast BSS Transition 802.11r () e o seu , a flag Radio Resource Measurement 802.11k (), a flag BSS Transition Management 802.11v (), a publicidade Multiple BSSID () e o seu , a flag Channel Switch Announcement () e o seu canal alvo (), e , ativado quando o nome da rede foi recuperado a partir de uma probe response / pedido de (re)associação em vez de um beacon. A tabela utiliza o endereço MAC como chave primária.
ProbeClients: Esta view seleciona o endereço MAC da sonda, o fabricante e tipo do dispositivo cliente, o número total de pacotes transmitidos pelo cliente e o SSID da sonda. Junta as tabelas Probe e Client pelo endereço MAC e ordena os resultados por SSID.
ConnectedAP: Esta view seleciona o BSSID do ponto de acesso ligado, o SSID do ponto de acesso, o endereço MAC do dispositivo cliente ligado e o fabricante do dispositivo cliente. Junta as tabelas Connected, AP e Client pelos BSSID e endereço MAC, respetivamente, e ordena os resultados por BSSID.
ProbeClientsConnected: Esta view seleciona o BSSID e SSID do ponto de acesso ligado, o endereço MAC da sonda, o fabricante e tipo do dispositivo cliente, o número total de pacotes transmitidos pelo cliente e o SSID da sonda. Junta as tabelas Probe, Client e ConnectedAP pelo endereço MAC da sonda e filtra os resultados para excluir sondas que estão ligadas ao mesmo SSID que estão a sondar. Os resultados são ordenados pelo SSID da sonda.
Aircrack-ng
Tudo num único ficheiro (e separadamente)
Kismet
Wigle
instalação
analisar todos os ficheiros na pasta -f --folder
Corrigir erros estendidos, tildes, etc (corrigido no aircrack-ng 1.6)
Suporte para múltiplos ficheiros bash: "capture*-1*"
Script para eliminar cliente ou AP da BD (mac). - (Whitelist)
Whitelist para não adicionar mac à BD (ficheiro whitelist.txt, adicionar macs, criar BD)
Substituir se houver nova informação (old ESSID='', New ESSID='WIFI')
Tabela Handshakes e PMKID
Formato hash hashcat 22000
Tabela de ficheiros, se o ficheiro existir, saltar (caminho completo)
Este programa é uma continuação de parte de: https://github.com/T1GR3S/airo-heat
mfpc (capable) e mfpr (required) lidas bitwise das capacidades RSN, e o estado pmf derivado (Required, Capable quando é opcional ou Disabled), armazenados na tabela AP.ft_80211r, com o mobility_domain_id), 802.11k Radio Resource Measurement / relatórios de vizinhança (rrm_80211k) e 802.11v BSS Transition Management (bss_transition_80211v).mbssid, com o max_bssid_indicator) e que enviam anúncios de troca de canal (Channel Switch Announcements) (csa, com o canal alvo csa_new_channel).ssid_revealed marca nomes aprendidos dessa forma).akm_suitespairwise_ciphersgroup_cipherenterprisepmfrsn_capabilitiesrsn_capabilities_text0x00c0MFPR, MFPCwlan_ssidwps_versionwps_device_namewps_model_namewps_model_numberwps_config_methodswps_config_methods_text0x218cLabel, PushButton, Keypad, Virtual Display PINwps_config_methods_keypadft_80211rmobility_domain_idrrm_80211kbss_transition_80211vmbssidmax_bssid_indicatorcsacsa_new_channelssid_revealedClient: Esta tabela armazena informações sobre os clientes sem fio detetados durante as capturas, incluindo o endereço MAC (mac), nome da rede (ssid), fabricante (manuf), tipo de dispositivo (type), total de pacotes recebidos deste cliente (packetsTotal) e uma flag randomized ativada quando o MAC é administrado localmente (um endereço aleatório/privado). A tabela utiliza o endereço MAC como chave primária.
SeenClient: Esta tabela armazena informações sobre os clientes vistos durante as capturas, incluindo o endereço MAC (mac), hora da deteção (time), ferramenta utilizada para capturar os dados (tool), intensidade do sinal (signal_rssi), latitude (lat), longitude (lon), altitude (alt). A tabela utiliza a combinação de endereço MAC e hora de deteção como chave primária e tem uma relação de chave estrangeira com a tabela Client.
Connected: Esta tabela armazena informações sobre os clientes sem fio que estão ligados a um ponto de acesso, incluindo o endereço MAC do ponto de acesso (bssid) e do cliente (mac). A tabela utiliza uma combinação dos endereços MAC do ponto de acesso e do cliente como chave primária e tem relações de chave estrangeira com as tabelas AP e Client.
SeenAp: Esta tabela armazena informações sobre os pontos de acesso vistos durante as capturas, incluindo o endereço MAC (bssid), hora da deteção (time), ferramenta utilizada para capturar os dados (tool), intensidade do sinal (signal_rssi), latitude (lat), longitude (lon), altitude (alt) e timestamp (bsstimestamp). A tabela utiliza a combinação do endereço MAC do ponto de acesso e da hora de deteção como chave primária e tem uma relação de chave estrangeira com a tabela AP.
Probe: Esta tabela armazena informações sobre os pedidos de sonda enviados pelos clientes, incluindo o endereço MAC do cliente (mac), nome da rede (ssid) e hora da sonda (time). Também contém a impressão digital do pedido de sonda, que é um atributo 1:1 da sonda e, portanto, reside na linha Probe: a lista ordenada de elementos de informação (tags) que o cliente incluiu no pedido (ie_order) e o seu hash (fingerprint), característico de um modelo de dispositivo/SO, mais o ficheiro de captura de origem (file). As colunas de impressão digital são preenchidas para pedidos de sonda analisados a partir de ficheiros .cap (o ssid está vazio para pedidos de sonda de difusão); as sondas analisadas a partir de CSV/netxml deixam-nas vazias. A tabela utiliza uma combinação do endereço MAC do cliente e do nome da rede como chave primária e tem uma relação de chave estrangeira com a tabela Client.
Handshake: Esta tabela armazena informações sobre os handshakes capturados durante as capturas, incluindo o endereço MAC do ponto de acesso (bssid), do cliente (mac), o nome do ficheiro (file) e o formato hashcat (hashcat). A tabela utiliza uma combinação dos endereços MAC do ponto de acesso e do cliente, e do nome do ficheiro como chave primária, e tem relações de chave estrangeira com as tabelas AP e Client.
Identity: Esta tabela representa identidades e métodos EAP (Extensible Authentication Protocol) utilizados na autenticação sem fio. Os campos bssid e mac são chaves estrangeiras que referenciam as tabelas AP e Client, respetivamente. Outros campos incluem a identity e o method utilizados no processo de autenticação, e o realm (a parte após @ numa identidade user@realm, útil para as identidades externas anónimas vistas em PEAP/TTLS).
Certificate: Esta tabela armazena os certificados X.509 trocados em autenticações empresariais (WPA-Enterprise / 802.1X) EAP-TLS/PEAP/TTLS, tanto o certificado do servidor enviado pelo ponto de acesso como o certificado do cliente enviado pelo supplicant. Cada linha está associada ao ponto de acesso através do campo bssid (uma chave estrangeira que referencia a tabela AP) e ao cliente através do campo mac; o campo cert_type indica de quem é o certificado (AP, Client ou Unknown quando a direção EAP não pode ser determinada). Também guarda o ficheiro de captura de origem (file). A tabela armazena todos os campos relevantes do certificado: a posição na cadeia de certificados (cert_index), version, serial_number, signature_algorithm, nomes distintos completos de issuer e subject, datas de validade (not_before, not_after), os componentes de subject (subject_cn, subject_o, subject_ou) e issuer (issuer_cn, issuer_o, issuer_ou) discriminados, o public_key_algorithm, public_key_size, public_key_curve (EC) e public_key_exponent (RSA), e as impressões digitais sha1_fingerprint e sha256_fingerprint. Também extrai as extensões X.509 mais relevantes: Subject Alternative Names (subject_alt_names), key_usage, ext_key_usage, Basic Constraints (is_ca, path_length), uma flag self_signed, os Authority e Subject Key Identifiers (authority_key_id, subject_key_id), URLs CRL e OCSP (crl_urls, ocsp_urls) e o tempo de vida do certificado em dias (validity_days). A tabela utiliza a combinação de bssid e sha256_fingerprint como chave primária.
EAPMD5: Esta tabela armazena pares desafio/resposta EAP-MD5 capturados de autenticações empresariais. O EAP-MD5 transmite um desafio estilo CHAP e uma resposta MD5 em texto claro (fora de qualquer túnel TLS), pelo que o par pode ser intercetado e quebrado offline (hashcat -m 4800 ou eapmd5pass) para recuperar a palavra-passe. Cada linha regista as chaves estrangeiras bssid (AP) e mac (cliente), a identity, o identificador EAP (eap_id) que liga o pedido e a resposta, o challenge, a response, uma linha hashcat pronta a usar e o ficheiro de origem (file). Utiliza a combinação de bssid, mac e eap_id como chave primária.
HandshakeAP: Esta view seleciona o BSSID do ponto de acesso, o SSID do ponto de acesso, o endereço MAC do dispositivo cliente que realizou o handshake, o fabricante do dispositivo cliente, o ficheiro que contém o handshake e a saída hashcat. Junta as tabelas Handshake, AP e Client pelos BSSID e endereço MAC, respetivamente, e ordena os resultados por BSSID.
HandshakeAPUnique: Esta view seleciona o BSSID do ponto de acesso, o SSID do ponto de acesso, o endereço MAC do dispositivo cliente que realizou o handshake, o fabricante do dispositivo cliente, o ficheiro que contém o handshake e a saída hashcat. Junta as tabelas Handshake, AP e Client pelos BSSID e endereço MAC, respetivamente, e filtra os resultados para excluir handshakes que não foram quebrados pelo hashcat. Os resultados são agrupados por SSID e ordenados por BSSID.
IdentityAP: Esta view seleciona o BSSID do ponto de acesso, o SSID do ponto de acesso, o endereço MAC do dispositivo cliente que realizou o pedido de identidade, o fabricante do dispositivo cliente, a string de identidade e o método utilizado para o pedido de identidade. Junta as tabelas Identity, AP e Client pelos BSSID e endereço MAC, respetivamente, e ordena os resultados por BSSID.
CertificateAP: Esta view seleciona o BSSID e SSID do ponto de acesso juntamente com o tipo de certificado (cert_type), os nomes comuns do subject e issuer, o subject e issuer completos, as datas de validade, o algoritmo e tamanho da chave pública, a flag self_signed e a sha256_fingerprint. Junta as tabelas Certificate e AP pelo BSSID e ordena os resultados por BSSID.
SecurityAP: Esta view seleciona o BSSID e SSID do ponto de acesso juntamente com a wpa_version, os akm_suites, as pairwise_ciphers, a group_cipher, a flag enterprise e as colunas de proteção de quadros de gestão (mfpc, mfpr). Lê estas colunas diretamente da tabela AP (limitada aos APs que têm detalhes de segurança) e ordena os resultados por BSSID.
CapabilitiesAP: Esta view seleciona o BSSID e SSID do ponto de acesso juntamente com as suas capacidades de gestão 802.11 (ft_80211r, mobility_domain_id, rrm_80211k, bss_transition_80211v, mbssid, max_bssid_indicator, csa, csa_new_channel). Lê estas colunas diretamente da tabela AP, limitada aos APs que anunciam pelo menos uma delas, e ordena os resultados por BSSID.
SummaryAP: Esta view resume os pontos de acesso agrupados por SSID e encriptação, de modo que o mesmo SSID com definições de segurança diferentes aparece como linhas separadas (útil para detetar configurações mistas ou rebaixadas). Para cada grupo seleciona o SSID, a contagem de pontos de acesso distintos (APs count), o tipo de encriptação, a versão WPA (wpa_version) e o estado de proteção de quadros de gestão (pmf), todos os fabricantes vistos no grupo (manuf, separados por vírgulas), se o SSID está oculto e a contagem de clientes ligados distintos (Clients count). Exclui APs sem encriptação registada e ordena os resultados pela contagem de APs em ordem decrescente.
Obter palavras-passe HTTP POST
Consultas DNS