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)
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リクエストパケット)はデータの断片を1つのコンポーネントから別のコンポーネントに送信する。カーネル内のほぼすべてのものがIRPを使用し、各デバイスオブジェクトにはフック可能な独自の関数テーブルがある:DKOM(ダイレクトカーネルオブジェクト操作)
IAT(インポートアドレステーブル)は依存関係を解決するのに役立つ。このテーブルをフックして呼び出されるコードをハイジャックすることが可能である。
EAT(エクスポートアドレステーブル)フック。このフックはユーザーランドから行うことができる。目的はDLLによってエクスポートされた関数をフックすることである。
インラインフック:このタイプは達成が難しい。これは関数自体のコードを変更することを含む。おそらく、これの最初にジャンプを置くことによって。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)