Melindungi AVR flash dari membaca melalui ISP?

15

Saya mencoba melindungi seluruh flash dari pembacaan melalui ISP. Memiliki bootloader, dapat memprogram bagian program diri.

Mengatur byte kunci ke:

LB1/LB2 tidak akan membiarkan pengguna menggunakan bootloader untuk mengunggah firmware baru.

BLB12/BLB11dan BLB01&BLB02tidak akan mencegah membaca flash melalui ISP, jika saya tidak salah.

Jadi tidak ada cara untuk membiarkan pengguna memperbarui firmware dengan bootloader kustom dan melindungi flash dari membaca pada saat yang sama?

Pablo
sumber

Jawaban:

18

Anda tidak menentukan chip, berikut ini sebagian besar ditujukan untuk perangkat atmega 8 bit, tetapi ini adalah informasi umum. Baca bagian 'Pemrograman Memori' untuk Anda lembar data chip spesifik untuk informasi lebih spesifik!

Yang sedang berkata, dan seperti yang Anda katakan, semua perangkat AVR berisi dua bit Lock bernama LB1 dan LB2. Pemrograman ini (ke 0, rendah) akan menambah perlindungan pada konten yang ditulis ke memori Flash dan EEPROM sesuai dengan tabel di bawah ini. Tingkat perlindungan dibagi dalam tiga mode, di mana mode 1 tidak menawarkan perlindungan dan mode 3 menawarkan perlindungan maksimum. Dimungkinkan untuk pindah ke mode perlindungan yang lebih tinggi hanya dengan memprogram ulang bit-bit Lock.

AVR memungkinkan pengubahan bit "tinggi" menjadi "rendah", tetapi tidak sebaliknya. Tidak mungkin untuk mengubah bit kunci "rendah" menjadi "tinggi", sehingga menurunkan tingkat perlindungan tidak dimungkinkan. Untuk menghapus bit Lock, diperlukan Chip Erase lengkap, yang menghapus memori Flash.

Tabel bit kunci AVR

Ini 2 bit kunci saja (LB1 dan LB2) ketika rendah akan mencegah 99,9% orang mencuri firmware Anda! Mungkin lebih dari 99,9%. Hampir selalu lebih mudah untuk merekayasa ulang kode Anda.

Jadi tidak ada cara untuk membiarkan pengguna memperbarui firmware dengan bootloader kustom dan melindungi flash dari membaca pada saat yang sama?

Sepengetahuan saya (saya bisa saja salah tapi saya pikir saya akan memiliki masalah dengan ini sebelumnya,) pada perangkat yang memiliki sekering perlindungan bootloader (BLB12 dan BLB11), Anda dapat mengunci bagian bootloader khusus , menonaktifkan SPI dan menjadi dilindungi dari 97-98% orang.

Namun ketika tidak ada bit Kunci yang diprogram, tidak ada fitur kunci memori yang diaktifkan !!! Penonaktifan ISP hanya cukup untuk memblokir 70% orang.

Untuk beberapa informasi tambahan, Bit kunci dan Sekring tidak terletak di flash normal atau ruang EEPROM, juga tidak dapat diakses dari perangkat lunak, kecuali untuk Bit kunci yang terkait dengan Boot Loader di perangkat dengan fitur Pemrograman Mandiri. Tabel 2 dalam catatan aplikasi ini akan membantu Anda mengidentifikasi apa yang dapat Anda lakukan untuk perangkat khusus Anda!

Atmel's AVR line bukan perangkat keamanan tinggi (kecuali secara eksplisit dicatat!) Dan karena itu mereka sama sekali tidak datang dengan jaminan keamanan kode apa pun, begitu pula mereka! Seperti semua perangkat yang tidak aman (dan sayangnya bahkan beberapa yang aman), mereka rentan terhadap serangan umum!


Edit

Saya akan menempatkan header antarmuka pemrograman pemrograman HV. Tetapi bisakah seseorang menggunakan programmer HV untuk membaca flash? Saya tahu programmer HV dapat menghapus chip bahkan ISP / Jtag dinonaktifkan.

Saya tidak berpikir Anda harus memasukkan programmer HV dalam desain papan Anda kecuali benar-benar diperlukan dan Anda tahu pasti itu tidak akan menyebabkan masalah dengan apa pun. (12 volt,) pemrogram HV hanya tersedia sebagai alat pengaman untuk memprogram chip yang terkunci (kesalahan terkunci, sebagian besar). Secara teori ini hanya dimaksudkan untuk memprogram perangkat tidak membaca apa pun. Dan saya belum pernah mendengar tentang eksploitasi yang memungkinkan membaca.

Untuk meningkatkan bootloader (kadang-kadang) saya akan menempatkan header antarmuka pemrograman pemrograman HV. Tetapi bisakah seseorang menggunakan programmer HV untuk membaca flash? Saya tahu programmer HV dapat menghapus chip bahkan ISP / Jtag dinonaktifkan.

