ปกป้อง AVR แฟลชจากการอ่านผ่าน ISP?


15

ฉันพยายามป้องกันทั้งแฟลชจากการอ่านผ่าน ISP มันมี bootloader สามารถโปรแกรมส่วนตนเอง

การตั้งค่าล็อคไบต์เป็น:

LB1/LB2 จะไม่อนุญาตให้ผู้ใช้ใช้ bootloader เพื่ออัปโหลดเฟิร์มแวร์ใหม่

BLB12/BLB11และBLB01&BLB02จะไม่ป้องกันการอ่านแฟลชผ่าน ISP หากฉันไม่ผิด

ดังนั้นจึงไม่มีวิธีให้ผู้ใช้อัปเดตเฟิร์มแวร์โดย bootloader ที่กำหนดเองและป้องกันแฟลชจากการอ่านในเวลาเดียวกันได้หรือไม่

คำตอบ:


18

คุณไม่ได้ระบุชิปสิ่งต่อไปนี้ส่วนใหญ่จะใช้กับอุปกรณ์ 8 บิต atmega แต่เป็นข้อมูลทั่วไป อ่านส่วน 'การเขียนโปรแกรมหน่วยความจำ' สำหรับแผ่นข้อมูลเฉพาะชิปของคุณสำหรับข้อมูลเฉพาะเพิ่มเติม!

อย่างที่ได้กล่าวไปแล้วและอย่างที่คุณพูดอุปกรณ์ AVR ทั้งหมดมีบิตล็อคสองอันชื่อ LB1 และ LB2 การเขียนโปรแกรมเหล่านี้ (ถึง 0, ต่ำ) จะเพิ่มการป้องกันเนื้อหาที่เขียนลงในหน่วยความจำ Flash และ EEPROM ตามตารางด้านล่าง ระดับการป้องกันแบ่งออกเป็นสามโหมดโดยที่โหมด 1 ไม่มีการป้องกันและโหมด 3 ให้การปกป้องสูงสุด เป็นไปได้ที่จะย้ายไปที่โหมดการป้องกันที่สูงขึ้นโดยการตั้งโปรแกรมบิตล็อคใหม่

AVR อนุญาตให้เปลี่ยนบิต "สูง" เป็น "ต่ำ" แต่ไม่ใช่วิธีอื่น ๆ ไม่สามารถเปลี่ยนบิตล็อค "ต่ำ" เป็น "สูง" ดังนั้นจึงไม่สามารถลดระดับการป้องกันได้ ในการล้างบิตล็อคต้องใช้การลบชิปอย่างสมบูรณ์ซึ่งจะลบหน่วยความจำแฟลช

ตารางบิตล็อค AVR

2 บิตล็อคเพียงอย่างเดียว (LB1 และ LB2) เมื่อต่ำจะป้องกันไม่ให้ 99.9% ของคนขโมยเฟิร์มแวร์ของคุณ! อาจมากกว่า 99.9% มันจะง่ายกว่าในการทำ reverse รหัสของคุณ

ดังนั้นจึงไม่มีวิธีให้ผู้ใช้อัปเดตเฟิร์มแวร์โดย bootloader ที่กำหนดเองและป้องกันแฟลชจากการอ่านในเวลาเดียวกันได้หรือไม่

ด้วยความรู้ที่ดีที่สุดของฉัน (ฉันอาจเข้าใจผิด แต่ฉันคิดว่าฉันมีปัญหากับเรื่องนี้มาก่อน) บนอุปกรณ์ที่มีฟิวส์ป้องกัน bootloader (BLB12 และ BLB11) คุณสามารถล็อคส่วนbootloader ที่กำหนดเองปิด SPI และ การป้องกันจาก 97-98% ของผู้คน

อย่างไรก็ตามเมื่อไม่มีการตั้งโปรแกรมบิตการล็อคจึงไม่มีการเปิดใช้งานคุณสมบัติการล็อคหน่วยความจำ !!! ISP ปิดใช้งานนั้นเพียงพอที่จะบล็อกคนได้ 70%

สำหรับข้อมูลเพิ่มเติมบางส่วนบิตล็อคและฟิวส์ไม่ได้อยู่ในแฟลชปกติหรือพื้นที่ EEPROM และไม่สามารถเข้าถึงได้จากซอฟต์แวร์ยกเว้นล็อคบิตที่เกี่ยวข้องกับ Boot Loader ในอุปกรณ์ที่มีคุณสมบัติการเขียนโปรแกรมด้วยตนเอง ตารางที่ 2 ในบันทึกย่อของแอปนี้จะช่วยคุณระบุสิ่งที่คุณสามารถทำได้สำหรับอุปกรณ์เฉพาะของคุณ!

