Làm cách nào để bảo vệ phần mềm trên Pi cho mục đích thương mại?


16

Tôi muốn sử dụng Raspberry Pi trong một sản phẩm thương mại, nhưng tôi muốn ngăn chặn kỹ thuật đảo ngược của phần mềm trên thiết bị. Phần mềm trong câu hỏi sẽ được viết bằng Ruby. Tôi cho rằng người dùng cuối có quyền truy cập vật lý vào thẻ SD và đủ thông minh để có quyền truy cập root vào Pi.

Theo tôi thấy, các tùy chọn có thể bao gồm:

  • Mã hóa một phần (hoặc tất cả) thẻ SD
  • Làm xáo trộn mã Ruby hoặc biên dịch mã thành mã byte (JRuby hoặc Rubinius)

Mã hóa sẽ là giải pháp tốt nhất, nhưng tôi không thể nghĩ ra cách giải mã mà không cần hỏi người dùng về khóa. Mã obfuscation là chắc chắn có thể, nhưng ít an toàn hơn trong tâm trí của tôi.

Có thể mã hóa một phần của thẻ SD mà không cần nhắc người dùng nhập khóa để giải mã không? Hoặc có cách nào tốt hơn để đảm bảo mã chỉ có thể truy cập được trên thiết bị mong muốn?


