วิศวกรรมย้อนกลับเฟิร์มแวร์: คําแนะนําทีละขั้นตอน

เรียนรู้กระบวนการที่แน่นอนสําหรับการแยกโครงสร้างและวิเคราะห์เฟิร์มแวร์

วิศวกรรมย้อนกลับเฟิร์มแวร์: คําแนะนําทีละขั้นตอน

อินเทอร์เน็ตของสรรพสิ่ง (IoT) มีการเติบโตอย่างมากในช่วงไม่กี่ปีที่ผ่านมา ตั้งแต่เครื่องใช้ในครัว นาฬิกาข้อมือ ไปจนถึงเซ็นเซอร์อุตสาหกรรม จํานวนและลักษณะของอุปกรณ์ประเภทนี้มีมากมาย เช่นเดียวกับข้อบกพร่องที่เกี่ยวข้องที่อาจเกิดขึ้น สิ่งหนึ่งที่พวกเขามีเหมือนกันคือเฟิร์มแวร์ซึ่งเป็นซอฟต์แวร์ที่ติดตั้งบนอุปกรณ์ขนาดเล็กเหล่านี้ซึ่งช่วยให้สามารถโต้ตอบระหว่างอุปกรณ์และฮาร์ดแวร์ได้

ในบทความนี้ เราจะอธิบายขั้นตอนของวิธีการทําวิศวกรรมย้อนกลับเฟิร์มแวร์เพื่อค้นหาและใช้ประโยชน์จากช่องโหว่ โปรดทราบว่าวิธีการนี้ขึ้นอยู่กับประเภทของอุปกรณ์ลักษณะและคุณสมบัติของอุปกรณ์และอื่น ๆ เสมอ

1. การรับสําเนาเฟิร์มแวร์

ขั้นตอนแรกในวิศวกรรมย้อนกลับของเฟิร์มแวร์คือการวิเคราะห์อุปกรณ์ IoT และรับเฟิร์มแวร์ ขั้นตอนบางอย่างที่เราสามารถปฏิบัติตามได้คือ:

  • กําลังดาวน์โหลดเฟิร์มแวร์จากผู้ขาย web เว็บไซต์
  • การแยกเฟิร์มแวร์ผ่านคุณสมบัติการอัปเดตอุปกรณ์บังคับคนกลาง (ใช้พร็อกซีเพื่อจับภาพ URI แบบเต็ม)
  • การรับเฟิร์มแวร์จากตัวอุปกรณ์เอง ตัวอย่างเช่น จากชิปผ่านคลิป SOIC (Small Outline Integrated Circuit)

2. การแยกเฟิร์มแวร์

ขั้นตอนของเฟิร์มแวร์วิศวกรรมย้อนกลับนี้ประกอบด้วยการเข้าถึงเฟิร์มแวร์ files. จากจุดนี้สามารถทําการวิเคราะห์แบบคงที่หรือแบบไดนามิกได้ Binwalk เป็นหนึ่งในเครื่องมือที่มีชื่อเสียงในการทํางานนี้ให้สําเร็จ

รูปที่ 1: เครื่องมือ Binwalk ที่ใช้สําหรับการแยกเฟิร์มแวร์

ด้วยการใช้วิธีนี้ อิมเมจเฟิร์มแวร์และอิมเมจเคอร์เนลที่พบสามารถทําได้ขึ้นอยู่กับลักษณะของอุปกรณ์ ตัวอย่างเช่น เฟิร์มแวร์ล่าสุดถูกเข้ารหัส และจําเป็นต้องมีขั้นตอนเพิ่มเติมในการเลี่ยงหรือถอดรหัสเพื่อดําเนินการวิเคราะห์ต่อไป อย่างไรก็ตาม นี่ไม่ใช่ประเด็นที่อยู่ระหว่างการอภิปรายในบทความนี้

3. การสร้างอิมเมจเคอร์เนลตั้งแต่เริ่มต้น

