Phân tích mã độc windows cơ bản – Phần I
Hầu hết phần mềm độc hại đều đang nhắm mục tiêu vào nền tảng Windows và khai thác các tài nguyên của hệ điều hành này. Trang bị các kiến thức liên quan đến hệ điều hành Windows sẽ giúp chúng ta có cái nhìn tổng quan giúp xác định và theo dõi mã độc hiệu quả hơn. Các bạn cùng với TCBD phân tích các mã độc Windows cơ bản – phần 1 nhé.
Phần I: ANALYZING MALICIOUS SOFTWARE WINDOWS – Windows API
Nội dung phần này mình đề cập đến nhiều khái niệm quen thuộc về hệ điều hành Windows, các bạn có kiến thức cơ bản về lập trình sẽ dễ dàng đọc và theo dõi, tuy nhiên các bạn khác đừng lo, mình sẽ viết mọi thứ dễ hiểu nhất có thể. Bắt đầu thôi nào!
Windows là một hệ điều hành phức tạp nên mỗi phần mình sẽ đề cập chủ yếu về một khía cạnh của nó. Các chương trình, phần mềm được lập trình bình thường và được biên dịch sẽ luôn thực hiện các chức năng theo các nguyên tắc mà Microsoft đưa ra. Nhưng những phần mềm độc hại (malware) sẽ tìm cách phá vỡ những nguyên tắc đó và thực hiện những hành vi người dùng không mong muốn.
Để thực hiện các hành vi này, mã độc sẽ sử dụng các “Windows API” sau đó sẽ thực hiện sửa đổi hệ thống. Vì vậy chúng ta cùng tìm hiểu xem nó có gì nhé.
Về Windows APIs
Windows API là các chức năng giúp mã độc tương tác với các thư viện của Microsoft. Windows API trong các thư viện rất đầy đủ nên hầu hết các nhà phát triển ứng dụng rất ít khi phải sử dụng các thư viện của bên thứ ba.
Windows API bao gồm thuật ngữ, tên và các quy ước. Để hiểu rõ chi tiết, các bạn đọc tại đây nhé!
Các loại biến tiêu chuẩn của C thường không được sử dụng, thay vào đó, các tham số, đối số hay các biến của Windows API thường sẽ sử dụng tên riêng và đại diện cho kiểu dữ liệu cụ thể.
Ví dụ: WORD (w), DWORD (dw), Handle (h), Long Pointer (LP) ….
Nhìn vào đối số thứ 3 của VirtualAllocEx là hProcess, chúng ta sẽ biết rằng đó là HANDLE.
Ở đây, Handle cụ thể là gì?
Handle đơn giản là nó tham chiếu đến một đối tượng, giúp API windows xử lý đối tượng đó.
Các đối tượng thường gặp như: window, process, module, menu, file…
Ví dụ: Khi gọi hàm CreateWindowEx, chúng ta sẽ nhận được một “handle” của cái cửa sổ (window) vừa tạo. Và từ đây, khi chúng ta muốn làm gì “đối tượng” cửa sổ này, “đóng cửa” chẳng hạn thì chúng ta cần dùng “handle” của cửa sổ đó và dùng “DestroyWindow”.
(Giống như việc chúng ta đóng mở cửa sổ ở nhà vậy, chúng ta sẽ dùng “tay cầm” đúng không các bạn ^^).
Vậy mã độc sử dụng Windows API thì có thể làm được gì?
Mã độc có thể tác động vào các thành phần của hệ điều hành Windows: File System, Files, Data, Windows Registry, Network, Process…. rất nhiều, chúng ta cùng tìm hiểu tiếp nhé!
Về hệ thống tệp
Hành vi phổ biến nhất của các phần mềm độc hại đó là tạo hoặc sửa đổi các tệp (file) trong hệ điều hành.
Do đó, các hoạt động, các thay đổi của mã độc đối với file sẽ giúp chúng ta có cái nhìn về những gì mã độc đang làm.
Ví dụ: Mã độc đọc, copy file chứa tài khoản mật khẩu lưu trong trình duyệt thì chắc các bạn đoán được nó định làm gì rồi đó =)).
Microsoft cung cấp các chức năng Windows API để truy cập vào hệ thống file. Mình sẽ liệt kê một số chức năng:
- CreateFile: Được sử dụng để tạo và mở tệp
- ReadFile, WriteFile: Được sử dụng để đọc và ghi vào tệp.
- CreateFileMapping và MapViewOfFile: Tải tệp vào bộ nhớ và thao tác. Mã độc hay sử dụng API này để thực thi các tệp PE (PE là gì nhỉ =))) độc hại trong bộ nhớ.
Ngoài ra còn các phiên bản “mới” của các Windows API, có thêm hậu tố “Ex”, chức năng thì khá tương tự, các bạn nhớ tìm hiểu thêm nhé.
Windows không chỉ có các tệp trên ổ đĩa thông thường mà còn có các loại file đặc biệt khác: shared files, file namespaces, data streams. Những loại tệp này sẽ không truy cập bằng cách sử dụng đường dẫn gồm ký tự ổ đĩa và tên thư mục (ví dụ: C:\Users) như bình thường.
Shared files hay các tệp được chia sẻ lưu trữ trên mạng sẽ truy cập bằng các tiền tố: \\?\
Ví dụ: \\?\serverName\Share.
File namespaces: gồm các tệp truy cập thông qua những “không gian tên”.
Mã độc có thể truy cập vào các thiết bị vật lý và đọc ghi chúng như một tệp.
Ví dụ: Mã độc truy cập vào \\.\PhysicalDisk1 để sửa đổi đĩa.
Về Windows Registry
Hệ điều hành và các phần mềm lưu các thông tin cài đặt, cấu hình tại Windows Registry. Đây cũng là thành phần mã độc sẽ khai thác rất nhiều bởi các thông tin được lưu tại đây rất có giá trị. Vì vậy tương tự với hệ thống tệp, các tác động của mã độc đối với Windows Registry cũng sẽ “nói lên” chức năng hay hành vi của mã độc là gì.
Như phần trên, mình sẽ đưa ra các thông tin cần thiết liên quan đến mã độc là chủ yếu, các thông tin khác về Windows Registry các bạn tìm hiểu thêm tại đây nhé!
Các phiên bản Windows ban đầu lưu các thông tin cấu hình trong tệp với định dạng .ini. Về sau trên Windows NT, các thông tin được lưu dưới dạng tệp nhị phân và nằm trong thư mục “%SystemRoot%\System32\Config\”.
Các thông tin cụ thể bao gồm: networking, driver, startup, user account…v.v
Mã độc thường sử dụng Windows Registry để lấy thông tin và “trú ngụ” bằng cách lưu thông tin, cấu hình, dữ liệu hoặc để gia tăng khả năng tồn tại như đăng ký tự động khởi động cùng hệ thống.
Windows Registry thực sự là một “miếng mồi lớn” cho các phần mềm độc hại.
Một số thuật ngữ quan trọng về Windows Registry các bạn cần lưu ý:
- Root key: Registry được chia làm 5 phần lớn, mỗi phần lớn được gọi là Rootkey.
- Sub key: Giống như thư mục thì Subkey chính là “thư mục con” của thư mục gốc.
- Key: Có thể hình dung Key chính là một thư mục, nó chưa các thông tin về thư mục và các giá trị bên trong.
- Value entry: Chứa thông tin bao gồm tên và giá trị (name & value).
- Value or data: Dữ liệu lưu trong một mục của registry.
Hơi khó hình dung phải không nào, chúng ta sẽ nói rõ hơn về mỗi đối tượng để dễ hiểu nhé!
Về Root Keys
Như mình đã nói, registry được chia thành 5 root key:
- HKEY_LOCAL_MACHINE (HKLM): Lưu trữ các thông tin cài đặt chung của hệ thống.
- HKEY_CURRENT_USER (HKCU): Lưu trữ các cài đặt cụ thể đối với người dùng hiện tại.
- HKEY_CLASSES_ROOT: Lưu trữ thông tin xác định các loại.
- HKEY_CURRENT_CONFIG: Lưu trữ thông tin về cài đặt của các phần cứng hiện tại.
- HKEY_USERS: Lưu các thông tin của người dùng mặc định, các người dùng khác.
Hai root key được mã độc sử dụng nhiều nhất đó là HKLM và HKCU.
Thực ra khóa HKCU được lưu trữ trong HKEY_USERS\SID, trong đó SID là mã định danh của user (người dùng) hiện tại đang đăng nhập.
Ví dụ: một key mà mã độc sử dụng rất nhiều đó là: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Key này lưu trữ các value sẽ được tự động khởi động khi người dùng đăng nhập.
Root key ở đây là HKEY_LOCAL_MACHINE.
Sub key bao gồm: SOFTWARE, Microsoft, Windows, CurrentVersion, Run.
Value: SecurityHealth.
Data: “%windir%\system32\SecurityHealthSystray.exe”
Hình ảnh của ví dụ nêu trên sử dụng một công cụ của Windows được cài đặt sẵn đó là “Regedit”. Công cụ giúp chúng ta có thể xem và chỉnh sửa Windows Registry thông qua giao diện của nó.
Nhân tiện chúng ta nhắc khá nhiều về việc mã độc tự động khởi động cùng hệ thống bằng cách ghi data vào các Sub key “Run”, Microsoft đưa ra một công cụ miễn phí có tên “Autoruns” có giao diện liệt kê các thành phần tự động khởi chạy cùng hệ điều hành. Công cụ này liệt kê khá đầy đủ và có chức năng kiểm tra, xác minh các cấu hình đó, trước đây mình đã giới thiệu trong một bài viết, các bạn nhớ xem thêm nhé!.
Tiếp theo, chúng ta quay lại phần Windows API thì các registry cũng giống như file, chúng sẽ có các hàm API để sử dụng.
Về Registry Functions
Như ví dụ trước, làm sao mã độc có thể đăng ký một key run để khởi động cùng hệ điều hành. Mã độc thường sử dụng các Registry function, Windows API để sửa đổi registry. Một số API phổ biến đó là:
- RegOpenKeyEx: Mở registry để chỉnh sửa và truy vấn. Có nhiều function cho phép bạn truy vấn và chỉnh sửa khóa đăng ký mà không cần mở trước.
- RegGetValue: Trả về dữ liệu (data) cho một giá trị (value).
- RegSetValueEx: Thêm một giá trị (value) mới và dữ liệu (data).
Còn nhiều các API khác mã độc hay sử dụng, các bạn có thể “Google Search” hoặc bạn nào đã biết, đã tìm hiểu thì nhớ bình luận xuống phần bên dưới nhé!
Không phải chỉ dùng Windows API hay Regedit mới có thể cấu hình có Registry. Registry còn có “script” riêng, các file với định dạng .reg chứa các thông tin có thể dễ dàng đọc và chỉnh sửa để cấu hình.
Người dùng chỉ cần “double-clicks” và file .reg và nó sẽ tự động thiết lập các giá trị được cấu hình.
Một tài nguyên nữa mà các phần mềm độc hại không thể bỏ qua đó là Network. Và tất nhiên, thành phần này cũng có các Windows API để giao tiếp.
Về Networking APIs
Phần mềm độc hại hầu hết đều sử dụng các chức năng liên quan đến mạng để thực hiện các hành vi, ví dụ như: kill switch malware, download file, data transaction…
Mình sẽ đưa ra thông tin của một số network function phổ biến.
Windows cung cấp nhiều tùy chọn về mạng, trong số đó, mã độc có thể sử dụng mô hình mạng sockets.
Các chức năng mạng của socket được tích hợp trong thư viện Winsock, bạn nào học lập trình mạng rồi chắc là biết, chủ yếu trong “ws2_32.dll” bao gồm:
- socket: tạo một socket.
- bind: gắn một socket vào một cổng cụ thể.
- listen: cho biết socket sẽ lắng nghe các kết nối đến.
- accept: Mở kết nối và chấp nhận kết nối.
- connect: Mở kết nối.
- recv: Nhận dữ liệu.
- send: Gửi dữ liệu.
Ngoài API Winsock, có một API “cao cấp” hơn đó là API WinINet. Các hàm chức năng nằm trong thư viện Wininet.dll. Nếu mã độc có import dll này thì chứng tỏ chúng đang sử dụng các API mạng cao cấp này.
API WinInet giúp triển khai các giao thức ví dụ: HTTP, FTP thuộc lớp ứng dụng.
Mã độc mở các kết nối sử dụng các API:
- InternetOpen: Khởi tạo kết nối Internet.
- InternetOpenUrl: Kết nối tới một URL.
- InternetReadFile: Đọc dữ liệu từ tệp được tải xuống từ Internet.
“Như thường lệ” còn nhiều API khác liên quan đến mạng và nhiều giao thức khác mà mã độc hay sử dụng, các bạn nhớ tìm hiểu thêm nhé!
Thông tin liên hệ:
Công ty CP ĐT&HL Phát Triển Doanh Nghiệp TC
Địa chỉ: Nhà 15 đường 5, CityLand Park Hill, P.10, Gò Vấp, TP.HCM
Văn phòng: 745 Nguyễn Kiệm, Phường 3, Quận Gò Vấp
Fanpage: www.facebook.com/ChuyendoisoDoanhNghiepToandien
Hotline: 1900 2929 44 (Phím 3) – 0868773939
Email: sales@tcgroup.edu.vn