sogen - อีมูเลเตอร์ userspace ประสิทธิภาพสูงสำหรับ Windows และ Linux
(github.com/momo5502)- อีมูเลเตอร์ userspace สำหรับ Windows/Linux ประสิทธิภาพสูงที่ทำงานในระดับ system call (syscall) และควบคุมกระบวนการรันของโปรเซสได้อย่างครอบคลุมผ่านการ hooking
- เหมาะสำหรับงานที่ต้องการการควบคุมการทำงานของโปรเซสอย่างละเอียด เช่น การวิจัยด้านความปลอดภัย, การวิเคราะห์มัลแวร์, การวิจัย DRM
- ทำงานในระดับ syscall โดยไม่ต้อง reimplement Windows API จึงสามารถใช้ system DLL เดิมได้โดยตรง
- เขียนด้วย C++ และสามารถรันบนแบ็กเอนด์ที่ต้องการได้: Unicorn Engine, icicle-emu, Hyper-V(WHP)
- การจัดการหน่วยความจำขั้นสูง: สร้างบนระบบจัดการหน่วยความจำของ Unicorn และรองรับประเภทหน่วยความจำเฉพาะของ Windows เช่น reserved และ committed
- รองรับการโหลด PE อย่างสมบูรณ์: จัดการการโหลดไฟล์ executable และ DLL, การแมปหน่วยความจำที่เหมาะสม, relocations และ TLS
- การจัดการข้อยกเว้น: implement Windows Structured Exception Handling (SEH) พร้อมรองรับ exception dispatcher และ unwinding
- รองรับเธรด: มีโมเดล scheduling เธรดแบบ round-robin
- การจัดการ State: รองรับทั้งการ serialize state ทั้งหมดและ in-memory snapshot แบบรวดเร็ว
- อินเทอร์เฟซดีบัก: implement GDB serial protocol จึงเชื่อมต่อกับ IDA Pro, GDB, LLDB, VS Code ฯลฯ ได้
- ในการวิเคราะห์มัลแวร์ การแยกจากโฮสต์อาจไม่สมบูรณ์ จึงแนะนำให้ใช้ เวอร์ชันเว็บที่อิง browser sandbox
- สามารถทำ automation ด้วย Python ได้
- ติดตั้งด้วย
pip install sogen - สามารถรันอีมูเลเตอร์, ลงทะเบียน callback และจัดการการ intercept การเรียก WinAPI ได้จากใน Python โดยตรง
- ติดตั้งด้วย
ดูสไลด์ประกอบการบรรยาย: Fake It ‘til We Make It: The Art of Windows User Space Emulation
- Windows User Space Emulation คืออะไร?
- เป็นเทคนิคที่ รันโปรเซสภายในอีมูเลเตอร์ และ จำลอง OS กับเคอร์เนล ที่อยู่ด้านล่าง
- หากการอีมูเลชันทั่วไปคือการรันโค้ดบน CPU เสมือนและจำลองฮาร์ดแวร์ การอีมูเลชัน userspace คือการจำลองชั้น OS และเคอร์เนลต่อขึ้นไปอีกระดับ
- คุณค่าหลักของสิ่งนี้คือ การควบคุมโค้ดที่กำลังรันได้อย่างสมบูรณ์ — อีมูเลเตอร์สามารถแทรกแซงได้ในทุกขั้นตอนของการทำงาน
- การควบคุมนี้เกิดขึ้นผ่าน hooking points
- การ hook การเข้าถึงหน่วยความจำ — ดักจับในระดับ read, write, execute
- การ hook การรันคำสั่ง — จับจังหวะที่มีการรันคำสั่งเฉพาะ เช่น syscall, cpuid, rdtsc
- การ hook การรันเส้นทางโค้ดใหม่ (new code path) — ตรวจจับเส้นทางโค้ดที่ถูกรันเป็นครั้งแรก
- ด้วยความสามารถในการ hook นี้ จึงสามารถดักจับการสื่อสารภายนอก, ติดตาม flow การทำงาน, วัด code coverage ฯลฯ ได้ และเป็นพื้นฐานของ การวิเคราะห์ DRM, การวิเคราะห์มัลแวร์, การวิเคราะห์ช่องโหว่, การวิจัยด้านความปลอดภัย
- ผู้บรรยายเป็น นักพัฒนา DRM ที่มีประสบการณ์ reverse engineering และ bypass DRM หลายตัว เช่น Steam CEG, Arxan, Denuvo
- สำหรับการวิเคราะห์ Denuvo DRM ที่เกมบน Windows ใช้กันมากนั้น อีมูเลชันเป็นวิธีหลักที่สำคัญ
- เพราะ DRM สมัยใหม่มี obfuscation / anti-tampering / anti-debugging ทำให้การวิเคราะห์แบบ static และ dynamic มักทำไม่ได้
- ใช้อีมูเลเตอร์ใน การวิเคราะห์ช่องโหว่ (fuzzing): ทำการสุ่มอินพุตภายในอีมูเลเตอร์, รับ feedback ของ code coverage ผ่านการ hook และทำให้การรันคาดเดาได้รวมถึงทำซ้ำได้
- ข้อจำกัดของโซลูชันเดิมคือแรงจูงใจในการพัฒนา
- Qiling·Speakeasy·Dumpulator เป็น Python จึงช้ามากอย่างยิ่งในงานวิเคราะห์ DRM ที่มีการ hook จำนวนมาก
- Binee·Unicorn PE เป็น การ reimplement ระดับ API จึงไม่สมบูรณ์และอาจเกิดบั๊กได้
- ขนาดของ syscall: syscall ทั่วไปใน ntdll.dll มี 409 รายการ, UI syscall ใน win32u.dll มี 1474 รายการ
- ความเร็วในการอีมูเลตที่สูงเกิดจาก JIT
ยังไม่มีความคิดเห็น