Common API used in Malware

HackTricksをサポートする

一般的な

ネットワーキング

生のソケット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()

逆解析/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を実行する

  1. 悪意のあるDLLを注入するプロセスを特定する:CreateToolhelp32Snapshot, Process32First, Process32Next

  2. プロセスを開く:GetModuleHandle, GetProcAddress, OpenProcess

  3. プロセス内にDLLのパスを書く:VirtualAllocEx, WriteProcessMemory

  4. 悪意のあるDLLをロードするスレッドをプロセス内に作成する:CreateRemoteThread, LoadLibrary

使用する他の関数:NTCreateThreadEx, RtlCreateUserThread

反射DLL注入

通常のWindows API呼び出しを行わずに悪意のあるDLLをロードする。 DLLはプロセス内にマッピングされ、インポートアドレスを解決し、リロケーションを修正し、DllMain関数を呼び出す。

スレッドハイジャック

プロセスからスレッドを見つけて悪意のあるDLLをロードさせる

  1. ターゲットスレッドを見つける:CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. スレッドを開く:OpenThread

  3. スレッドを一時停止する:SuspendThread

  4. 被害者プロセス内に悪意のあるDLLのパスを書く:VirtualAllocEx, WriteProcessMemory

  5. ライブラリをロードするスレッドを再開する:ResumeThread

PE注入

ポータブル実行注入:実行可能ファイルは被害者プロセスのメモリに書き込まれ、そこから実行される。

プロセスホロウイング

マルウェアはプロセスのメモリから正当なコードをアンマップし、悪意のあるバイナリをロードする

  1. 新しいプロセスを作成する:CreateProcess

  2. メモリをアンマップする:ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. プロセスメモリに悪意のあるバイナリを書く:VirtualAllocEc, WriteProcessMemory

  4. エントリポイントを設定し、実行する:SetThreadContext, ResumeThread

フック

  • SSDTシステムサービス記述子テーブル)はカーネル関数(ntoskrnl.exe)またはGUIドライバ(win32k.sys)を指し、ユーザープロセスがこれらの関数を呼び出すことができる。

  • ルートキットはこれらのポインタを制御するアドレスに変更することがある。

  • IRPI/Oリクエストパケット)は、あるコンポーネントから別のコンポーネントにデータの断片を送信する。カーネル内のほぼすべてのものがIRPを使用し、各デバイスオブジェクトにはフック可能な独自の関数テーブルがある:DKOM(ダイレクトカーネルオブジェクト操作)

  • IATインポートアドレステーブル)は依存関係を解決するのに役立つ。このテーブルをフックして呼び出されるコードをハイジャックすることが可能。

  • EATエクスポートアドレステーブル)フック。このフックはユーザーランドから行うことができる。目的はDLLによってエクスポートされた関数をフックすること。

  • インラインフック:このタイプは達成が難しい。関数自体のコードを修正することを含む。おそらく、最初にジャンプを置くことによって。

HackTricksをサポートする

Last updated