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

12 KiB
Raw Blame History

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

脆弱性を見つけて修正を迅速に行いましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリまで、テックスタック全体で問題を見つけます。無料でお試しください

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


一般的な

ネットワーキング

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

最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリまで、クラウドシステム全体にわたる問題を見つけます。無料でお試しください

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