Bảo vệ flash AVR khỏi đọc qua ISP?


15

Tôi đang cố gắng bảo vệ toàn bộ đèn flash khỏi việc đọc qua ISP. Nó có bootloader, có thể tự lập trình phần ứng dụng.

Đặt byte khóa thành:

LB1/LB2 sẽ không cho phép người dùng sử dụng bộ tải khởi động để tải lên phần sụn mới.

BLB12/BLB11BLB01&BLB02sẽ không ngăn việc đọc flash qua ISP, nếu tôi không nhầm.

Vì vậy, không có cách nào để cho phép người dùng cập nhật chương trình cơ sở bằng bộ tải khởi động tùy chỉnh và bảo vệ flash khỏi việc đọc cùng một lúc?

Câu trả lời:


18

Bạn đã không chỉ định chip, phần sau đây chủ yếu hướng đến các thiết bị atmega 8 bit, nhưng đó là thông tin chung. Đọc phần 'Lập trình bộ nhớ' để biết bảng dữ liệu của chip cụ thể để biết thêm thông tin cụ thể!

Điều đó đang được nói, và như bạn đã nói, tất cả các thiết bị AVR đều chứa hai bit Khóa có tên LB1 và ​​LB2. Lập trình những cái này (về 0, thấp) sẽ thêm bảo vệ cho nội dung được ghi vào bộ nhớ Flash và EEPROM theo bảng bên dưới. Mức độ bảo vệ được chia thành ba chế độ, trong đó chế độ 1 không bảo vệ và chế độ 3 cung cấp bảo vệ tối đa. Có thể chuyển sang chế độ bảo vệ cao hơn chỉ bằng cách lập trình lại các bit Khóa.

AVR cho phép thay đổi các bit "cao" thành "thấp", nhưng không phải là cách khác. Không thể thay đổi bit Khóa "thấp" thành "cao", do đó việc giảm mức độ bảo vệ là không thể. Để xóa các bit Khóa, cần phải xóa Chip hoàn chỉnh, xóa bộ nhớ Flash.

Bảng bit khóa AVR

Chỉ riêng 2 bit khóa (LB1 và ​​LB2) khi thấp sẽ ngăn 99,9% mọi người ăn cắp phần sụn của bạn! Có lẽ hơn 99,9%. Hầu như luôn luôn dễ dàng hơn để thiết kế mã của bạn.

Vì vậy, không có cách nào để cho phép người dùng cập nhật chương trình cơ sở bằng bộ tải khởi động tùy chỉnh và bảo vệ flash khỏi việc đọc cùng một lúc?

Theo hiểu biết tốt nhất của tôi (tôi có thể nhầm lẫn nhưng tôi nghĩ rằng tôi đã có vấn đề với điều này trước đây), trên các thiết bị có cầu chì bảo vệ bộ nạp khởi động (BLB12 và BLB11), bạn có thể khóa bộ tải khởi động tùy chỉnh của mình phần , tắt SPI và được bảo vệ từ 97-98% người dân.

Tuy nhiên, khi không có bit Lock nào được lập trình, không có tính năng khóa bộ nhớ nào được bật !!!Vô hiệu hóa ISP chỉ đủ để chặn 70% mọi người.

Đối với một số thông tin bổ sung, các bit Khóa và Cầu chì không nằm trong không gian flash hoặc EEPROM thông thường, cũng không thể truy cập được từ phần mềm, ngoại trừ các bit Khóa liên quan đến Trình tải khởi động trong các thiết bị có tính năng Tự lập trình. Bảng 2 trong ghi chú ứng dụng này sẽ giúp bạn xác định những gì bạn có thể làm cho thiết bị cụ thể của mình!

Dòng AVR của Atmel không phải là thiết bị bảo mật cao (trừ khi được ghi chú rõ ràng!) Và như vậy chúng hoàn toàn không đi kèm với bất kỳ đảm bảo an toàn mã nào, cũng không nên! Giống như tất cả các thiết bị không bảo mật (và đáng buồn là ngay cả một số thiết bị an toàn), chúng dễ bị tấn công phổ biến!


Biên tập

Tôi sẽ đặt tiêu đề giao diện lập trình HV trên tàu. Nhưng ai đó có thể sử dụng lập trình viên HV để đọc flash? Tôi biết lập trình viên HV có thể xóa chip ngay cả ISP / Jtag bị vô hiệu hóa.

Tôi không nghĩ bạn nên đưa lập trình viên HV vào thiết kế bảng của mình trừ khi thực sự cần thiết và bạn biết chắc chắn nó sẽ không gây ra vấn đề gì. Lập trình viên HV (tín hiệu 12 volt,) chỉ khả dụng như một biện pháp an toàn cho các chương trình bị khóa (hầu hết bị khóa). Về lý thuyết, điều này chỉ có nghĩa là lập trình cho thiết bị không đọc bất cứ thứ gì. Và tôi chưa bao giờ nghe nói về một khai thác sẽ cho phép đọc.

Để nâng cấp bootloader (thỉnh thoảng) tôi sẽ đặt tiêu đề giao diện lập trình HV trên bo mạch. Nhưng ai đó có thể sử dụng lập trình viên HV để đọc flash? Tôi biết lập trình viên HV có thể xóa chip ngay cả ISP / Jtag bị vô hiệu hóa.

Tôi nghĩ rằng có thể có một cách để cập nhật flash bị khóa thông qua bootloader, (có thể làm gì đó với cờ ghi nội bộ và / hoặc ISR có thể ???) Nhưng tôi sẽ phải tìm kiếm ghi chú của mình và có thể phải kiểm tra nó. Tôi sẽ không thể làm điều này trong ~ 20 giờ; Vì vậy, tôi khuyên bạn nên hỏi một câu hỏi mới chỉ tập trung vào vấn đề này và cho bộ xử lý mà bạn đã đề cập. Đó là một câu hỏi rất hay !