บางครั้งหลังจากแยกระบบไฟล์เฟิร์มแวร์แล้วการเลียนแบบเป็นวิธีที่ดีกว่าในการทดสอบฟังก์ชันทั้งหมดเพื่อค้นหาช่องโหว่ ด้วยเหตุนี้ buildroot จึงเป็นเครื่องมือที่เรียบง่าย มีประสิทธิภาพ และใช้งานง่ายในการสร้างระบบ Linux แบบฝังตัวผ่านการคอมไพล์ข้าม

รูปที่ 2: เครื่องมือ Buildroot ที่ใช้ในการสร้างอิมเมจเคอร์เนลตั้งแต่เริ่มต้น

4. การจําลองภาพเคอร์เนลด้วย QEMU

การจําลองเฟิร์มแวร์เป็นช่วงเวลาของการดําเนินการเฟิร์มแวร์โดยไม่มีอุปกรณ์จริงดังนั้นเราจึงต้องเลียนแบบ มีบางวิธี เช่น การจําลองผู้ใช้และการจําลองแบบเต็ม

ด้วยการใช้ QEMU การจําลองไบนารีเดี่ยวจากเฟิร์มแวร์สามารถทําได้โดยใช้คําสั่งต่อไปนี้

qemu-<arch>-static
qemu-<arch> -L <prefix> <binary>

รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถพบได้ที่นี่

ในทางกลับกันแนวทางที่ดีที่สุดคือการจําลองแบบเต็มเสมอเนื่องจากเราสามารถใช้ประโยชน์จากคุณสมบัติเฟิร์มแวร์ทั้งหมดได้

ด้วยการใช้ buildroot เพื่อสร้างอิมเมจตั้งแต่เริ่มต้น เราได้รับสคริปต์ง่ายๆ เกี่ยวกับวิธีเรียกใช้ QEMU ด้วยอิมเมจเป้าหมายและการกําหนดค่าเคอร์เนลและ QEMU ที่เหมาะสม กล่าวโดยย่อในการสร้าง VM เต็มรูปแบบที่ทํางานใน QEMU เราต้องการข้อกําหนดดังต่อไปนี้:

  • ไฟล์อิมเมจดิสก์ QEMU
  • อิมเมจเคอร์เนล Linux ที่คอมไพล์สําหรับสถาปัตยกรรมเป้าหมาย และ
  • อิมเมจดิสก์ RAM เริ่มต้น

เมื่อมีไฟล์ทั้งหมดแล้วเราสามารถเริ่ม QEMU VM ด้วยสถาปัตยกรรม CPU ที่เหมาะสมด้วยคําสั่งใดคําสั่งหนึ่งต่อไปนี้:

หลังจากเริ่มต้นและกําหนดค่า VM แล้ว เพิ่มการตั้งค่าที่เหมาะสมขึ้นอยู่กับเฟิร์มแวร์และระบบปฏิบัติการ เราสามารถเรียกใช้ไบนารีบางตัวได้  

รูปที่ 3: การจําลองแบบเต็มของเราเตอร์เฉพาะและเว็บอินเตอร์เฟส

ความคิดสุดท้าย

ภูมิทัศน์ของ IoT ค่อนข้างกว้างใหญ่ และจํานวนอุปกรณ์ประเภทต่างๆ ยังทําให้ยากต่อการสร้างขั้นตอนที่เหมาะสมสําหรับการใช้เฟิร์มแวร์วิศวกรรมย้อนกลับ แม้ว่าบทความนี้จะไม่ได้อธิบายเครื่องมือและเทคนิคทั้งหมดที่ใช้ในบริบทนี้ แต่ก็สามารถเป็นจุดเริ่มต้นสําหรับการสํารวจสาขานี้ได้

บทความที่เกี่ยวข้อง

วิศวกรรมย้อนกลับเฟิร์มแวร์: คําแนะนําทีละขั้นตอน

