Chạy ProcessMon sau đó chạy mẫu virus cần phần tích, chúng ta thực hiện quá trình Filter trên ProcessMon theo tên mẫu virus vừa chạy Win32.Expiro.exe và Filter theo hành vi Ở đây chúng t
Trang 1Phân tích mẫu virus lây file cụ thể
Win32/Expiro
Phân tích mẫu virus lây file cụ thể Win32/Expiro – P1
Như tiêu đề bài viết, chúng ta sẽ chỉ tập trung phân tích hành vi lây file: đối tượng lây, cách thức lây, phương pháp viết hàm diệt triệt để cho mẫu virus này.
Chuẩn bị môi trường
1. Chuẩn bị máy ảo Windows XP 32 bit Máy gồm 2 ổ logic: C, E Lý do cần máy ảo có ít nhất 2 ổ logic như trên là vì một số loại virus lây nhiễm thông qua các ổ chứ không lây trong ổ hiện tại.
2. Danh sách các file mồi, sử dụng để cho virus lây nhiễm: calc.exe, cmd.exe, NOTEPAD.exe và file cài đặt notepad++.
3. Các file mồi được đặt ở cùng thư mục, nhân bản trên hai ổ logic và trên Desktop.
4. Chạy ProcessMon để theo dõi các chương trình, tiến trình Vì chỉ cần theo dõi hành vi lây file nên ta chỉ cần sử dụng ProcessMon trong bộ công cụ Sysinternal là đủ.
5. Các chương trình debugger, disasembler: OllyDBG, IDA Pro
Trang 2Giai đoạn theo dõi
Đầu tiên, chúng ta snapshot máy ảo có đầy đủ các công cụ trên để dễ dàng quay lại với môi trường sạch ban đầu Chạy ProcessMon sau đó chạy mẫu virus cần phần tích, chúng ta thực hiện quá trình Filter trên ProcessMon theo tên mẫu virus vừa chạy (Win32.Expiro.exe) và Filter theo hành vi (Ở đây chúng ta quan tâm tới hành vi WriteFile).
Trang 3Như chúng ta thấy ở hình vẽ trên đây, virus Win32.Expiro đã tiến hành lây vào thư mục chứa các file mồi trên Desktop trước tiên Như vậy, chúng ta sẽ tập trung theo hướng này, tập trung vào việc dùng các file mồi ở Desktop để debug lây file nhanh chóng.
Trước khi thực hiện bước tiếp theo, chúng ta cần thực hiện một số công việc sau:
1. Thu thập lại các mẫu đã bị lây do chạy virus từ các bước trên Ở đây, tôi thu thập lại mẫu calc.exe (Để tăng độ chính xác cần thu thập nhiều mẫu hơn nhằm tạo ra sự đối sánh hoàn chỉnh giữa các mẫu) và sẽ sử dụng chính mẫu này để phục vụ quá trình debug tiếp theo Mục đích của việc
sử dụng chính file cacl.exe bị lây nhiễm để phục vụ quá trình debug là do:
o Chúng ta đã có đầy đủ thông tin về file gốc ban đầu: kích thước, giá trị các trường trong PE, …
Trang 4o Dễ dàng so sánh sự khác biệt giữa hai file để tốc độ debug nhanh chóng hơn
2. Quay lại trạng thái cho máy ảo như trước khi chạy mẫu virus, sau đó chúng ta copy mẫu virus vừa thu được (calc.exe) vào môi trường này.
3. Như vậy, sau giai đoạn theo dõi, chúng ta đã thu thập được mẫu virus, biết được một phần đặc tính lây lan của nó để phục vụ cho quá trình phân tích dễ dàng và nhanh chóng hơn.
Phân tích mẫu virus lây file cụ thể Win32/Expiro – P2
Giai đoạn phân tích
Sử dụng LordPE, chúng ta xem xét sự khác biệt giữa hai file calc.exe trước và sau khi lây: Thay đổi về kích thước file, thay đổi một số thuộc tính file:
SizeOfImage, SizeOfStackReserve, SizeOfHeapReserve, MajorImageVersion, Mi norImageVersion, BoundImport…
Việc so sánh các trường này để tìm ra sự thay đổi trước và sau khi lây, từ đây giúp chúng ta debug nhanh chóng hơn.
Trang 5Khởi động OllyDBG, IDA Pro và thực hiện load chương trình calc.exe đã thu thập ở bước trước Trước tiên cần tìm được điểm đặt breakpoint, đối với hành vi lây file, chúng ta sẽ quan tâm tới các API: FindFirstFile (A|W), FindNextFile (A|W), OpenFile, ReadFile, CreateFile, WriteFile, LocalAlloc, ….
Có hai cách để dừng lại tại các API trên: Đặt breakpoint khi chương trình thực hiện CALL DLL (Từ OllyDBG → Debug → CALL DLL export ) hoặc thực hiện chạy qua từng lệnh và kiểm tra các API được load:
• Đặt breakpoint khi chương trình thực hiện CALL DLL, đặt breakpoint khi xảy ra việc load dll: KERNEL32.DLL vì DLL này chứa API để thực hiện việc lấy địa chỉ hàm tương đối với địa chỉ Kernel32 Tuy nhiên, trong chương trình này tính năng này không sử dụng được Như vậy chúng ta phải đi theo cách thứ hai, chạy qua từng lệnh và kiểm tra API được load lên
Trang 6• Chạy qua từng lệnh và kiểm tra API được load lên (Từ OllyDBG → Plugins→ Command Line → Command Line *1* hoặc trong cửa sổ code của OllyDBG, click chuột phải → Search for → All itermodular calls
*2*) Hai chức năng này sẽ giúp liệt kê tất cả các API được nạp lên theo chương trình tại thời điểm hiện tại Do các API được hệ thống sẽ được
mô tả cụ thể theo tên DLL + tên API nên từ đây chúng ta sẽ dễ dàng tìm kiếm các API mình quan tâm để thiết lập các breakpoints.
•
o Nếu sử dụng cách số *1*, tại cửa sổ hiện ra, chúng ta gõ: bpx + API cần tìm, plugins này sẽ giúp liệt kê các API đã được load:
Trang 7o Nếu sử dụng cách số *2*, chúng ta sẽ chỉ cần xem danh sách các
API đã được load lên:
Trang 8Sau khi đã thực hiện chạy qua từng lệnh (Dùng F8) và kết hợp với quá trình kiểm tra như trên Sau một thời gian “to tay”, chúng ta sẽ tới được các API
cần thiết (FindFirstFileA, FindNextFileA, OpenFile, LocalAlloc, ReadFile, WriteFile):
Chúng ta tiến hành đặt breakpoint tại tất cả các đoạn mã gọi tới các API mà chúng ta quan tâm Ở đây, tôi quan tâm tới các hành vi: FindFirstFileA, FindNextFileA, CreateFile, ReadFile, WriteFile, LocalAlloc vì đây là các API có liên quan trực tiếp tới quá trình tìm, sửa file, tức là nó sẽ được virus sử dụng
để thực hiện hành vi lây nhiễm lên các file khác trong hệ thống:
Trang 9Sau khi đặt breakpoint xong, chúng ta tiến hành chạy F9 Lúc này, OllyDBG sẽ
tự động thực thi các lệnh cho tới khi gặp các breakpoints hoặc khi chương trình kết thúc Sau một thời gian chạy, OllyDBG dừng lại ở hàm FindFirstFileA (tuyệt vời), chúng ta tiến hành Debug (Có thể qua từng lệnh F8 hoặc F9) và tới được được đoạn mã virus tìm đến thư mục đã bẫy ở Desktop, và tiếp theo
nó tìm được file: calc.exe để lây nhiễm.
Trang 10Như vậy, chúng ta đã xác định được đoạn mã bắt đầu tìm kiếm các tài nguyên
để lây nhiễm, bước tiếp theo virus sẽ lây nhiễm cụ thể vào file, do đó, nó sẽ cần
mở file này Do chúng ta đã đặt breakpoint tại hàm mở file (CreateFile), chúng ta tiếp tục chạy F9 để chương trình tới được đoạn mã này Bắt đầu đoạn mã này chính là đoạn bắt đầu virus thực hiện hành vi lây vào file, vì vậy chúng ta cần phân tích kỹ để xem virus chỉnh sửa và thay đổi những gì trên file để có thể xây dựng hàm diệt.
Sau khi mở file thành công, virus lấy kích thước file thông qua hàm GetFileSize, sau đó thực hiện cấp phát một vùng nhớ (LocalAlloc) để load toàn bộ file lên vùng nhớ đó, từ đó, virus tiến hành chỉnh sửa file.
Trang 11Trong cửa sổ dưới đây chúng ta sẽ có cái nhìn tổng quan về các khối lệnh và
sơ đồ luồng nằm trong hàm diệt Do đây là mẫu virus tương đối đơn giản nên chúng ta chỉ cần IDA để xem thông tin sơ bộ trong hàm, không cần đi sâu hơn
ở mức đồng bộ giữa việc chạy chương trình trên OllyDBG và IDA để tìm hiểu chi tiết từng đoạn mã.
Trang 12Từ đoạn này, tôi tiến hành theo dõi vùng nhớ mà chương trình được nạp lên,
mã virus bắt đầu thực hiện việc đọc PE header và thay đổi các tham số Trước tiên nó đọc một số trường trong PE Header
Virus tiến hành một số thay đổi trên file gốc trên vùng nhớ:
• Thay đổi BoundImport để tăng thêm section
Trang 13• Thay đổi cờ cho vùng nhớ mới để biến nó thành vùng mã có thể thực thi
• Tăng số section trong PE Header khi thêm mới 1 section
Trang 14Tiếp tục debug đoạn chương trình này, chúng ta thấy virus tiến hành thay đổi một số trường khác tương đối quan trọng khác
• Thay đổi SizeOfImage theo kích thước VirtualSize của section virus vừa ghi thêm vào
• Ghi lại EntryPoint mới để trỏ tới mã thực thi của virus, thay đổi SizeOfHeapReserve, SizeOfStackReserve, MajorImageVersion, MinorImageVersion…
Trang 15Sau quá trình chỉnh sửa các trường trong file, virus tiến hành ghi nội dung file calc.exe đã được chỉnh sửa sang một file có tên: calc.ivr trong cùng thư mục, sau đó, nó thực hiện Copy đè nội dung của file calc.ivr lên file gốc và xóa
bỏ file calc.ivr đi Quá trình lây nhiễm hoàn tất.