ISP를 통해 AVR 플래시를 읽지 못하게 하시겠습니까?


15

ISP를 통해 플래시 전체를 읽지 않도록 보호하려고합니다. 그것은 부트 로더를 가지고 있으며, 어플리케이션 섹션을 자체 프로그래밍 할 수 있습니다.

잠금 바이트를 다음으로 설정 :

LB1/LB2 부트 로더를 사용하여 새 펌웨어를 업로드 할 수 없습니다.

BLB12/BLB11그리고 BLB01&BLB02내가 잘못 아니에요 경우, ISP를 통해 플래시를 읽는 방지 할 수 없습니다.

따라서 사용자 정의 부트 로더로 펌웨어를 업데이트하고 플래시가 동시에 읽지 않도록 할 수있는 방법이 없습니까?

답변:


18

칩을 지정하지 않은 경우 다음은 대부분 8 비트 atmega 장치에 적합하지만 일반적인 정보입니다. 보다 자세한 정보는 특정 칩의 데이터 시트에 대한 '메모리 프로그래밍'섹션을 읽으십시오!

즉, 모든 AVR 장치에는 LB1 및 LB2라는 두 개의 잠금 비트가 포함되어 있습니다. 이를 0으로 낮게 프로그래밍하면 아래 표에 따라 Flash 및 EEPROM 메모리에 기록 된 내용에 보호 기능이 추가됩니다. 보호 수준은 세 가지 모드로 나뉩니다. 여기서 모드 1은 보호 기능을 제공하지 않으며 모드 3은 최대 보호 기능을 제공합니다. 잠금 비트를 재 프로그래밍하여 더 높은 보호 모드로 전환 할 수 있습니다.

AVR에서는 "높음"비트를 "낮음"으로 변경할 수 있지만 다른 방법은 아닙니다. "낮음"잠금 비트를 "높음"으로 변경할 수 없으므로 보호 수준을 낮출 수 없습니다. 잠금 비트를 지우려면 완전한 칩 삭제가 필요하며 플래시 메모리가 지워집니다.

AVR 잠금 비트 테이블

이 2 개의 잠금 비트 만 (LB1 및 LB2) 낮 으면 99.9 %의 사람들이 펌웨어를 훔치지 못하게됩니다! 아마 99.9 % 이상. 거의 항상 코드를 리버스 엔지니어링하는 것이 더 쉽습니다.

따라서 사용자 정의 부트 로더로 펌웨어를 업데이트하고 플래시가 동시에 읽지 않도록 할 수있는 방법이 없습니까?

부트 로더 보호 퓨즈가있는 장치 (BLB12 및 BLB11)에서 내 지식을 최대한 활용하려면 (실수는 있지만 이전에이 문제가 있었을 것이라고 생각 합니다.) 사용자 정의 부트 로더 섹션을 잠그고 SPI를 비활성화하고 97-98 %의 사람들로부터 보호됩니다.

그러나 잠금 비트가 프로그래밍되지 않은 경우 활성화 된 메모리 잠금 기능이 없습니다 !!! ISP 비활성화는 사람의 70 %를 차단하기에 충분합니다.

일부 추가 정보의 경우, 잠금 비트 및 퓨즈는 일반 플래시 또는 EEPROM 공간에 있지 않으며 자체 프로그래밍 기능이있는 장치의 부트 로더와 관련된 잠금 비트를 제외하고 소프트웨어에서 액세스 할 수 없습니다. 이 앱 노트의 표 2는 특정 장치에서 수행 할 수있는 작업을 식별하는 데 도움이됩니다.

Atmel의 AVR 라인은 높은 보안 장치가 아니며 (명시 적으로 언급되지 않는 한) 코드 안전 보장을 제공하지도 않습니다. 안전하지 않은 모든 장치 (그리고 슬프게도 안전한 장치)와 마찬가지로 일반적인 공격을 받기 쉽습니다!


편집하다

HV 프로그래밍 인터페이스 헤더를 내장 할 것입니다. 그러나 누군가 HV 프로그래머를 사용하여 플래시를 읽을 수 있습니까? HV 프로그래머가 ISP / Jtag가 비활성화되어 있어도 칩을 지울 수 있다는 것을 알고 있습니다.

절대적으로 필요한 경우가 아니라면 보드 디자인에 HV 프로그래머를 포함시켜야한다고 생각하지 않으며 문제가 발생하지 않을 것입니다. HV 프로그래머 (12 볼트 신호)는 잠금 (대부분의 오류 잠금) 칩을 프로그래밍하기위한 안전 수단으로 만 사용할 수 있습니다. 이론적으로이됩니다 아무 것도 읽을 수없는 장치를 프로그래밍하는 것을 의미했다. 그리고 나는 읽을 수있는 악용에 대해 들어 본 적이 없다.

부트 로더 업그레이드를 위해 (때로는) HV 프로그래밍 인터페이스 헤더를 내장 할 것입니다. 그러나 누군가 HV 프로그래머를 사용하여 플래시를 읽을 수 있습니까? HV 프로그래머가 ISP / Jtag가 비활성화되어 있어도 칩을 지울 수 있다는 것을 알고 있습니다.

