In qualità di lead reverse engineer presso Well Done Technology, ho recentemente guidato una missione per decrittare i microcontrollori STM8S105K6 integrati in sensori di infrastrutture critiche. Questo case study delinea il nostro approccio tecnico per aggirare le sue funzionalità di sicurezza mantenendo l’integrità del sistema.
Introduzione
L’STM8S105K6 (32KB Flash, 16MHz 8 – bit core) è un cavallo di battaglia nei sistemi industriali legacy. Tuttavia, la sua combinazione di protezione in lettura (Livello 2) e crittografia personalizzata ha posto ostacoli significativi quando il nostro cliente si è trovato di fronte all’obsolescenza imprevista della sua rete di sensori. Questo documento illustra in dettaglio la nostra metodologia di decrittazione di successo.
Specifiche del chip e funzionalità di sicurezza
Parametri chiave
| Parametro | Valore |
|---|---|
| Architettura | STM8S (8-bit) |
| Memoria | 32 KB Flash / 2 KB SRAM |
| Risoluzione ADC | 10-bit |
| Livelli di sicurezza | Protezione in lettura (Livello 2) |
| Crittografia | Schema XOR proprietario |
Pin critici per l'attacco
| Posizione Pin | Dettagli Pin |
|---|---|
| Lato sinistro (Pin 1 - 20) | 1 - PC7 • 2 - PC8 • 3 - PC9 • 4 - PC10 • 5 - PC11 6 - BOOT1 • 7 - PH3 • 8 - PH2 • 9 - VDD • 10 - VSS 11 - PA0 • 12 - PA1 • 13 - PA2 • 14 - PC3 • 15 - PC2 16 - PC1 • 17 - PC0 • 18 - NRST • 19 - PH1 • 20 - PH0 |
Analisi della sicurezza
Meccanismi di protezione
// Configurazione della protezione
FLASH->CR2 |= FLASH_CR2_LP; // Protezione di livello 2
FLASH->OPTR |= FLASH_OPTR_RDP; // Abilitazione della protezione in lettura
void encrypt_data(uint8_t *data, uint16_t len) {
uint8_t key = get_hardware_id();
for(int i = 0; i < len; i++) {
data[i] ^= key;
}
}
Strategia di decrittazione
Reverse engineering del software
Analisi dello scarico di memoria:
# Script Python per l'individuazione della chiave XOR
def find_xor_key(encrypted_data):
for key_candidate in range(256):
decrypted = bytes([b ^ key_candidate for b in encrypted_data])
if b'INIT' in decrypted:
return key_candidate
return None
Configurazione dell'attacco hardware
Parametri di glitching della tensione:
// Codice per la generazione del glitch
void apply_glitch() {
DAC->DHR12R1 = 0x0000; // Tensione iniziale
delay_us(100);
DAC->DHR12R1 = 0x03FF; // Tensione del glitch
delay_us(50);
DAC->DHR12R1 = 0x0000;
}
Case Study: Recupero della rete di sensori
Sfida
- Sistema: 500+ sensori ambientali con STM8S105K6
- Problema: Firmware bloccato dal produttore che impedisce gli aggiornamenti di sicurezza
- Obiettivo: Recuperare gli algoritmi di calibrazione dei sensori
Esecuzione tecnica
Flusso di recupero della chiave:
Script di convalida:
bool validate_calibration() {
uint16_t checksum = calculate_checksum(calibration_data);
return checksum == *(uint16_t*)(FLASH_BASE + 0x7FFE);
}
Strategie di mitigazione
Sicurezza avanzata
// Implementazione a doppia chiave
void secure_keygen() {
uint8_t temp = ADC1->DR;
uint16_t rtc = RTC->CNTH << 16 | RTC->CNTL;
session_key = crc16((uint8_t*)&rtc, sizeof(rtc)) ^ temp;
}
Miglioramenti del processo
- Autenticazione a due fattori per gli aggiornamenti del firmware
- Scrambling della memoria durante l’esecuzione
- Rotazione dinamica della chiave ogni 24 ore
Nota Pratiche: lista di controllo del design MCU per decrittazione del chip STM8S105K6: tecniche avanzate per il ripristino del sistema legacy
USARE QUESTA NOTA PRIMA DI APPLICARE LE INFORMAZIONI IN UN PROGETTO REALE.
Controlli
- Confronta l’intervallo di fornitura, il conteggio GPIO, i timer, le risorse ADC/DAC, le interfacce di comunicazione, la dimensione del pacchetto e il supporto della toolchain prima di selezionare l’MCU.
- Mantieni l’accesso SWD, JTAG, UART o Bootloader disponibile per la programmazione di produzione, il ripristino del firmware e l’analisi dei guasti.
- Posizionare i condensatori di disaccoppiamento vicino a ogni pin di alimentazione, mantenere brevi le tracce di cristallo ed evitare di instradare bus digitali rumorosi vicino a riferimenti analogici o nodi oscillatori.
Conclusione

Ingegnere principale:
Dr. Billy Zheng
Well Done PCB Technology
billy@reversepcb.com
Supporto di emergenza: +86-157-9847-6858




