การป้องกันเฟิร์มแวร์บนตัวควบคุม AVR และ PIC


23

บางคนสามารถแตกไฟล์ HEX ที่ฉันเขียนในไมโครคอนโทรลเลอร์ที่ฉันให้มาได้หรือไม่

หากเป็นไปได้ผู้อื่นจะมั่นใจได้อย่างไรว่ารหัสของพวกเขาปลอดภัยในระบบฝังตัว ในกรณีของไมโครคอนโทรลเลอร์ PIC และ AVR เราจะป้องกันเฟิร์มแวร์ของตนจากการทำซ้ำได้อย่างไร?



1
ในกรณีที่ # 1 คุณดูเหมือนจะแนะนำให้คุณจัดเตรียมไฟล์ hex ให้กับลูกค้าของคุณในกรณีนั้นพวกเขาสามารถเขียนมันไปยังอุปกรณ์โคลนหลาย ๆ เครื่องโดยไม่จำเป็นต้องถอดรหัสรหัสแม้ว่าจะเป็นไปได้ก็ตาม ในกรณีของอุปกรณ์ที่ถูกล็อค (# 2) มักจะเป็นเรื่องของการพิจารณาว่าพวกเขาจะได้รับรหัส (ในคำอื่น ๆ ว่าพวกเขาพร้อมที่จะใช้จ่าย) แต่มักจะเป็นไปได้
alexan_e

1
มันเคยเป็นเวลาสองปี แต่การปกป้องวันนี้มีแนวโน้มที่จะพ่ายแพ้ในหนึ่งหรือสองวันโดยเฉลี่ยสำหรับอุปกรณ์ที่นิยม โดยทั่วไปเมื่อมีคนตัดสินใจว่ามันคุ้มค่าที่จะทำ หากคุณต้องการความปลอดภัยอย่างแท้จริงที่คุณต้องการเพื่อเข้าสู่ธุรกิจชิปคุณจะไม่ได้รับความช่วยเหลือใด ๆ จากชิ้นส่วนเชิงพาณิชย์
old_timer

คำตอบ:


33

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

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

อุปกรณ์ MCU จำนวนมากในปัจจุบันมีหน่วยความจำ FLASH ออนบอร์ดเพื่อทดสอบรหัสโปรแกรม โปรแกรมที่จัดเก็บและป้องกันไว้ก่อนหน้านี้ที่เก็บไว้ใน FLASH สามารถแทนที่ด้วยรหัสใหม่ได้ แต่ต้องใช้การลบชิปเต็มรูปแบบ FLASH เพื่อปลดล็อคกลไกการป้องกัน เมื่อลบส่วนจะทำงานเหมือนเดิมก่อนล็อคป้องกันดั้งเดิม หากมีการโหลดโปรแกรมใหม่โดยทั่วไปจะสามารถล็อคชิ้นส่วนใหม่ได้เพื่อป้องกันรหัสเครื่องที่เพิ่งโหลดใหม่

การสนทนาใด ๆ ของการป้องกันรหัสในไมโครคอนโทรลเลอร์จะไม่สมบูรณ์หากไม่มีการกล่าวถึงว่าโดยปกติจะไม่รับประกันว่ารูปแบบการป้องกันใด ๆ ที่เสนอโดยผู้ผลิตชิ้นส่วนนั้นเป็นสิ่งที่พิสูจน์ได้ ผู้ผลิตจะระบุว่าระบบการป้องกันไม่ได้พิสูจน์คนโง่ 100% หนึ่งในเหตุผลสำหรับเรื่องนี้คือมีอุตสาหกรรมตลาดมืดทั้งที่เกิดขึ้นที่ค่าธรรมเนียมแฮกเกอร์ขยันจะอ่านรหัสจากส่วนที่มีการป้องกันสำหรับทุกคนที่ต้องการจ่าย พวกเขาได้วางแผนรูปแบบต่าง ๆ ที่อนุญาตให้โค้ดอ่านจาก ROMs หรือแฟลชบนตัวควบคุมไมโครที่ได้รับการป้องกัน บางส่วนของรูปแบบเหล่านี้มีความฉลาดอย่างไม่น่าเชื่อ แต่ทำงานเพื่อความสำเร็จที่ดีขึ้นในครอบครัวบางส่วนกว่าคนอื่น ๆ ดังนั้นให้ตระหนักถึงความจริงข้อนี้แล้วคุณพยายามป้องกันโปรแกรมของคุณจากการสอดรู้สอดเห็น

