Próbuję zabezpieczyć przed kopiowaniem niektóre prace, którymi jest bootowalna karta SD uruchamiająca jądro Linuksa na urządzeniu ARM (Raspberry Pi). Korzystam z tego podejścia:
- Podejście wykorzystuje initrd do zamontowania zaszyfrowanego głównego systemu plików.
- Initrd generuje hasło systemu plików zgodnie z CID karty SD. (używana jest funkcja skrótu, jeszcze nie zdecydowała się na md5 lub sha1). Initrd spróbuje zamontować system plików przy użyciu wygenerowanego hasła.
- Oto najbardziej interesująca / podejrzana część: sam initrd jest szyfrowany za pomocą niestandardowej funkcji C, w zasadzie każdy bajt jest XOR'owany za pomocą niestandardowego generatora pseudolosowego. Jądro zostało zmodyfikowane, aby miało tę samą funkcję szyfrowania, która działa jak deszyfrator.
- Sam system jest rozebrany, więc nie ma możliwości korzystania z klawiatury lub pamięci zewnętrznej. Jedna aplikacja działa na pełnym ekranie.
Zatem po załadowaniu jądra i initrd przez moduł ładujący jądro odszyfrowuje initrd i wykonuje skrypt inicjujący, który wygeneruje hasło i zamontuje główny system plików.
Moje pytanie brzmi: jak łatwo byłoby przerwać tę konfigurację (odszyfrować główny system plików i uruchomić go z dowolnej karty SD)? Jakie są najsłabsze części? Jak łatwo jest zdekompilować jądro i znaleźć niestandardowe funkcje szyfrowania?
EDYCJA: Oto kilka poprawek, abyś nie tracił czasu na oczywiste rzeczy:
- Urządzenie root zostanie zaszyfrowane za pomocą LUKS (aes256), a klucz zostanie wygenerowany przez jakąś funkcję HMAC przy użyciu CID karty SD i soli.
- Pseudolosowym algorytmem szyfrowania initramfs będzie w rzeczywistości RC4, tylko klucz zostanie wygenerowany za pomocą jakiejś niestandardowej funkcji, ponieważ jeśli po prostu przechowuję klucz w tablicy bajtów, można go łatwo odzyskać (tak, to jest bezpieczeństwo poprzez niejasność ale wydaje się, że nie ma innego wyjścia).
- Rozumiem, że jeśli używa się emulatora karty SD, ktoś może zrobić kopię tego systemu, ale jest to w porządku dla mnie, ponieważ jest to dość trudne i nie każdy może to zrobić. (Również nie każdy będzie chciał poradzić sobie z emulatorami)