상업적 용도로 Pi의 소프트웨어를 어떻게 보호 할 수 있습니까?


16

상용 제품에 Raspberry Pi를 사용하고 싶지만 장치에서 소프트웨어의 리버스 엔지니어링을 방지하고 싶습니다. 해당 소프트웨어는 Ruby로 작성되었습니다. 최종 사용자는 SD 카드에 물리적으로 액세스 할 수 있으며 Pi에 대한 루트 액세스 권한을 얻을 수있을 정도로 똑똑하다고 가정합니다.

내가 본 것처럼 옵션에는 다음이 포함될 수 있습니다.

  • SD 카드의 일부 또는 전부 암호화
  • Ruby 코드를 난독 처리하거나 바이트 코드 (JRuby 또는 Rubinius)로 컴파일

암호화가 가장 좋은 솔루션이지만 사용자에게 키를 요구하지 않고 해독하는 방법을 생각할 수 없습니다. 코드 난독 화는 분명히 가능하지만 내 마음에는 덜 안전합니다.

암호를 해독 할 키를 사용자에게 묻지 않고 SD 카드의 일부를 암호화 할 수 있습니까? 아니면 원하는 장치에서만 코드에 액세스 할 수있는 더 좋은 방법이 있습니까?


비슷한 솔루션을 찾고 있습니다. 내가 얻은 가장 좋은 대답은 부팅 후 특정 조건을 사용하여 암호화 된 이미지 (파티션)를 마운트하는 것입니다. 다른 방법은 코드를 c ++ 또는 .net (모노)과 같은 바이너리로 컴파일하고 좋은 소프트웨어 크래커가 소프트웨어를 대상으로하지 않기를 희망하는 코드를 사용하는 것입니다. 그것을 해결 .. 행운을 빌어 요
Piotr Kula

답변:


8

물론 암호화 된 파일 / 컨테이너 등을 해독 할 수 있습니다. 비밀번호를 묻지 않고. SD 카드에 (암호화 된) 비밀번호를 저장하고 데이터를 해독하는 데 충분합니다. 예를 들어, 쉬운 openssl데모는 다음과 같습니다.

openssl enc -a -e -salt -aes-256-cbc -pass pass:abc123 -in /tmp/plaintext.txt -out /tmp/ciphertext.enc

openssl enc -d -a -aes-256-cbc -pass pass:abc123 -in /tmp/ciphertext.enc

Pi에 소프트웨어를 설치하는 동안 암호화가 수행되고 런타임에 가능하면 RAM에서 암호 해독이 수행됩니다. 예를 들어, 비밀번호는 의사 난수 시퀀스 번호 (귀하에게 알려짐)와에서 얻은 특정 Pi의 일련 번호를 조합 한 것일 수 있습니다 cat /proc/cpuinfo. 그런 다음 모든 의사 의도와 목적 " 암호 "및 전체 암호화 메커니즘의 약점에 해당하는 의사 난수를 저장할 적절한 숨겨진 위치를 찾아야합니다 . 예를 들어 SD의 예비 섹터가 일반적으로 선택되지만 실행 파일 중 하나에 포함시킬 수도 있습니다.

어쨌든 최선의 선택은 소프트웨어를 암호화하고 컴파일하여 소프트웨어에 다른 계층의 난독 화를 추가하는 것입니다.

마지막으로 소프트웨어에 인터넷 연결이 필요한 경우 Pi가 매번 암호를 묻도록 할 수도 있습니다. 여전히 연결 내부에서 비밀번호를 숨겨야 하며 암호화를 https사용하는 현재 시간을 사용하여 응답 공격으로부터 보호해야합니다 salt.

소프트웨어를 안전하게 만들 수있는 많은 옵션이 있습니다. 그러나 소프트웨어가 잘 정의 된 인기 임계 값에 도달하면 보호에 상당한 양의 돈을 투자하더라도 확실히 금이 갈 것입니다.


