เครื่องมือ ELF Injector จุดประกายการอภิปรายเกี่ยวกับความท้าทายในการแก้ไขไบนารีและผลกระทบด้านความปลอดภัย

ทีมชุมชน BigGo
เครื่องมือ ELF Injector จุดประกายการอภิปรายเกี่ยวกับความท้าทายในการแก้ไขไบนารีและผลกระทบด้านความปลอดภัย

เครื่องมือใหม่สำหรับการฉีดโค้ดเข้าไปในไบนารี ELF (Executable and Linkable Format) ได้ดึงดูดความสนใจจากนักวิจัยด้านความปลอดภัยและนักพัฒนา โดยเน้นย้ำทั้งความท้าทายทางเทคนิคของการแก้ไขไบนารีและข้อกังวลด้านความปลอดภัยที่อาจเกิดขึ้น ELF Injector ช่วยให้ผู้ใช้สามารถแทรก relocatable shared objects เข้าไปในไฟล์ปฏิบัติการที่กำลังทำงาน ซึ่งเปิดการอภิปรายเกี่ยวกับการใช้งานที่ถูกต้องตามกฎหมายเทียบกับการใช้งานที่เป็นอันตราย

เครื่องมือนี้ทำงานโดยการแก้ไข Linux ARM 32-bit executables ในขณะรันไทม์ โดยฉีดโค้ดเข้าไปในส่วน .text หรือ .data ของไบนารีเป้าหมาย ความสามารถนี้ได้รับการเปรียบเทียบกับเทคนิคที่ใช้ทั้งในการพัฒนาซอฟต์แวร์ที่ถูกต้องตามกฎหมายและการสร้างมัลแวร์

ข้อมูลจำเพาะทางเทคนิคของ ELF Injector

  • แพลตฟอร์มเป้าหมาย: Linux ARM 32-bit executables
  • ประเภทไฟล์ที่รองรับ: ไฟล์ ET_EXEC ELF เท่านั้น
  • วิธีการฉีด:
    • การฉีดส่วน text (ไฟล์ .so)
    • การฉีดส่วน data (ไฟล์ .bin)
  • ข้อกำหนด: โค้ดที่ไม่ขึ้นกับตำแหน่ง (-fPIC) สำหรับ payloads
  • ที่อยู่หน่วยความจำ:
    • 0x400000: จุดเริ่มต้นของ .text/.data ในไฟล์ปฏิบัติการที่กำลังทำงาน
    • 0x600000: ที่อยู่เริ่มต้นของ stack
    • 0x00008000: พื้นที่ offset สำหรับการแมปหน่วยความจำ

การนำไปใช้ทางเทคนิคได้รับปฏิกิริยาที่หลากหลาย

สมาชิกชุมชนได้แบ่งปันประสบการณ์ของตนเองกับความท้าทายในการแก้ไขไบนารีที่คล้ายกัน นักพัฒนาคนหนึ่งได้กล่าวถึงงานของพวกเขาเมื่อสิบปีก่อนเกี่ยวกับ Android library packers โดยอธิบายว่าพวกเขาต้องย้าย program headers เพื่อสร้างพื้นที่สำหรับ code segments ใหม่ วิธีการนี้มักส่งผลให้เกิด padding overhead ที่มีนัยสำคัญเนื่องจากข้อกำหนดด้านการจัดตำแหน่ง

ELF Injector ปัจจุบันใช้กลยุทธ์ที่แตกต่างกัน โดยใช้ระบบ thunk ที่หลีกเลี่ยงความซับซ้อนส่วนใหญ่ที่เกี่ยวข้องกับการย้าย segment headers วิธีการนี้ฉีดโค้ดชิ้นเล็กๆ เข้าไปใน padding ที่มีอยู่ในตอนท้ายของ text segment ซึ่งลดความเสี่ยงในการทำลายการอ้างอิงไปยัง static data