เรียนรู้กระบวนการที่แน่นอนสําหรับการแยกโครงสร้างและวิเคราะห์เฟิร์มแวร์

นักเขียนบทความ
by 
นักเขียนบทความ
วิศวกรรมย้อนกลับเฟิร์มแวร์: คําแนะนําทีละขั้นตอน

วิศวกรรมย้อนกลับเฟิร์มแวร์: คําแนะนําทีละขั้นตอน

เรียนรู้กระบวนการที่แน่นอนสําหรับการแยกโครงสร้างและวิเคราะห์เฟิร์มแวร์

อินเทอร์เน็ตของสรรพสิ่ง (IoT) มีการเติบโตอย่างมากในช่วงไม่กี่ปีที่ผ่านมา ตั้งแต่เครื่องใช้ในครัว นาฬิกาข้อมือ ไปจนถึงเซ็นเซอร์อุตสาหกรรม จํานวนและลักษณะของอุปกรณ์ประเภทนี้มีมากมาย เช่นเดียวกับข้อบกพร่องที่เกี่ยวข้องที่อาจเกิดขึ้น สิ่งหนึ่งที่พวกเขามีเหมือนกันคือเฟิร์มแวร์ซึ่งเป็นซอฟต์แวร์ที่ติดตั้งบนอุปกรณ์ขนาดเล็กเหล่านี้ซึ่งช่วยให้สามารถโต้ตอบระหว่างอุปกรณ์และฮาร์ดแวร์ได้

ในบทความนี้ เราจะอธิบายขั้นตอนของวิธีการทําวิศวกรรมย้อนกลับเฟิร์มแวร์เพื่อค้นหาและใช้ประโยชน์จากช่องโหว่ โปรดทราบว่าวิธีการนี้ขึ้นอยู่กับประเภทของอุปกรณ์ลักษณะและคุณสมบัติของอุปกรณ์และอื่น ๆ เสมอ

1. การรับสําเนาเฟิร์มแวร์

ขั้นตอนแรกในวิศวกรรมย้อนกลับของเฟิร์มแวร์คือการวิเคราะห์อุปกรณ์ IoT และรับเฟิร์มแวร์ ขั้นตอนบางอย่างที่เราสามารถปฏิบัติตามได้คือ:

  • กําลังดาวน์โหลดเฟิร์มแวร์จากผู้ขาย web เว็บไซต์
  • การแยกเฟิร์มแวร์ผ่านคุณสมบัติการอัปเดตอุปกรณ์บังคับคนกลาง (ใช้พร็อกซีเพื่อจับภาพ URI แบบเต็ม)
  • การรับเฟิร์มแวร์จากตัวอุปกรณ์เอง ตัวอย่างเช่น จากชิปผ่านคลิป SOIC (Small Outline Integrated Circuit)

2. การแยกเฟิร์มแวร์

ขั้นตอนของเฟิร์มแวร์วิศวกรรมย้อนกลับนี้ประกอบด้วยการเข้าถึงเฟิร์มแวร์ files. จากจุดนี้สามารถทําการวิเคราะห์แบบคงที่หรือแบบไดนามิกได้ Binwalk เป็นหนึ่งในเครื่องมือที่มีชื่อเสียงในการทํางานนี้ให้สําเร็จ

รูปที่ 1: เครื่องมือ Binwalk ที่ใช้สําหรับการแยกเฟิร์มแวร์

ด้วยการใช้วิธีนี้ อิมเมจเฟิร์มแวร์และอิมเมจเคอร์เนลที่พบสามารถทําได้ขึ้นอยู่กับลักษณะของอุปกรณ์ ตัวอย่างเช่น เฟิร์มแวร์ล่าสุดถูกเข้ารหัส และจําเป็นต้องมีขั้นตอนเพิ่มเติมในการเลี่ยงหรือถอดรหัสเพื่อดําเนินการวิเคราะห์ต่อไป อย่างไรก็ตาม นี่ไม่ใช่ประเด็นที่อยู่ระหว่างการอภิปรายในบทความนี้