1
안전 모드에서 루트로 로그인하고 키 파일을 읽고 그의 모든 노력을 해독하여 수백만 명의 러시아인에게 팔 수 있습니다. 좋은 시도 .. 그러나 총알 증거는 아닙니다. https조차도 관리되는 네트워크 내에서 DNS 리디렉션 및 가짜 인증서로 속일 수 있습니다. oops
Piotr Kula

1
@Avio : 우선, 섹터를 알 수 없습니다. 알고 있어야합니다. 어디에 있는지 분명하지 않습니다. 그러나 일부 해독 스크립트 / 응용 프로그램으로 찾아야하므로 찾을 수 있습니다. 암호 해독을 수행 할 코드를 어딘가에 배치해야합니다. 어디에 두시겠습니까? initramfs에서 일부 SD 카드 파티션 또는 기타 보호되지 않은 장소. 암호화 된 파티션을 해독하는 데 사용되는 응용 프로그램 / 스크립트를 보거나 실행하기 전에 일종의 액세스 권한을 갖도록 변경할 수 있습니다.
Krzysztof Adamski

1
키가 SD 카드에 저장되는 것을 제외하고는 모든 암호화 방법이 좋습니다. Op는 Pi 용 SD 카드를 사용하여 최종 사용자에게 SD 카드를 판매하려고합니다. 그런 다음 SD 카드를 가져 와서 무자비하게 해킹하고 악용하고 안전한 모드로 키 파일을 루트로 읽고 다른 모든 장치의 통신 및 소스 코드에 침투 할 수 있습니다. 그것은 수수께끼입니다. OP가 물건을 암호화하는 방법을 알고 있다고 확신합니다. 그는 시스템이 자동으로 암호를 해독하게하면서 소프트웨어의 암호 해독을 방지하는 방법을 묻습니다.
Piotr Kula

1
@Avio : 아뇨. 그러나 '어떻게?'라고 물었으므로 나는 그것에 대답했습니다. 그것이 수사적인 질문인지 몰랐습니다. 당신은 아이디어 구현이 응용 프로그램 배포를 시작하기에 충분하다고 썼지 만 OP (및 이것을 읽는 다른 사람들)는이 접근법의 약점을 알고 있어야한다고 생각합니다. 라스베리 파이에 대한 더 나은 솔루션이 있다고 생각하지 않습니다. 할 수있는 유일한 일은 더 난독 화하는 것입니다. OP 응용 프로그램은 위험을 감수하기에는 너무 귀중 할 수 있으며 더 나은 보호 메커니즘을 만들 수있는 RPi 이외의 다른 것을 사용하기로 결정했습니다.
Krzysztof Adamski

1
여기에있는 모든 답변은 내 질문과 관련된 장단점에 대한 훌륭한 토론을 제공하지만 가장 구체적인 해결책이 있기 때문에이 답변을 수락 할 것입니다. / proc / cpuinfo의 일련 번호를 사용하면 링크가 누락 될 수 있습니다.
Schrockwell

6

코드와 키는 SD 카드 기계에있는 경우 실제로, 그들은 것입니다 그들은 그것을 해제 컴파일 할 수있을 것입니다 열쇠를 발견 할 수 있어야하고, 그들은 민감한 데이터를 추출 할 수 있습니다.

영화를 암호화하는 것과 마찬가지로 DVD에는 영화를 해독하는 데 필요한 모든 정보가 포함되어 있어야 시청자에게 표시 할 수 있으므로 모든 영화 복사 방지 메커니즘이 완전히 사라집니다.

최선의 방법은 제품 리버스 엔지니어링의 경제성을 바꾸는 것입니다.

암호화 및 / 또는 난독 화는 그만한 가치가 있습니까?

이제 우리는 자신을 완전히 보호 할 방법이 없다는 것을 알게되었습니다.

  1. 이것이 일어날 가능성은 얼마나됩니까?
  2. 알고리즘 및 데이터의 다른 사람에게 어떤 가치가 있습니까?
  3. 소프트웨어를 사용하기 위해 라이센스를 구매하는 비용은 얼마입니까?
  4. 알고리즘과 데이터를 복제하는 데 드는 비용은 얼마입니까?
  5. 알고리즘과 데이터를 리버스 엔지니어링하는 데 드는 비용은 얼마입니까?
  6. 알고리즘과 데이터를 보호하는 데 드는 비용은 얼마입니까?