Tôi đang tìm kiếm một giải pháp tương tự. Câu trả lời tốt nhất tôi nhận được là gắn một hình ảnh (phân vùng) được mã hóa sau khi khởi động bằng một số điều kiện nhất định (có thể là cuộc gọi ajax như DRM để cung cấp khóa giải mã động, số sê-ri có khóa algoruthym ((SN * ngày - 1)) cách khác là sử dụng một mã có thể biên dịch mã của bạn thành nhị phân - như c ++ hoặc .net (mono) và hy vọng các trình bẻ khóa phần mềm tốt sẽ không nhắm mục tiêu vào phần mềm của bạn - bạn biết nguyên nhân như Microsoft không gặp phải vấn đề này đối với eons .. và vẫn không đã giải quyết nó .. Chúc may mắn!
Piotr Kula

Câu trả lời:


8

Tất nhiên, có thể giải mã tập tin / container / mã hóa. mà không yêu cầu mật khẩu. Nó đủ để lưu trữ mật khẩu (được mã hóa) trên thẻ SD và sử dụng nó để giải mã dữ liệu của bạn. Ví dụ, một opensslbản demo dễ dàng có thể là:

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

Việc mã hóa sẽ được thực hiện trong khi cài đặt phần mềm trên Pi và việc giải mã sẽ được thực hiện khi chạy, có thể là trong RAM. Ví dụ: mật khẩu có thể là sự kết hợp của một số số thứ tự giả ngẫu nhiên (được biết đến với bạn) và số sê-ri cụ thể của Pi thu được từ a cat /proc/cpuinfo. Sau đó, bạn phải tìm một vị trí ẩn phù hợp để lưu trữ số giả danh này cho tất cả ý định và mục đích " mật khẩu " và do đó là điểm yếu của toàn bộ cơ chế mã hóa. Ví dụ, một khu vực dự phòng trên SD sẽ là lựa chọn điển hình, nhưng bạn thậm chí có thể nhúng nó vào một trong những thực thi của bạn.

Trong mọi trường hợp, tùy chọn tốt nhất của bạn là cả mã hóa và biên dịch phần mềm của bạn, để thêm các lớp mã hóa khác nhau vào phần mềm của bạn.

Cuối cùng, nếu phần mềm của bạn cần kết nối internet, bạn thậm chí có thể khiến Pi yêu cầu mật khẩu mỗi lần. Bạn vẫn sẽ cần ẩn mật khẩu bên trong kết nối, bạn cũng sẽ phải sử dụng httpsvà bạn sẽ phải bảo vệ chống lại các cuộc tấn công trả lời, sử dụng thời gian hiện tại như saltđối với mã hóa.

Bạn có rất nhiều tùy chọn (giá rẻ) để làm cho phần mềm của bạn an toàn. Nhưng bạn phải biết rằng nếu phần mềm của bạn đạt đến ngưỡng phổ biến được xác định rõ ràng, chắc chắn nó sẽ bị bẻ khóa, ngay cả khi bạn đầu tư một số tiền đáng kể để bảo vệ nó.


1
Tôi có thể đăng nhập bằng root ở chế độ an toàn, đọc tệp chính và giải mã tất cả công việc khó khăn của anh ấy và bán cho người Nga hàng triệu đô la. Tốt thử .. nhưng không bằng chứng đạn. Ngay cả https cũng có thể bị lừa với chuyển hướng DNS và chứng chỉ giả trong tất cả mạng được quản lý .. rất tiếc
Piotr Kula

1
@Avio: Trước hết, lĩnh vực này không phải là không biết. Nó phải được biết, nó chỉ không rõ ràng nó ở đâu. Nhưng vì bạn cần tìm ra nó với một số tập lệnh / ứng dụng giải mã, người ta có thể tìm thấy nó. Bạn phải đặt mã sẽ giải mã ở đâu đó. bạn sẽ đặt nó ở đâu? Trong initramfs, một số phân vùng thẻ SD hoặc nơi khác không được bảo vệ. Bất cứ ai cũng có thể thấy các ứng dụng / tập lệnh được sử dụng để giải mã phân vùng được mã hóa và / hoặc chỉ thay đổi chúng để có được một số loại quyền truy cập trước khi chúng được thực thi.
Krzysztof Adamski

1
Tất cả các phương thức mã hóa của bạn đều ổn - ngoại trừ khóa được lưu trên thẻ SD. Các op rất có thể muốn bán thẻ SD cho / với Pi cho người dùng cuối. Sau đó, tôi có thể lấy thẻ SD, vũ phu hack nó, khai thác, chế độ an toàn vào root - đọc tệp chính và xâm nhập vào tất cả các thiết bị liên lạc và mã nguồn khác. Đó là câu hỏi hóc búa. Tôi chắc chắn OP biết cách mã hóa công cụ. Anh ta hỏi làm thế nào để bảo vệ phần mềm của mình khỏi bị giải mã, trong khi để hệ thống tự động giải mã nó.
Piotr Kula

1
@Avio: Không, không thực sự. Nhưng vì bạn đã hỏi 'làm thế nào?', Tôi đã trả lời điều đó. Không biết đó là một câu hỏi tu từ. Bạn đã viết rằng thực hiện ý tưởng của bạn là đủ để bắt đầu phân phối ứng dụng nhưng tôi tin rằng OP (và những người khác đang đọc điều này) chỉ nên nhận thức được những mặt yếu của phương pháp này. Điều đó đang được nói, tôi không tin rằng có tồn tại giải pháp tốt hơn cho Raspberry Pi. Điều duy nhất người ta có thể làm là chỉ làm xáo trộn hơn nữa. Có lẽ ứng dụng OP quá quý giá để chấp nhận rủi ro và anh ta quyết định sử dụng thứ gì đó không phải là RPi, nơi anh ta có thể tạo ra cơ chế bảo vệ tốt hơn.
Krzysztof Adamski

1
Mặc dù tất cả các câu trả lời ở đây cung cấp một cuộc thảo luận tuyệt vời về sự đánh đổi và thách thức liên quan đến câu hỏi của tôi, tôi sẽ chấp nhận câu trả lời này ngay bây giờ vì nó có giải pháp cụ thể nhất. Sử dụng số sê-ri từ / Proc / cpuinfo có thể là liên kết bị thiếu.
Schrockwell

6

Thực tế, nếu mã và khóa nằm trên máy thẻ SD, họ sẽ có thể biên dịch lại mã, họ sẽ có thể khám phá các khóa và họ sẽ có thể trích xuất dữ liệu nhạy cảm.

Giống như mã hóa phim, DVD phải bao gồm tất cả thông tin cần thiết để giải mã phim để có thể hiển thị cho người xem, vì vậy tất cả các cơ chế bảo vệ bản sao phim cuối cùng đều bị tiêu diệt.

Điều tốt nhất bạn có thể làm là thay đổi tính kinh tế của kỹ thuật đảo ngược sản phẩm của bạn.

Là mã hóa và / hoặc obfuscation có giá trị nó?

Bây giờ chúng tôi đã thiết lập rằng không có cách nào để bảo vệ chính mình, các câu hỏi trở thành

  1. Làm thế nào có khả năng điều này xảy ra?
  2. Giá trị cho người khác về thuật toán và dữ liệu của bạn là gì?
  3. Chi phí cho họ khi mua giấy phép sử dụng phần mềm của bạn là bao nhiêu?
  4. Chi phí cho họ để sao chép thuật toán và dữ liệu của bạn là gì?
  5. Chi phí cho họ về kỹ thuật đảo ngược thuật toán và dữ liệu của bạn là gì?
  6. Chi phí cho bạn để bảo vệ thuật toán và dữ liệu của bạn là gì?

Nếu những điều này tạo ra một mệnh lệnh kinh tế quan trọng để bảo vệ thuật toán / dữ liệu của bạn thì bạn nên xem xét việc thực hiện nó. Chẳng hạn, nếu giá trị của dịch vụ và chi phí cho khách hàng đều cao, nhưng chi phí cho kỹ thuật đảo ngược mã của bạn thấp hơn nhiều so với chi phí phát triển nó, thì mọi người có thể thử nó.

Vì vậy, điều này dẫn đến câu hỏi của bạn

  • Làm thế nào để bạn bảo mật thuật toán và dữ liệu của bạn?

Obfuscation

Tùy chọn bạn đề xuất, làm xáo trộn mã, gây rối với tính kinh tế ở trên - nó cố gắng tăng đáng kể chi phí cho họ (5 ở trên) mà không làm tăng chi phí cho bạn (6) rất nhiều. Vấn đề là như với mã hóa DVD, nó chắc chắn sẽ thất bại và nếu có đủ sự khác biệt giữa 3, 4 và 5 thì cuối cùng sẽ có người làm điều đó.

Một tùy chọn khác có thể là một dạng Steganography , cho phép bạn xác định ai đã giải mã mã của bạn và bắt đầu phân phối nó. Chẳng hạn, nếu bạn có 100 giá trị float khác nhau như một phần dữ liệu của mình và lỗi 1 bit trong LSB của mỗi giá trị đó sẽ không gây ra sự cố với ứng dụng của bạn, hãy mã hóa một mã định danh duy nhất (cho mỗi khách hàng) vào các bit đó . Vấn đề là, nếu ai đó có quyền truy cập vào nhiều bản sao dữ liệu ứng dụng của bạn, thì rõ ràng là nó khác nhau, giúp việc xác định tin nhắn ẩn dễ dàng hơn.

Sự bảo vệ

Tùy chọn thực sự an toàn duy nhất là cung cấp một phần quan trọng trong phần mềm của bạn dưới dạng dịch vụ , thay vì đưa nó vào ứng dụng của bạn.

Về mặt khái niệm, ứng dụng của bạn sẽ thu thập tất cả dữ liệu cần thiết để chạy thuật toán của bạn, đóng gói nó dưới dạng yêu cầu đến máy chủ (do bạn kiểm soát) trên đám mây , sau đó dịch vụ của bạn sẽ tính toán kết quả của bạn và gửi lại cho khách hàng, sẽ hiển thị nó.

Điều này giữ cho tất cả các thuật toán và dữ liệu bí mật, độc quyền của bạn trong một miền mà bạn kiểm soát hoàn toàn và loại bỏ mọi khả năng của một khách hàng trích xuất.

Nhược điểm rõ ràng là khách hàng bị ràng buộc vào việc cung cấp dịch vụ của bạn, phải chịu sự chi phối của máy chủ và kết nối internet của họ. Về mặt tích cực, chúng luôn được cập nhật với các bản sửa lỗi. Thật không may, nhiều người phản đối SaaS vì chính xác những lý do này.

Đây sẽ là một bước rất lớn để thực hiện và có thể có chi phí lớn 6 ở trên, nhưng là cách duy nhất tôi có thể thấy để giữ cho thuật toán và dữ liệu của bạn hoàn toàn an toàn .


SaaS có thể là một tùy chọn, nhưng bạn phải lưu ý rằng bạn sẽ cần kiểm tra lại các điểm từ 1 đến 6 cho mọi máy chủ bạn đặt trực tuyến. Bạn cũng tiếp xúc với các cuộc tấn công DDoS.
Avio

4

Gần đây tôi đã phát minh ra giải pháp rất thanh lịch cho vấn đề không thể giải quyết này. Nó được lấy cảm hứng từ truyện tranh xkcd này:

nhập mô tả hình ảnh ở đây

Vì vậy, giải pháp được gọi là siêu keo . Nếu một thẻ SD siêu cấp cho PI Sẽ gần như không thể trích xuất thẻ mà không làm hỏng thẻ.

Bạn thậm chí có thể sử dụng đĩa SSD ngoài, được mã hóa bằng mật khẩu được lưu trên SD và cảm thấy an toàn!

nhập mô tả hình ảnh ở đây


Ai đó có thể dễ dàng tạo một tệp hình ảnh ( dd) từ đó và sử dụng nó cho phù hợp!
Vassilis

@Vassilis nó không thể mà không cần đăng nhập, hay không?
Kết nối

Bất cứ ai có hình ảnh linux trực tiếp đều có thể làm được! Không cần thiết phải là gốc của hệ thống của bạn .
Vassilis

@Vassilis tôi có thể yêu cầu bạn chỉ vào bất kỳ bài viết nào giải thích thủ tục này xin vui lòng
Kết nối

Điều đầu tiên xuất hiện trên google là đây
Vassilis

2

Biên dịch sang mã byte sẽ là chất chống thấm tốt nhất. Đối với mã hóa, phần mềm có thể được lưu trữ trong khối lượng TrueCrypt, nhưng chỉ khi người dùng không có quyền truy cập root; không có cách nào để lưu trữ mật khẩu một cách an toàn vì bộ nhớ / đĩa có thể bị đổ bất cứ lúc nào để kiểm tra. Ngay cả sự trợ giúp của các thiết bị bảo mật (thẻ thông minh) cũng sẽ không làm được gì nhiều, nếu phần mềm chạy ở nơi người dùng có rất nhiều tiện ích linux. Theo như tôi biết thì khởi động an toàn không phải là một tùy chọn trên R-Pi, điều này sẽ ngăn người dùng mày mò trong HĐH.


1
Mã hóa trong khi khởi động không an toàn như bạn nghĩ. Bạn chỉ cần truy cập / bỏ qua khởi động hệ thống bình thường và tất cả đều là thịt băm. Ngay cả Blurays cũng không có quyền này .. chết tiệt!
Piotr Kula

Chỉ các hệ thống hoàn toàn khép kín mới có thể bảo vệ ứng dụng của bạn. Tôi chỉ biết một thứ như vậy có thể lập trình được một chút - Thẻ Java.
Tomas Q.

1
Có - nhưng bạn luôn phải đặt mã PIN vào - mã PIN KHÔNG BAO GIỜ được lưu trên thẻ.
Piotr Kula

1

Nếu bạn muốn tạo một ứng dụng Thương mại thực sự, thì Pi, vì nó ở dạng người dùng cuối của nó là không tốt cho bạn!

Bạn sẽ phải thiết kế PCB của riêng bạn, ví dụ sử dụng bộ xử lý trên Pi và nhúng bộ nhớ flash vào PCB.

  1. Viết chương trình cơ sở cho BCM đã tạo một mã đăng nhập duy nhất dựa trên một số thuật toán bí mật hàng đầu chỉ có thể được sử dụng trong vòng 10 giây tiếp theo.
  2. Biên dịch kernel của riêng bạn với phần mềm riêng của bạn và kích hoạt một số tính năng Linux cho phép bạn gắn root từ một tệp được mã hóa trên flash, có chứa một phân vùng được mã hóa khác với phần mềm của bạn. (Bảo vệ kép)
  3. Chương trình cơ sở BCM của bạn sẽ tạo ra một bí mật hàng đầu một khi tắt khóa auth dựa trên một số thuật toán thông minh hoặc khóa công khai và chuyển nó đến kernal linux tùy chỉnh của bạn, nó sẽ tải phân vùng gốc được mã hóa và thực hiện thêm một số công cụ mã hóa trong quá trình khởi động để tải ổ đĩa phần mềm được mã hóa của bạn trong hình ảnh được mã hóa.

LỜI KHUYÊN

  • Các khóa xác thực tốt không dài 8-16 ký tự. Điều quan trọng là cung cấp các khóa xác thực dài 256/512 byte bằng cách sử dụng các ký hiệu hệ thống nhiều hơn (HEX) và ít ký tự (ASCII)
  • Không sử dụng AES, TKIP vì nó dễ bị bẻ khóa
  • Cho đến ngày hôm nay- Mã hóa Whirlpool là một trong những cách phức tạp nhất để bẻ khóa bằng cách sử dụng các khóa 256/512
  • Ngay cả khi tin tặc có thể loại bỏ ổ đĩa flash hoặc đổ nội dung. phần mềm của bạn được mã hóa hai lần.
  • Nếu họ chặn khóa xác thực, sẽ rất khó thoát ra khỏi chương trình cơ sở (vì BCM có thể ngăn chặn các lần đổ chương trình cơ sở)
  • Một số rom flash thông minh cũng có một tính năng để ngăn chặn bộ nhớ đầy.
  • Nếu bạn đang thiết kế PCB, bạn sẽ triển khai (như Dell và Apple) một chip bảo mật cung cấp tất cả dữ liệu và khóa mã hóa của bạn và ngăn chặn các nỗ lực tàn bạo. Một số Dell có khả năng tự hủy để sử dụng cho Quân đội. Nếu bạn đặt mật khẩu BIOS không chính xác 2 lần, nó sẽ xóa sạch các ổ đĩa bằng bom phân tán. Bạn có thể thực hiện tương tự nếu bạn phát hiện các thao tác phím xác thực.

Cuối ngày. Raspberry Pi dành cho mục đích giáo dục cho trẻ em học cách sử dụng Linux và viết một số chương trình.

Nó không phù hợp cho sử dụng thương mại cấu hình cao. Bạn cần phải tạo ra thiết bị của riêng bạn và đưa ra các hệ thống bảo vệ của riêng bạn. Bởi vì nếu chỉ có bạn và không ai khác biết bạn bảo vệ thông tin sở hữu của mình như thế nào thì khả năng ai đó hack nó bằng cách sử dụng khai thác hoặc vũ phu đã biết .. là 0,001%

THAY ĐỔI

  • Viết phần mềm của bạn để có thể biên dịch và triển khai hệ thống đích ở định dạng nhị phân. Ví dụ EXE cho các cửa sổ chạy trên .NET, JAR cho Java hoặc (Không chắc chắn trong linux, C ++?)
  • Hãy nhớ rằng, bảo mật bạn muốn càng tốt - Bạn sẽ phải chi nhiều tiền hơn cho nó. Không có ngoại lệ.

1

Một trong những giải pháp là sử dụng địa chỉ MAC của RaspberryPi, gần như là duy nhất cho một Pi nhất định. Xác minh địa chỉ này bên trong mã của bạn và cung cấp phiên bản đã biên dịch. Điều này sẽ làm cho kỹ thuật đảo ngược khó khăn.

Đối với những người sao chép một cách mù quáng thẻ SD sang một thẻ mới, nó sẽ không hoạt động với họ trên một Pi khác. Điều này sẽ loại bỏ phần lớn những người ăn cắp phần mềm của bạn. Những người khác đủ thông minh để phá vỡ điều này có thể đủ thông minh để làm lại phần mềm, họ không nhiều và tôi không nghĩ họ sẽ làm tổn thương doanh số của bạn.


0

Bạn có thể sử dụng giải pháp dựa trên heo đất: Bảo vệ nối tiếp phần mềm cho Raspberry Pi


2
Sửa lỗi cho tôi nếu tôi sai nhưng thiết bị này dường như không thêm bất kỳ sự bảo vệ nào đối với kỹ thuật đảo ngược. Một kiểm tra mã hóa đơn giản trên số sê-ri CPU sẽ làm tương tự.
EDP

0

Tại sao không thêm đèn flash dựa trên SPI vào bảng vận chuyển của bạn và lưu mã của bạn trên đó? Tôi đang xem xét tùy chọn này cho sản phẩm của riêng tôi. Trong trường hợp SD bị hỏng, tôi muốn người dùng cuối có thể viết một cái mới, bao gồm một raspbian tùy chỉnh và mã để gắn flash SPI và chạy tệp thực thi.

Một tùy chọn khác là lưu trữ khóa mã hóa trong RTC của bạn. Hầu hết các chip RTC có một số lưu trữ và chúng có thể được lập trình sẵn với khóa cho phép mở khóa và gắn kết thực thi từ SD hoặc từ flash SPI.


-4

Tôi tin rằng tất cả các CPU được sử dụng trong phạm vi Raspberry Pi đều hỗ trợ khởi động an toàn của riêng chúng. Tôi tin rằng nó cần 12 volt để phản xạ lại 4,8,16,32 hoặc 64K của đèn flash bên trong hoặc EEPROM mà bản thân pi không có. Từ họ, bạn có thể thiết lập Trustzone bằng mã của mình để có thể nhìn thấy tất cả những thứ tốt. Tôi cũng hiểu rằng cả hai dạng RAM tĩnh chỉ ổn định cho một số lần ghi lại nhất định. Bước đầu tiên của tôi là có một CPU dự phòng và thử khởi động lại bộ nhớ khởi động an toàn này trong vài giờ hoặc vài ngày. Cuối cùng, tất cả các bit trở nên cố định để không ai khác có thể sửa đổi mã của bạn và tùy thuộc vào sản phẩm thực tế, bạn có thể định kỳ yêu cầu nhận dạng 2 yếu tố (như ngân hàng) để sản phẩm phát ra mã & mã kích hoạt lại được gửi đến địa chỉ email. Nếu bạn sửa đổi pi một chút, Tôi tin rằng ARM cũng có CPUID nên chúng là một số mức bảo mật mà bạn có thể đạt được. Ý tôi là, bạn cũng có thể cung cấp một tin nhắn SMS đến một số cụ thể. Rất nhiều cách.


1
Xin chào và chào mừng. Có rất nhiều phỏng đoán và tin vào bài viết đó. Trước khi khuyến nghị mọi người nên áp dụng 12 V cho Pi, rất nên đưa ra câu trả lời chi tiết hơn và sao lưu bằng các tài liệu tham khảo phù hợp.
Ghanima
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.