+1 cho nhận xét cuối cùng, nếu tất cả các lỗi khác, bất kỳ bloke nào cũng có thể giải mã chip và gắn cho chúng tôi trình gỡ lỗi / lập trình AVR để thiết lập lại các bit khóa và bảo mật của bạn đã biến mất.
hellowworld922

@Garrett Fogerlie: không chắc điều gì khiến bạn nghĩ rằng tôi đang cố lấy cắp mã, xin vui lòng cho tôi biết và tôi sẽ sửa câu hỏi của mình để người khác không nghĩ giống như vậy. Tôi đang cố gắng bảo vệ tối thiểu mã của riêng tôi, bộ tải khởi động của riêng tôi. Dù sao, vài câu hỏi thêm về điều này. Chip là ATMega328, nghĩ rằng gia đình sẽ có cách sử dụng bit khóa phổ biến. Bạn đã giải thích LB1LB2, điều mà tôi cũng mô tả trong câu hỏi của mình là tùy chọn giới hạn sử dụng bộ nạp khởi động cho mục đích nâng cấp. Vì vậy, nó không phải là một lựa chọn. Đối với BLB12BLB11- đó là những gì tôi không hiểu. (sẽ được tiếp tục)
Pablo

Đặt các bit đó sẽ KHÔNG ngăn ai đọc flash (application + bootloader) từ bên ngoài. Từ biểu dữ liệu, có vẻ như các bit đó sẽ chỉ chặn các lệnh LPM / SPM, nhưng lập trình viên nối tiếp không sử dụng nó. Đối với việc vô hiệu hóa lập trình nối tiếp và jtag, đây là một câu hỏi lớn đối với tôi. Để nâng cấp bootloader (thỉnh thoảng) tôi sẽ đặt tiêu đề giao diện lập trình HV trên bo mạch. Nhưng ai đó có thể sử dụng lập trình viên HV để đọc flash? Tôi biết lập trình viên HV có thể xóa chip ngay cả ISP / Jtag bị vô hiệu hóa.
Pablo

@pablo, xin lỗi, ý tôi không có ý xúc phạm. Khi tôi lần đầu tiên nhìn thấy câu hỏi của bạn, ý tưởng trộm cắp đã không xảy ra với tôi; và tôi đã viết một câu trả lời có phần tập trung vào việc lấy mã bị khóa. Tuy nhiên tôi đang ở nơi làm việc và trước khi gửi câu trả lời đó, tôi đã tạm dừng ~ 2 giờ. Sau đó, khi tôi trở lại, tôi nhận thấy vẫn không có câu trả lời và hơi ngạc nhiên, sau khi đọc lại câu hỏi của bạn, tôi nghĩ rằng 'trộm cắp' có thể là lý do tại sao. Không phải lỗi của bạn, bây giờ tôi đã loại bỏ từ chối trách nhiệm. Mô hình bộ xử lý là cần thiết vì sự khác biệt được liệt kê trong bảng đó & bởi vì có
8/16

1
ъGarrett Fogerlie: Tôi không có ý định đưa lập trình viên HV lên, chỉ là tiêu đề :) Nhưng tôi nhận ra rằng nó không cần thiết vì các bit khóa hoạt động và trong trường hợp tôi có thể sử dụng tiêu đề ISP để xóa chip và ghi lại toàn bộ flash trên thiết bị. Vì vậy, để tóm tắt câu trả lời cho câu hỏi ban đầu của tôi - cài đặt LB1 và ​​LB2 sẽ ngăn mọi người đọc toàn bộ vùng flash VÀ đồng thời sẽ không ngăn tôi ghi bộ nhớ chương trình thông qua bộ tải khởi động.
Pablo

3

Bạn có thể sử dụng các bit khóa trên một số thiết bị ATMega và vẫn cập nhật mã của mình với bộ tải khởi động.

Tôi đã lập trình LB1 và ​​LB2 trên ATMega 328. Sau đó gọi bộ nạp khởi động, cập nhật chương trình chính - tất cả đều hoạt động hoàn hảo.

ISP không thể đọc hay ghi bất kỳ flash / eeprom / fuses nào nhưng bộ nạp khởi động vẫn có thể viết phần ứng dụng.

Xóa chip với ISP sẽ xóa các bit khóa (LB1 và ​​LB2), nhưng cũng xóa toàn bộ flash / eeprom, do đó bạn có thể bảo vệ mã của mình (tuy nhiên bạn phải đảm bảo bộ tải khởi động của bạn không thể bị hack)


3
Làm thế nào để cải thiện điều này khi câu trả lời hiện được chấp nhận?
Ignacio Vazquez-Abrams

Lưu ý rằng miễn là bạn có cư dân bộ tải khởi động kiểu Arduino tiêu chuẩn, việc đọc lại khóa sẽ gần như vô nghĩa vì bản thân bộ tải khởi động có khả năng đọc lại trừ khi bạn sử dụng chế độ chỉ có 328P nâng cao, vô hiệu hóa bộ nhớ khởi động LPM vào bộ nhớ ứng dụng. Nếu không, bạn cần phải sửa đổi bộ tải khởi động để loại bỏ điều đó, với chi phí không còn có thể xác minh lập trình. (Bạn có khả năng có thể tạo một cơ chế xác minh khác, nhưng nó sẽ không chuẩn để yêu cầu bạn cũng phải sửa đổi / thay thế avrdude)
Chris Stratton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.