AVR flaşı ISS aracılığıyla okumaktan korumak mı?


15

Tüm flaşı ISS aracılığıyla okumaktan korumaya çalışıyorum. Uygulama bölümünü kendi kendine programlayabilen bootloader'a sahiptir.

Kilit baytını:

LB1/LB2 kullanıcının yeni bellenim yüklemek için bootloader kullanmasına izin vermez.

BLB12/BLB11ve BLB01&BLB02eğer yanılmıyorsam, ISS üzerinden flaş okumayı engellemez.

Bu nedenle, kullanıcının özel önyükleyici ile ürün yazılımını güncellemesine ve aynı zamanda flaşı okumadan korumasına izin vermenin bir yolu yok mu?

Yanıtlar:


18

Bir çip belirtmediniz, aşağıdakiler çoğunlukla 8 bitlik atmega cihazlarına yöneliktir, ancak genel bilgilerdir. Daha ayrıntılı bilgi için özel çipin veri sayfası için 'Bellek Programlama' bölümünü okuyun!

Bununla birlikte, söylediğiniz gibi, tüm AVR cihazları LB1 ve LB2 adlı iki Kilit biti içerir. Bunları (0'a, düşük) programlamak, aşağıdaki tabloya göre Flash ve EEPROM belleklerine yazılan içeriğe koruma sağlayacaktır. Koruma seviyesi, mod 1'in koruma sağlamadığı ve mod 3'ün maksimum koruma sağladığı üç moda ayrılmıştır. Sadece Kilit bitlerini yeniden programlayarak daha yüksek bir koruma moduna geçmek mümkündür.

AVR, "yüksek" bitlerin "düşük" olarak değiştirilmesine izin verir, ancak bunun tersi olmaz. "Düşük" bir Kilit bitini "yüksek" olarak değiştirmek mümkün değildir, bu nedenle koruma seviyesini düşürmek mümkün değildir. Kilit bitlerini temizlemek için, Flash belleği silen tam bir Yonga Silme gereklidir.

AVR kilit bit tablosu

Bu 2 kilit biti tek başına (LB1 ve LB2) düşük olduğunda insanların% 99,9'unun ürün yazılımınızı çalmasını önler! Muhtemelen% 99,9'dan fazla. Kodunuzu tersine çevirmek neredeyse her zaman daha kolay olurdu.

Bu nedenle, kullanıcının özel önyükleyici ile ürün yazılımını güncellemesine ve aynı zamanda flaşı okumadan korumasına izin vermenin bir yolu yok mu?

Bildiğim kadarıyla (yanılmış olabilirim, ancak daha önce bununla ilgili bir sorunum olurdu,) bootloader koruma sigortalarına (BLB12 ve BLB11) sahip cihazlarda , özel bootloader'ınızı kilitleyebilirsiniz bölümünüzü , SPI'yı devre dışı bırakabilir ve insanların% 97-98'inden korundu.

Ancak hiçbir Kilit biti programlanmadığında, bellek kilidi özelliği etkin değildir !!! ISS devre dışı bırakma, insanların yalnızca% 70'ini engellemek için yeterlidir.

Bazı ek bilgiler için, Kilit bitleri ve Sigortalar normal flaş veya EEPROM alanında bulunmaz ve Otomatik Programlama özelliğine sahip cihazlarda Önyükleme Yükleyicisiyle ilgili Kilit bitleri hariç, yazılımdan erişilemez. Bu uygulama notundaki Tablo 2, cihazınız için neler yapabileceğinizi belirlemenize yardımcı olacaktır!

Atmel'in AVR hattı yüksek güvenlikli cihazlar değildir (açıkça belirtilmedikçe!) Ve bu nedenle kesinlikle herhangi bir kod güvenliği garantisi ile gelmezler, ne de olmalılar! Tüm güvenli olmayan cihazlar (ve ne yazık ki bazı güvenli olanlar gibi) gibi, yaygın saldırılara eğilimlidirler!


Düzenle

YG programlama arayüzü başlığını tekneye koyacağım. Ama birisi flaş OKUMAK için HV programlayıcı kullanabilir? HV programcısının ISS / Jtag devre dışı olsa bile çip silmek yapabileceğini biliyorum.

Kesinlikle ihtiyaç duyulmadıkça HV programlayıcısını tahta tasarımınıza dahil etmeniz gerektiğini düşünmüyorum ve hiçbir şeyle sorun yaratmayacağından emin olabilirsiniz. YG programcıları (12 volt sinyalleri) sadece kilitli (çoğunlukla hata kilitli) yongaları programlamak için bir güvenlik önlemi olarak mevcuttur. Teoride bu sadece cihazın hiçbir şey okumadığını programlamak içindir. Ve okumaya izin verecek bir istismar hiç duymadım.

Bootloader'ı yükseltmek için (bazen) HV programlama arayüzü başlığını gemiye koyacağım. Ama birisi flaş OKUMAK için HV programlayıcı kullanabilir? HV programcısının ISS / Jtag devre dışı olsa bile yonga silme yapabileceğini biliyorum.

Ben bootloader aracılığıyla kilitli flaş güncellemek için bir yol olabilir düşünüyorum , (bir dahili yazma bayrağı ve / veya ISR ile ilgili bir şey belki ???) Ama ben notlarımı aramak ve belki de test etmek zorunda kalacağım. Bunu ~ 20 saat boyunca yapamayacağım; bu yüzden sadece bu konuya ve bahsettiğiniz işlemci için yeni bir soru sormanızı tavsiye ederim . Çok güzel bir soru !


Son yorum için +1, eğer her şey başarısız olursa çipin sadece desolder ve kilit bitlerini sıfırlamak için bize bir AVR hata ayıklayıcı / programcı yapıştırabilir ve güvenliğiniz gitti.
helloworld922

@Garrett Fogerlie: kod çalmaya çalıştığımı düşündüren şeyden emin değilim, lütfen bana bildirin ve diğerleri aynı şekilde düşünmeyecek şekilde sorumu düzeltirim. Kendi kodumu, kendi önyükleyicimi en az düzeyde korumaya çalışıyorum. Her neyse, bunun hakkında birkaç soru daha. Chip ATMega328, ailenin ortak kilit biti kullanımına sahip olacağını düşündü. Ayrıca açıkladım LB1ve LB2sorumu yükseltme amaçlı önyükleyiciyi kullanmak için sınırlama seçeneği olarak açıkladım . Yani bu bir seçenek değil. Gelince BLB12ve BLB11ben anlamıyorum ne olduğunu -. (devam edecek)
Pablo

Bu bitlerin ayarlanması kimsenin flaşı (uygulama + önyükleyici) dışarıdan okumasını engellemez. Veri sayfasından, bu bitlerin sadece LPM / SPM komutlarını engelleyeceği görülüyor, ancak seri programcı bunu kullanmıyor. Seri programlamayı ve jtag'ı devre dışı bırakma konusunda, bu benim için başka bir büyük soru. Bootloader'ı yükseltmek için (bazen) HV programlama arayüzü başlığını gemiye koyacağım. Ama birisi flaş OKUMAK için HV programlayıcı kullanabilir? HV programcısının ISS / Jtag devre dışı olsa bile yonga silme yapabileceğini biliyorum.
Pablo

@pablo, üzgünüm, suç demek istemedim. Sorunuzu ilk gördüğümde hırsızlık fikri bana olmadı; ve ben biraz kilitli kod almaya odaklanmış bir cevap yazdım. Ancak işteydim ve bu cevabı göndermeden önce yaklaşık 2 saat ara verdim. Sonra geri döndüğümde, hala bir cevap olmadığını fark ettim ve biraz şaşırdım, sonra sorunuzu yeniden okuduktan sonra 'hırsızlığın' neden olabileceğini düşündüm. Senin hatan değil, artık feragatnameyi kaldırdım. İşlemci modeline, bu tabloda listelenen farklılıklar nedeniyle ihtiyaç vardı ve
8/16/32

1
FoGarrett Fogerlie: HV programlayıcısını tek başına koymak istemedim, sadece başlık :) Ama kilit bitlerinin çalıştığı ve cihazdaki tüm flaşı çip silmek ve yeniden yazmak için ISP başlığını kullanabileceğim için gerekli olmadığını anladım. Orijinal sorumun cevabını özetlemek gerekirse - LB1 ve LB2'yi ayarlamak, herkesin tüm flaş alanını okumasını engelleyecek ve aynı zamanda program belleğini bootloader aracılığıyla yazmamı engellemeyecek.
Pablo

