VIRUS EXPLORER
TL;DR
Xin chào. Quy ẩn giang hồ khá lâu rồi nên một thời gian dài tôi bận nhiều việc không có thời gian viết bài nào liên quan về kỹ thuật. Nhân tiện đợt này gặp một virus máy tính nên dành chút thời gian để viết bài này. Mỗi ngày viết vài dòng nên dây dưa mới xong.
Từ thuở máy tính sơ khai cho đến thời đại bây giờ nền công nghiệp “0.4”, chúng ta không còn xa lạ gì với virus máy tính, hành vi càng ngày càng nguy hiểm và độc ác làm người dùng “wanna cry”.
Hôm trước tôi có gặp một loại virus mang tên “explorer.exe”. Virus mang tên “explorer.exe” không phải ít, nhưng mỗi loại lại là một biến thể khác nhau, tạo ra mởi các tác giả khác nhau, hành vi cũng khác nhau rất nhiều.
Virus và những file tạo ra trong quá trình phân tôi đã nén các bạn có thể tải về TẠI ĐÂY.
Khi tải lên blog định dạng bài viết bị thay đổi nên bạn có thể tải bản gốc dưới dạng ms word tải TẠI ĐÂY.
Bài viết sẽ chia làm 2 phần:
PHẦN 1: BẢN CHẤT, HÀNH VI VÀ HƯỚNG DẪN TIÊU DIỆT.
PHẦN 2: PHÂN TÍCH VIRUS.
Note: Nếu bạn không quan tâm đến kỹ thuật thì có thể đọc phần 1, phần 2 dành cho những bạn nào có nhã hứng quan tâm chi tiết về kỹ thuật.
PHẦN 1: BẢN CHẤT, HÀNH VI & HƯỚNG DẪN TIÊU DIỆT
I. Bản chất của virus Explorer.EXE
Explorer.EXE, là một virus rất nguy hiểm mang đầy đủ tính chất của một Trojan:
Cài đặt giả là một chương trình hợp lệ của máy tính.
Lấy cắp thông tin người dùng.
Hacker có thể điều khiển máy tính nạn nhân từ xa thông qua internet.
Có thể biến thành một mạng lưới bot-net nguy hiểm.
II. Hành vi virus tác động lên máy tính nạn nhân
Sau khi phân tích thì tôi thấy virus có những hành vi sau:
1. Trú ngụ ở đường dẫn sau C:\Users\<user name>\AppData\Roaming
2. Tự khởi động cùng máy tính bằng 2 cách:
2.1. Sao chép nó vào thư mục Startup: C:\Users\<user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
2.2. Thêm nó vào 2 keys startup của registry:
+ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
+ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
3. Thêm nó vào danh sách ngoại lệ của tường lửa bằng câu lệnh: netsh firewall add allowedprogram “<virus file path>” “<virus file name>” ENABLE
4. Lấy cắp thông tin gõ phím của người dùng (eg. tài khoản, mật khẩu, thẻ tín dụng, etc) và lưu vào registry: HKEY_CURRENT_USER\Software\c83d2f25c4a6ded09c7217aab954e17d
Note: Ở đây, value [kl] chứa nội dung log phím gõ người dùng, dựa vào nội dung log này sẽ biết được hacker đã lấy những thông tin gì của chúng. Nếu có những thông tin nhạy cảm như mật khẩu, thẻ tín dụng, etc thì các bạn nên thay đổi luôn đi để ngăn hacker truy cập.
5. Thêm một biến môi trường SEE_MASK_NOZONECHECKS để vô hiệu hóa file security checking.
6. Kết nối đến server điều khiển C & C (Command & Control): (host: 7777.elitfilmizle.com, port: 7777) và được điều khiển bằng các lệnh sau:
6.1. Gửi thông tin gõ phím của người dùng lên server của hacker.
6.2. Thêm/sửa/xóa thông tin trong registry.
6.3. Chụp ảnh màn hình và gửi lên server của hacker.
6.4. Quản lý cài đặt/gỡ bỏ/thư thi/cập nhật virus trên máy nạn nhân.
6.5. Tải mã độc của hacker từ server về và thực thi trên máy tính nạn nhân.
III. Hướng dẫn tiêu diệt virus
Dựa vào những hành vi tôi đã liệt kê ở trên thì để diệt virus này trên máy tính cần thực hiện những bước sau:
1. Đến 2 đường dẫn sau tìm file explorer.exe xóa đi:
+ C:\Users\<user name>\AppData\Roaming
+ C:\Users\<user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
2. Mở Firewall Allowed apps (vào start menu gõ allow an app) tìm nó và xóa đi:
3. Xóa 3 khóa registry:
+ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
+ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
+ HKEY_CURRENT_USER\Software\c83d2f25c4a6ded09c7217aab954e17d
4. Vào Enviroment Variables (vào start menu gõ edit env) xóa biến môi trường SEE_MASK_NOZONECHECKS đi.
5. Cẩn thận hơn có thể chặn máy tính kết nối đến server của hacker bằng cách thêm chuyển hướng địa chỉ server 127.0.0.1 7777.elitfilmizle.com bằng cách vào file host
ở đường dẫn sau C:\Windows\System32\drivers\etc:
6. Đã diệt xong virus explorer.exe.
PHẦN 2: PHÂN TÍCH VIRUS
I. Tìm thông tin về virus
1. Xem properties và sử dụng một số tool detect tôi tìm thấy một số thông tin về virus như sau :
2. Dựa vào thông tìm thấy được mô tả
ở trên tôi liệt kê ra một số thông tin quan trọng như sau :
+ Virus được tác giả tạo ra vào ngày 29/05/2019, tức là mới phát tán được khoảng 1–2 tháng.
+ Giả mạo thông tin Microsoft (một số thông tin không khớp eg. icon, product, language, etc).
+ Không có chứng nhận bằng chữ ký số Digital Signatures.
+ Viết bằng ngôn ngữ C# .NET 2.0 (Linker 11.0 ~ Visual Studio 2012).
+ Biên dịch 32-bit để có thể chạy trên cả 2 nền tảng Windows 32-bit và 64-bit.
+ Đã bị mã hóa làm rối code thực thi (obfuscated).
3. Các tools sử dụng phân tích virus :
Ngoài một số tool detect thông tin trên như Detect It Easy, EXE Info PE, RDG Packer Detector thì tôi sẽ sử dụng thêm một số tool sau:
de4dot : Là một phần mềm có tính năng giải mã (deobfuscation) chương trình .NET bị mã hõa (obfuscation).
dnSpy : Phần mềm dịch ngược (decompilation) những chương trình được viết bằng ngôn ngữ .NET.
II. Phân tích virus
Đổi tên virus explorer.exe sang explorer.exe.vx tránh việc lỡ tay chạy nhầm. Sau đó load virus vào dnSpy thấy như sau:
Virus đã bị mã hóa code nên dịch ngược trực tiếp virus sẽ không thể phân tích code được. Tôi sẽ sử dụng de4dot giải mã code này. Kết quả như sau:
Load lại virus sau khi giải mã explorer_dump.exe.vx vào dnSpy:
Code virus cũng đã rõ ràng hơn chút rồi nhưng tên các method và class vẫn chưa thể hiện đúng chức năng nên việc cần làm bây giờ là đọc / hiểu code các method và class sau đó đặt lại lại cho đúng và hình dung ra workflow mà virus làm việc. Sau một lúc đọc code thì tôi có đưa ra một số method quan trọng như hình dưới đây:
Phân tích code thì nhận ra đây chưa phải là body của virus, body của virus đã được mã hóa, đoạn code này chỉ có chức năng giải mã body đã được mã hóa của virus và sau đó thực thi nó sau khi giải mã.
Body của virus được mã hóa bởi 5 layers:
Layer 1 : Mã hóa bằng thuật toán Base-64.
Layer 2 : Nén bằng phương thức nén G-zip.
Layer 3 : Mã hóa bằng thuật toán AES.
Layer 4 : Mã hóa thủ công bằng thuật toán nhà tự trồng + — x : bla bla.
Layer 5 : Mã hóa sử dụng chuẩn RFC 2898 bằng Key-IV mặc định.
Hàm giải mã body của virus như sau:
Trong đó:
c : là khối dữ liệu đã bị mã hóa của body virus.
Phần body mã hóa của virus được hard-coded trong method object_Load_vx_j_exe(…).
Nếu tôi là tác giả tôi sẽ không làm phức tạp như thế này, nhiều lớp mã hóa không có tác dụng gì, vì cho dù bao nhiêu lớp thì chỉ cần break ngay sau khi thực thi hết layer cuối cùng là có thể dump được body của virus. Vậy nên ở giai đoạn này chỉ cần quan tâm là về dung lượng của body nên tác giả có thể sử dụng duy nhất một layer 2 là đủ, virus vừa nhẹ lại an toàn.
Bây giờ tôi sẽ giải mã body của virus. Để làm việc này, dựa vào công thức giải mã tôi đưa ra ở trên thì tôi sẽ cho virus thực thi và break ngay tại vị trí sau khi giải mã xong layer cuối cùng RFC 2898. Cụ thể set break-point at line 151:
Sau khi set break-point xong nhấn F5 để chạy debugging, chương trình sẽ break tại đây.
Ngay lúc này, biến array2 đang chứa body của virus đã được giải mã. Dump biến này vào cửa sổ Memory để xem nội dung bằng cách right-click vào biến array2 chọn Show in Memory Window sau đó chọn Memory 1.
Kết quả như sau:
Dựa vào những bytes đầu của này chúng ta thấy đây là một file file PE khác. Tôi sẽ lưu nội dung đã giải mã ở biến array2 này ra file bằng cách right-click vào biến array2 chọn Save… Tôi lưu với tên file là explorer_dump_parasite.exe.vx.
Tôi lưu ra file để tiện cho việc phân tích body chính của virus. Còn bản thân virus này không lưu ra file mà sẽ run-time thực thi luôn body đã giải mã này, cụ thể như sau:
1. Load body đã giải mã của virus vào bộ nhớ.
2. Tìm đến Entry Point của virus trong bộ nhớ.
3. Invoke gọi thực thi virus bắt đầu từ điểm Entry Point này.
Những việc này được thực hiện trong method Main(…) của virus.
Chúng ta đã xong file này, chuyển sang phân tích body chính của virus.
III. Phân tích body chính của virus
Load file body chính của virus tôi đã lưu ở trên explorer_dump_parasite.exe.vx vào dnSpy:
Nhìn qua code của body virus có nhận xét như sau:
+ Không bị mã hóa làm rối mã.
+ Có 3 classes và khá nhiều methods.
+ Mặc dù ko mã hóa code nhưng class/method đặt tên không rõ ràng nên ko thể hiện hết được chức năng của method (những tác giả viết virus hầu như ai cũng sẽ làm như vậy vì có nhiều lợi ích).
+ Kéo xuống cuối mỗi class sẽ thấy có nhiều thông tin mà tác giả hard-coded (eg. startup, registry, server, etc).
Vậy, vẫn cần làm những việc nên làm:
1. Xem qua code và sửa lại tên các method để thể hiện hết được chức năng method.
2. Hiểu code và hình dung ra workflow của virus.
Kết quả phân tích như sau:
1. Các classes/methods được sửa lại tên
Tổng quan thì chức năng của các classes này như sau:
+ Class vx_mainer : Entry Point, vị trí virus bắt đầu được thực thi, gọi đến vx_controller.
+ Class vx_logger : Chức năng keys-logging, giám sát, lưu trữ, lấy trộm các thông tin mà người dùng gõ từ bàn phím eg. tài khoản, mật khẩu, thẻ tín dụng, etc.
+ Class vx_controller : C & C (Command and Control), chức năng làm dispatcher giữa server & client, tiếp nhận và thực thi lệnh của hacker điều khiển thông qua internet.
2. Phân tích chí tiết code tìm hiểu hành vi của virus (tôi sẽ phân tích một số method chính, chứ không phân tích tất cả)
2.1. Class vx_logger
+ Method log_line_prefix(…) : Đinh dạng prefix cho mỗi dòng log như sau: <0x01><YY/mm/dd> <App Name><App Title><0x01>.
+ Method format_keys_as_string(…) : Lấy phím người dùng gõ bằng api GetAsyncKeyState() và xử lý như sau: Các phím chức năng, đặc biệt thì bỏ qua eg. F1-F12, Shift, Alt, Ctrl, etc. Các phím như Enter, Tab và các phím bình thườnh thì chuyển sang dạng string.
+ Method store_log_string_into_registry(…) : Ghép nối prefix với các thông tin lấy cắp từ người dùng gõ phím và lưu vào registry tại key HKEY_CURRENT_USER\Software\c83d2f25c4a6ded09c7217aab954e17d với value string là [kl].
2.2. Class vx_controller
+ Set biến môi trường (User Variable Enviroment) SEE_MASK_NOZONECHECKS=1 để vô hiệu hóa chức năng file security checking.
+ Thêm nó vào danh sách ngoại lệ của tường lửa bằng câu lệnh: netsh firewall add allowedprogram “<virus file path>” “<virus file name>” ENABLE.
+ Lưu nó vào đường dẫn: C:\Users\<user name> \AppData\Roaming.
+ Làm máy tính tự động thực thi nó mỗi khi người dùng mở máy tính bằng 2 cách:
+ Sao chép nó vào thư mục Startup: C:\Users\<user name> \AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.
+ Thêm nó vào registry ở 2 startup keys:
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
+ Set thuộc tính của tiến trình virus hiện tại thành Critical (tiến trình critical là kiểu tiến trình mà nếu nó bị tắt đột ngột thì hệ thống cũng sẽ bị tắt theo, chúng ta có thể hình dung như lỗi BSOD màn hình xanh, eg. smss.exe, csrss.exe, wininit.exe, etc).
+ Tạo 2 threads để xử lý song song 2 việc:
1. Giám sát lấy cắp lưu phím người dùng gõ vào registry (refer to 2.1. vx_logger).
2. Nhận và xử lý lệnh điều khiển của hacker thông qua Internet.
- Method vx_establish_to_server(…) : Thiết lập kết nối tới server của hacker (host: 7777.elitfilmizle.com, port: 7777) và gửi các thông tin về máy tính nạn nhân lên server bao gồm những thông tin sau: hardware id, user name, machine name, os name, os platform, has camera or not, user permission. Dựa vào thông tin who is cung cấp về domain này chúng ta thấy domain được giấu thông tin cá nhân, đăng ký thời hạn 5 năm, từ cuối năm 2018 và đến khi tác giả có ý định viết virus phát tán thì đến giữa năm 2019 đã cập nhật lại domain để đáp ứng cho việc phát tán virus này.
- Method vx_command_dispatcher(…) : Nhận và xử lý những lệnh sau từ hacker:
1. “ll”: Cho phép hoặc vô hiệu hóa các chức năng của virus. Khi đang hoạt động, tất cả các chức năng của của virus sẽ kiểm tra một cờ trạng thái (flag) để quyết định có thực thi hay không. Thì đây chính là lệnh để thay đổi cờ trạng thái này.
“kl” : Lấy thông tin gõ bàn phím của người dùng trong registry do class vx_logger đã lấy cắp lưu tại value [kl] ở key HKEY_CURRENT_USER\Software\c83d2f25c4a6ded09c7217aab954e17d và gửi lên server.
“prof” : Thực thi lệnh tác động vào registry.
+ Tham số “~” : Tạo một khóa trong registry.
+ Tham số “!” : Đọc một khóa trong registry vào gửi lên server.
+ Tham số “@” : Xóa một key trong registry.
“rn” : Tải hoặc giải nén một file sau đó thực thi.
“inv” : Lấy mã độc được gửi từ server lưu vào registry sau đó gọi thực thi hàm “start” mã độc này (Note: Hacker chưa gửi lệnh điều khiển nên tôi chưa lấy được mã độc này nên chưa xác định hành vi của mã độc này).
“ret” : Lấy mã độc được gửi từ server lưu vào registry sau đó gọi thực thi hàm “GT” mã độc này (Note: Hacker chưa gửi lệnh điều khiển nên tôi chưa lấy được mã độc này nên chưa xác định hành vi của mã độc này).
“CAP” : Chụp ảnh màn hình máy tính nạn nhân và gửi lên server.
“un”: Thực thi những lệnh có chức năng quản lý virus.
+ Tham số “~” : Bỏ thuộc tính critical của tiến trình virus và gỡ nó ra khỏi máy tính của nạn nhân.
+ Tham số “!” : Kết thúc tiến trình virus đang thực thi.
+ Tham số “@” : Thực thi virus như một tiến trình bình thường, không phải critical.
“up” : Tải bản cập nhật hoặc giải nén file sau đó thực thi.
“Ex” : Gọi thực thi method “ind” của plugin.
“PLG” : Tải và cài đặt một plugin cho virus, plugin của virus có đuổi mở rộng là “.A”, lần đầu tiên thấy virus có hỗ trợ plugin như thế này.
+ Sau mỗi 5 giây sẽ set lại điều kiện của tiến trình virus là working-set sử dụng tối thiểu 1024 bytes (1 KB).
+ Sau mỗi 8 giây sẽ gửi đi một lệnh “act” để ping-pong với server báo cho server biết virus vẫn đang hoạt động.
2.3. Class vx_mainer
+ Method main(…) : Gọi thực thi đến vx_controller.vx_main() (refer to 2.2. vx_controller).
VI. Tạm biệt
Phần nhận xét, đánh giá, hướng xử lý virus tôi đã nói ở phần đầu nên ở đây sẽ không nói lại thêm nữa.
Lâu không viết tech nên không tránh khỏi sai sót, nếu có vấn đề gì các bạn cứ thẳng thắn góp ý hoặc thông cảm nhé.
HẸN GẶP LẠI