Outil Bash pour des contrôles de sécurité Wi-Fi à pied en boucle, avec rapports de preuves.
CyclePatrol est un seul script Bash, cp.sh. C'est un outil d'évaluation de la sécurité Wi-Fi pour le terminal.
Il fonctionne sous Linux et Android (Kali NetHunter). Il nécessite root.
L'outil s'exécute en boucle. À chaque tour, il :
Utilisation autorisée uniquement. CyclePatrol exécute des attaques sans fil actives. Utilisez-le uniquement sur des réseaux que vous possédez ou pour lesquels vous disposez d'une autorisation écrite de test.
Cette documentation est rédigée uniquement à partir du code source. Elle n'explique pas comment attaquer des réseaux. Elle explique comment l'outil est construit, comment les données circulent et où se trouve la logique de sécurité.
| Élément | Valeur | Source |
|---|---|---|
| Nom de l'outil | CyclePatrol | TOOL_NAME |
| Version | 1.3 | VERSION |
| Version SAR / rapport | 1 / 4 | SAR_VERSION / REPORT_VERSION |
| Langage | Bash 5+ | — |
| Privilège | root requis | run_precheck |
| Interface par défaut | wlan2 | DEF_IFACE |
| Répertoire de logs par défaut | /sdcard/Download/wifi | DEF_LOG_DIR |
| Fichiers du dépôt | cp.sh, vendor/oui.json, vendor/vendors.json, README.md, LICENSE | racine du dépôt |
| Tests / CI | aucun dans le dépôt | racine du dépôt |
| Configuration | variables d'environnement + options CLI uniquement | main |
# 1. get the code
git clone https://github.com/buybitart/cyclepatrol
cd cyclepatrol
# 2. make it runnable
chmod +x cp.sh
# 3. start
./cp.sh
Aide et liste complète des options :
./cp.sh --help
flowchart TD
M[main parse CLI] --> AI[auto_install_deps apt]
AI --> PC[run_precheck validate_env root iface tmp dirs allowlists]
PC --> RC{recon mode?}
RC -- "--recon" --> RE[run_recon airodump-ng] --> RPT1[report_recon_*.html] --> END1[exit]
RC -- default --> R0[run_recon once at start]
R0 --> LOOP[run_scan_loop]
LOOP --> MAC[stealth MAC rotate]
MAC --> SCAN[scan_band 2.4 / 5 / 6E via iw scan]
SCAN --> PARSE[parse_scan awk -> targets]
PARSE --> PT[process_target per AP, up to MAX_TARGETS]
PT --> REP[make_report report_*.html]
REP --> SLEEP[sleep COOLDOWN] --> LOOP
Voir docs/architecture.md et docs/data-flow.md pour plus de détails.
| Composant | Fonctions (exemples) | Rôle |
|---|---|---|
| Démarrage / configuration | main, validate_env, run_precheck, auto_install_deps | analyser les options, vérifier root + interface + outils, créer les répertoires temporaires |
| Contrôle de l'interface | ensure_mode, iface_set_type, iface_set_channel, iface_do_scan | mode monitor/managed, canal, scan iw |
| Furtivité | stealth_mac_rotate, stealth_gen_mac, stealth_wps_id_block | MAC aléatoire, UUID WPS aléatoire |
| Scan + analyse | scan_band, parse_scan | collecter la sortie de iw scan, analyser les beacons en champs |
| Enrichissement | get_chip, get_cves, detect_dpp_vulns, recherches dans la base de connaissances des fournisseurs | OUI → fournisseur → chipset, indices CVE, vérifications DPP |
| Contrôle de périmètre | active_attack_permitted, allowlist_init_active | décider si un module actif peut s'exécuter sur un BSSID |
| Modules d'évaluation | attack_pixie, attack_vendor, attack_pmkid, attack_deauth_handshake, attack_wpa_psk_brute, attack_wpa_enterprise_eviltwin | les tests sans fil (encapsulent des outils externes) |
| Craquage hors ligne | offline_crack, _hashcat_22000, _aircrack_cap | craquer les PMKID / handshakes capturés |
| Preuves + sortie | sar_store_record, save_proof, make_report, recon_report | faits JSONL, fichiers de preuve, rapports HTML |
| Localisation | location_fix, location_nmea_feeder | géolocalisation GPS pour le war-driving (Android / gpsd) |
Carte complète des fonctions : docs/project-structure.md.
CyclePatrol est un orchestrateur. Il appelle des outils sans fil Linux standard en tant que sous-processus.
| Outil | Utilisé par | Objectif |
|---|---|---|
iw, ip, nmcli, macchanger | interface + furtivité | scan, mode, canal, MAC |
reaver | attack_pixie, attack_vendor, attack_null, attack_empty, attack_user_pin | échange avec le registraire WPS |
pixiewps | attack_pixie | récupération hors ligne du PIN WPS |
wpa_supplicant, wpa_cli, wpa_passphrase | WPS, verify_psk_live, attack_wpa_psk_brute | association, vérification de clé en direct |
hcxdumptool, hcxpcapngtool | attack_pmkid, attack_pmkid_active | capture PMKID → hashcat 22000 |
tcpdump | eapol_passive_capture | capture EAPOL passive |
airodump-ng, aireplay-ng, mdk4 | attack_deauth_handshake, run_recon | capture, deauth, reconnaissance |
hashcat, aircrack-ng | offline_crack | craquage hors ligne des captures |
eaphammer, hostapd-wpe | attack_wpa_enterprise_eviltwin | capture d'identifiants par evil-twin 802.1X |
dragondrain, dragontime | sae_dos_dragondrain, sae_timing_dragontime | vérifications WPA3 / SAE — fonctions définies mais jamais appelées (code mort), voir docs/security.md O6 |
tshark, airgraph-ng | recon_report | analyse de l'uptime, graphiques |
gpsd, termux-location, gpspipe | localisation | position GPS / étiquetage |
jq | base de connaissances des fournisseurs | recherche JSON (optionnel) |
Détail des modules et contrôle de périmètre : docs/modules.md.
Tout est écrit sous LOG_DIR (par défaut /sdcard/Download/wifi).
Le répertoire est créé avec chmod 700 ; les fichiers de sortie utilisent chmod 600.
| Chemin | Contenu |
|---|---|
sar.jsonl | faits par AP, un objet JSON par ligne |
cp_audit.log | journal d'audit : AP, méthode, résultat |
report_*.html | rapport d'évaluation (constats, sévérité, preuves) |
report_recon_*.html | rapport de reconnaissance passive |
proof/proof_*.conf | preuve d'un constat confirmé : PIN, PSK, SHA-256, vérification en direct |
proof/handshake_*.cap | handshake 4-way capturé |
proof/pmkid_*.22000 | PMKID au format hashcat 22000 |
proof/eapol_*.pcap | capture EAPOL |
known_bssids.txt, processed_bssids.txt | état (ignorer ce qui est déjà fait) |
recon_reported.txt, vuln_reported.txt | état de déduplication des rapports |
Sévérités des rapports : Critical / High / Medium / Low.
États des constats : confirmed / potential / beacon-based / config-based.
Les secrets sont masqués dans le corps du rapport sauf si REVEAL_CREDS=1.
Schéma des champs et modèle de rapport : docs/outputs.md.