3

Bazı ATMega cihazlarında kilit bitlerini kullanabilir ve yine de kodunuzu bootloader ile güncelleyebilirsiniz.

Bir ATMega 328'de LB1 ve LB2'yi programladım. Sonra bootloader'ı çalıştırdım, ana programı güncelledim - hepsi mükemmel çalıştı.

ISS, flash / eeprom / sigortaları okuyamaz veya yazamaz, ancak önyükleyici yine de uygulama bölümünü yazabilir.

ISS ile bir Chip Silme, kilit bitlerini (LB1 ve LB2) temizler, ancak aynı zamanda tüm flaş / eepromu da siler, böylece kodunuzu koruyabilirsiniz (ancak önyükleyicinizin saldırıya uğramayacağından emin olmanız gerekir)


3
Şu anda kabul edilen cevapta bu nasıl gelişiyor?
Ignacio Vazquez-Abrams

Standart bir Arduino tarzı önyükleyici yerleşikiniz olduğu sürece, önyükleyicinin LPM'sini uygulama belleğine devre dışı bırakan gelişmiş 328P salt okunur modunu kullanmadığınız sürece önyükleyicinin kendisinin bir geri okuma özelliğine sahip olmasından dolayı geri okuma kilitlemenin neredeyse anlamsız olacağını unutmayın. Aksi takdirde, artık programlamayı doğrulayamama pahasına önyükleyiciyi değiştirmeniz gerekir. (Potansiyel olarak farklı bir doğrulama mekanizması oluşturabilirsiniz, ancak aynı zamanda değişikliği de değiştirmenizi / değiştirmenizi gerektiren standart değildir)
Chris Stratton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.