AVR 및 PIC 컨트롤러의 펌웨어 보호


23

누군가 내가 제공하는 마이크로 컨트롤러에서 굽는 HEX 파일을 추출 할 수 있습니까?

가능하다면 누군가 어떻게 임베디드 시스템에서 코드를 보호 할 수 있습니까? PIC 및 AVR 마이크로 컨트롤러의 경우 펌웨어 재생산을 어떻게 방지 할 수 있습니까?



1
# 1의 경우 클라이언트에 16 진수 파일을 제공하는 것이 좋습니다.이 경우 여러 복제 장치에 파일을 쓸 수 는 있지만 가능한 경우 코드 를 디 컴파일 할 필요는 없습니다 . 잠긴 장치 (# 2)의 경우 일반적으로 코드를 가져 오는 방법 (즉, 사용할 수있는 양)을 결정하는 것이 중요하지만 일반적으로 가능합니다.
alexan_e

1
예전에는 2 년이되었지만 요즘 인기있는 기기의 경우 하루나 이틀 동안 보호 기능이 중단되는 경향이 있습니다. 기본적으로 누군가가 가치가 있다고 결정하면. 보안을 원한다면 칩 사업에 뛰어들 필요가 있으며, 상용 부품을 사용하지 않아도됩니다.
old_timer

답변:


33

요즘 대부분의 마이크로 컨트롤러에는 임베디드 펌웨어 코드를 보호하기위한 부품 또는 제조업체 별 방법이 있습니다. 일반적으로 코드 메모리를 읽을 수있는 회로를 잠그면됩니다. (데이터 시트 또는 제조업체 웹 사이트의 해당 애플리케이션 노트에서 부품 별 세부 정보를 찾아야합니다).

일단 잠기면 일반적인 기술을 사용하여 코드 메모리를 읽을 수 없습니다. 이는 대부분의 해커가 임베디드 응용 프로그램의 기계어 코드를 보지 못하도록 합리적인 수준의 보호 기능을 제공합니다.

요즘 많은 MCU 장치에는 프로그램 코드를 처리하기 위해 온보드 FLASH 메모리가 있습니다. FLASH에 저장된 이전에 저장되고 보호 된 프로그램은 일반적으로 새 코드로 대체 될 수 있지만 보호 메커니즘을 잠금 해제하려면 전체 칩 FLASH 소거 작업이 필요합니다. 일단 지워진 부품은 원래 보호 잠금 장치 이전처럼 작동합니다. 새 프로그램이로드되면 일반적으로 새로로드 된 기계 코드를 보호하기 위해 부품을 다시 잠글 수 있습니다.

마이크로 컨트롤러에서의 코드 보호에 대한 논의는 일반적으로 부품 제조업체가 제공하는 모든 보호 체계가 완벽하다는 보장이 없다는 것을 언급하지 않고는 완벽하지 않습니다. 제조업체는 보호 시스템이 100 % 바보 증거가 아니라고 진술 할 것입니다. 그 이유 중 하나는 유료 암벽 산업이 유료로 부지런한 해커가 지불하려는 사람을 위해 보호 된 부분에서 코드를 읽을 수있는 전체 암시장 산업이 진행되고 있기 때문입니다. 그들은 보호 된 마이크로 컨트롤러의 ROM 또는 FLASH에서 코드를 읽을 수있는 다양한 체계를 고안했습니다. 이러한 계획 중 일부는 매우 영리하지만 일부 가족은 다른 가족보다 성공하기 위해 노력합니다. 따라서이 사실을 알고 다음 프로그램이 눈을 훔치지 않도록하십시오.

보호 된 마이크로 컨트롤러인지 여부에 관계없이 마이크로 컨트롤러에서 읽은 머신 코드의 이진 이미지에 누군가 손을 대면 디스어셈블러라는 도구를 통해 머신 코드를 처리 할 수 ​​있습니다. 그러면 이진 데이터가 어셈블리 언어 코드로 다시 전환되어 프로그램 알고리즘이 어떻게 작동하는지 학습 할 수 있습니다. 기계 코드를 정확하게 분해하는 것은 엄청난 양의 작업이 필요한 힘든 작업입니다. 결국 프로세스는 내가 설명한 것처럼 어셈블러 코드로 이어질 수 있습니다. 프로그램이 C, C ++ 또는 Basic과 같은 고급 언어로 작성된 경우 어셈블리 코드는 프로그램의 컴파일 된 결과 만 나타냅니다. 일반적으로 도난당한 코드를 고급 언어 수준으로 되돌릴 수는 없습니다.

이것이 의미하는 바는 임베디드 애플리케이션 펌웨어를 고급 언어로 작성하면 실제로 이점이 있다는 것입니다. 프로그램을 완전히 리버스 엔지니어링하기가 더 어려운 다른 계층을 제공합니다. 최고 성능의 옵티마이 저는 문자 그대로 프로그램을 매우 어려운 짧은 서브 루틴에 대한 수십 번의 호출로 가득 찬 거대한 스파게티 보울로 바꿀 수 있기 때문에 컴파일러를 최적화하여 내장 응용 프로그램을 컴파일하는 데있어 최첨단 기술을 사용하면 더 큰 이점을 얻을 수 있습니다. 디스어셈블러에서 해독합니다.

대부분의 숙련 된 임베디드 개발자는 애플리케이션에서 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.