Phân tích mã độc windows cơ bản - Phần II

tgnd

Moderator
Thành viên BQT
18/08/2021
45
73 bài viết
Phân tích mã độc windows cơ bản - Phần II
Chào các bạn, tgnd quay trở lại với phần 2 của series “Phân tích mã độc windows cơ bản” rồi đây.

Anh-whitehat-vn.png

Phần II: ANALYZING MALICIOUS SOFTWARE WINDOWS - Malware Behavior

Có một điều hiển nhiên đó là khi phân tích mã độc, điều chúng ta quan tâm nhất đó là: ”Mã độc làm gì, ở đâu?
Vì vậy mục đích của bài viết này mình muốn giới thiệu tới các bạn những hành vi của mã độc, những dấu hiệu để phát hiện mã độc thông qua các Windows API chúng sử dụng.

Như thường lệ, mình sẽ giải thích một cách dễ hiểu nhất để các bạn mới cũng có thể theo dõi seri này và chúng ta sẽ có những hiểu biết nhất định về phân tích mã độc. Tuy nhiên mình sẽ chỉ đề cập ở mức “cơ bản” các khái niệm, kỹ thuật theo đúng mục đích của loạt bài mình đề ra nhé! Các bạn nào muốn rõ hơn thì chúng ta vẫn nên googling giúp mình =))).

Được rồi, bắt đầu thôi.
Dưới đây là một số thông tin mô tả một số hành vi phổ biến của mã độc và các API liên quan. Nếu các bạn thấy thiếu hay chưa chuẩn thì nhớ để lại bình luận phía bên dưới để chúng ta có bài viết chung cho mọi người thật chất lượng nhé!

Downloaders

Hành vi có thể nói là phổ biến nhất của mã độc hiện giờ đó là downloader. Hành vi này đóng vai trò giúp kẻ tấn công có thể tải từng phần của mã độc hoặc tải xuống nhiều mã độc phục vụ mục đích tấn công.

Downloaders thường sử dụng các Windows API Internet để hỗ trợ tải xuống như:
WinExec, FtpPutFile, HttpOpenRequest, HttpSendRequest, HttpSendRequestEx, InternetCloseHandle, InternetOpen, InternetOpenUrl, InternetReadFile, InternetReadFileEx, InternetWriteFile, URLDownloadToFile, URLDownloadToCacheFile, URLOpenBlockingStream, URLOpenStream, Accept, Bind, Connect, Gethostbyname, Inet_addr, Recv, Send, WSAStartup, Gethostname, Socket, WSACleanup, Listen, ShellExecute, ShellExecuteEx, DnsQuery_A, DnsQueryEx, WNetOpenEnum, FindFirstUrlCacheEntry, FindNextUrlCacheEntry, InternetConnect, InternetSetOption, WSASocket, Closesocket, WSAIoctl, ioctlsocket, HttpAddRequestHeaders…

Ngoài việc sử dụng các API thì mã độc còn có thể thực hiện hành vi downloader bằng cách lợi dụng các tính năng của phần mềm khác, vd: chrome, edge, powershell, certutil, regsvr32… Tuy nhiên trên góc độ bài viết này các hành vi mình sẽ tập trung chủ yếu vào Windows API.

Dropper

Ngoài việc sử dụng downloader để trốn tránh Anti-virus, một số mã độc cũng có thể cài đặt và thực thi mã độc bằng cách “drop” mã độc từ trong resource của chúng.

mw20.png


Các API mã độc sử dụng:
CreateFile, CreateFileEx, WriteFile, GetModuleFileName, FindResource, LoadResource , LockResource , SizeofResource…

Launchers/Loader

Đây là hành vi thực thi hoặc cài đặt mã độc ngay khi chúng được tải xuống (hành vi này thường đi kèm với downloader) hoặc thực thi sau đó, khi có điều kiện thích hợp chẳng hạn.
Sử dụng các API hỗ trợ thực thi.
Các Windows API mã độc có thể dùng để thực hiện hành vi này:
ShellExecute, ShellExecuteEx, WinExec, CreateProcess, CreateProcessAsUser, CreateRemoteThread, CreateRemoteThreadEx, CreateThread…

Reverse Shells

Hành vi này thường sử dụng cmd.exe nhằm giúp kẻ tấn công có thể điều khiển, thực hiện các lệnh từ xa trên máy cục bộ.
Hacker thường dùng Netcat hoặc sử dụng kỹ thuật đa luồng (multithreaded) sử dụng cmd.
Windows API sử dụng chủ yếu là CreateProcess, tham số bao gồm tiến trình là cmd.exe cùng với handle kết nối Socket được nằm trong cấu trúc STARTUPINFO. Cùng với kỹ thuật đa luồng và tạo các pipe để thu nhận các đầu vào, đầu ra tiêu chuẩn (stdin, stdout, error).