ELF (Executable and Linkable Format): รูปแบบไฟล์มาตรฐานสำหรับไฟล์ปฏิบัติการ object code shared libraries และ core dumps ในระบบที่คล้าย Unix

ข้อกังวลด้านความเข้ากันได้และการทดสอบ

มีคำถามเกิดขึ้นเกี่ยวกับความเข้ากันได้ของเครื่องมือกับไฟล์ ELF ที่แตกต่างกัน ปัจจุบัน injector ทำงานได้เฉพาะกับไฟล์ ELF ประเภท ET_EXEC เท่านั้น และการทดสอบอย่างครอบคลุมดูเหมือนจะมีจำกัด นักพัฒนายอมรับว่า dynamic ELFs นำเสนอความท้าทายเฉพาะ เนื่องจากพวกมันมักจะแยกวิเคราะห์โครงสร้างของตนเองในขณะรันไทม์ ทำให้มีความไวต่อการเปลี่ยนแปลงเลย์เอาต์มากขึ้น

กระบวนการฉีดต้องการการพิจารณาอย่างรอบคอบเกี่ยวกับขอบเขตของ segment และข้อจำกัดของ padding การเพิ่มโค้ดที่เกินพื้นที่ padding ที่มีอยู่อาจทำให้ segments ที่ตามมาเลื่อน ซึ่งอาจทำลายการทำงานของไฟล์ปฏิบัติการ

ผลกระทบด้านความปลอดภัยและการตรวจจับ

ชุมชนด้านความปลอดภัยได้แสดงความกังวลเกี่ยวกับศักยภาพในการใช้เครื่องมือในทางที่ผิด เทคนิคการฉีดไบนารีมักเกี่ยวข้องกับ malware packers และวิธีการปิดบัง ส่งผลให้ซอฟต์แวร์ความปลอดภัยตรวจจับได้อย่างรุนแรง แม้ว่านักพัฒนาจะยังไม่ได้ทดสอบเครื่องมือกับ virus scanners แต่โปรเจกต์ที่คล้ายกันมักจะเผชิญกับความท้าทายในการตรวจจับ

อย่างไรก็ตาม การใช้งานที่ถูกต้องตามกฎหมายมีอยู่ในการพัฒนาซอฟต์แวร์ การดีบัก และ reverse engineering เทคนิคนี้มีความคล้ายคลึงกับวิธีการที่ได้รับการยอมรับซึ่งใช้ในเครื่องมือแก้ไขวิดีโอเกมและ dynamic binary instrumentation frameworks

แนวทางทางเลือกและการปรับปรุง

ข้อเสนอแนะจากชุมชนได้เน้นย้ำหลายพื้นที่สำหรับการปรับปรุง เครื่องมือปัจจุบันใช้ argv[0] เพื่อค้นหาไฟล์ปฏิบัติการเป้าหมาย ซึ่งอาจไม่น่าเชื่อถือเนื่องจาก parent processes ควบคุมเนื้อหา argument vector วิธีการที่แข็งแกร่งกว่าจะเกี่ยวข้องกับการใช้ /proc/self/exe ในระบบ Linux แม้ว่าวิธีการนี้จะมีข้อจำกัดของตัวเองในสภาพแวดล้อมที่เป็น container

มันเจ๋งมากที่ได้เห็นคนแฮ็ก ELF! ผมเห็นว่าคุณใช้ argv[0] เพื่อหาไฟล์ปฏิบัติการ นี่เป็นสิ่งที่เปราะบางเพราะเนื้อหา argument vector เป็นสิ่งที่กำหนดได้ตามใจชอบและถูกควบคุมโดย parent process ทั้งหมด

นักพัฒนาบางคนได้สำรวจแนวทางทางเลือก เช่น การใช้ประโยชน์จาก ELF segments เพื่อให้ kernel แมพข้อมูลเข้าสู่หน่วยความจำโดยอัตโนมัติ ซึ่งช่วยลดความจำเป็นในการดำเนินการ file I/O ระหว่างการทำงาน

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

อ้างอิง: ELF Injector