Làm thế nào dễ dàng để crack bảo vệ bản sao sau đây? [đóng cửa]


11

Tôi đang cố gắng sao chép bảo vệ một số công việc, đó là thẻ SD có thể khởi động để khởi động hạt nhân Linux trên thiết bị ARM (Raspberry Pi). Tôi đang sử dụng phương pháp này:

  1. Cách tiếp cận sử dụng một initrd để gắn kết một hệ thống tập tin gốc được mã hóa.
  2. Initrd tạo mật khẩu của hệ thống tập tin theo CID của thẻ SD. (một hàm băm được sử dụng, chưa quyết định trên md5 hoặc sha1). Ban đầu sẽ cố gắng gắn kết hệ thống tập tin bằng mật khẩu được tạo.
  3. Bây giờ đây là phần thú vị / đáng ngờ nhất: Bản thân initrd được mã hóa bằng hàm C tùy chỉnh, về cơ bản mỗi byte được XOR'ed sử dụng một trình tạo ngẫu nhiên giả được tạo tùy chỉnh. Kernel được sửa đổi để có cùng chức năng mã hóa, hoạt động như bộ giải mã.
  4. Bản thân hệ thống bị tước bỏ nên không có cách nào sử dụng bàn phím hoặc bộ nhớ ngoài. Một ứng dụng duy nhất chạy toàn màn hình.

Vì vậy, sau khi bộ nạp khởi động tải kernel và initrd, kernel sẽ giải mã initrd và thực thi tập lệnh init của nó, nó sẽ tạo mật khẩu và gắn kết hệ thống tập tin gốc.

Câu hỏi của tôi là: Làm thế nào dễ dàng để phá vỡ thiết lập này (để giải mã hệ thống tập tin gốc và làm cho nó khởi động từ bất kỳ thẻ SD nào)? Các phần yếu nhất là gì? Làm thế nào dễ dàng để dịch ngược kernel và tìm các hàm mã hóa tùy chỉnh đó?

EDIT: Dưới đây là một số chỉnh sửa để bạn không lãng phí thời gian với những điều hiển nhiên:

  1. Thiết bị gốc sẽ được mã hóa bằng LUKS (aes256) và khóa sẽ được tạo bởi một số chức năng HMAC bằng CID của thẻ SD và một ít muối.
  2. Thuật toán giả ngẫu nhiên để mã hóa initramfs trên thực tế sẽ là RC4, chỉ là khóa sẽ được tạo bằng một số chức năng tùy chỉnh, bởi vì nếu tôi chỉ lưu trữ khóa trong một mảng byte thì việc lấy nó trở nên đơn giản (vâng, đây là bảo mật thông qua che khuất nhưng dường như không còn cách nào khác).
  3. Tôi hiểu rằng nếu sử dụng trình giả lập thẻ SD, ai đó có thể tạo một bản sao của hệ thống này bắt đầu nhưng điều này là ổn với tôi, vì nó khá khó khăn và không phải ai cũng có thể làm điều này.

Hạt nhân và initrd được lưu trữ ở đâu?
dùng1686

Tất cả được lưu trữ trên một thẻ SD. Cả hai trong các tập tin riêng biệt. Được lưu trữ như bình thường trong / boot.
dimovnike

Câu trả lời:


7

Làm thế nào dễ dàng để phá vỡ thiết lập này (để giải mã hệ thống tập tin gốc và làm cho nó khởi động từ bất kỳ thẻ sd)?

Việc "phá vỡ" thiết lập của bạn khó đến mức nào tùy thuộc vào số lượng bit của entropy trong bất kỳ phương thức nào bạn đang sử dụng để ký / mã hóa chính hệ thống tệp (vì điều này xác định tổng số kết hợp duy nhất có thể được sử dụng để bắt buộc Mật khẩu).

Các phần yếu nhất là gì?

Không còn nghi ngờ gì nữa, sử dụng CID được xác định trước làm mật khẩu, cũng như sử dụng hàm tạo số giả ngẫu nhiên tùy chỉnh.

CID của thẻ SD chỉ được coi là chỉ đọc, nhưng không có gì lạ khi tìm thấy các thiết bị bộ nhớ flash không tuân thủ trong thời đại ngày nay. Một số người thậm chí đã chứng minh khả năng ghi đè CID bằng thẻ SD nhất định. Điều này sẽ giúp việc đánh dấu mật khẩu dễ dàng hơn, đặc biệt nếu một người chỉ giả lập thẻ SD sau khi nhân bản thẻ của bạn (đây là điều mà bạn có thể muốn xem xét).

Cuối cùng, sử dụng bất kỳ loại trình tạo số giả ngẫu nhiên nào cũng có một số sai sót nội tại, chính xác là vì nó không ngẫu nhiên - có một lý do nó được gọi là giả ngẫu nhiên . Có thể tốt hơn khi sử dụng bộ tải khởi động được mã hóa được tạo sẵn (như TrueCrypt hoặc LUKS, cả hai đều hoạt động trên Raspberry Pi) và tránh phải thực hiện bất kỳ sửa đổi kernel thủ công nào.