=> Các API đặc trưng của hành vi:
WSAStartup, WSASocket, WSAConnect, CreateProcess, CreatePipe, PeekNamedPipe, CreateThread…

Remote Access

Đây là hành vi hoặc cũng có thể gọi là tính năng của mã độc giúp kẻ tấn công có thể điều khiển một hoặc nhiều máy tính từ xa. Thông thường hành vi này được thực hiện trên các cổng kết nối tiêu chuẩn như 80 hay 443, sử dụng các API liên quan đến gửi nhận dữ liệu.

Các API mã độc sử dụng để thực hiện hành vi:
InternetOpen, InternetOpenUrl, InternetReadFile, InternetReadFileEx, recv, connect, send, socket, WSAStartup, HttpSendRequest, HttpOpenRequest, HttpSendRequestEx, HttpAddRequestHeaders,

Info/Credential Stealers

Thông tin của người dùng bao gồm cả thông tin xác thực tài khoản mật khẩu hay cookies là miếng mồi không thể bỏ qua của mã độc. Vì vậy hành vi đánh cắp các thông tin này đã là hành vi rất phổ biến của chúng.
Để đánh cắp thông tin, mã độc thường có các hành vi cụ thể như:
  • Đợi người dùng đăng nhập vào máy (log in) để đánh cắp thông tin user
  • Dump thông tin từ windows, process (lsass.exe) lấy cắp mã LM và NTLM hash để sử dụng cho cuộc tấn công pass-the-hash. Các công cụ mã độc có thể lợi dụng đó là Pwdump, PSH, Mimikatz Toolkit. (Sử dụng các api đọc bộ nhớ).
  • Ghi lại các thông tin (logger) nhập từ bàn phím, chuột, màn hình, micro, camera… (Sử dụng các api quản lý phần cứng, api hook).
  • Đọc dữ liệu cookies, user data, Login Data của các trình duyệt (sử dụng các api đọc file).
  • Lấy dữ liệu trong clipboard (sử dụng các api quản lý clipboard data).

mw21.png

Các API mã độc có thể sử dụng:
LoadLibrary, GetProcAddress, GetModuleHandle,
AttachThreadInput, CallNextHookEx, GetAsyncKeyState, GetClipboardData, GetDC, GetDCEx, GetForegroundWindow, GetKeyboardState, GetKeyState, GetMessageA, GetRawInputData, GetWindowDC, MapVirtualKeyA, MapVirtualKeyExA, PeekMessageA, PostMessageA, PostThreadMessageA, RegisterHotKey, RegisterRawInputDevices, SendMessageA, SendMessageCallbackA, SendMessageTimeoutA, SendNotifyMessageA, SetWindowsHookExA, SetWinEventHook, UnhookWindowsHookEx, BitBlt, StretchBlt, GetKeynameText, waveInStart, waveInAddBuffer, waveInOpen, CreateFile, CreateFileEx, OpenFile, ReadFile, ReadfileEx, CryptUnprotectData…

Persistence

Hầu hết mã độc khi xâm nhập được vào hệ thống sẽ cố gắng tạo ra sự bền bỉ để tồn tại trên hệ thống lâu nhất có thể.

mw22.png

Có rất nhiều cách để mã độc thực hiện hành vi này:
  • Sử dụng windows Registry “Autoruns” giúp tự động thực thi mã độc khi khởi động hệ thống. Key quốc dân mã độc thường dùng chắc chắn là HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run rồi . Ngoài ra còn rất nhiều key khác vd: Services, Winlogon, AppInit_DLLs… (sử dụng các api quản lý registry key).
  • Sử dụng Task Scheduler, WMI: đây đều là các tính năng của windows cung cấp khả năng tự khởi chạy cho mã độc. (Sử dụng COM).
  • Sử dụng cơ chế DLL Hijacking: thay vì mã độc tự chạy dưới tiến trình của nó thì chúng sẽ tìm cách để “được tải” bởi các tiến trình chuẩn hoặc phần mềm đã được xác thực.
  • Sử dụng cơ chế Injection (sử dụng các api tác động đến process memory, thread).
  • Copy chính nó vào các thư mục system, user, windows, startup… (sử dụng các api liên quan đến lấy đường dẫn đặc biệt, các API copyfile)

