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:
- 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.
- 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.
- 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ã.
- 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:
- 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.
- 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).
- 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.