hacktricks/reversing/common-api-used-in-malware.md

10 KiB
Raw Blame History

マルウェアで使用される一般的なAPI

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

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

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


一般的な

ネットワーキング

Raw Sockets WinAPI 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を使用し、各デバイスオブジェクトには独自の関数テーブルがあり、これをフックすることができますDKOMDirect Kernel Object Manipulation
  • IATImport Address Table)は依存関係を解決するために役立ちます。このテーブルをフックして、呼び出されるコードを乗っ取ることができます。
  • EATExport Address Table)フック。これらのフックはユーザーランドから行うことができます。目的は、DLLによってエクスポートされた関数をフックすることです。
  • インラインフック:このタイプは難しいです。これは関数自体のコードを変更することを含みます。たとえば、この先頭にジャンプを配置することがあります。

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

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

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

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