เมื่อใครบางคนมีมือของพวกเขาในภาพไบนารีของรหัสเครื่องที่อ่านจากไมโครคอนโทรลเลอร์ไม่ว่าจะเป็นไมโครคอนโทรลเลอร์ที่ได้รับการป้องกันหรือไม่พวกเขาสามารถประมวลผลรหัสเครื่องผ่านเครื่องมือที่เรียกว่า disassembler สิ่งนี้จะเปลี่ยนข้อมูลไบนารี่กลับไปเป็นรหัสภาษาแอสเซมบลีที่สามารถศึกษาได้เพื่อลองเรียนรู้วิธีอัลกอริทึมของโปรแกรมของคุณทำงาน การถอดแยกชิ้นส่วนรหัสเครื่องอย่างแม่นยำเป็นงานที่ต้องใช้ความพยายามอย่างมาก ในที่สุดกระบวนการสามารถนำไปสู่รหัสแอสเซมเบลอร์เช่นที่ฉันอธิบาย หากโปรแกรมของคุณเขียนด้วยภาษาระดับสูงเช่น C, C ++ หรือ Basic รหัสแอสเซมบลีจะแสดงผลลัพธ์ที่คอมไพล์และเชื่อมโยงของโปรแกรมของคุณเท่านั้น โดยทั่วไปแล้วจะไม่สามารถทำการย้อนรหัสวิศวกรที่ถูกขโมยกลับไปเป็นภาษาระดับสูงได้

สิ่งนี้หมายความว่ามีประโยชน์ในการเขียนเฟิร์มแวร์แอพพลิเคชั่นของคุณเป็นภาษาระดับสูง มันเป็นอีกเลเยอร์ที่ทำให้โปรแกรมของคุณถูกออกแบบวิศวกรรมย้อนกลับได้ยากขึ้น ประโยชน์ที่ยิ่งใหญ่กว่านั้นคือการใช้ประโยชน์สูงสุดจากการปรับแต่งคอมไพเลอร์เพื่อคอมไพล์แอปพลิเคชั่นแบบฝังเนื่องจากตัวเพิ่มประสิทธิภาพประสิทธิภาพสูงสุดสามารถเปลี่ยนโปรแกรมให้กลายเป็นชามสปาเก็ตตี้ขนาดใหญ่ เพื่อถอดรหัสใน disassembler

นักพัฒนาสมองกลฝังตัวที่มีประสบการณ์ส่วนใหญ่จะบอกให้คุณก้าวไปข้างหน้าและใช้รูปแบบการป้องกันใด ๆ ที่มีให้บน MCU ในแอปพลิเคชันของคุณ .... แต่ไม่ต้องพึ่งพามันจนสุดถนนสำหรับผลิตภัณฑ์ของคุณ พวกเขาจะบอกคุณว่าวิธีที่ดีที่สุดที่จะอยู่ข้างหน้าของการแข่งขันคือการอัพเกรดผลิตภัณฑ์ของคุณอย่างต่อเนื่องเพื่อให้เวอร์ชันเก่าล้าสมัยและไม่น่าสนใจในเวลาที่แฮ็กเกอร์อาจโคลนรหัสของคุณ เปลี่ยนรหัสไปมาเพิ่มคุณสมบัติใหม่หมุนบอร์ด PC ของคุณเป็นครั้งคราวเพื่อสลับ I / O ทั้งหมดของคุณไปรอบ ๆ และสิ่งอื่น ๆ ที่คุณอาจนึกถึง วิธีนี้คุณสามารถชนะการแข่งขันได้ทุกครั้ง


ขอบคุณมาก @Michael Karas นั่นเป็นคำตอบที่สมบูรณ์
Rookie91

12

ฉันคิดว่าคำตอบของ Michael นั้นเพียงพอสำหรับคำถามนี้ แต่ฉันเพิ่มลิงก์เหล่านี้ทั้งสอง: แฮ็ค PIC 18F1320และทุกสิ่งที่พวกเขาทำเราสามารถแตก! สิ่งเหล่านี้น่าสนใจมากสำหรับฉัน


EE ที่ขยันควรศึกษาลิงค์สุดท้ายและทำการวิจัย / เปรียบเทียบ / เลือกอุปกรณ์ที่หายไปจากรายการ ความซับซ้อนอยู่เสมอยับยั้งมากขึ้น - เช่นการเพิ่มDS3641หรือATSHA204 แม้ว่าจะไม่มีการรักษาความปลอดภัยเพิ่มเติมใด ๆ จะไม่สามารถแตกหักได้ 100% แต่ความซับซ้อนที่เพิ่มเข้ามาอาจไม่คุ้มค่า
rdtsc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.