マルウェアで使用される一般的なAPI
Reading time: 6 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
一般
ネットワーキング
Raw Sockets | WinAPI Sockets |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
永続性
Registry | File | Service |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
暗号化
Name |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
逆解析/VM
Function Name | Assembly Instructions |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [プロセスが実行中か確認] | |
CreateFileW/A [ファイルの存在確認] |
ステルス
Name | |
---|---|
VirtualAlloc | メモリを割り当てる (packers) |
VirtualProtect | メモリの権限を変更する (packerがセクションに実行権限を与える) |
ReadProcessMemory | 外部プロセスへの注入 |
WriteProcessMemoryA/W | 外部プロセスへの注入 |
NtWriteVirtualMemory | |
CreateRemoteThread | DLL/プロセス注入... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
実行
Function Name |
---|
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注入
ポータブル実行注入: 実行可能ファイルは被害者プロセスのメモリに書き込まれ、そこから実行される。
プロセスホロウイング
マルウェアはプロセスのメモリから正当なコードをアンマップし、悪意のあるバイナリをロードする
- 新しいプロセスを作成する: CreateProcess
- メモリをアンマップする: ZwUnmapViewOfSection, NtUnmapViewOfSection
- プロセスメモリに悪意のあるバイナリを書く: VirtualAllocEc, WriteProcessMemory
- エントリポイントを設定し、実行する: SetThreadContext, ResumeThread
フック
- SSDT (System Service Descriptor Table) はカーネル関数 (ntoskrnl.exe) またはGUIドライバ (win32k.sys) を指し示し、ユーザープロセスがこれらの関数を呼び出せるようにする。
- ルートキットはこれらのポインタを制御するアドレスに変更することができる。
- IRP (I/O Request Packets) はデータの断片を一つのコンポーネントから別のコンポーネントに送信する。カーネル内のほぼすべてのものがIRPを使用し、各デバイスオブジェクトにはフック可能な独自の関数テーブルがある: DKOM (Direct Kernel Object Manipulation)
- IAT (Import Address Table) は依存関係を解決するのに役立つ。このテーブルをフックして呼び出されるコードをハイジャックすることが可能である。
- EAT (Export Address Table) フック。このフックはユーザーランドから行うことができる。目的はDLLによってエクスポートされた関数をフックすることである。
- インラインフック: このタイプは達成が難しい。これは関数自体のコードを修正することを含む。おそらく、最初にジャンプを置くことによって。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。