| name | iot-glitching |
| title | Glitching / Fault Injection — Voltage, Clock, EM |
| description | Guide complet pour les attaques par injection de fautes (fault injection) sur les dispositifs IoT : glitching de tension (VCC), glitching d'horloge (clock), injection électromagnétique (EM). Couvre les équipements (ChipWhisperer, CW-Lite, PicoScope), les techniques de déclenchement, l'effet sur les Secure Boot, et la récupération de clés cryptographiques. |
| category | cybersecurite |
Glitching / Fault Injection — Voltage, Clock, EM
Vue d'Ensemble
Le glitching (injection de fautes) consiste à perturber intentionnellement le fonctionnement normal d'un microcontrôleur pour contourner ses protections. En injectant des anomalies très courtes (ns-µs) sur l'alimentation, l'horloge ou via un champ EM, on peut corrompre une instruction, sauter une vérification de sécurité, ou révéler des données protégées.
Objectifs
- Contourner Secure Boot (sauter la vérification de signature)
- Bypasser les protections de lecture flash (RDP, OTP)
- Extraire des clés cryptographiques (AES, RSA lors de l'exécution)
- Forcer le passage dans un état non autorisé (debug mode)
- Révéler des chemins de code cachés (fault-based test)
Types de Glitching
Voltage Glitching (VCC Glitch)
Principe : baisser la tension d'alimentation très brièvement pendant une opération sensible.
VCC normal ────┬───┬───┬───┬───┬───
│ │ │ │ │
Glitch ────────┘ └───┘ └───┘
↓ VCC
(nanosecondes)
Équipement :
- ChipWhisperer (CW1173, CW-Lite, CW-Pro)
- MOSFET + FPGA (glitch custom)
- PicoScope + AWG (générateur de signaux)
- Raspberry Pi Pico + transistor (DIY approach)
Clock Glitching
Principe : injecter une impulsion d'horloge supplémentaire (ou sauter un cycle) pour corrompre le pipeline CPU.
Horloge normale ──┬──┬──┬──┬──┬──┬──┬──┬──
│ │ │ │ │ │ │ │ │
Glitch ───────────┘ └──┘ └──┘ └──┘
↑ cycle supplémentaire
Équipement :
- ChipWhisperer CWLite (clock glitch natif)
- FPGA avec PLL (phase-locked loop)
- Signal generator avec modulation de phase
EM Glitching (Electromagnetic Fault Injection)
Principe : générer une impulsion EM puissante à un endroit précis du die pour corrompre une instruction.
Équipement :
- EM probe (coil cuivre + ferrite core)
- Pulse generator (HV, 500V+)
- XYZ table de positionnement micrométrique
- ChipShouter / EM-FI (NewAE)
- Oscilloscope haute vitesse (1GS/s+)
Outils Essentiels
Kits Professionnels
| Kit | Prix | Capacités |
|---|
| ChipWhisperer Lite (CW1173) | ~$300 | Voltage + clock glitch, 4x trigger, 20ns |
| ChipWhisperer Pro (CW1200) | ~$3000 | + EM, side-channel, 4 voies, 1GS/s |
| ChipShouter (NewAE) | ~$800 | EM pulse, 500V, portable |
| Riscure Inspector | ~$50k | Pro, full automation, AI-assisted |
| Lecroy/PicoScope | ~$500+ | Scope + AWG combo |
DIY / Low Cost
| Composant | Usage |
|---|
| Raspberry Pi Pico + FET | Voltage glitch simple (10-100ns) |
| Arduino Due + MOSFET | Clock glitch, 84MHz |
| AD9833 + DDS | Clock generation + glitch |
| IRF520 / IRFZ44N | MOSFET pour voltage glitch |
| Coil EM | 5-10 tours fil 0.2mm sur ferrite |
| Flyback transformer | HV pulse pour EM (dangereux) |
Logiciels
| Outil | Usage |
|---|
ChipWhisperer (Python) | Framework complet, capture + glitch + side-channel |
Jupyter Notebook | Analyse des résultats, sweep automation |
PulseView / sigrok | Trigger timing, mesure précise |
PicoScope SDK | Automatisation PicoScope pour glitch |
OpenADC | Capture analogique (ChipWhisperer) |
Méthodologie
Phase 1 : Setup et Calibration
ChipWhisperer Lite Setup
pip install chipwhisperer
import chipwhisperer as cw
scope = cw.scope()
scope.gain.gain = 25
scope.adc.samples = 1000
scope.adc.offset = 0
scope.adc.basic_mode = "rising_edge"
scope.glitch.clk_src = "clkgen"
scope.glitch.repeat = 5
scope.glitch.width = 20
scope.glitch.offset = 100
scope.glitch.ext_offset = 0
scope.glitch.output = "clock_xor"
Calibration du Trigger
Phase 2 : Recherche de Paramètres (Sweep)
for offset in range(0, 1000, 10):
for width in range(5, 50, 5):
scope.glitch.offset = offset
scope.glitch.width = width
scope.io.pio = 'low'
time.sleep(0.1)
scope.io.pio = 'high'
Phase 3 : Bypass de Secure Boot
Phase 4 : Analyse des Résultats
import matplotlib.pyplot as plt
plt.scatter(offsets, widths, c=results)
plt.xlabel('Offset (ns)')
plt.ylabel('Width (ns)')
plt.colorbar(label='Result: 0=reset, 1=hang, 2=success')
Techniques Avancées
EM Glitch sur Boîtier (Through Package)
Double Glitch (Voltage + Clock)
scope.glitch.clk_src = "clkgen"
scope.glitch.output = "clock_xor"
Glitch sur Boucle de Vérification
scope.glitch.repeat = 100
scope.glitch.repeat_step = 20
Contournement de RDP (STM32 Read Protection)
Pièges & ASTUCES
⚠️ Le glitch est destructeur : trop large ou trop puissant, il peut endommager le device (latent damage, parfois non visible immédiatement)
⚠️ Répétabilité : le même paramètre ne donne pas toujours le même résultat. Les variations de température, d'alimentation, de vieillissement du composant influencent
⚠️ Trigger manquant : sans trigger précis, le glitch est aléatoire. Utiliser un GPIO, une pin de test, ou un signal UART
⚠️ Protection du régulateur : certains SoCs ont des régulateurs internes qui filtrent les glitchs VCC. Contournement : glitcher AVANT le régulateur (sur l'alimentation brute)
⚠️ Bypass partiel : parfois le device boot mais le firmware est corrompu → il peut planter après quelques secondes
⚠️ ChipWhisperer isolation : ne pas connecter la masse du CW à une alim secteur (risque de destruction du CW)
⚠️ EM Glitch et équipements : les impulsions EM haute puissance peuvent interférer avec les oscilloscopes et PC à proximité
⚠️ Fréquence de glitch : trop de glitches par seconde → le device chauffe, la timing change (drift thermique)
Check-list de Calibration
Références