สาย AVR ของ Atmel ไม่ใช่อุปกรณ์ความปลอดภัยสูง (เว้นแต่จะมีการระบุไว้อย่างชัดเจน!) ดังนั้นจึงไม่มีการรับประกันความปลอดภัยของรหัสใด ๆ เลยและไม่ควรใช้! เช่นเดียวกับอุปกรณ์ที่ไม่ปลอดภัยทั้งหมด (และน่าเศร้าแม้กระทั่งอุปกรณ์ที่ปลอดภัยบางอย่าง) พวกเขามีแนวโน้มที่จะถูกโจมตีโดยทั่วไป!


แก้ไข

ฉันจะใส่ส่วนหัวของอินเตอร์เฟสโปรแกรมมิงบนโปรแกรม HV ไว้ แต่ใครบางคนสามารถใช้โปรแกรม HV เพื่ออ่านแฟลชได้? ฉันรู้ว่าโปรแกรมเมอร์ HV สามารถลบชิปได้แม้ ISP / Jtag จะถูกปิดการใช้งาน

ฉันไม่คิดว่าคุณควรรวมโปรแกรมเมอร์ HV ไว้ในการออกแบบบอร์ดของคุณเว้นแต่จะจำเป็นจริงๆและคุณรู้แน่นอนว่ามันจะไม่ทำให้เกิดปัญหาอะไร โปรแกรมของ HV (12 โวลต์สัญญาณ) มีให้เฉพาะในส่วนของมาตรการความปลอดภัยในการล็อคโปรแกรม (ข้อผิดพลาดล็อคส่วนใหญ่) ชิป ในทฤษฎีนี้เป็นเพียงหมายถึงการเขียนโปรแกรมอุปกรณ์ไม่อ่านอะไร และฉันไม่เคยได้ยินเกี่ยวกับการหาประโยชน์ที่จะอนุญาตให้อ่าน

สำหรับการอัพเกรด bootloader (บางครั้ง) ฉันจะวางส่วนหัวของอินเตอร์เฟสโปรแกรมมิงบน HV แต่ใครบางคนสามารถใช้โปรแกรม HV เพื่ออ่านแฟลชได้? ฉันรู้ว่าโปรแกรมเมอร์ HV สามารถลบชิปได้แม้ ISP / Jtag จะถูกปิดการใช้งาน

ฉันคิดว่าอาจมีวิธีอัปเดตแฟลชที่ล็อคผ่าน bootloader (สิ่งที่ต้องทำกับธงเขียนภายในและ / หรือ ISR อาจ ???) แต่ฉันจะต้องค้นหาบันทึกย่อของฉันและอาจต้องทดสอบ ฉันไม่สามารถทำเช่นนี้ได้ประมาณ 20 ชั่วโมง ดังนั้นฉันขอแนะนำให้ถามคำถามใหม่ที่เน้นเฉพาะเรื่องนี้และสำหรับโปรเซสเซอร์ที่คุณพูดถึง มันเป็นคำถามที่ดีมาก !


+1 สำหรับความคิดเห็นล่าสุดหากสิ่งอื่นใดล้มเหลวเจ้าหมอก็สามารถกำจัดชิปและติดมันเรา debugger AVR / โปรแกรมเมอร์เพื่อรีเซ็ตบิตล็อคและการรักษาความปลอดภัยของคุณหายไป
helloworld922

@ Garrett Fogerlie: ไม่แน่ใจว่าสิ่งที่ทำให้คุณคิดว่าฉันกำลังพยายามที่จะขโมยรหัสโปรดแจ้งให้เราทราบและฉันจะแก้ไขคำถามของฉันเพื่อให้คนอื่นจะไม่คิดแบบเดียวกัน ฉันพยายามที่จะให้การป้องกันรหัสของตัวเองน้อยที่สุด bootloader ของฉันเอง อย่างไรก็ตามมีคำถามเพิ่มเติมอีกสองข้อเกี่ยวกับเรื่องนี้ ชิปคือ ATMega328 คิดว่าครอบครัวจะมีการใช้งานบิตล็อกทั่วไป คุณได้อธิบายLB1และLB2ที่ฉันยังอธิบายในคำถามของฉันเป็นตัวเลือกที่ จำกัด ในการใช้ bootloader เพื่อวัตถุประสงค์ในการอัพเกรด ดังนั้นจึงไม่ใช่ตัวเลือก สำหรับBLB12และBLB11- นั่นคือสิ่งที่ฉันไม่เข้าใจ (จะดำเนินการต่อ)
Pablo