Các API mã độc hay sử dụng:
RegCreateKeyEx, RegCreateKey, RegSetValueEx, RegSetKeyValue, RegOpenKeyEx, RegReplaceKey, RegRestoreKey, CoCreateInstance, GetWindowsDirectory, SHGetFolderPath, SHGetSpecialFolderPath, SHGetFolderPathAndSubDir, , GetModuleBaseName, GetModuleFileName, GetModuleFileNameEx, GetTempPath, GetSystemDirectory, GetEnvironmentStrings, ExpandEnvironmentStrings, GetLongPathName, GetTempPath2, GetAppContainerFolderPath, GetCurrentDirectory, GetDefaultUserProfileDirectory, GetProfilesDirectory, GetUserProfileDirectory, GetAllUsersProfileDirectory, ExpandEnvironmentStringsForUser, CopyFile, CopyFileEx,
CreateFileMappingA, CreateProcessA, CreateRemoteThread, CreateRemoteThreadEx, GetModuleHandleA, GetProcAddress, GetThreadContext, HeapCreate, LoadLibraryA, LoadLibraryExA, LocalAlloc, MapViewOfFile, MapViewOfFile2, MapViewOfFile3, MapViewOfFileEx, OpenThread, Process32First, Process32Next, QueueUserAPC, ReadProcessMemory, ResumeThread, SetProcessDEPPolicy, SetThreadContext, SuspendThread, Thread32First, Thread32Next, Toolhelp32ReadProcessMemory, VirtualAlloc, VirtualAllocEx, VirtualProtect, VirtualProtectEx, WriteProcessMemory, VirtualAllocExNuma, VirtualAlloc2, VirtualAlloc2FromApp, VirtualAllocFromApp, VirtualProtectFromApp, CreateThread, WaitForSingleObject, OpenProcess, OpenFileMappingA, GetProcessHeap, GetProcessHeaps, HeapAlloc, HeapReAlloc, GlobalAlloc, AdjustTokenPrivileges, CreateProcessAsUserA, OpenProcessToken, CreateProcessWithTokenW, NtAdjustPrivilegesToken, NtAllocateVirtualMemory, NtContinue, NtCreateProcess, NtCreateProcessEx, NtCreateSection, NtCreateThread, NtCreateThreadEx, NtCreateUserProcess, NtDuplicateObject, NtMapViewOfSection, NtOpenProcess, NtOpenThread, NtProtectVirtualMemory, NtQueueApcThread, NtQueueApcThreadEx, NtQueueApcThreadEx2, NtReadVirtualMemory, NtResumeThread, NtUnmapViewOfSection, NtWaitForMultipleObjects, NtWaitForSingleObject, NtWriteVirtualMemory, RtlCreateHeap, LdrLoadDll, RtlMoveMemory, RtlCopyMemory, SetPropA, WaitForSingleObjectEx, WaitForMultipleObjects, WaitForMultipleObjectsEx, KeInsertQueueApc, Wow64SetThreadContext, NtSuspendProcess, NtResumeProcess, DuplicateToken, NtReadVirtualMemoryEx, CreateProcessInternal…

Evasion

Không phải mã độc nào sau khi thực thi lần đầu cũng thực thi hành vi độc hại hay cố gắng duy trì tồn tại trên hệ thống, nên một số mã độc còn có hành vi che dấu, thực thi khi có điều kiện cụ thể, xóa dấu vết.
Một số hành vi cụ thể như:
  • Tự xóa các thành phần của mã độc sau khi thực thi. (Sử dụng các API xóa file, key, terminate process).
  • Thực hiện các lệnh sleep hoặc delay execution.
  • Debug Evasion.

Các API liên quan đến hành vi:
CreateFileMappingA, DeleteFileA, GetModuleHandleA, GetProcAddress, LoadLibraryA, LoadLibraryExA, LoadResource, SetEnvironmentVariableA, SetFileTime, Sleep, WaitForSingleObject, SetFileAttributesA, SleepEx, NtDelayExecution, NtWaitForMultipleObjects, NtWaitForSingleObject, CreateWindowExA, RegisterHotKey, timeSetEvent, WaitForSingleObjectEx, WaitForMultipleObjects, WaitForMultipleObjectsEx, SetWaitableTimer, CreateTimerQueueTimer, CreateWaitableTimer, SetWaitableTimer, SetTimer, Select, ImpersonateLoggedOnUser, SetThreadToken, DuplicateToken, CreateProcessInternal, TimeGetTime, ExitProcess, TerminateProcess, GetTickCount.

Anti Virtualization/Sandbox, Debugging

Phần này dùng khái niệm tính năng có vẻ chuẩn hơn :)).
Để che dấu các hành vi khác thì mã độc sẽ cố gắng phát hiện có đang chạy trong môi trường debug, sandbox hay không.