3. การสร้างอิมเมจเคอร์เนลตั้งแต่เริ่มต้น

บางครั้งหลังจากแยกระบบไฟล์เฟิร์มแวร์แล้วการเลียนแบบเป็นวิธีที่ดีกว่าในการทดสอบฟังก์ชันทั้งหมดเพื่อค้นหาช่องโหว่ ด้วยเหตุนี้ buildroot จึงเป็นเครื่องมือที่เรียบง่าย มีประสิทธิภาพ และใช้งานง่ายในการสร้างระบบ Linux แบบฝังตัวผ่านการคอมไพล์ข้าม

รูปที่ 2: เครื่องมือ Buildroot ที่ใช้ในการสร้างอิมเมจเคอร์เนลตั้งแต่เริ่มต้น

4. การจําลองภาพเคอร์เนลด้วย QEMU

การจําลองเฟิร์มแวร์เป็นช่วงเวลาของการดําเนินการเฟิร์มแวร์โดยไม่มีอุปกรณ์จริงดังนั้นเราจึงต้องเลียนแบบ มีบางวิธี เช่น การจําลองผู้ใช้และการจําลองแบบเต็ม

ด้วยการใช้ QEMU การจําลองไบนารีเดี่ยวจากเฟิร์มแวร์สามารถทําได้โดยใช้คําสั่งต่อไปนี้

qemu-<arch>-static
qemu-<arch> -L <prefix> <binary>

รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถพบได้ที่นี่

ในทางกลับกันแนวทางที่ดีที่สุดคือการจําลองแบบเต็มเสมอเนื่องจากเราสามารถใช้ประโยชน์จากคุณสมบัติเฟิร์มแวร์ทั้งหมดได้

ด้วยการใช้ buildroot เพื่อสร้างอิมเมจตั้งแต่เริ่มต้น เราได้รับสคริปต์ง่ายๆ เกี่ยวกับวิธีเรียกใช้ QEMU ด้วยอิมเมจเป้าหมายและการกําหนดค่าเคอร์เนลและ QEMU ที่เหมาะสม กล่าวโดยย่อในการสร้าง VM เต็มรูปแบบที่ทํางานใน QEMU เราต้องการข้อกําหนดดังต่อไปนี้:

  • ไฟล์อิมเมจดิสก์ QEMU
  • อิมเมจเคอร์เนล Linux ที่คอมไพล์สําหรับสถาปัตยกรรมเป้าหมาย และ
  • อิมเมจดิสก์ RAM เริ่มต้น

เมื่อมีไฟล์ทั้งหมดแล้วเราสามารถเริ่ม QEMU VM ด้วยสถาปัตยกรรม CPU ที่เหมาะสมด้วยคําสั่งใดคําสั่งหนึ่งต่อไปนี้:

หลังจากเริ่มต้นและกําหนดค่า VM แล้ว เพิ่มการตั้งค่าที่เหมาะสมขึ้นอยู่กับเฟิร์มแวร์และระบบปฏิบัติการ เราสามารถเรียกใช้ไบนารีบางตัวได้  

รูปที่ 3: การจําลองแบบเต็มของเราเตอร์เฉพาะและเว็บอินเตอร์เฟส

ความคิดสุดท้าย

ภูมิทัศน์ของ IoT ค่อนข้างกว้างใหญ่ และจํานวนอุปกรณ์ประเภทต่างๆ ยังทําให้ยากต่อการสร้างขั้นตอนที่เหมาะสมสําหรับการใช้เฟิร์มแวร์วิศวกรรมย้อนกลับ แม้ว่าบทความนี้จะไม่ได้อธิบายเครื่องมือและเทคนิคทั้งหมดที่ใช้ในบริบทนี้ แต่ก็สามารถเป็นจุดเริ่มต้นสําหรับการสํารวจสาขานี้ได้

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

