다음과 같은 복사 방지 기능을 사용하는 것이 얼마나 쉬운가요? [닫은]


11

ARM 장치 (Raspberry Pi)에서 Linux 커널을 부팅하는 부팅 가능한 SD 카드 인 일부 작업을 복사 방지하려고합니다. 나는이 접근법을 사용하고 있습니다 :

  1. 이 접근법은 initrd를 사용하여 암호화 된 루트 파일 시스템을 마운트합니다.
  2. initrd는 SD 카드의 CID에 따라 파일 시스템의 비밀번호를 생성합니다. (해시 함수가 사용되었지만 md5 또는 sha1을 아직 결정하지 않았습니다). Initrd는 생성 된 암호를 사용하여 파일 시스템을 마운트하려고 시도합니다.
  3. 이제 가장 흥미롭고 의심스러운 부분은 다음과 같습니다. initrd 자체는 사용자 정의 C 함수를 사용하여 암호화되며 기본적으로 각 바이트는 사용자 정의 의사 난수 생성기를 사용하여 XOR됩니다. 커널은 암호 해독기와 같은 암호화 기능을 갖도록 수정되었습니다.
  4. 시스템 자체가 제거되어 키보드 나 외부 저장소를 사용할 수있는 방법이 없습니다. 단일 앱이 전체 화면으로 실행됩니다.

따라서 부트 로더가 커널과 initrd를로드 한 후 커널은 initrd를 해독하고 init 스크립트를 실행하여 비밀번호를 생성하고 루트 파일 시스템을 마운트합니다.

내 질문은 : 루트 파일 시스템을 해독하고 SD 카드에서 부팅하도록이 설정을 중단하는 것이 얼마나 쉬운가요? 가장 약한 부분은 무엇입니까? 커널을 디 컴파일하고 사용자 정의 암호화 기능을 찾는 것이 얼마나 쉬운가요?

편집 : 여기 몇 가지 수정 사항이 있으므로 명백한 것들로 시간을 낭비하지 마십시오.

  1. 루트 장치는 LUKS (aes256)로 암호화되며 SD 카드의 CID와 일부 소금을 사용하는 일부 HMAC 기능에 의해 키가 생성됩니다.
  2. initramfs 암호화를위한 의사 무작위 알고리즘은 실제로 RC4 일 것입니다. 키를 바이트 배열에 저장하면 키를 쉽게 검색 할 수 없기 때문에 키가 일부 사용자 정의 함수를 사용하여 생성됩니다 (예 : 모호함을 통한 보안) 그러나 다른 방법은 없습니다).
  3. SD 카드 에뮬레이터를 사용하면 누군가 가이 시스템의 사본을 시작할 수 있지만 나에게도 괜찮습니다. 왜냐하면 꽤 어려우며 아무도 할 수 없기 때문입니다 (누구도 에뮬레이터를 다루고 싶지는 않을 것입니다)

커널과 initrd는 어디에 저장되어 있습니까?
user1686

모두 단일 SD 카드에 저장됩니다. 둘 다 별도의 파일에 있습니다. / boot에 평소와 같이 저장됩니다.
dimovnike

답변:


7

이 설정을 해제하는 것이 얼마나 쉬운가요?

파일 시스템 자체를 서명 / 암호화하는 데 사용하는 방법에 관계없이 엔트로피 비트 수에 따라 설정을 "중단"하는 것이 얼마나 어려운지 (무차별 적으로 사용할 수있는 고유 한 조합의 총 수를 결정하므로) 비밀번호).

가장 약한 부분은 무엇입니까?

의심의 여지없이 사전 정의 된 CID를 비밀번호로 사용하고 사용자 정의 의사 난수 생성 기능을 사용하십시오.

SD 카드의 CID가 전용 되어 읽기 전용으로하지만,이 시대에 호환되지 않는 플래시 메모리 장치를 찾을 수 없습니다 드문 일이다. 일부 사람들 은 심지어 특정 SD 카드로 CID 를 덮어 쓸 수있는 능력을 보여주었습니다 . 이렇게하면 특히 암호 를 복제 한 후 SD 카드를 에뮬레이트 하는 경우 암호를 무차별하게하는 것이 더 쉬워집니다 (여러분이 고려해보십시오).

마지막으로, 임의의 종류의 의사 난수 생성기를 사용하는 것은 이미 임의적이지 않기 때문에 본질적인 결함 이 있습니다. 이것이 의사 난수 라는 이유가 있습니다 . Raspberry Pi에서 작동하는 TrueCrypt 또는 LUKS 와 같이 미리 만들어진 암호화 된 부트 로더 를 사용하고 수동 커널 수정을하지 않는 것이 좋습니다.

