เรียนรู้กระบวนการที่แน่นอนสําหรับการแยกโครงสร้างและวิเคราะห์เฟิร์มแวร์
อินเทอร์เน็ตของสรรพสิ่ง (IoT) มีการเติบโตอย่างมากในช่วงไม่กี่ปีที่ผ่านมา ตั้งแต่เครื่องใช้ในครัว นาฬิกาข้อมือ ไปจนถึงเซ็นเซอร์อุตสาหกรรม จํานวนและลักษณะของอุปกรณ์ประเภทนี้มีมากมาย เช่นเดียวกับข้อบกพร่องที่เกี่ยวข้องที่อาจเกิดขึ้น สิ่งหนึ่งที่พวกเขามีเหมือนกันคือเฟิร์มแวร์ซึ่งเป็นซอฟต์แวร์ที่ติดตั้งบนอุปกรณ์ขนาดเล็กเหล่านี้ซึ่งช่วยให้สามารถโต้ตอบระหว่างอุปกรณ์และฮาร์ดแวร์ได้
ในบทความนี้ เราจะอธิบายขั้นตอนของวิธีการทําวิศวกรรมย้อนกลับเฟิร์มแวร์เพื่อค้นหาและใช้ประโยชน์จากช่องโหว่ โปรดทราบว่าวิธีการนี้ขึ้นอยู่กับประเภทของอุปกรณ์ลักษณะและคุณสมบัติของอุปกรณ์และอื่น ๆ เสมอ
ขั้นตอนแรกในวิศวกรรมย้อนกลับของเฟิร์มแวร์คือการวิเคราะห์อุปกรณ์ IoT และรับเฟิร์มแวร์ ขั้นตอนบางอย่างที่เราสามารถปฏิบัติตามได้คือ:
ขั้นตอนของเฟิร์มแวร์วิศวกรรมย้อนกลับนี้ประกอบด้วยการเข้าถึงเฟิร์มแวร์ files. จากจุดนี้สามารถทําการวิเคราะห์แบบคงที่หรือแบบไดนามิกได้ Binwalk เป็นหนึ่งในเครื่องมือที่มีชื่อเสียงในการทํางานนี้ให้สําเร็จ
รูปที่ 1: เครื่องมือ Binwalk ที่ใช้สําหรับการแยกเฟิร์มแวร์
ด้วยการใช้วิธีนี้ อิมเมจเฟิร์มแวร์และอิมเมจเคอร์เนลที่พบสามารถทําได้ขึ้นอยู่กับลักษณะของอุปกรณ์ ตัวอย่างเช่น เฟิร์มแวร์ล่าสุดถูกเข้ารหัส และจําเป็นต้องมีขั้นตอนเพิ่มเติมในการเลี่ยงหรือถอดรหัสเพื่อดําเนินการวิเคราะห์ต่อไป อย่างไรก็ตาม นี่ไม่ใช่ประเด็นที่อยู่ระหว่างการอภิปรายในบทความนี้
บางครั้งหลังจากแยกระบบไฟล์เฟิร์มแวร์แล้วการเลียนแบบเป็นวิธีที่ดีกว่าในการทดสอบฟังก์ชันทั้งหมดเพื่อค้นหาช่องโหว่ ด้วยเหตุนี้ buildroot จึงเป็นเครื่องมือที่เรียบง่าย มีประสิทธิภาพ และใช้งานง่ายในการสร้างระบบ Linux แบบฝังตัวผ่านการคอมไพล์ข้าม
รูปที่ 2: เครื่องมือ Buildroot ที่ใช้ในการสร้างอิมเมจเคอร์เนลตั้งแต่เริ่มต้น
การจําลองเฟิร์มแวร์เป็นช่วงเวลาของการดําเนินการเฟิร์มแวร์โดยไม่มีอุปกรณ์จริงดังนั้นเราจึงต้องเลียนแบบ มีบางวิธี เช่น การจําลองผู้ใช้และการจําลองแบบเต็ม
ด้วยการใช้ QEMU การจําลองไบนารีเดี่ยวจากเฟิร์มแวร์สามารถทําได้โดยใช้คําสั่งต่อไปนี้
qemu-<arch>-static
qemu-<arch> -L <prefix> <binary>
รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถพบได้ที่นี่
ในทางกลับกันแนวทางที่ดีที่สุดคือการจําลองแบบเต็มเสมอเนื่องจากเราสามารถใช้ประโยชน์จากคุณสมบัติเฟิร์มแวร์ทั้งหมดได้
ด้วยการใช้ buildroot เพื่อสร้างอิมเมจตั้งแต่เริ่มต้น เราได้รับสคริปต์ง่ายๆ เกี่ยวกับวิธีเรียกใช้ QEMU ด้วยอิมเมจเป้าหมายและการกําหนดค่าเคอร์เนลและ QEMU ที่เหมาะสม กล่าวโดยย่อในการสร้าง VM เต็มรูปแบบที่ทํางานใน QEMU เราต้องการข้อกําหนดดังต่อไปนี้:
เมื่อมีไฟล์ทั้งหมดแล้วเราสามารถเริ่ม QEMU VM ด้วยสถาปัตยกรรม CPU ที่เหมาะสมด้วยคําสั่งใดคําสั่งหนึ่งต่อไปนี้:
หลังจากเริ่มต้นและกําหนดค่า VM แล้ว เพิ่มการตั้งค่าที่เหมาะสมขึ้นอยู่กับเฟิร์มแวร์และระบบปฏิบัติการ เราสามารถเรียกใช้ไบนารีบางตัวได้
รูปที่ 3: การจําลองแบบเต็มของเราเตอร์เฉพาะและเว็บอินเตอร์เฟส
ภูมิทัศน์ของ IoT ค่อนข้างกว้างใหญ่ และจํานวนอุปกรณ์ประเภทต่างๆ ยังทําให้ยากต่อการสร้างขั้นตอนที่เหมาะสมสําหรับการใช้เฟิร์มแวร์วิศวกรรมย้อนกลับ แม้ว่าบทความนี้จะไม่ได้อธิบายเครื่องมือและเทคนิคทั้งหมดที่ใช้ในบริบทนี้ แต่ก็สามารถเป็นจุดเริ่มต้นสําหรับการสํารวจสาขานี้ได้