Decrittazione del chip STM8S105K6: Tecniche avanzate per il recupero di sistemi legacy

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

ParametroValore
ArchitetturaSTM8S (8-bit)
Memoria32 KB Flash / 2 KB SRAM
Risoluzione ADC10-bit
Livelli di sicurezzaProtezione in lettura (Livello 2)
CrittografiaSchema XOR proprietario

Pin critici per l'attacco

Posizione PinDettagli 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

Protezione in lettura:
				
					// Configurazione della protezione
FLASH->CR2 |= FLASH_CR2_LP; // Protezione di livello 2
FLASH->OPTR |= FLASH_OPTR_RDP; // Abilitazione della protezione in lettura
				
			
Crittografia personalizzata:
				
					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:

Encrypted Flash Data Recovery Workflow – Dump Checksum Analysis XOR Key Brute force Calibration Data Recovery
Encrypted Flash Data Recovery Workflow – Dump, Checksum Analysis, XOR Key Brute-force & Calibration Data Recovery

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

  1. Autenticazione a due fattori per gli aggiornamenti del firmware
  2. Scrambling della memoria durante l’esecuzione
  3. 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

Questo progetto dimostra che attacchi mirati che combinano l’analisi del software e il glitching hardware possono superare anche la sicurezza sofisticata dei microcontrollori a 8 bit. Il firmware recuperato ha permesso al nostro cliente di modernizzare la sua rete di sensori implementando al contempo protocolli di sicurezza all’avanguardia.
 
Per servizi di decrittazione di livello enterprise, contattare:
Billy Zheng Principal Engineer of Well Done PCB Technology

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

Condividi con:

Torna in alto

Instant Quote

Preventivo immediato