ฉันพยายามคัดลอก - ปกป้องงานบางอย่างซึ่งเป็นการ์ด SD ที่สามารถบู๊ตได้ซึ่งเป็นการบูทเคอร์เนล Linux บนอุปกรณ์ ARM (Raspberry Pi) ฉันใช้วิธีนี้:
- วิธีใช้ initrd เพื่อเมาท์ระบบไฟล์รูทที่เข้ารหัส
- initrd สร้างรหัสผ่านของระบบไฟล์ตาม CID ของการ์ด SD (ใช้ฟังก์ชันแฮชไม่ได้ตัดสินใจมากกว่า md5 หรือ sha1) เริ่มต้นจะพยายามเมานต์ระบบไฟล์โดยใช้รหัสผ่านที่สร้างขึ้น
- ตอนนี้ที่นี่เป็นส่วนที่น่าสนใจที่สุด / ผู้ต้องสงสัย: ตัวเริ่มต้นถูกเข้ารหัสโดยใช้ฟังก์ชั่น C ที่กำหนดเองโดยทั่วไปแต่ละไบต์คือ XOR'ed โดยใช้เครื่องกำเนิดไฟฟ้าแบบหลอกเทียมแบบกำหนดเอง เคอร์เนลถูกปรับเปลี่ยนให้มีฟังก์ชั่นการเข้ารหัสเช่นเดียวกันซึ่งทำงานเป็นตัวถอดรหัส
- ระบบถูกถอดออกดังนั้นจึงไม่มีวิธีใช้แป้นพิมพ์หรือที่จัดเก็บข้อมูลภายนอก แอปเดียวทำงานแบบเต็มหน้าจอ
ดังนั้นหลังจาก bootloader โหลดเคอร์เนลและ initrd เคอร์เนลถอดรหัส initrd และเรียกใช้งานสคริปต์ init ซึ่งจะสร้างรหัสผ่านและติดตั้งระบบไฟล์รูท
คำถามของฉันคือ: มันจะง่ายกว่าที่จะทำลายการตั้งค่านี้ (เพื่อถอดรหัสระบบไฟล์รากและทำให้มันบูตจากการ์ด SD ใด ๆ )? ชิ้นส่วนที่อ่อนแอที่สุดคืออะไร? decompile kernel และค้นหาฟังก์ชั่นการเข้ารหัสที่กำหนดเองนั้นง่ายแค่ไหน?
แก้ไข: นี่คือการแก้ไขบางอย่างเพื่อให้คุณไม่ต้องเสียเวลากับสิ่งที่ชัดเจน:
- อุปกรณ์รูทจะถูกเข้ารหัสด้วย LUKS (aes256) และคีย์จะถูกสร้างขึ้นโดยฟังก์ชัน HMAC บางอย่างโดยใช้ CID ของการ์ด SD และเกลือบางส่วน
- อัลกอริทึมแบบหลอกหลอกสำหรับการเข้ารหัส initramfs จะเป็นจริง RC4 เพียงคีย์จะถูกสร้างขึ้นโดยใช้ฟังก์ชั่นที่กำหนดเองเพราะถ้าฉันเพียงแค่เก็บกุญแจไว้ในอาร์เรย์ไบต์มันทำให้ง่ายต่อการเรียกคืน (ใช่นี่คือความปลอดภัยผ่านความสับสน แต่ดูเหมือนไม่มีวิธีอื่น)
- ฉันเข้าใจว่าถ้าใช้ตัวจำลอง SD การ์ดใครบางคนสามารถทำสำเนาของระบบนี้เริ่มต้นได้ แต่มันก็โอเคกับฉันเพราะมันค่อนข้างยากและไม่มีใครสามารถทำสิ่งนี้ได้