
PTYアップグレード、ポストエクスプロイトモジュール、レイヤー3トンネリング、EDR回避のためのペイロード難読化、セッションログ、LLM駆動制御用のMCPサーバーを備えたマルチセッションリバースシェルハンドラー。
このプロジェクトは、高速で使いやすく(かつ機能豊富な)美しいインターフェースを備えたシェルハンドラを作るための私の挑戦です。
免責事項: これはまだ開発中であり、このセクションで触れている主要な機能のいくつかはまだ作業中であることにご注意ください。
✨ 機能 | 🚧 作業中 | 🚀 インストール | 💻 使用方法 | 🔧 PTYアップグレード | 🤖 モジュール | 🧠 MCP
完全なドキュメントはwikiにあります。
[!TIP] このデモはDocker化されたOSで実行されています。ご自身で試したい場合は、UbuntuイメージまたはdockurのWindowsを使用できます。
script/socat経由、Windowsは難読化されたConPtyShell経由)。タブ補完、Ctrl+C転送、ターミナルリサイズが可能になります。connect ssh user@hostで、すでに所有している認証情報をセッションに変えます。sshはペイロードを配信するだけなので、sshが終了してもシェルは生き続けます。tunnel start <id> <cidr>でシェルをレイヤー3ピボットに変えます。ターゲット上のユーザーランドTCPスタック(root不要、バイナリのドロップ不要、Pythonのみ)と、こちら側のルートで構成されます。(ドキュメント)koireviewで任意のセッションを再生できます。(ドキュメント)Ctrl+Zでセッションをバックグラウンド化し、Ctrl+CでリモートにSIGINTを送信します。リスナーを誤って終了させることはありません。[!NOTE] Koiをリモートで使用できるようになりました! 詳細はこちらをお読みください。
# 推奨: PyPIからの安定版リリース
pipx install koi-handler
# 独自のモジュールを開発したい場合はソースから
git clone https://github.com/b3rt1ng/koi
cd koi
pipx install --editable .
koifuscatorは難読化モジュールへの直接ショートカットです。
koireviewはセッションのログを確認する方法です。
アップグレードするには:
pipx upgrade koi-handler
詳細はGetting Startedをご覧ください。
# デフォルト: 0.0.0.0:4010にバインド
koi
# カスタムホスト/ポート
koi --host 10.10.14.5 --port 9001
koi -p 9001
起動後、helpで全コマンドの一覧が表示されます。完全なリファレンスはCLI Referenceに、セッション処理(タグ、バックグラウンド化、スクリーン可能モード)はSession Managementにあります。
自分でリバースシェルを送信するか、payloads *interface*と入力して事前生成されたペイロードを取得します。KoiはLinuxのsh、PowerShell、cmdを操作するため、ターミナルのようなシェルである必要があることに注意してください。
Koiには、Windows Defenderの検知を回避するための組み込みのペイロード難読化ツールが含まれています。複数のテクニックを連鎖させることができますが、通常はXORエンコーディングとフォーマット変換で十分です。レイヤーを重ねすぎるとペイロードが破損し、ターゲットが読み取れなくなる可能性があることに注意してください。
難読化ツールはLinuxペイロードにも機能します。ほとんどのLinux環境ではアンチウイルスソフトウェアが動作していませんが、bashのワンライナーはEDRソリューション、IDSルールによって検知されたり、既知のリバースシェルパターンを監視するブルーチームによって監視されることがよくあります。ペイロードを難読化することで、一部の堅牢化された環境でレーダーをかいくぐるのに役立ちます。
すべてのテクニックとサポートされているペイロードタイプはPayloads & Obfuscationに記載されています。
生のシェルは適切なターミナルサポートを欠いています: タブ補完なし、壊れたCtrl+C、文字化けした出力。upgradeコマンドがこれを修正します:
koi> upgrade 1
Shell #1 upgraded successfully.
koi> go 1
# now a full PTY with proper terminal behaviour
シンプルなPython ptyが生成されます
python3 -c 'import pty; pty.spawn("/bin/bash")'
TERM=xterm-256colorといくつかのリサイズ情報を伴います
CMD用に作る手間は省きましたが、PowerShell用には難読化されたconptyshellを使用して完全に実装されたシェルを取得するテクニックを使っています:
1) ConPtyShellはGitHubから取得され、オフラインでの再利用のためにローカルにキャッシュされる
2) すべてのIOC識別子がランダムな文字列に改名される(クラス名、メソッド名、PS関数名)
3) 特徴的なC#文字列リテラルが実行時のchar-array構築に置き換えられる(コンパイルされたMSILにリテラルが残らない)
4) 難読化されたスクリプトが一時的なHTTPサーバー経由で配信される
5) 呼び出しコマンドはbase64エンコードされ(-EncodedCommand)、IEXとIWRはランダムな分割テクニック(concat / format string / char-array)で難読化されるため、コマンドラインに平文のコマンドレット名が現れない
6) ターゲットが完全に対話型のPTYシェルで接続し、新しいセッションとして登録される
フォールバックチェーンとOSごとの詳細はUpgrading Sessionsにあります。
KoiはセッションとモジュールをMCP経由で公開できるため、LLMクライアントがセッションテーブルを読み取り、何もコピー&ペーストすることなくモジュールを操作できます。
# 読み取り専用: セッション、モジュール、ログ
koi --mcp
# モデルがターゲット上でコマンドとモジュールを実行できるようにする
koi --mcp --mcp-allow-exec
サーバーはリスナープロセス内で動作し、127.0.0.1:7331にバインドされ、起動時に出力されるベアラートークンで保護されます。読み取り専用が意図的にデフォルトです。
[!WARNING]
--mcp-allow-execを使用すると、LLMはシェルを保持しているすべてのマシンでコマンドを実行できます。セッションログには侵害されたホストからの出力が含まれており、それは攻撃者に制御されたテキストがモデルのコンテキストに直接入ることを意味します。
セットアップ、クライアント設定、完全なツールリストはMCP documentationにあります。
モジュールは基本的に、インスタンス上のアクションを自動化する方法です。コマンドを実行し、Pythonバックエンドを活用できます。
独自のモジュールを作りたい場合は、このリポジトリをクローンして--editableフラグでインストールすることをお勧めします。シェルを取得したら、ペイロードを開発し、reloadコマンドを使用して作業中のものを含むすべてのモジュールを更新できます。
完全なAPIリファレンスについてはwikiのModule Development Guideを確認するか、既存のモジュール(ligolo、get_users)を参考にしてください。
また、独自のモジュールをこのリポジトリの一部にしたい場合は、遠慮なくPRを作成してください。喜んで確認し、ここに追加するのが面白いかどうか検討します <3