วิศวกรรมย้อนกลับเฟิร์มแวร์: คําแนะนําทีละขั้นตอน

วิศวกรรมย้อนกลับเฟิร์มแวร์: คําแนะนําทีละขั้นตอน

เรียนรู้กระบวนการที่แน่นอนสําหรับการแยกโครงสร้างและวิเคราะห์เฟิร์มแวร์

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

อินเทอร์เน็ตของสรรพสิ่ง (IoT) มีการเติบโตอย่างมากในช่วงไม่กี่ปีที่ผ่านมา ตั้งแต่เครื่องใช้ในครัว นาฬิกาข้อมือ ไปจนถึงเซ็นเซอร์อุตสาหกรรม จํานวนและลักษณะของอุปกรณ์ประเภทนี้มีมากมาย เช่นเดียวกับข้อบกพร่องที่เกี่ยวข้องที่อาจเกิดขึ้น สิ่งหนึ่งที่พวกเขามีเหมือนกันคือเฟิร์มแวร์ซึ่งเป็นซอฟต์แวร์ที่ติดตั้งบนอุปกรณ์ขนาดเล็กเหล่านี้ซึ่งช่วยให้สามารถโต้ตอบระหว่างอุปกรณ์และฮาร์ดแวร์ได้

ในบทความนี้ เราจะอธิบายขั้นตอนของวิธีการทําวิศวกรรมย้อนกลับเฟิร์มแวร์เพื่อค้นหาและใช้ประโยชน์จากช่องโหว่ โปรดทราบว่าวิธีการนี้ขึ้นอยู่กับประเภทของอุปกรณ์ลักษณะและคุณสมบัติของอุปกรณ์และอื่น ๆ เสมอ

1. การรับสําเนาเฟิร์มแวร์

ขั้นตอนแรกในวิศวกรรมย้อนกลับของเฟิร์มแวร์คือการวิเคราะห์อุปกรณ์ IoT และรับเฟิร์มแวร์ ขั้นตอนบางอย่างที่เราสามารถปฏิบัติตามได้คือ:

  • กําลังดาวน์โหลดเฟิร์มแวร์จากผู้ขาย web เว็บไซต์
  • การแยกเฟิร์มแวร์ผ่านคุณสมบัติการอัปเดตอุปกรณ์บังคับคนกลาง (ใช้พร็อกซีเพื่อจับภาพ URI แบบเต็ม)
  • การรับเฟิร์มแวร์จากตัวอุปกรณ์เอง ตัวอย่างเช่น จากชิปผ่านคลิป SOIC (Small Outline Integrated Circuit)

2. การแยกเฟิร์มแวร์

ขั้นตอนของเฟิร์มแวร์วิศวกรรมย้อนกลับนี้ประกอบด้วยการเข้าถึงเฟิร์มแวร์ files. จากจุดนี้สามารถทําการวิเคราะห์แบบคงที่หรือแบบไดนามิกได้ Binwalk เป็นหนึ่งในเครื่องมือที่มีชื่อเสียงในการทํางานนี้ให้สําเร็จ

รูปที่ 1: เครื่องมือ Binwalk ที่ใช้สําหรับการแยกเฟิร์มแวร์

ด้วยการใช้วิธีนี้ อิมเมจเฟิร์มแวร์และอิมเมจเคอร์เนลที่พบสามารถทําได้ขึ้นอยู่กับลักษณะของอุปกรณ์ ตัวอย่างเช่น เฟิร์มแวร์ล่าสุดถูกเข้ารหัส และจําเป็นต้องมีขั้นตอนเพิ่มเติมในการเลี่ยงหรือถอดรหัสเพื่อดําเนินการวิเคราะห์ต่อไป อย่างไรก็ตาม นี่ไม่ใช่ประเด็นที่อยู่ระหว่างการอภิปรายในบทความนี้