나는이 생각 할 수 부트 로더를 통해 잠금 플래시, (아마도 내부 쓰기 플래그 및 / 또는 ISR 함께 할 수있는 뭔가 ???)를 업데이트 할 수있는 방법이 될하지만 내 노트를 검색해야하고, 어쩌면 그것을 테스트해야합니다. ~ 20 시간 동안이 작업을 수행 할 수 없습니다. 따라서이 문제 와 언급 한 프로세서에만 중점을 둔 새로운 질문하는 것이 좋습니다 . 아주 좋은 질문입니다 !


마지막 댓글에 +1, 다른 모든 실패가 칩을 분해하고 AVR 디버거 / 프로그래머에게 고정시켜 잠금 비트를 재설정하면 보안이 모두 사라집니다.
helloworld922

@Garrett Fogerlie : 내가 코드를 훔치려 고한다고 생각하게하는 이유를 모르는 경우, PLZ에 알려주십시오. 내 질문을 수정하여 다른 사람들이 같은 방식으로 생각하지 않도록하십시오. 내 자신의 코드 인 부트 로더를 최소한으로 보호하려고합니다. 어쨌든, 이것에 대한 몇 가지 질문이 더 있습니다. 칩은 ATMega328이며,이 제품군은 일반적인 잠금 비트 사용을 가지게 될 것이라고 생각했다. 당신은 설명했습니다 LB1LB2나는 또한 업그레이드를 목적으로 부트 로더를 사용하는 옵션을 제한하는 내 질문에 설명한다. 따라서 옵션이 아닙니다. 에 관해서 BLB12BLB11이해가 안 무엇을 그 -. (계속)
Pablo

이러한 비트를 설정해도 외부에서 플래시 (애플리케이션 + 부트 로더)를 읽을 수 있습니다. 데이터 시트에서 해당 비트는 LPM / SPM 명령을 차단하지만 직렬 프로그래머는 사용하지 않는 것으로 보입니다. 직렬 프로그래밍 및 jtag 비활성화와 관련하여 이것은 또 다른 큰 질문입니다. 부트 로더 업그레이드를 위해 (때로는) HV 프로그래밍 인터페이스 헤더를 내장 할 것입니다. 그러나 누군가 HV 프로그래머를 사용하여 플래시를 읽을 수 있습니까? HV 프로그래머가 ISP / Jtag가 비활성화되어 있어도 칩을 지울 수 있다는 것을 알고 있습니다.
Pablo

@pablo, 죄송합니다. 위반은 없습니다. 내가 당신의 질문을 처음 보았을 때, 절도 아이디어는 나에게 일어나지 않았습니다. 그리고 잠긴 코드를 검색하는 데 다소 중점을 둔 답변을 썼습니다. 그러나 나는 일을하고 있었고 그 대답을 제출하기 전에 ~ 2 시간 일시 중지했습니다. 그런 다음 다시 돌아 왔을 때 여전히 답이없고 약간 놀랐다는 것을 알았습니다. 그런 다음 질문을 다시 읽으면 '도난'이 그 이유 일 수 있다고 생각했습니다. 귀하의 잘못이 아니므로 이제 면책 조항을 제거했습니다. 프로세서 모델은 해당 표에 나와있는 차이점과 8 / 16 / 32bit AVR이 있기 때문에 필요했습니다.
Garrett Fogerlie

1
ъGarrett Fogerlie : HV 프로그래머를 온보드로 놔두려는 의도는 없었지만 헤더 만 사용했습니다. 그러나 잠금 비트가 작동했기 때문에 ISP 헤더를 사용하여 칩을 지우고 장치의 전체 플래시를 다시 쓸 수있는 경우에는 필요하지 않습니다. LB1과 LB2를 설정하면 누구나 전체 플래시 영역을 읽을 수 없으며 동시에 부트 로더를 통해 프로그램 메모리를 쓰지 못하게됩니다.
Pablo

3

일부 ATMega 장치에서 잠금 비트를 사용하고 부트 로더로 코드를 업데이트 할 수 있습니다.

ATMega 328에서 LB1과 LB2를 프로그래밍했습니다. 그런 다음 부트 로더를 호출하고 기본 프로그램을 업데이트했습니다. 모두 완벽하게 작동했습니다.

ISP는 플래시 / eeprom / 퓨즈를 읽거나 쓸 수 없지만 부트 로더는 여전히 애플리케이션 섹션을 쓸 수 있습니다.

ISP의 칩 삭제는 잠금 비트 (LB1 및 LB2)를 지우고 전체 플래시 / eeprom을 지우므로 코드를 보호 할 수 있습니다 (그러나 부트 로더가 해킹되지 않도록해야 함)


3
이것은 현재 받아 들여진 대답을 어떻게 향상 시킵니까?
Ignacio Vazquez-Abrams

표준 Arduino 스타일 부트 로더가 상주하는 한 부트 로더 LPM을 응용 프로그램 메모리로 비활성화하는 고급 328P 전용 모드를 사용하지 않는 한 부트 로더 자체에는 리드 백 기능이 있으므로 잠금 리드 백은 거의 의미가 없습니다. 그렇지 않으면 더 이상 프로그래밍을 검증 할 수없는 비용으로 부트 로더를 제거하여 부트 로더를 제거해야합니다. (다른 검증 메커니즘을 만들 수도 있지만 avrdude를 수정 / 대치해야하는 비표준 일 수도 있습니다)
Chris Stratton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.