Common API used in Malware
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
生のソケット | WinAPIソケット |
---|---|
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() |
関数名 | アセンブリ命令 |
---|---|
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を注入するプロセスを特定する:CreateToolhelp32Snapshot, Process32First, Process32Next
プロセスを開く:GetModuleHandle, GetProcAddress, OpenProcess
プロセス内にDLLのパスを書く:VirtualAllocEx, WriteProcessMemory
悪意のあるDLLをロードするスレッドをプロセス内に作成する:CreateRemoteThread, LoadLibrary
使用する他の関数:NTCreateThreadEx, RtlCreateUserThread
通常のWindows API呼び出しを行わずに悪意のあるDLLをロードする。 DLLはプロセス内にマッピングされ、インポートアドレスを解決し、リロケーションを修正し、DllMain関数を呼び出す。
プロセスからスレッドを見つけて悪意のあるDLLをロードさせる
ターゲットスレッドを見つける:CreateToolhelp32Snapshot, Thread32First, Thread32Next
スレッドを開く:OpenThread
スレッドを一時停止する:SuspendThread
被害者プロセス内に悪意のあるDLLのパスを書く:VirtualAllocEx, WriteProcessMemory
ライブラリをロードするスレッドを再開する:ResumeThread
ポータブル実行注入:実行可能ファイルは被害者プロセスのメモリに書き込まれ、そこから実行される。
マルウェアはプロセスのメモリから正当なコードをアンマップし、悪意のあるバイナリをロードする
新しいプロセスを作成する:CreateProcess
メモリをアンマップする:ZwUnmapViewOfSection, NtUnmapViewOfSection
プロセスメモリに悪意のあるバイナリを書く:VirtualAllocEc, WriteProcessMemory
エントリポイントを設定し、実行する:SetThreadContext, ResumeThread
SSDT(システムサービス記述子テーブル)はカーネル関数(ntoskrnl.exe)またはGUIドライバ(win32k.sys)を指し、ユーザープロセスがこれらの関数を呼び出すことができる。
ルートキットはこれらのポインタを制御するアドレスに変更することがある。
IRP(I/Oリクエストパケット)は、あるコンポーネントから別のコンポーネントにデータの断片を送信する。カーネル内のほぼすべてのものがIRPを使用し、各デバイスオブジェクトにはフック可能な独自の関数テーブルがある:DKOM(ダイレクトカーネルオブジェクト操作)
IAT(インポートアドレステーブル)は依存関係を解決するのに役立つ。このテーブルをフックして呼び出されるコードをハイジャックすることが可能。
EAT(エクスポートアドレステーブル)フック。このフックはユーザーランドから行うことができる。目的はDLLによってエクスポートされた関数をフックすること。
インラインフック:このタイプは達成が難しい。関数自体のコードを修正することを含む。おそらく、最初にジャンプを置くことによって。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)