Depuis quelques annees, l ESP32 s est impose comme la carte de reference pour les projets IoT. Pas cher, Wi-Fi + Bluetooth integre, FreeRTOS natif. Mais d un point de vue securite offensive, le tooling reste quasi inexistant : pas de framework stable, pas de C2 dedie, pas de modules plug-and-play pour la recherche en pentest IoT.
C est le probleme qu on a voulu resoudre avec Espilon Source.
C est quoi Espilon Source ?
Espilon Source est un framework open-source pour deployer des agents embarques sur ESP32, pilotes depuis un serveur C2 centralise. L objectif : avoir une base propre et reproductible pour experimenter la securite IoT sur le terrain - que ce soit pour du pentest autorise, de la recherche ou de la formation.
Le repo est disponible ici : git.espilon.net/Eun0us/espilon-source
La doc complete est sur docs.espilon.net.
Architecture
Le projet se divise en deux parties distinctes :
espilon-source/
+-- espilon_bot/ # Firmware ESP32 (ESP-IDF / FreeRTOS)
| +-- components/
| | +-- core/ # Agent principal, communication C2, crypto
| | +-- mod_system/ # Commandes systeme (toujours actif)
| | +-- mod_network/ # Operations reseau
| | +-- mod_fakeAP/ # Point d acces Wi-Fi factice
| | +-- mod_recon/ # Reconnaissance passive/active
| | +-- mod_redteam/ # Capacites offensives Wi-Fi
| | +-- mod_honeypot/ # Honeypot embarque
| | +-- mod_canbus/ # CAN bus via MCP2515
| | +-- mod_ota/ # Mise a jour firmware OTA
| +-- main/ # Point d entree, init modules
+-- tools/
+-- C3PO/ # Serveur C2 Python
+-- deploy.py # Outil de flash et provisioning
Firmware (espilon_bot)
Le firmware tourne sous ESP-IDF v5.3.2 avec FreeRTOS.
Chaque module est un composant independant : on active uniquement ce dont on a besoin via
menuconfig, ce qui permet de garder un binaire compact selon le scenario.
La communication avec le C2 passe par TCP. Les messages sont serialises en Protobuf et chiffres avec ChaCha20-Poly1305 AEAD + derivation de cle HKDF. Pas de TLS classique - on voulait quelque chose de plus leger et maitrise sur un micro de 520KB de RAM.
L agent supporte deux modes de connectivite :
- Wi-Fi - mode standard, rapide a deployer
- GPRS - via LilyGO T-Call (SIM800), pour des scenarios ou le Wi-Fi est absent ou surveille
Le layout OTA est dual-partition : on peut mettre a jour le firmware a distance sans risque de bricker la carte si la connexion coupe en plein transfert.
Modules disponibles
| Module | Role |
|---|---|
mod_system | Infos systeme, reboot, shell - toujours actif |
mod_network | Scan, ping, sockets raw |
mod_fakeAP | Creation d AP factice pour capturer du trafic |
mod_recon | Scan Wi-Fi passif, probes, RSSI |
mod_redteam | Capacites offensives Wi-Fi (deauth, injection) |
mod_honeypot | Services factices pour attraper des sondes |
mod_canbus | Communication CAN via MCP2515 (vehicules, OT) |
mod_ota | Mise a jour firmware OTA depuis le C2 |
Le serveur C2 : C3PO
C3PO est le cerveau du framework. C est un serveur Python qui gere les connexions des agents, dispatche les commandes et centralise les resultats.
Il expose trois interfaces :
CLI interactive - pour piloter un agent directement depuis le terminal :
[C3PO] > list
ID Name IP Status
0 esp-01 192.168.1.42 CONNECTED
1 esp-02 10.0.0.17 CONNECTED
[C3PO] > use 0
[esp-01] > mod_recon.scan
[esp-01] > mod_fakeAP.start ssid=FreeWifi
TUI multi-agents - une interface Textual qui affiche plusieurs agents en meme temps, utile quand on pilote une flotte sur le terrain.
Dashboard web - interface Flask avec trois sections :
- Vue d ensemble des agents connectes
- Flux cameras (module UDP)
- Page MLAT : positionnement par triangulation RSSI
MLAT - Multilateration RSSI
Un des trucs les plus interessants du projet : le module MLAT. Plusieurs agents ESP32 remontent leurs mesures RSSI d une cible Wi-Fi ou BLE. C3PO fait la triangulation et estime la position de la cible sur une carte. Utile pour localiser un device dans un batiment ou sur un site industriel.
Quick start (sans ESP32)
On peut tester le framework sans materiel grace au mode simule :
# 1. Cloner le repo
git clone https://git.espilon.net/Eun0us/espilon-source.git
cd espilon-source
# 2. Lancer C3PO
cd tools/C3PO
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python3 c3po.py
# 3. Lancer un agent simule (dans un autre terminal)
python3 tools/sim_agent.py
En 5 minutes on a un C2 fonctionnel avec un agent simule qui repond aux commandes. La doc complete du quick start est sur docs.espilon.net.
Cas d usage
Le framework a ete concu pour trois scenarios principaux :
Pentest IoT/OT autorise - deployer un agent sur un reseau cible, faire de la reconnaissance passive, capturer du trafic, tester des protocoles industriels (CAN, Modbus via adaptateur).
Recherche et formation - base modulaire pour experimenter sans partir de zero. Les challenges du CTF Espilon sont directement inspires du framework.
Red team embarque - plusieurs agents coordonnes, pilotage centralise, triangulation RSSI. Le mode GPRS permet des deployements dans des zones sans infrastructure Wi-Fi.
Ce qui vient (v0.4)
La branche en cours de dev ajoute deux nouveaux modules :
- mod_ble - scan BLE, flood, tracking AirTag, spoofing d adresse MAC
- mod_mitm - interception active entre deux noeuds reseau
Un post dedie a ces deux modules suivra une fois la v0.4 stabilisee.
En resume
Espilon Source n est pas un outil cle en main pour faire des choses illicites. C est une base de travail pour comprendre comment un ESP32 peut etre transforme en agent embarque, comment on structure un protocole C2 leger sur du materiel contraint, et comment on attaque ou defend ce type d infrastructure.
Tout est open-source, la doc est la, le code est lisible.
Repo : git.espilon.net/Eun0us/espilon-source Docs : docs.espilon.net