커널을 디 컴파일하고 사용자 정의 암호화 기능을 찾는 것이 얼마나 쉬운가요?

아무것도 디 컴파일하기가 매우 어렵습니다. 반대로, 컴파일 된 응용 프로그램의 디스 어셈블리는 종종 사소한 것이며, 리버스 엔지니어링 어셈블리를 다른 고급 언어로 다시 지원하는 데 사용할 수있는 많은 도구가 있습니다. 침입자가 컴파일 된 커널에도 액세스 할 수 있다면 의사 난수 생성기와 같은 것을 분석하는 것은 의도적으로 코드를 난독 처리하지 않는 한 사소한 일입니다.


TL, DR : 암호화 및 보안과 관련하여 바퀴를 다시 발명하지 말고 시도한 사실을 고수하십시오. 이미 사용 가능한 몇 가지 전체 디스크 암호화 옵션이 있으며 Raspberry Pi에서 제대로 작동하는 것으로 입증되었습니다. SD 카드의 CID를 일종의 "암호"로 사용하지 마십시오. 변경할 수 없더라도이 값을 스푸핑하는 방법이 있습니다.

복사 방지는 이미 SD 카드 사양에 CPRM 으로 포함되어 있습니다.


답변 해주셔서 감사합니다. CPRM에 대해 알고 있지만 사양은 NDA로 마감되었으며 많은 비용이 듭니다. LUKS 및 Truecrypt의 경우 부팅시 수동으로 입력 한 키가 필요합니다. 일부 hmac 기능을 사용하여 CID에서 키를 생성하도록 TrueCrypt 부트 로더를 수정하면 이것보다 낫습니까? 또한 SD 카드 에뮬레이터로 수행 할 수 있지만 저에게는 괜찮습니다. 이것은 해적에게 편리한 등급입니다. (키가 장치에 내장되어있는 한 100 % 보호가되지 않는다는 것을 이해합니다)
dimovnike

실제로 @ user2021201은 내가 당신을 이끌려 고했던 것입니다. 그것은 것입니다 아마 나는 확실히 당신이에서 SD 카드 사양을 쿼리로드 된 운영 체제를 가지고 있지 않기 때문에 (부트 로더에서 CID를 얻는 것이 얼마나 어려운 아니에요 있지만, 매우 쉽게 소스로부터의 TrueCrypt 부트 로더를 수정하는 ). 그러나 관리했다면 아마도 귀하의 요구에 적합하고 충분한 솔루션 일 것입니다.
혁신적인

1

숙련 된 사람은 이것을 해독하는 데 많은 어려움을 겪지 않을 것입니다. 에뮬레이터에서 SD 카드를 부팅 한 다음 RAM에서 키를 읽는 것이 비교적 쉽습니다. 그런 다음 복제 방지 기능이없는 버전을 Pirate Bay 등에 게시합니다.

또는 에뮬레이터를 사용하여 실행중인 에뮬레이트 된 시스템에 쉘 코드를 삽입하십시오. 그런 다음 실행중인 시스템을 사용하여 해독 된 rootfs를 복사하십시오 (또는 dmsetup table --showkeys등을 사용하여 키를 읽으십시오 ).

빠른 검색은 Raspberry Pi 에뮬레이터 의 존재를 나타내 므로 작업의 일부가 이미 완료되었습니다.

다른 문제, 특히 다음과 같은 문제가 있습니다.

커널은 암호 해독기와 같은 암호화 기능을 갖도록 수정되었습니다.

이것을 배포하는 사람은 GPL의 조건에 따라 커널 소스 코드를 사용할 수 있습니다. 따라서 분해 할 필요가 없으며 diff추가 기능을 찾기 위해 사용할 수 있습니다.

(예를 들어, 검사 커널과 주식 커널을 비교할 수 있듯이 분해를 통해 찾는 것이 그렇게 어려울 수는 없습니다)

나는 Raspberry Pi 부팅 코드에 완전히 익숙하지는 않지만 임베디드 암호화 키로 부트 로더를 다시 플래시 할 수 있다면 (그런 다음 커널에 전달됨) 적어도 SD 카드에는 없을 것입니다. d 에뮬레이터에서 부팅을 시도합니다.


예, 라이센스 문제에 대해 알고 있습니다. 커널을 그대로두고 FreeBSD 커널로 전환하는 방법을 찾고 있지만 지금은 기술 문제 만 논의 할 수 있습니다. 부트 로더 아이디어는 매우 흥미 롭지 만 구현 방법을 찾을 수 없었습니다.
dimovnike
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.