이들이 알고리즘 / 데이터를 보호하기 위해 경제적으로 중요한 명령을 내린다면 그렇게해야합니다. 예를 들어, 서비스 가치와 고객 비용이 모두 높지만 코드를 리버스 엔지니어링하는 비용이 코드 자체 개발 비용보다 훨씬 낮은 경우 사람들이 시도 할 수 있습니다.

그래서 이것은 당신의 질문으로 이어집니다.

  • 알고리즘과 데이터를 어떻게 보호합니까?

난처

코드를 난독 처리 할 것을 제안하는 옵션은 위의 경제학을 어지럽 힙니다. 비용을 크게 늘리지 않고 비용을 크게 늘리려 고합니다 (5). 문제는 DVD 암호화와 마찬가지로 실패로 끝날 것이며 3, 4 및 5 사이의 차이가 충분하다면 결국 누군가가 그것을 할 것입니다.

또 다른 옵션은 Steganography 형식 일 수 있으며 ,이를 통해 코드를 해독 한 사람을 식별하고 배포를 시작할 수 있습니다. 예를 들어, 데이터의 일부로 100 개의 서로 다른 부동 소수점 값 이 있고 해당 값 각각의 LSB 에서 1 비트 오류로 인해 응용 프로그램에 문제가 발생하지 않으면 고유 한 (각 고객에게) 식별자를 해당 비트로 인코딩하십시오. . 문제는 누군가 응용 프로그램 데이터의 여러 복사본에 액세스 할 수있는 경우 다른 점이있어 숨겨진 메시지를 쉽게 식별 할 수 있다는 것입니다.

보호

실제로 안전한 유일한 옵션은 소프트웨어 응용 프로그램에 포함시키지 않고 서비스로 소프트웨어의 중요한 부분을 제공하는 것입니다.

개념적으로 응용 프로그램은 알고리즘을 실행하는 데 필요한 모든 데이터를 수집 하여 클라우드 의 서버에 대한 요청으로 패키지화하고 (귀하가 제어하는) 서비스는 결과를 계산하여 클라이언트에 다시 전달합니다. 표시됩니다.

이렇게하면 모든 독점 기밀 데이터 및 알고리즘을 사용자가 완전히 제어하는 ​​도메인 내에 유지하고 클라이언트가 추출 할 가능성을 제거합니다.

명백한 단점은 클라이언트가 서비스 제공에 묶여 있고 서버와 인터넷 연결에 달려 있다는 것입니다. 좋은 점은 버그 수정으로 항상 최신 상태입니다. 불행히도 많은 사람들 이 이러한 이유로 정확히 SaaS 에 반대합니다 .

이것은 취해야 할 큰 단계이며 6 위의 비용이 많이 들지만 알고리즘과 데이터를 완전히 보호 하는 유일한 방법 입니다.


SaaS는 옵션 일 수 있지만 온라인으로 전환 할 때마다 1에서 6까지의 포인트를 다시 확인해야합니다. 또한 DDoS 공격에 노출됩니다.
Avio

4

나는 최근 에이 해결할 수없는 문제에 대한 매우 우아한 해결책을 발명했습니다. 이 xkcd 만화에서 영감을 얻었습니다.

여기에 이미지 설명을 입력하십시오

따라서이 솔루션을 수퍼 접착제 라고 합니다. 하나의 superglue SD 카드를 PI에 손상시키지 않으면 카드를 추출하는 것이 거의 불가능합니다.

SD에 저장된 암호로 암호화 된 외부 SSD 디스크를 사용할 수도 있으며 안전하다고 느낄 수 있습니다!

여기에 이미지 설명을 입력하십시오


누군가가 쉽게 이미지 파일 ( dd)을 만들어 그에 따라 사용할 수 있습니다!
Vassilis 2016 년

@Vassilis는 로그인하지 않고 불가능합니까?
ADOConnection 2016 년