Saya pikir mungkin ada cara untuk memperbarui flash yang dikunci melalui bootloader, (ada hubungannya dengan flag tulis internal dan / atau ISR mungkin ???) Tapi saya harus mencari catatan saya dan mungkin harus mengujinya. Saya tidak akan bisa melakukan ini selama ~ 20 jam; jadi saya sangat menyarankan mengajukan pertanyaan baru yang hanya berfokus pada ini dan untuk prosesor yang Anda sebutkan. Itu pertanyaan yang sangat bagus !

Garrett Fogerlie
sumber
+1 untuk komentar terakhir, jika semuanya gagal, lelaki mana pun dapat dengan mudah memasang chip dan menempelkannya pada kami AVR debugger / programmer untuk mereset bit kunci dan keamanan Anda semua hilang.
helloworld922
@ Garrett Fogerlie: tidak yakin apa yang membuat Anda berpikir saya mencoba mencuri kode, tolong beritahu saya dan saya akan memperbaiki pertanyaan saya sehingga orang lain tidak akan berpikir dengan cara yang sama. Saya mencoba memberikan perlindungan minimal terhadap kode saya sendiri, bootloader saya sendiri. Bagaimanapun, beberapa pertanyaan lagi tentang ini. Chip adalah ATMega328, mengira keluarga akan memiliki penggunaan bit kunci umum. Anda telah menjelaskan LB1dan LB2, yang juga saya jelaskan dalam pertanyaan saya sebagai opsi membatasi untuk menggunakan bootloader untuk tujuan peningkatan. Jadi itu bukan pilihan. Adapun BLB12dan BLB11- itulah yang saya tidak mengerti. (Bersambung)
Pablo
Mengatur bit-bit itu TIDAK akan mencegah siapa pun untuk membaca flash (aplikasi + bootloader) dari luar. Dari datasheet tampak bahwa bit-bit itu hanya akan memblokir perintah LPM / SPM, tetapi programmer serial tidak menggunakannya. Adapun Menonaktifkan pemrograman serial dan jtag, ini adalah pertanyaan besar bagi saya. Untuk meningkatkan bootloader (kadang-kadang) saya akan menempatkan header antarmuka pemrograman pemrograman HV. Tetapi bisakah seseorang menggunakan programmer HV untuk membaca flash? Saya tahu programmer HV dapat menghapus chip bahkan ISP / Jtag dinonaktifkan.
Pablo
@ Pedro, maaf, maksudku tidak tersinggung. Ketika saya pertama kali melihat pertanyaan Anda, gagasan pencurian itu tidak terjadi pada saya; dan saya menulis jawaban yang agak terfokus pada pengambilan kode yang dikunci. Namun saya sedang bekerja dan sebelum mengirimkan jawaban itu saya memiliki jeda ~ 2 jam. Kemudian ketika saya kembali, saya perhatikan masih belum ada jawaban & sedikit terkejut, kemudian setelah membaca kembali pertanyaan Anda, saya pikir 'pencurian' mungkin menjadi alasannya. Sama sekali bukan kesalahan Anda, saya sekarang telah menghapus disclaimer. Model prosesor diperlukan karena perbedaan yang tercantum dalam tabel itu & karena ada AVR
8/16
1
ъGarrett Fogerlie: Saya tidak bermaksud menempatkan programmer HV ke atas, hanya sundulan :) Tapi saya tahu itu tidak perlu karena kunci bit bekerja dan kalau-kalau saya bisa menggunakan header ISP untuk menghapus dan menulis ulang seluruh flash pada perangkat. Jadi, untuk meringkas jawaban atas pertanyaan awal saya - pengaturan LB1 dan LB2 akan mencegah siapa pun membaca seluruh area flash DAN pada saat yang sama tidak akan mencegah saya menulis memori program melalui bootloader.
Pablo
3

Anda dapat menggunakan bit kunci pada beberapa perangkat ATMega dan masih memperbarui kode Anda dengan bootloader.

Saya memprogram LB1 dan LB2 pada ATMega 328. Kemudian memanggil bootloader, memperbarui program utama - semuanya bekerja dengan sempurna.

ISP tidak dapat membaca atau menulis flash / eeprom / sekering apa pun tetapi bootloader masih dapat menulis bagian aplikasi.

Penghapusan Chip dengan ISP akan menghapus bit kunci (LB1 dan LB2), tetapi juga menghapus seluruh flash / eeprom, sehingga Anda dapat melindungi kode Anda (namun Anda harus memastikan bootloader Anda tidak dapat diretas)

Gandalf
sumber
3
Bagaimana hal ini meningkatkan jawaban yang saat ini diterima?
Ignacio Vazquez-Abrams
Perhatikan bahwa selama Anda memiliki resident bootloader gaya Arduino standar, mengunci readback akan hampir tidak ada gunanya karena bootloader itu sendiri memiliki kemampuan readback kecuali jika Anda menggunakan mode lanjutan 328P saja yang menonaktifkan LPM bootloader ke memori aplikasi. Kalau tidak, Anda perlu memodifikasi bootloader untuk menghapusnya, dengan biaya tidak lagi dapat memverifikasi pemrograman. (Anda berpotensi membuat mekanisme verifikasi yang berbeda, tetapi itu akan menjadi non-standar yang mengharuskan Anda untuk juga memodifikasi / mengganti avrdude)
Chris Stratton