Perlindungan firmware pada AVR dan pengontrol PIC

23

Dapatkah seseorang mengekstrak file HEX yang saya bakar di mikrokontroler yang saya berikan?

Jika itu mungkin, bagaimana seseorang dapat memastikan bahwa kode mereka diamankan di sistem embedded? Dalam kasus mikrokontroler PIC dan AVR, bagaimana cara melindungi firmware dari reproduksi?

Rookie91
sumber
1
Dalam kasus # 1 Anda sepertinya menyarankan agar Anda memberikan file hex ke klien Anda, dalam hal itu mereka hanya dapat menulisnya ke beberapa perangkat klon, tidak perlu mendekompilasi kode yang sebenarnya meskipun mungkin. Dalam kasus perangkat terkunci (# 2), biasanya masalah seberapa ditentukan mereka untuk mendapatkan kode (dengan kata lain berapa banyak mereka siap untuk menghabiskan), tetapi biasanya mungkin.
alexan_e
1
dulu dua tahun, tetapi perlindungan hari ini cenderung dikalahkan dalam satu atau dua hari rata-rata untuk perangkat populer. pada dasarnya begitu seseorang telah memutuskan itu layak dilakukan. Jika Anda benar-benar menginginkan keamanan, Anda perlu masuk ke bisnis chip, Anda tidak akan mendapatkannya dengan bagian komersial yang sudah ada.
old_timer

Jawaban:

33

Sebagian besar pengontrol mikro hari ini memiliki bagian atau metode khusus pabrikan untuk melindungi kode firmware tertanam. Ini umumnya dilakukan dengan mengunci sirkuit yang biasanya memungkinkan memori kode untuk dibacakan. (Anda harus mencari perincian khusus bagian dalam lembar data atau di situs web produsen dalam catatan aplikasi yang berlaku).

Setelah dikunci tidak mungkin membaca kode memori menggunakan teknik normal. Ini memberikan tingkat perlindungan yang wajar untuk mencegah sebagian besar peretas dari melihat kode mesin untuk aplikasi tertanam Anda.

Banyak perangkat MCU saat ini memiliki memori FLASH terpasang untuk memasukkan kode program. Program yang sebelumnya disimpan dan dilindungi disimpan dalam FLASH biasanya dapat diganti dengan kode baru tetapi dibutuhkan operasi FLASH menghapus chip penuh untuk membuka kunci mekanisme perlindungan. Setelah terhapus, bagian akan beroperasi seperti sebelum kunci pengaman asli. Jika suatu program baru dimuat, biasanya dimungkinkan untuk mengunci kembali bagian tersebut untuk melindungi kode mesin yang baru dimuat.

Setiap diskusi tentang perlindungan kode dalam mikrokontroler tidak akan lengkap tanpa menyebutkan bahwa biasanya tidak ada jaminan bahwa skema perlindungan apa pun yang ditawarkan oleh produsen komponen adalah bukti bodoh. Produsen bahkan akan menyatakan bahwa sistem perlindungan bukan 100% bukti bodoh. Salah satu alasan untuk ini adalah bahwa ada seluruh industri pasar gelap terjadi di mana, dengan bayaran, peretas yang rajin akan membacakan kode dari bagian yang dilindungi untuk siapa saja yang ingin membayar. Mereka telah menyusun berbagai skema yang memungkinkan kode untuk dibaca dari ROM atau FLASH pada pengontrol mikro yang dilindungi. Beberapa skema ini sangat pintar tetapi bekerja untuk kesuksesan yang lebih baik pada beberapa keluarga bagian daripada yang lain. Jadi waspadai fakta ini maka Anda mencoba melindungi program Anda dari mencongkel mata.

Setelah seseorang memegang gambar biner dari kode mesin yang telah dibacakan mikrokontroler, apakah itu mikrokontroler yang dilindungi atau tidak, mereka dapat memproses kode mesin melalui alat yang disebut disassembler. Ini akan mengubah data biner kembali menjadi kode bahasa rakitan yang dapat dipelajari untuk mencoba mempelajari bagaimana algoritme program Anda bekerja. Melakukan pembongkaran kode mesin secara akurat adalah pekerjaan yang melelahkan dan membutuhkan banyak pekerjaan. Pada akhirnya proses tersebut dapat menyebabkan kode assembler seperti yang saya jelaskan. Jika program Anda ditulis dalam bahasa tingkat tinggi seperti C, C ++ atau Basic, kode assembly hanya akan mewakili hasil kompilasi dan tertaut dari program Anda. Secara umum tidak mungkin untuk membalikkan kode yang dicuri sepanjang perjalanan kembali ke tingkat bahasa tingkat tinggi.

Apa artinya ini sebenarnya ada manfaat untuk menulis firmware aplikasi tertanam Anda dalam bahasa tingkat tinggi. Ini memberikan lapisan lain yang membuat program Anda lebih sulit untuk direkayasa ulang secara penuh. Manfaat yang lebih besar dapat diperoleh dengan menggunakan teknologi tercanggih dalam mengoptimalkan kompiler untuk mengkompilasi aplikasi yang disematkan karena optimalisasi kinerja tertinggi dapat benar-benar mengubah program menjadi mangkuk spaghetti besar penuh dengan lusinan panggilan ke subrutin pendek yang sangat sulit menguraikan dalam disassembler.

Pengembang tertanam yang paling berpengalaman akan meminta Anda untuk terus maju dan menggunakan skema perlindungan apa pun yang ditawarkan pada MCU di aplikasi Anda .... tetapi tidak bergantung pada ujung jalan untuk produk Anda. Mereka akan memberi tahu Anda bahwa cara terbaik untuk tetap terdepan dalam persaingan adalah dengan terus-menerus meningkatkan produk Anda sehingga versi lama sudah ketinggalan zaman dan tidak menarik pada saat peretas mungkin telah mengkloning kode Anda. Ubah kode sekitar, tambahkan fitur baru, putar papan PC Anda dari waktu ke waktu untuk menukar semua I / Os Anda dan hal-hal lain yang mungkin Anda pikirkan. Dengan cara ini Anda dapat memenangkan balapan setiap saat.

Michael Karas
sumber
Terima kasih banyak @Michael Karas Itu jawaban yang lengkap
Rookie91
12

Saya pikir jawaban Michael sudah cukup untuk pertanyaan ini, tetapi saya menambahkan kedua tautan ini: Meretas PIC 18F1320 dan Segala yang mereka buat, Kita bisa hancurkan! Keduanya sangat menarik bagi saya.

Roh
sumber
EE yang rajin harus mempelajari tautan terakhir, dan meneliti / membandingkan / memilih perangkat yang hilang dari daftar. Kompleksitas selalu lebih jera - seperti menambahkan DS3641 atau ATSHA204 . Meskipun tidak ada keamanan tambahan yang 100% tidak bisa dipecahkan, kompleksitas tambahan bisa membuatnya tidak bermanfaat.
rdtsc