Common API used in Malware
Try Hard Security Group
一般的な
ネットワーキング
Raw Sockets | WinAPI Sockets |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
永続性
レジストリ | ファイル | サービス |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
暗号化
名前 |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
反解析/VM
関数名 | アセンブリ命令 |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [プロセスが実行中か確認] | |
CreateFileW/A [ファイルが存在するか確認] |
ステルス
名前 | |
---|---|
VirtualAlloc | メモリの割り当て(パッカー) |
VirtualProtect | メモリの権限変更(セクションに実行権限を与えるパッカー) |
ReadProcessMemory | 外部プロセスへのインジェクション |
WriteProcessMemoryA/W | 外部プロセスへのインジェクション |
NtWriteVirtualMemory | |
CreateRemoteThread | DLL/プロセスインジェクション... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
実行
関数名 |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
その他
GetAsyncKeyState() -- キーロギング
SetWindowsHookEx -- キーロギング
GetForeGroundWindow -- 実行中のウィンドウ名(またはブラウザからのウェブサイト)
LoadLibrary() -- ライブラリのインポート
GetProcAddress() -- ライブラリのインポート
CreateToolhelp32Snapshot() -- 実行中のプロセスのリスト
GetDC() -- スクリーンショット
BitBlt() -- スクリーンショット
InternetOpen()、InternetOpenUrl()、InternetReadFile()、InternetWriteFile() -- インターネットへのアクセス
FindResource()、LoadResource()、LockResource() -- 実行可能ファイルのリソースへのアクセス
マルウェアテクニック
DLLインジェクション
他のプロセス内で任意のDLLを実行
悪意のあるDLLをインジェクトするプロセスを特定する:CreateToolhelp32Snapshot、Process32First、Process32Next
プロセスを開く:GetModuleHandle、GetProcAddress、OpenProcess
DLLへのパスをプロセス内に書き込む:VirtualAllocEx、WriteProcessMemory
悪意のあるDLLをロードするプロセス内のスレッドを作成する:CreateRemoteThread、LoadLibrary
その他の使用する関数:NTCreateThreadEx、RtlCreateUserThread
反射型DLLインジェクション
通常のWindows API呼び出しを行わずに悪意のあるDLLをロードする。 DLLはプロセス内にマップされ、インポートアドレスを解決し、再配置を修正し、DllMain関数を呼び出す。
スレッドハイジャッキング
プロセスからスレッドを見つけ、悪意のあるDLLをロードさせる
ターゲットスレッドを見つける:CreateToolhelp32Snapshot、Thread32First、Thread32Next
スレッドを開く:OpenThread
スレッドを一時停止する:SuspendThread
被害者プロセス内に悪意のあるDLLへのパスを書き込む:VirtualAllocEx、WriteProcessMemory
ライブラリをロードするスレッドを再開する:ResumeThread
PEインジェクション
Portable Execution Injection:実行可能ファイルが被害者プロセスのメモリに書き込まれ、そこから実行される。
プロセスホローイング
マルウェアはプロセスのメモリから正規のコードをアンマップし、悪意のあるバイナリをロードする
新しいプロセスを作成する:CreateProcess
メモリをアンマップする:ZwUnmapViewOfSection、NtUnmapViewOfSection
プロセスメモリに悪意のあるバイナリを書き込む:VirtualAllocEc、WriteProcessMemory
エントリポイントを設定して実行する:SetThreadContext、ResumeThread
フック
SSDT(System Service Descriptor Table)はカーネル関数(ntoskrnl.exe)またはGUIドライバ(win32k.sys)を指し示し、ユーザープロセスがこれらの関数を呼び出すことができるようにします。
ルートキットはこれらのポインタを制御するアドレスに変更する可能性があります
IRP(I/O Request Packets)はデータの断片を1つのコンポーネントから別のコンポーネントに転送します。カーネルのほとんどすべてがIRPを使用し、各デバイスオブジェクトには独自の関数テーブルがあり、これをフックすることができます:DKOM(Direct Kernel Object Manipulation)
IAT(Import Address Table)は依存関係を解決するために役立ちます。このテーブルをフックして、呼び出されるコードを乗っ取ることができます。
EAT(Export Address Table)フック。これらのフックはユーザーランドから行うことができます。目的は、DLLによってエクスポートされた関数をフックすることです。
インラインフック:このタイプは難しいです。これは関数自体のコードを変更することを含みます。たとえば、この先頭にジャンプを配置することがあります。
Try Hard Security Group
Last updated