Saya mencoba menyalin-melindungi beberapa pekerjaan, yang merupakan kartu SD yang dapat di-boot mem-boot kernel Linux pada perangkat ARM (Raspberry Pi). Saya menggunakan pendekatan ini:
- Pendekatan ini menggunakan initrd untuk me-mount sistem file root terenkripsi.
- Initrd menghasilkan kata sandi sistem file sesuai dengan CID kartu SD. (fungsi hash digunakan, belum memutuskan md5 atau sha1). Initrd akan mencoba me-mount sistem file menggunakan kata sandi yang dihasilkan.
- Sekarang di sini adalah bagian yang paling menarik / dicurigai: Initrd itu sendiri dienkripsi menggunakan fungsi C kustom, pada dasarnya setiap byte XOR'ed menggunakan generator acak semu yang dibuat khusus. Kernel dimodifikasi untuk memiliki fungsi enkripsi yang sama, yang berfungsi sebagai dekripsi.
- Sistem itu sendiri dilucuti sehingga tidak ada cara untuk menggunakan keyboard atau penyimpanan eksternal. Satu aplikasi menjalankan layar penuh.
Jadi setelah bootloader memuat kernel dan initrd, kernel mendekripsi initrd dan mengeksekusi skrip initnya, yang akan menghasilkan kata sandi dan me-mount sistem file root.
Pertanyaan saya adalah: Betapa mudahnya untuk mematahkan pengaturan ini (untuk mendekripsi sistem file root dan membuatnya boot dari kartu SD apa pun)? Apa bagian yang paling lemah? Seberapa mudah mendekompilasi kernel dan menemukan fungsi-fungsi mengenkripsi kustom?
EDIT: Berikut adalah beberapa koreksi agar Anda tidak membuang waktu dengan hal-hal yang sudah jelas:
- Perangkat root akan dienkripsi dengan LUKS (aes256) dan kunci akan dihasilkan oleh beberapa fungsi HMAC menggunakan CID kartu SD dan garam.
- Algoritma pseudo acak untuk enkripsi initramfs sebenarnya adalah RC4, hanya kunci yang akan dihasilkan menggunakan beberapa fungsi kustom, karena jika saya hanya menyimpan kunci dalam array byte itu membuatnya sangat mudah untuk mengambilnya (ya ini adalah keamanan melalui ketidakjelasan tapi sepertinya tidak ada cara lain).
- Saya mengerti bahwa jika menggunakan emulator kartu SD seseorang dapat membuat salinan dari sistem ini mulai tetapi ini tidak masalah bagi saya, karena itu cukup sulit dan tidak ada yang bisa melakukan ini. (Juga tidak ada yang mau berurusan dengan emulator)