Làm thế nào dễ dàng để dịch ngược kernel và tìm các hàm mã hóa tùy chỉnh đó?

Rất khó để dịch ngược mọi thứ. Ngược lại, việc hủy lắp ráp một ứng dụng được biên dịch thường không quan trọng và có nhiều công cụ có thể được sử dụng để hỗ trợ lắp ráp kỹ thuật đảo ngược trở lại một ngôn ngữ cấp cao khác. Nếu kẻ tấn công có quyền truy cập ngay cả vào kernel đã biên dịch, việc phân tích thứ gì đó giống như trình tạo số giả ngẫu nhiên có lẽ là không đáng kể trừ khi mã bị che giấu nhằm mục đích.


TL, DR : Không phát minh lại bánh xe khi nói đến mã hóa và bảo mật, hãy gắn bó với sự cố gắng và sự thật. Có một số tùy chọn mã hóa toàn bộ đĩa đã có sẵn và đã được chứng minh là chỉ hoạt động tốt trên Raspberry Pi. Tôi sẽ tránh sử dụng CID của thẻ SD như một loại "mật khẩu" - ngay cả khi không thể thay đổi, vẫn có cách để giả mạo giá trị này.

Bảo vệ bản sao đã được bao gồm trong đặc tả thẻ SD là CPRM .


cảm ơn câu trả lời Tôi biết về CPRM nhưng thông số kỹ thuật của nó được đóng bằng NDA và tiêu tốn rất nhiều tiền (từ những gì tôi đã hiểu). Đối với LUKS và Truecrypt, chúng yêu cầu khóa được nhập khi khởi động thủ công. Nếu tôi sửa đổi bộ tải khởi động TrueCrypt để tạo khóa từ CID bằng cách sử dụng một số chức năng hmac thì nó có tốt hơn cái này không? Tôi cũng hiểu rằng nó có thể được thực hiện với trình giả lập thẻ SD nhưng điều đó tốt với tôi, đây là mức độ khó thuận tiện cho cướp biển. (Tôi hiểu ở đây là không bảo vệ 100% miễn là khóa được tự kiểm soát trong thiết bị)
dimovnike

@ user2021201 thực sự đó là những gì tôi đã cố gắng dẫn bạn tới. Có thể khá dễ dàng để sửa đổi bộ tải khởi động Truecrypt từ nguồn, mặc dù tôi không chắc việc lấy CID từ bộ tải khởi động sẽ khó khăn như thế nào (vì bạn không có hệ điều hành được tải để truy vấn thông số kỹ thuật của thẻ SD từ ). Tuy nhiên, nếu bạn đã quản lý, nó có thể là một giải pháp đủ và chấp nhận được cho nhu cầu của bạn.
Đột phá

1

Ai đó có kỹ năng sẽ không gặp nhiều khó khăn để phá vỡ điều này. Việc khởi động thẻ SD theo trình giả lập tương đối dễ dàng và sau đó chỉ cần đọc các phím ra khỏi RAM. Sau đó, họ đăng một phiên bản mà không có sự bảo vệ bản sao lên Pirate Bay (v.v.), và đó là điều đó.

Hoặc, sử dụng trình giả lập để tiêm shellcode vào hệ thống mô phỏng đang chạy. Sau đó sử dụng hệ thống đang chạy để sao chép các rootfs đã giải mã (hoặc đọc các khóa bằng cách sử dụng dmsetup table --showkeys, v.v.)

Một tìm kiếm nhanh cho thấy sự tồn tại của trình giả lập Raspberry Pi , vì vậy một phần công việc đã được thực hiện.

Bạn đã có một vấn đề khác, đặc biệt là điều này:

Kernel được sửa đổi để có cùng chức năng mã hóa, hoạt động như bộ giải mã.

Bất cứ ai bạn phân phối này đều được hưởng mã nguồn hạt nhân, theo các điều khoản của GPL. Vì vậy, bạn sẽ không cần phải tháo rời nó, bạn chỉ có thể sử dụng diffđể tìm chức năng bổ sung.

(Không phải việc tìm kiếm nó thông qua việc tháo gỡ sẽ khó như vậy, như bạn có thể, ví dụ, kiểm tra so với hạt nhân chứng khoán)

Tôi không hoàn toàn quen thuộc với mã khởi động Raspberry Pi, nhưng nếu bạn có thể khởi động lại bộ tải khởi động bằng khóa mật mã được nhúng (sau đó được chuyển đến kernel), thì ít nhất đó không phải là trên thẻ SD, vì vậy nó ' Tôi cố gắng để nó khởi động trong trình giả lập.


vâng tôi biết về các vấn đề cấp phép, tôi vẫn đang tìm cách để giữ nguyên kernel và thậm chí chuyển sang kernel FreeBSD nhưng bây giờ chúng ta chỉ thảo luận về các vấn đề công nghệ. Ý tưởng bootloader rất thú vị nhưng tôi không thể tìm ra cách thực hiện điều này, rõ ràng là không có cách nào như vậy.
dimovnike
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.