Décryptage de la puce STM8S105K6 : techniques avancées pour la récupération de systèmes hérités

En tant qu'ingénieur en chef en rétro-ingénierie chez Well Done Technology, j'ai récemment mené une mission visant à décrypter les microcontrôleurs STM8S105K6 intégrés dans les capteurs d'infrastructures critiques. Cette étude de cas décrit notre approche technique pour contourner ses fonctionnalités de sécurité tout en préservant l'intégrité du système.

Introduction

Le STM8S105K6 (32 Ko de mémoire Flash, cœur 8 bits à 16 MHz) est un pilier des systèmes industriels traditionnels. Cependant, sa combinaison de protection en lecture (niveau 2) et de cryptage personnalisé a posé des obstacles importants lorsque notre client a été confronté à l'obsolescence imprévue de son réseau de capteurs. Ce document détaille notre méthodologie de décryptage réussie.

Spécifications de la puce et caractéristiques de sécurité

Paramètres clés

ParamètreValeur
ArchitectureSTM8S (8 bits)
Mémoire32 Ko Flash / 2 Ko SRAM
Résolution ADC10 bits
Niveaux de sécuritéProtection en lecture (Niveau 2)
ChiffrementSchéma XOR propriétaire

Pins critiques pour l'attaque

Emplacement des brochesDétails des broches
Côté gauche (Broches 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

Analyse de sécurité

Mécanismes de protection

Protection en lecture :
				
					// Configuration de la protection
FLASH->CR2 |= FLASH_CR2_LP; // Protection de niveau 2
FLASH->OPTR |= FLASH_OPTR_RDP; // Activation de la protection en lecture
				
			
Chiffrement personnalisé :
				
					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;
    }
}
				
			

Stratégie de décryptage

Rétro-ingénierie logicielle

Analyse du vidage mémoire :

				
					# Script Python pour la détection de clé 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
				
			

Configuration de l'attaque matérielle

Paramètres de glitching de tension :

				
					// Code de génération de glitch
void apply_glitch() { 
DAC->DHR12R1 = 0x0000 ; // Tension initiale 
delay_us(100); 
DAC->DHR12R1 = 0x03FF ; // Tension de problème 
delay_us(50); 
DAC->DHR12R1 = 0x0000 ;
}
				
			

Étude de cas : Récupération d'un réseau de capteurs

Défi

  • Système : plus de 500 capteurs environnementaux avec STM8S105K6
  • Problème : fabricant – micrologiciel verrouillé empêchant les mises à jour de sécurité
  • Objectif : récupérer les algorithmes d'étalonnage des capteurs

Exécution technique

Processus de récupération des clés :

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 de validation :

				
					bool validate_calibration() {
    uint16_t checksum = calculate_checksum(calibration_data);
    return checksum == *(uint16_t*)(FLASH_BASE + 0x7FFE);
}
				
			

Stratégies d'atténuation

Sécurité renforcée

				
					// Implémentation à double clé
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;
}
				
			

Améliorations des processus

  1. Authentification à deux facteurs pour les mises à jour du micrologiciel
  2. Brouillage de la mémoire pendant l'exécution
  3. Rotation dynamique des clés toutes les 24 heures

Notes pratiques : Liste de contrôle de la conception MCU pour le décryptage de la puce STM8S105K6 : techniques avancées de récupération du système hérité

UTILISEZ CES NOTES AVANT D APPLIQUER LES INFORMATIONS DANS UNE CONCEPTION REELLE.

Points de vérification

  • Comparez la plage d’approvisionnement, le nombre de GPIO, les temporisateurs, les ressources ADC/DAC, les interfaces de communication, la taille du package et la prise en charge de la chaîne d’outils avant de sélectionner le MCU.
  • Gardez l’accès SWD, JTAG, UART ou Bootloader disponible pour la programmation de production, la récupération du micrologiciel et l’analyse des pannes.
  • Placez les condensateurs de découplage à proximité de chaque broche d’alimentation, gardez les traces de cristal courtes et évitez d’acheminer des bus numériques bruyants à proximité de références analogiques ou de nœuds d’oscillateur.

Conclusion

Ce projet démontre que des attaques ciblées combinant analyse logicielle et défaillance matérielle peuvent contourner même les systèmes de sécurité sophistiqués des microcontrôleurs 8 bits. Le micrologiciel récupéré a permis à notre client de moderniser son réseau de capteurs tout en mettant en œuvre des protocoles de sécurité de pointe.
 
Pour des services de décryptage au niveau de l'entreprise, veuillez contacter :
Billy Zheng Principal Engineer of Well Done PCB Technology

Ingénieur principal :
Dr Billy Zheng
Well Done PCB Technology
billy@reversepcb.com Assistance
d'urgence : +86-157-9847-6858

Part à:

Retour en haut

Instant Quote

Devis Immédiat