sogen - Trình giả lập user space hiệu năng cao cho Windows & Linux
(github.com/momo5502)- Trình giả lập user space hiệu năng cao hoạt động ở mức system call (syscall), kiểm soát toàn bộ quá trình thực thi tiến trình thông qua hooking toàn diện
- Phù hợp cho các tác vụ cần kiểm soát chi tiết việc thực thi tiến trình như nghiên cứu bảo mật, phân tích malware, nghiên cứu DRM
- Hoạt động ở mức syscall mà không cần tái triển khai Windows API, nên có thể tận dụng nguyên trạng các DLL hệ thống hiện có
- Được viết bằng C++ và có thể chạy với backend mong muốn: Unicorn Engine, icicle-emu, Hyper-V(WHP)
- Quản lý bộ nhớ nâng cao: được xây dựng trên lớp quản lý bộ nhớ của Unicorn, hỗ trợ các kiểu bộ nhớ đặc thù của Windows như reserved và committed
- Hỗ trợ nạp PE hoàn chỉnh: xử lý nạp file thực thi và DLL, ánh xạ bộ nhớ phù hợp, relocations, hỗ trợ TLS
- Xử lý ngoại lệ: triển khai Structured Exception Handling (SEH) của Windows, hỗ trợ exception dispatcher và unwinding
- Hỗ trợ luồng: cung cấp mô hình luồng được lập lịch theo kiểu round-robin
- Quản lý trạng thái: hỗ trợ cả tuần tự hóa toàn bộ trạng thái lẫn snapshot in-memory tốc độ cao
- Giao diện gỡ lỗi: triển khai GDB serial protocol, có thể tích hợp với IDA Pro, GDB, LLDB, VS Code...
- Khi phân tích malware, việc cô lập khỏi host có thể chưa hoàn toàn đầy đủ, vì vậy khuyến nghị dùng phiên bản web dựa trên sandbox của trình duyệt
- Có thể tự động hóa bằng Python
- Cài đặt bằng
pip install sogen - Có thể chạy emulator, đăng ký callback và xử lý trực tiếp việc chặn các lời gọi WinAPI ngay trong Python
- Cài đặt bằng
Tham khảo slide bài trình bày: Fake It ‘til We Make It: The Art of Windows User Space Emulation
- Windows User Space Emulation là gì?
- Kỹ thuật chạy tiến trình bên trong trình giả lập và mô phỏng OS cùng kernel bên dưới nó
- Nếu giả lập thông thường là chạy mã trên CPU ảo và mô phỏng phần cứng, thì user space emulation còn mô phỏng cả lớp OS và kernel ở phía trên
- Giá trị cốt lõi của cách này là kiểm soát hoàn toàn đối với mã đang chạy — trình giả lập có thể can thiệp vào mọi giai đoạn thực thi
- Việc kiểm soát được thực hiện thông qua các điểm hooking (hooking points)
- Hook truy cập bộ nhớ — chặn theo từng thao tác read, write, execute
- Hook thực thi lệnh — bắt các thời điểm thực thi những lệnh cụ thể như syscall, cpuid, rdtsc
- Hook thực thi đường đi mã mới (new code path) — phát hiện các đường đi mã được chạy lần đầu
- Nhờ khả năng hooking này, có thể chặn liên lạc ra ngoài, theo dõi luồng thực thi, đo code coverage..., tạo nền tảng cho phân tích DRM, phân tích malware, phân tích lỗ hổng, nghiên cứu bảo mật
- Người trình bày là một nhà phát triển DRM, từng có kinh nghiệm reverse và bypass nhiều DRM như Steam CEG, Arxan, Denuvo...
- Với các game Windows thường dùng Denuvo DRM, giả lập từng là công cụ then chốt để phân tích
- Vì DRM hiện đại thường dùng obfuscation / anti-tampering / anti-debugging, khiến phân tích tĩnh và động nhiều khi không khả thi
- Ứng dụng emulator vào phân tích lỗ hổng (fuzzing): ngẫu nhiên hóa đầu vào bên trong emulator, nhận phản hồi code coverage qua hooking, đồng thời việc thực thi có tính dự đoán và có thể lặp lại
- Hạn chế của các giải pháp hiện có là động lực phát triển
- Qiling, Speakeasy, Dumpulator viết bằng Python nên cực kỳ chậm trong các phân tích DRM có nhiều hooking
- Binee, Unicorn PE tái triển khai ở mức API nên không đầy đủ và dễ phát sinh lỗi
- Quy mô syscall: syscall thông thường của ntdll.dll 409 cái, syscall UI của win32u.dll 1474 cái
- Tốc độ giả lập nhanh có được nhờ JIT
Chưa có bình luận nào.