라이브 리눅스 이미지를 가진 사람이라면 누구나 할 수 있습니다! 그것은의 루트가 될 필요는 없습니다 당신의 시스템.
Vassilis

@Vassilis이 절차를 설명하는 기사를 알려주세요.
ADOConnection

구글
Vassilis

2

바이트 코드로 컴파일하는 것이 가장 좋은 방충제입니다. 암호화는 소프트웨어가 TrueCrypt 볼륨에 저장 될 수 있지만 사용자가 루트 액세스 권한을 얻지 못한 경우에만 가능합니다. 검사를 위해 언제든지 메모리 / 디스크를 덤프 할 수 있으므로 비밀번호를 안전하게 저장할 수있는 방법이 없습니다. 사용자가 많은 리눅스 유틸리티를 가지고있는 곳에서 소프트웨어를 실행하는 경우 보안 장치 (스마트 카드)의 도움조차별로 도움이되지 않습니다. 내가 아는 한 보안 부팅은 R-Pi의 옵션이 아니기 때문에 OS 내부에서 사용자가 땜질하는 것을 막을 수 있습니다.


1
부팅하는 동안 암호화는 생각보다 안전하지 않습니다. 정상적인 시스템 부팅에 액세스하거나 우회하면 고기가 전부 다입니다. Blurays조차도 이것을 제대로 얻지 못했습니다 .. 젠장!
Piotr Kula

완전히 닫힌 시스템 만 애플리케이션을 보호 할 수 있습니다. 나는 다소 프로그래밍 가능한 Java Card라는 것을 알고 있습니다.
Tomas Q.

1
예. 그러나 항상 PIN을 입력해야합니다. PIN은 카드에 저장되지 않습니다.
Piotr Kula

1

진정한 상용 응용 프로그램을 만들고 싶다면 최종 사용자 양식으로 Pi가 적합하지 않습니다!

자체 PCB를 설계하고, Pi에있는 프로세서를 사용하고, 플래시 메모리를 PCB에 내장해야합니다.

  1. 다음 10 초 이내에만 사용할 수있는 일급 비밀 알고리즘을 기반으로 단일 로그온 코드를 생성 한 BCM에 적합한 펌웨어를 작성하십시오.
  2. 적절한 소프트웨어를 사용하여 커널을 컴파일하고 소프트웨어의 암호화 된 다른 파티션이 포함 된 플래시의 암호화 된 파일에서 루트를 마운트 할 수있는 Linux 기능을 활성화하십시오. (이중 보호)
  3. BCM 펌웨어는 일부 영리한 알고리즘 또는 공개 키를 기반으로 인증 키를 한 번만 사용하여 일급 비밀을 생성하고이를 사용자 지정 Linux 커널에 전달합니다.이 커널은 암호화 된 루트 파티션을로드하고 부팅 중에 암호화 된 소프트웨어 드라이브를로드하기 위해 암호화 작업을 수행합니다. 암호화 된 이미지 내에서.

  • 올바른 인증 키는 8-16 자 길이가 아닙니다. 시스템 더 많은 시스템 기호 (HEX) 및 더 적은 문자 (ASCII)를 사용하여 256/512 바이트 길이의 인증 키를 제공하는 것이 중요합니다
  • 쉽게 갈라지기 때문에 AES, TKIP를 사용하지 마십시오
  • 현재 월풀 암호화는 256/512 키를 사용하여 해독하기가 가장 복잡합니다.
  • 해커가 플래시 드라이브를 제거하거나 내용을 덤프 할 수있는 경우에도 마찬가지입니다. 소프트웨어가 두 번 암호화됩니다.
  • 인증 키를 가로 채면 펌웨어에서 나가기가 매우 어렵습니다 (BCM이 펌웨어 덤프를 막을 수 있기 때문에)
  • 일부 영리한 플래시 ROM에는 전체 메모리 덤프를 방지하는 기능이 있습니다.
  • PCB를 설계하는 경우 모든 암호화 데이터와 키를 제공하고 무차별 시도를 방지하는 보안 칩 (Dell 및 Apple 등)을 구현합니다. 일부 Dell은 군용으로 자체 파괴를합니다. BIOS 암호를 2 번 잘못 입력하면 분산 폭탄으로 드라이브가 지워집니다. 인증 키 조작을 감지하면 동일하게 구현할 수 있습니다.

