Sau khi đã theo dõi và phân tích virus, chúng ta đến giai đoạn cuối cùng là việc diệt con virus này. Bạn có thể đọc 2 bài phân tích trước của tôi về theo dõiphân tích mẫu virus lây file Win32/Expiro này.

Giai đoạn diệt virus

Để diệt được virus này chúng ta cần biết virus đã thực hiện những hành vi gì với file gốc. Từ đó, chúng ta sẽ tiến hành làm ngược lại những gì virus đã thực hiện để khôi phục lại file gốc bạn đầu. Khôi phục EntryPoint gốc: mẫu virus này có thể xem là tương đối đơn giản trong việc phát hiện ra EntryPoint của chương trình gốc. Chúng ta quan sát chương trình virus được load lên bộ nhớ

P3

Chúng ta có thể thấy, EntryPoint của chương trình virus được load lên bộ nhớ tại 0101F000h (ImageBase = 1000000h, AddressOfEntryPoint = 1F000h), ngay sau khi thực hiện hàm giải mã virus, và tao luồng lây nhiễm, virus trả điều khiển về cho chương trình chính (tức là nhảy về OEP) thông qua lệnh JUMP (E9 6834FFFF). Như vậy, OEP sẽ được tính bằng khoảng cách từ EP hiện tại của file đã bị lây cộng thêm 0x0D bytes từ EP tới hết lệnh nhảy trừ đi khoảng cách nhảy  ( bằng giá trị tuyệt đối của FFFF3468h) Khôi phục lại các trường quan trọng

  • NumberOfSections: Virus tiến hành ghi thêm hai section vào cuối file, ta cần giảm giá trị hiện tại của trường này đi hai đơn vị
  • BoundImport: Do tăng thêm hai section nên BoundImport đã được tăng thêm 0x50 chính bằng kích thước của 2 section trong PE header
  • SizeOfStackReverse, SizeOfHeapReverse: Hai trường này cùng được tăng thêm một giá trị như nhau. Giá trị này được lưu trong đoạn codesau khi giải mã của Virus (DWORD từ vị trí 0xF0 tới 0xF4 tương đối so với địa chỉ của EntryPoint). Cách thức giải mã như sau: Gọi A là byte thức 0x0D kể từ địa chỉ của EntryPoint, B = 0x4D, X1, X2, X3, X4 là 4 bytes virus mã hóa từ 0xF0 tới 0xF4 kể từ EntryPoint, ta có công thức giải mã như sau: Xi = (A XOR B) XOR Xi ; i = 1 → 4 (Đây cũng chính là công thức giải mã toàn bộ code mã hóa của virus.) Dưới đây là đoạn code giải mã thân virus và vị trí DWORD chúng ta cần lấy để khôi phục lại: SizeOfStackReverse, SizeOfHeapReverse
P4

Sau khi giải mã thành công, ta trừ đi giá trị hiện tại của hai trường trên bằng giá trị giải mã được (Chú ý: giá trị này đang ở dạng Little Endian), ta thu được giá trị ban đầu.

  • SizeOfImage: SizeOfImage tăng lên chính bằng kích thước (VirtualSize) của hai section mà virus ghi thêm vào file. Để khôi phục lại trường này, ta cần đọc PE header, lấy SizeOfImage hiện tại trừ đi hai giá trị VirtualSize của hai section cuối, chúng ta sẽ thu được SizeOfImage ban đầu.

Ngoài ra, có một số trường virus ghi đè ngày mà không lưu dấu vết đêt khôi phục: MajorImageVersion, MinorImageVersion, … Tuy nhiên, may mắn thay là các trường này không quá quan trọng, do đó ta không cần thiết phải chỉnh sửa thêm vào các trường này. Fill các section virus thêm vào bằng các ký tự null hoặc các ký tự bất kỳ.: Bước này cũng tương đối quan trọng, vừa giúp chúng ta đánh dấu được file đã được loại bỏ virus, vừa giúp triệt tiêu khả năng thực thi của mã virus. Như đã phân tích ở trên, virus ghi thêm 2 section mới vào file để thực thi, ta chỉ cần fill toàn bộ 2 section này thành các bytes null hoặc chứa ký tự bất kỳ. Vị trí bắt đầu fill chính là RawOffset của section đầu tiên virus thêm vào file gốc. Áp dụng quá trình trên cho toàn bộ các file bị lây nhiễm: Công việc này đòi hỏi phải có các công cụ tự động tìm kiếm và kiểm tra tất cả các file trong máy tính. Dựa vào chứ ký đặc trưng nhận diện mã virus để phát hiện, dựa vào các thông số đã phân tích ở trên để khôi phục lại file gốc. Ngoài ra, với các file lây nhiễm virus nhưng đang thực thi, cần thực hiện tắt tiến trình đang chạy đó (sử dụng quyền quản trị) và tiến hành diệt bình thường. Với các file hệ thống bị lây nhiễm thì cần có cơ chế xử lý riêng.

Một số thông tin thêm về mẫu virus Win32.Expiro

Tự tạo semaphore để hạn chế thực thi nhiều instance cùng một lúc

p5

Một số điều kiện của file được lây: Áp dụng quá trình lây khi mở file mục tiêu thành công, chỉ lây các file PE, không lây các file đã bị lây, không lây các file có SizeOfHeaders quá lớn (Không đủ để thêm 2 section mới)

p7.CheckOpenFileSuccess

Kiểm tra việc mở file thành công

p8-CheckInfectedConditions

Kiểm tra điều kiện lây nhiễm

p9.CheckSizeOfHeaders

Kiểm tra kích thước của Header

Trên đây chỉ bao gồm một số bước và thông tin cơ bản trong quá trình phân tích hành vi lây file của virus.Ngoài ra, virus này còn thực hiện nhiều hành vi phá hoại khác, để phân tích chi tiết các hành vi này yêu cầu phải thực hiện quá trình theo dõi tỉ mỉ, toàn diện, việc phân tích được triệt để các hành vi này của virus thì yêu cầu đọc hiểu gần như toàn bộ các module của virus.

Hầu hết việc phân tích hành vi của virus sẽ dựa vào quá trình theo dõi, giám sát quá trình thực thi của virus, sau khi thu thập được các thông tin về hành vi của virus, chúng ta sẽ tập hợp các API tương ứng. Cuối cùng công việc của quá trình phân tích hành vi là tìm ra các đoạn mã trong code thực thi của virus mà thực hiện các hành động như đã tập hợp được từ quá trình theo dõi.

Chia sẻ bài viết này