Common API used in Malware

htARTE(HackTricks AWS Red Team Expert)を使って、AWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

Try Hard Security Group


一般的な

ネットワーキング

Raw SocketsWinAPI 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を実行

  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インジェクション

Portable Execution Injection:実行可能ファイルが被害者プロセスのメモリに書き込まれ、そこから実行される。

プロセスホローイング

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

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

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

  3. プロセスメモリに悪意のあるバイナリを書き込む:VirtualAllocEc、WriteProcessMemory

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

フック

  • SSDTSystem Service Descriptor Table)はカーネル関数(ntoskrnl.exe)またはGUIドライバ(win32k.sys)を指し示し、ユーザープロセスがこれらの関数を呼び出すことができるようにします。

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

  • IRPI/O Request Packets)はデータの断片を1つのコンポーネントから別のコンポーネントに転送します。カーネルのほとんどすべてがIRPを使用し、各デバイスオブジェクトには独自の関数テーブルがあり、これをフックすることができます:DKOM(Direct Kernel Object Manipulation)

  • IATImport Address Table)は依存関係を解決するために役立ちます。このテーブルをフックして、呼び出されるコードを乗っ取ることができます。

  • EATExport Address Table)フック。これらのフックはユーザーランドから行うことができます。目的は、DLLによってエクスポートされた関数をフックすることです。

  • インラインフック:このタイプは難しいです。これは関数自体のコードを変更することを含みます。たとえば、この先頭にジャンプを配置することがあります。

Try Hard Security Group

htARTE(HackTricks AWS Red Team Expert)を使って、AWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

  • HackTricks HackTricks および HackTricks Cloud のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。

Last updated