การตั้งค่าบิตเหล่านั้นจะไม่ป้องกันใครให้อ่านแฟลช (application + bootloader) จากภายนอก จากแผ่นข้อมูลปรากฏว่าบิตเหล่านั้นเพิ่งจะบล็อกคำสั่ง LPM / SPM แต่โปรแกรมเมอร์อนุกรมไม่ได้ใช้มัน สำหรับการปิดการใช้งานการเขียนโปรแกรมแบบอนุกรมและ jtag นี่เป็นอีกคำถามที่ยิ่งใหญ่สำหรับฉัน สำหรับการอัพเกรด bootloader (บางครั้ง) ฉันจะวางส่วนหัวของอินเตอร์เฟสโปรแกรมมิงบน HV ไว้ แต่ใครบางคนสามารถใช้โปรแกรม HV เพื่ออ่านแฟลชได้? ฉันรู้ว่าโปรแกรมเมอร์ HV สามารถลบชิปได้แม้ ISP / Jtag จะถูกปิดการใช้งาน
Pablo

@pablo ขอโทษฉันหมายถึงไม่มีความผิด เมื่อฉันเห็นคำถามของคุณครั้งแรกความคิดเรื่องการโจรกรรมไม่ได้เกิดขึ้นกับฉัน และฉันเขียนคำตอบที่เน้นการดึงรหัสล็อค อย่างไรก็ตามฉันทำงานและก่อนส่งคำตอบนั้นฉันมีเวลาหยุดประมาณ 2 ชั่วโมง เมื่อฉันกลับมาฉันสังเกตว่ายังไม่มีคำตอบ & รู้สึกประหลาดใจเล็กน้อยเมื่ออ่านคำถามของคุณอีกครั้งฉันคิดว่า 'การขโมย' อาจเป็นสาเหตุ ไม่ใช่ความผิดของคุณเลยตอนนี้ฉันได้ลบข้อจำกัดความรับผิดชอบ จำเป็นต้องใช้โมเดลตัวประมวลผลเนื่องจากความแตกต่างที่แสดงในตารางนั้น & เนื่องจากมี AVR ของ
8/16/32

1
rett Garrett Fogerlie: ฉันไม่ได้ตั้งใจจะวางโปรแกรมเมอร์ HV ไว้บนหัวแค่หัว :) แต่ฉันคิดว่ามันไม่จำเป็นเพราะล็อคบิตทำงานและในกรณีที่ฉันสามารถใช้ส่วนหัว ISP เพื่อลบชิปและเขียนแฟลชทั้งหมดบนอุปกรณ์ ดังนั้นเพื่อสรุปคำตอบสำหรับคำถามเดิมของฉัน - การตั้งค่า LB1 และ LB2 จะป้องกันไม่ให้ใครก็ตามอ่านพื้นที่แฟลชทั้งหมดและในเวลาเดียวกันจะไม่ป้องกันฉันจากการเขียนหน่วยความจำของโปรแกรมผ่าน bootloader
Pablo

3

คุณสามารถใช้บิตล็อคในอุปกรณ์ ATMega บางเครื่องและยังคงอัพเดตรหัสของคุณด้วย bootloader

ฉันตั้งโปรแกรม LB1 และ LB2 บน ATMega 328 จากนั้นเรียกใช้ bootloader อัปเดตโปรแกรมหลัก - ทำงานได้อย่างสมบูรณ์

ISP ไม่สามารถอ่านหรือเขียนแฟลช / eeprom / ฟิวส์ แต่ bootloader ยังสามารถเขียนส่วนแอปพลิเคชันได้

การลบชิปกับ ISP จะล้างบิตล็อค (LB1 และ LB2) แต่จะลบแฟลช / eeprom ทั้งหมดดังนั้นคุณอาจปกป้องรหัสของคุณ (แต่คุณต้องมั่นใจว่า bootloader ของคุณจะไม่ถูกแฮ็ก)


3
สิ่งนี้จะปรับปรุงได้อย่างไรเมื่อได้รับคำตอบที่ได้รับในปัจจุบัน
Ignacio Vazquez-Abrams

โปรดทราบว่าตราบใดที่คุณมีถิ่นที่อยู่ bootloader สไตล์ Arduino มาตรฐานการล็อคการอ่านกลับจะไม่มีประโยชน์เพราะตัว bootloader นั้นมีความสามารถในการอ่านข้อมูลเว้นแต่ว่าคุณจะใช้โหมด 328P-only ขั้นสูงที่จะปิดการใช้งาน bootloader LPM มิฉะนั้นคุณจะต้องแก้ไข bootloader เพื่อลบสิ่งนั้นโดยที่ไม่สามารถตรวจสอบการเขียนโปรแกรมได้อีกต่อไป (คุณอาจจะสร้างกลไกการตรวจสอบที่แตกต่างกัน แต่มันจะไม่ได้มาตรฐานต้องให้คุณยังแก้ไข / เปลี่ยน avrdude)
คริสแตรทตัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.