Các API mã độc sử dụng thường là các API lấy thông tin hệ thống:
CreateToolhelp32Snapshot, GetLogicalProcessorInformation, GetLogicalProcessorInformationEx, GetTickCount, OutputDebugStringA, CheckRemoteDebuggerPresent, Sleep, GetSystemTime, GetComputerNameA, SleepEx, IsDebuggerPresent, GetUserNameA, NtQueryInformationProcess, ExitWindowsEx, FindWindowA, FindWindowExA, GetForegroundWindow, GetTickCount64, QueryPerformanceFrequency, QueryPerformanceCounter, GetNativeSystemInfo, RtlGetVersion, GetSystemTimeAsFileTime, CountClipboardFormats, GetACP, GetOEMCP, GetCPInfo, GlobalMemoryStatusEx, GetPhysicallyInstalledSystemMemory...

Privilege Escalation

Đặc quyền của người dùng rất quan trọng đối với mã độc, vì vậy nếu chúng được thực thi dưới đặc quyền user thường (không phải administrator hay system) thì mã độc sẽ cố gắng nâng đặc quyền để thực hiện các hành vi khác yêu cầu quyền cao hơn.
Để thực hiện hành vi này, mã độc thường sử dụng API: OpenProcessToken, SeDebugPrivilege, AdjustTokenPrivileges, LookupPrivilegeValue…

Encrypt File (Ransomware)

Hành vi mã hóa file gắn liền với các API đặc trưng để xử lý các thuật toán mã hóa, vì vậy mã độc tống tiền thường sử dụng các hàm:
CryptAcquireContextA, EncryptFileA, CryptEncrypt, CryptDecrypt, CryptCreateHash, CryptHashData, CryptDeriveKey, CryptSetKeyParam, CryptGetHashParam, CryptSetKeyParam, CryptDestroyKey, CryptGenRandom, DecryptFileA, FlushEfsCache, GetLogicalDrives, GetDriveTypeA, CryptStringToBinary, CryptBinaryToString, CryptReleaseContext, CryptDestroyHash, EnumSystemLocalesA…

Mw23.png


Enumeration

Một số hành vi khác của mã độc yêu cầu chúng phải liệt kê các thông tin của hệ thống, ví dụ: lây file cần liệt kê danh sách file, thư mục, Inject thì cần liệt kê danh sách các process chẳng hạn.

Do đó khi thấy mã độc sử dụng các API liệt kê chúng ta cần chú ý:
CreateToolhelp32Snapshot, EnumDeviceDrivers, EnumProcesses, EnumProcessModules, EnumProcessModulesEx, FindFirstFileA, FindNextFileA, GetLogicalProcessorInformation, GetLogicalProcessorInformationEx, GetModuleBaseNameA, GetSystemDefaultLangId, GetVersionExA, GetWindowsDirectoryA, IsWoW64Process, Module32First, Module32Next, Process32First, Process32Next, ReadProcessMemory, Thread32First, Thread32Next, GetSystemDirectoryA, GetSystemTime, ReadFile, GetComputerNameA, VirtualQueryEx, GetProcessIdOfThread, GetProcessId, GetCurrentThread, GetCurrentThreadId, GetThreadId, GetThreadInformation, GetCurrentProcess, GetCurrentProcessId, SearchPathA, GetFileTime, GetFileAttributesA, LookupPrivilegeValueA, LookupAccountNameA, GetUserNameA, RegEnumKeyExA, RegEnumValueA, RegQueryInfoKeyA, RegQueryMultipleValuesA, RegQueryValueExA, NtQueryDirectoryFile, NtQueryInformationProcess, NtQuerySystemEnvironmentValueEx, EnumDesktopWindows, EnumWindows, NetShareEnum, NetShareGetInfo, NetShareCheck, GetAdaptersInfo, PathFileExistsA, GetNativeSystemInfo, RtlGetVersion, GetIpNetTable, GetLogicalDrives, GetDriveTypeA, RegEnumKeyA, WNetEnumResourceA, WNetCloseEnum, FindFirstUrlCacheEntryA, FindNextUrlCacheEntryA, WNetAddConnection2A, WNetAddConnectionA, EnumResourceTypesA, EnumResourceTypesExA, GetSystemTimeAsFileTime, GetThreadLocale, EnumSystemLocalesA…


Phần II này mình đã liệt kê một số hành vi phổ biến của mã độc, còn hành vi nào chưa hoàn thiện các bạn nhớ phản hồi lại mình, cảm ơn các bạn đã theo dõi, nếu thấy hay và hữu ích đừng quên để lại like và chia sẻ nhé! Thank you all!

Danh sách bài viết:
Phần I: Windows APIs
Phần II: Malware Behavior < we are here
Phần III: Basic Static Analysis
Phần IV: Virtual Machine
Phần V: Basic Dymamic Analysis
tgnd
 
Chỉnh sửa lần cuối:
Thẻ
mã độc windows malware tgnd
Bên trên