ARM 장치 (Raspberry Pi)에서 Linux 커널을 부팅하는 부팅 가능한 SD 카드 인 일부 작업을 복사 방지하려고합니다. 나는이 접근법을 사용하고 있습니다 :
- 이 접근법은 initrd를 사용하여 암호화 된 루트 파일 시스템을 마운트합니다.
- initrd는 SD 카드의 CID에 따라 파일 시스템의 비밀번호를 생성합니다. (해시 함수가 사용되었지만 md5 또는 sha1을 아직 결정하지 않았습니다). Initrd는 생성 된 암호를 사용하여 파일 시스템을 마운트하려고 시도합니다.
- 이제 가장 흥미롭고 의심스러운 부분은 다음과 같습니다. initrd 자체는 사용자 정의 C 함수를 사용하여 암호화되며 기본적으로 각 바이트는 사용자 정의 의사 난수 생성기를 사용하여 XOR됩니다. 커널은 암호 해독기와 같은 암호화 기능을 갖도록 수정되었습니다.
- 시스템 자체가 제거되어 키보드 나 외부 저장소를 사용할 수있는 방법이 없습니다. 단일 앱이 전체 화면으로 실행됩니다.
따라서 부트 로더가 커널과 initrd를로드 한 후 커널은 initrd를 해독하고 init 스크립트를 실행하여 비밀번호를 생성하고 루트 파일 시스템을 마운트합니다.
내 질문은 : 루트 파일 시스템을 해독하고 SD 카드에서 부팅하도록이 설정을 중단하는 것이 얼마나 쉬운가요? 가장 약한 부분은 무엇입니까? 커널을 디 컴파일하고 사용자 정의 암호화 기능을 찾는 것이 얼마나 쉬운가요?
편집 : 여기 몇 가지 수정 사항이 있으므로 명백한 것들로 시간을 낭비하지 마십시오.
- 루트 장치는 LUKS (aes256)로 암호화되며 SD 카드의 CID와 일부 소금을 사용하는 일부 HMAC 기능에 의해 키가 생성됩니다.
- initramfs 암호화를위한 의사 무작위 알고리즘은 실제로 RC4 일 것입니다. 키를 바이트 배열에 저장하면 키를 쉽게 검색 할 수 없기 때문에 키가 일부 사용자 정의 함수를 사용하여 생성됩니다 (예 : 모호함을 통한 보안) 그러나 다른 방법은 없습니다).
- SD 카드 에뮬레이터를 사용하면 누군가 가이 시스템의 사본을 시작할 수 있지만 나에게도 괜찮습니다. 왜냐하면 꽤 어려우며 아무도 할 수 없기 때문입니다 (누구도 에뮬레이터를 다루고 싶지는 않을 것입니다)