Tổng quan về mẫu malware Virus.Win32.Virut.ce
(Phn V)
Ảnh chụp màn hình file bị lây nhiễm bởi Virus.Win32.Virut.ce, với các đoạn
đảm nhiệm chức năng khôi phục tới các entry point gốc được đánh dấu
hình oval đỏ
Để phân biệt rõ ràng hơn, toàn bộ các đoạn mã ví dụ trên đều không bao gồm
quá trình obfuscation. Tuy nhiên, giai đoạn đó lại được sử dụng trong tất cả
các section của file đã được ghép thêm vào bởi virus, có bao gồm trình giải
mã Init và toàn bộ phần mã thực thi trong phần body chính. Và quá trình này
hoàn toàn ngăn chặn các dấu hiệu nhận dạng virus từ các chương trình an
ninh bảo mật, bằng cách thay đổi toàn b bề ngoài của mã dữ liệu mà không
làm ảnh hưởng đến hoạt động chung. Dưới đây là 1 số ví dụ cụ thể, trong đó
chúng được sử dụng để che giấu quá trình nhận dạng mà không ảnh hưởng
đến các hoạt động chức năng:
- XCHG reg1, reg2; XCHG reg2, reg1; (được sử dụng cùng nhau)
- SUB reg1, reg2; ADD reg1, reg2; (sdụng cùng nhau)
- MOV reg, reg; OR reg, reg; AND reg, reg; XCHG reg, reg; LEA reg,
[REG];
- CLD, CLC, STC, CMC, etc.
Trong đó, ‘reg1’ và ‘reg2’ đại diện cho các trình đăng ký – register khác
nhau, còn ‘reg’ để chỉ quá trình register giống nhau trong cùng 1 biu thức
đơn.
Các toán tử logic đi liền với toán tử hạng hai tùy biến.
Ngoài ra còn có ADC reg, const; SBB reg, const; XOR reg, const …
Các thành phần của quá trình obfuscation được đánh dấu bằng hình oval đỏ
Hình bên trái chỉ ra rất rõ rằng các chỉ dẫn theo kiểu junk chiếm tới 70 - 80%
toàn bộ mã của file dữ liệu.
Giải mã phần body chính
Bộ phận đảm nhiệm khả năng thực thi trong các đoạn code được giải mã, s
khởi động sau khi virus hoàn tất các hoạt động ban đầu của nó như việc khôi
phục mã gc, khi tạo tên đối tượng và lưu trữ địa chỉ của các hàm tương ứng
được sử dụng trực tiếp từ thư viện hệ thống DLLs và anti-cycle.
Nếu quá trình giải mã Main được xem là 1 phần hoặc 1 bộ phận phân tách
riêng biệt, thì toàn bộ mã sinh ra bởi tiến trình này hoàn toàn vô nghĩa, ví d
như chỉ dẫn RETN được gọi ra để quản lý, điều khiển việc thay đổi vị trí 1
cách ngẫu nhiên. Trước khi quá trình giải mã chính thức din ra, RETN
(0C3h) s được thay thế bởi hàm CALL (0E8h). Chúng ta có thể hình dung
quá trình này như sau:
ADD/SUB/XOR [EBP + xx], bytereg
Theo đó, EBP sẽ được trỏ tới địa chỉ của hàm CALL, và bytereg chỉ là 1
trong snhững giá trị byte đã được đăng ký.
Do vậy, chúng ta có thể cho rằng chu trình bắt đầu thực sự sau khi quá trình
giải mã RETN sẽ được thay đổi thành CALL. Theo đúng trình tự là quá trình
obfuscated – phần còn lại của body của virus. Không chỉ sử dụng số lượng
lớn các thuật toán, và nhiu trong số này thực sự phức tạp hơn rất nhiều so
với phần còn lại với trình giải mã Init. Thông thường, sẽ có t giữa 2 đến 6
các thuật toán được dùng để kết hợp. Và trong các thuật toán này, trình quản
lý đăng ký EDX chứa key giải mã, và vi EAX chứa toàn bộ địa chỉ ảo nơi
bắt đầu của static body. Các ứng dụng quản lý register chứa đựng các chỉ dẫn
của hàm tương ng có thể giống như sau:
MOVZX/MOV dx/edx, [ebp + const] LEA eax, [ebp + const]
Các thuật toán được sử dụng chủ yếu như trong ví dụ dưới đây:
ROL DX, 4
XOR [EAX], DL
IMUL EDX, EDX, 13h
ADD [EAX], DL
ROL DX, 5
IMUL EDX, 13h