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

166 lines
9.7 KiB
Markdown
Raw Normal View History

# マルウェアで使用される一般的なAPI
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricksをサポートする</summary>
2022-04-28 16:01:33 +00:00
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## 一般的な
2022-05-01 16:32:23 +00:00
### ネットワーキング
2020-12-03 18:00:02 +00:00
| 生のソケット | WinAPIソケット |
| ------------- | -------------- |
| socket() | WSAStratup() |
| bind() | bind() |
| listen() | listen() |
| accept() | accept() |
| connect() | connect() |
| read()/recv() | recv() |
| write() | send() |
| shutdown() | WSACleanup() |
2020-12-03 18:00:02 +00:00
### 永続性
2020-12-03 18:00:02 +00:00
| レジストリ | ファイル | サービス |
| ---------------- | ------------- | ---------------------------- |
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
| RegOpenKeyEx() | CopyFile() | CreateService() |
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
| RegDeleteKeyEx() | WriteFile() | |
| RegGetValue() | ReadFile() | |
2020-12-03 18:00:02 +00:00
### 暗号化
2020-12-03 18:00:02 +00:00
| 名前 |
| --------------------- |
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
| CryptDeriveKey() |
| CryptDecrypt() |
| CryptReleaseContext() |
2020-12-03 18:00:02 +00:00
### 逆解析/VM
2020-12-03 18:00:02 +00:00
| 関数名 | アセンブリ命令 |
| --------------------------------------------------- | --------------------- |
| IsDebuggerPresent() | CPUID() |
| GetSystemInfo() | IN() |
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot \[プロセスが実行中か確認\] | |
| CreateFileW/A \[ファイルが存在するか確認\] | |
2020-12-03 18:00:02 +00:00
### ステルス
2020-12-03 18:00:02 +00:00
| 名前 | |
| ------------------------ | -------------------------------------------------------------------------- |
| VirtualAlloc | メモリを割り当てる(パッカー) |
| VirtualProtect | メモリの権限を変更する(パッカーがセクションに実行権限を与える) |
| ReadProcessMemory | 外部プロセスへの注入 |
| WriteProcessMemoryA/W | 外部プロセスへの注入 |
| NtWriteVirtualMemory | |
| CreateRemoteThread | DLL/プロセス注入... |
| NtUnmapViewOfSection | |
| QueueUserAPC | |
| CreateProcessInternalA/W | |
2020-12-03 18:00:02 +00:00
### 実行
2020-12-03 18:00:02 +00:00
| 関数名 |
| ---------------- |
2020-12-09 00:31:50 +00:00
| CreateProcessA/W |
| ShellExecute |
| WinExec |
| ResumeThread |
| NtResumeThread |
2020-12-03 18:00:02 +00:00
### その他
2020-12-03 18:00:02 +00:00
2023-07-07 23:42:27 +00:00
* GetAsyncKeyState() -- キーロギング
* SetWindowsHookEx -- キーロギング
* GetForeGroundWindow -- 実行中のウィンドウ名を取得(またはブラウザからのウェブサイト)
* LoadLibrary() -- ライブラリをインポート
* GetProcAddress() -- ライブラリをインポート
* CreateToolhelp32Snapshot() -- 実行中のプロセスをリスト
2023-07-07 23:42:27 +00:00
* GetDC() -- スクリーンショット
* BitBlt() -- スクリーンショット
* InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- インターネットにアクセス
* FindResource(), LoadResource(), LockResource() -- 実行可能ファイルのリソースにアクセス
2021-09-07 00:15:14 +00:00
## マルウェア技術
2021-09-07 00:15:14 +00:00
### DLL注入
2021-09-07 00:15:14 +00:00
別のプロセス内で任意のDLLを実行する
2021-09-07 00:15:14 +00:00
1. 悪意のあるDLLを注入するプロセスを特定するCreateToolhelp32Snapshot, Process32First, Process32Next
2. プロセスを開くGetModuleHandle, GetProcAddress, OpenProcess
3. プロセス内にDLLのパスを書くVirtualAllocEx, WriteProcessMemory
4. 悪意のあるDLLをロードするスレッドをプロセス内に作成するCreateRemoteThread, LoadLibrary
2021-09-07 00:15:14 +00:00
使用する他の関数NTCreateThreadEx, RtlCreateUserThread
2021-09-07 00:15:14 +00:00
### 反射DLL注入
2021-09-07 00:15:14 +00:00
通常のWindows API呼び出しを行わずに悪意のあるDLLをロードする。\
DLLはプロセス内にマッピングされ、インポートアドレスを解決し、リロケーションを修正し、DllMain関数を呼び出す。
2021-09-07 00:15:14 +00:00
### スレッドハイジャック
2021-09-07 00:15:14 +00:00
プロセスからスレッドを見つけて悪意のあるDLLをロードさせる
1. ターゲットスレッドを見つけるCreateToolhelp32Snapshot, Thread32First, Thread32Next
2. スレッドを開くOpenThread
3. スレッドを一時停止するSuspendThread
4. 被害者プロセス内に悪意のあるDLLのパスを書くVirtualAllocEx, WriteProcessMemory
5. ライブラリをロードするスレッドを再開するResumeThread
2021-09-07 00:15:14 +00:00
### PE注入
2021-09-07 00:15:14 +00:00
ポータブル実行注入:実行可能ファイルは被害者プロセスのメモリに書き込まれ、そこから実行される。
### プロセスホロウイング
2021-09-07 00:15:14 +00:00
マルウェアはプロセスのメモリから正当なコードをアンマップし、悪意のあるバイナリをロードする
1. 新しいプロセスを作成するCreateProcess
2. メモリをアンマップするZwUnmapViewOfSection, NtUnmapViewOfSection
3. プロセスメモリに悪意のあるバイナリを書くVirtualAllocEc, WriteProcessMemory
4. エントリポイントを設定し、実行するSetThreadContext, ResumeThread
2021-09-07 00:15:14 +00:00
## フック
2021-09-07 00:15:14 +00:00
* **SSDT****システムサービス記述子テーブル**はカーネル関数ntoskrnl.exeまたはGUIドライバwin32k.sysを指し、ユーザープロセスがこれらの関数を呼び出すことができる。
* ルートキットはこれらのポインタを制御するアドレスに変更することがある。
* **IRP****I/Oリクエストパケット**は、あるコンポーネントから別のコンポーネントにデータの断片を送信する。カーネル内のほぼすべてのものがIRPを使用し、各デバイスオブジェクトにはフック可能な独自の関数テーブルがあるDKOMダイレクトカーネルオブジェクト操作
* **IAT****インポートアドレステーブル**)は依存関係を解決するのに役立つ。このテーブルをフックして呼び出されるコードをハイジャックすることが可能。
* **EAT****エクスポートアドレステーブル**)フック。このフックは**ユーザーランド**から行うことができる。目的はDLLによってエクスポートされた関数をフックすること。
* **インラインフック**:このタイプは達成が難しい。関数自体のコードを修正することを含む。おそらく、最初にジャンプを置くことによって。
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
</details>
{% endhint %}