Well Done Technology’de baş tersine mühendis olarak, kısa süre önce kritik altyapı sensörlerine entegre edilmiş STM8S105K6 mikrodenetleyicilerin şifresini kırma projesini yönettim. Bu vaka çalışması, sistem bütünlüğünü korurken bu mikrodenetleyicilerin güvenlik özelliklerini aşmak için izlediğimiz teknik yaklaşımı özetlemektedir.
Giriş
STM8S105K6 (32 KB Flash, 16 MHz 8 bit çekirdek), eski endüstriyel sistemlerde yaygın olarak kullanılan bir cihazdır. Ancak, okuma koruması (Seviye 2) ve özel şifreleme özelliklerinin bir araya gelmesi, müşterimizin sensör ağında plan dışı eskime sorunu ile karşılaştığında önemli engeller oluşturdu. Bu belge, başarılı şifre çözme yöntemimizi ayrıntılı olarak açıklamaktadır.
Çip Özellikleri ve Güvenlik Özellikleri
Temel Parametreler
| Parameter | Value |
|---|---|
| Architecture | STM8S (8 - bit) |
| Memory | 32KB Flash / 2KB SRAM |
| ADC Resolution | 10 - bit |
| Security Levels | Read Protection (Level 2) |
| Encryption | Proprietary XOR Scheme |
Saldırı için Kritik Noktalar
| Pin Location | Pin Details |
|---|---|
| Left Side (Pins 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 |
Güvenlik Analizi
Koruma Mekanizmaları
// Protection configuration
FLASH->CR2 |= FLASH_CR2_LP; // Level 2 protection
FLASH->OPTR |= FLASH_OPTR_RDP; // Read protection enable
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;
}
}
Şifre Çözme Stratejisi
Yazılım Tersine Mühendislik
Hafıza Dökümü Analizi:
# Python script for XOR key detection
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
Donanım Saldırısı Kurulumu
Gerilim Dalgalanması Parametreleri:
// Glitch generation code
void apply_glitch() {
DAC->DHR12R1 = 0x0000; // Initial voltage
delay_us(100);
DAC->DHR12R1 = 0x03FF; // Glitch voltage
delay_us(50);
DAC->DHR12R1 = 0x0000;
}
Vaka Çalışması: Sensör Ağı Kurtarma
Zorluk
- Sistem: STM8S105K6 ile 500'den fazla çevre sensörü
- Sorun: Üretici – güvenlik güncellemelerini engelleyen kilitli ürün yazılımı
- Hedef: Sensör kalibrasyon algoritmalarını kurtarmak
Teknik Uygulama
Anahtar Kurtarma Süreci:
Doğrulama Komut Dosyası:
bool validate_calibration() {
uint16_t checksum = calculate_checksum(calibration_data);
return checksum == *(uint16_t*)(FLASH_BASE + 0x7FFE);
}
Etki Azaltma Stratejileri
Gelişmiş Güvenlik
// Dual - key implementation
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;
}
Süreç İyileştirmeleri
- Firmware güncellemeleri için iki faktörlü kimlik doğrulama
- Çalışma sırasında bellek karıştırma
- 24 saatte bir dinamik anahtar rotasyonu
Sonuç

Baş Mühendis:
Dr. Billy Zheng
Well Done PCB Technology
billy@reversepcb.com
Acil Durum Desteği: +86-157-9847-6858