하루의 끝. Raspberry Pi는 어린이가 Linux를 사용하고 일부 프로그램을 작성하는 방법을 배우기위한 교육용입니다.

상업적인 용도로는 적합하지 않습니다. 자신의 장치를 만들고 자신의 보호 시스템을 만들어야합니다. 당신과 다른 누구도 당신이 당신의 타당성 정보를 어떻게 보호하는지 알지 못한다면 누군가가 알려진 익스플로잇 또는 무차별 공격을 이용하여 그것을 해킹 할 가능성은 0.001 %입니다.

대안

  • 소프트웨어를 바이너리 형식으로 대상 시스템에 컴파일하고 배포 할 수 있도록 작성하십시오. .NET, JAR for Java 또는 Linux에서 실행되는 Windows의 EXE 예 (Linux, 확실하지 않습니까?)
  • 원하는 보안 수준이 높을수록 더 많은 비용을 지출해야합니다. 예외는 없습니다.

1

해결책 중 하나는 주어진 Pi에 대해 거의 고유 한 RaspberryPi의 MAC 주소를 사용하는 것입니다. 코드 내에서이 주소를 확인하고 컴파일 된 버전을 제공하십시오. 이것은 리버스 엔지니어링을 어렵게 만듭니다.

SD 카드를 맹목적으로 새 카드에 복사하는 사람들에게는 다른 Pi에서 작동하지 않습니다. 이로 인해 대다수의 사람들이 소프트웨어를 훔치 게됩니다. 이것을 깨뜨리기에 충분히 똑똑한 다른 사람들은 소프트웨어를 리메이크하기에 충분히 똑똑 할 수 있습니다.



0

캐리어 보드에 SPI 기반 플래시를 추가하고 코드를 저장해보십시오. 내 제품에이 옵션을 고려하고 있습니다. SD가 손상된 경우 최종 사용자가 사용자 정의 라즈 비안 및 SPI 플래시를 마운트하고 실행 파일을 실행하는 코드를 포함하여 새로운 것을 작성할 수 있기를 바랍니다.

다른 옵션은 RTC에 암호화 키를 저장하는 것입니다. 대부분의 RTC 칩은 약간의 저장 공간을 가지고 있으며 SD 또는 SPI 플래시에서 실행 파일을 잠금 해제하고 마운트 할 수있는 키로 사전 프로그래밍 될 수 있습니다.


-4

Raspberry Pi 제품군에 사용 된 모든 CPU가 자체 보안 부팅을 지원한다고 생각합니다. 파이 자체에는없는 4,8,16,32 또는 64K의 내장 플래시 또는 EEPROM을 다시 플래시하려면 12V가 필요하다고 생각합니다. 그것들에서 코드로 Trustzone을 설정할 수 있으므로 모든 좋은 것들을 볼 수 없습니다. 또한 두 형태의 정적 RAM은 주어진 횟수의 재기록에 대해서만 안정적이라는 것을 이해합니다. 첫 단계는 여분의 CPU를 가지고 몇 시간 또는 며칠 동안이 보안 부팅 메모리를 다시 플래시하는 것입니다. 결국 모든 비트가 고정되어 다른 사람이 귀하의 코드를 수정할 수 없으며 실제 제품에 따라 정기적으로 은행과 같은 2 요소 식별을 요청할 수 있으므로 제품이 코드를 추출하고 재 활성화 코드가 전송됩니다. 이메일 주소. 파이를 조금 개조하면 ARM에도 CPUID가 있으므로 여러 수준의 보안을 유지할 수 있다고 생각합니다. 특정 번호로 SMS를 제공 할 수도 있습니다. 많은 방법.


1
안녕하십니까. 많은 추측이 있고 그 게시물을 믿습니다. 사람들에게 Pi에 12V를 적용하도록 권장하기 전에보다 자세한 답변을 제공하고 적절한 참고 자료로 백업하는 것이 좋습니다.
Ghanima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.