• อีมูเลเตอร์ 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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น