3. การสร้างอิมเมจเคอร์เนลตั้งแต่เริ่มต้น

บางครั้งหลังจากแยกระบบไฟล์เฟิร์มแวร์แล้วการเลียนแบบเป็นวิธีที่ดีกว่าในการทดสอบฟังก์ชันทั้งหมดเพื่อค้นหาช่องโหว่ ด้วยเหตุนี้ buildroot จึงเป็นเครื่องมือที่เรียบง่าย มีประสิทธิภาพ และใช้งานง่ายในการสร้างระบบ Linux แบบฝังตัวผ่านการคอมไพล์ข้าม

รูปที่ 2: เครื่องมือ Buildroot ที่ใช้ในการสร้างอิมเมจเคอร์เนลตั้งแต่เริ่มต้น

4. การจําลองภาพเคอร์เนลด้วย QEMU

การจําลองเฟิร์มแวร์เป็นช่วงเวลาของการดําเนินการเฟิร์มแวร์โดยไม่มีอุปกรณ์จริงดังนั้นเราจึงต้องเลียนแบบ มีบางวิธี เช่น การจําลองผู้ใช้และการจําลองแบบเต็ม

ด้วยการใช้ QEMU การจําลองไบนารีเดี่ยวจากเฟิร์มแวร์สามารถทําได้โดยใช้คําสั่งต่อไปนี้

qemu-<arch>-static
qemu-<arch> -L <prefix> <binary>

รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถพบได้ที่นี่

ในทางกลับกันแนวทางที่ดีที่สุดคือการจําลองแบบเต็มเสมอเนื่องจากเราสามารถใช้ประโยชน์จากคุณสมบัติเฟิร์มแวร์ทั้งหมดได้

ด้วยการใช้ buildroot เพื่อสร้างอิมเมจตั้งแต่เริ่มต้น เราได้รับสคริปต์ง่ายๆ เกี่ยวกับวิธีเรียกใช้ QEMU ด้วยอิมเมจเป้าหมายและการกําหนดค่าเคอร์เนลและ QEMU ที่เหมาะสม กล่าวโดยย่อในการสร้าง VM เต็มรูปแบบที่ทํางานใน QEMU เราต้องการข้อกําหนดดังต่อไปนี้:

  • ไฟล์อิมเมจดิสก์ QEMU
  • อิมเมจเคอร์เนล Linux ที่คอมไพล์สําหรับสถาปัตยกรรมเป้าหมาย และ
  • อิมเมจดิสก์ RAM เริ่มต้น

เมื่อมีไฟล์ทั้งหมดแล้วเราสามารถเริ่ม QEMU VM ด้วยสถาปัตยกรรม CPU ที่เหมาะสมด้วยคําสั่งใดคําสั่งหนึ่งต่อไปนี้:

หลังจากเริ่มต้นและกําหนดค่า VM แล้ว เพิ่มการตั้งค่าที่เหมาะสมขึ้นอยู่กับเฟิร์มแวร์และระบบปฏิบัติการ เราสามารถเรียกใช้ไบนารีบางตัวได้  

รูปที่ 3: การจําลองแบบเต็มของเราเตอร์เฉพาะและเว็บอินเตอร์เฟส

ความคิดสุดท้าย

ภูมิทัศน์ของ IoT ค่อนข้างกว้างใหญ่ และจํานวนอุปกรณ์ประเภทต่างๆ ยังทําให้ยากต่อการสร้างขั้นตอนที่เหมาะสมสําหรับการใช้เฟิร์มแวร์วิศวกรรมย้อนกลับ แม้ว่าบทความนี้จะไม่ได้อธิบายเครื่องมือและเทคนิคทั้งหมดที่ใช้ในบริบทนี้ แต่ก็สามารถเป็นจุดเริ่มต้นสําหรับการสํารวจสาขานี้ได้

Related articles