
XSSペイロードやポストエクスプロイテーションインプラントとして使用されるJavaScriptビーコンとC2。ウェブアプリサーバーやデスクトップソフトウェア上でユーザーを監視し、永続性を維持するために使用します。ブラウザ拡張機能、Electronアプリ、Node/Bunアプリのインプラントが含まれます。
大きな変更はプロジェクトのお知らせに記載されています:
https://github.com/hoodoer/JS-Tap/discussions/categories/announcements
JS-Tapに関する元のブログ記事はこちらで読めます:
https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams
ShmooConでのJS-Tap v1の短いデモ:
https://youtu.be/IDLMMiqV6ss?si=XunvnVarqSIjx_x0&t=19814
HackSpaceConでのJS-Tap v2のデモ(C2およびポストエクスプロイテーションインプラントとしての使用方法を含む):
https://youtu.be/aWvNLJnqObQ?t=11719
自動ペイロードジェネレーターのデモ。傍受したフォーム投稿とJavaScriptネットワークトラフィックをテンプレートとして、カスタムC2ペイロードを生成:
https://www.youtube.com/watch?v=cU915mxLfTo
CactusConでのv2デモ(mimic機能を含む):
https://youtu.be/O7-zxAmP13o?si=gchYwOJksutCCUPH
v3 Beaconsのデモ(ベータコード):
https://youtu.be/-esrfSHqZeo
データベースの移行スクリプトを作成する予定はなく、バージョン番号のアップグレードにはデータベーススキーマの変更が伴うことがよくあります(変更履歴を確認してください)。バージョンアップ時には、jsTap.dbデータベースを削除することをお勧めします。JS-Tapサーバーにカスタムペイロードがある場合は、データベースファイルを削除する前に必ずエクスポートしてください。
JS-Tapは、レッドチーム向けのJavaScriptベースの攻撃ツールキットです。当初はXSSやポストエクスプロイテーションインプラントを介してWebアプリを攻撃するための汎用JavaScriptペイロードとして始まり、ブラウザ拡張機能やElectronデスクトップアプリのインプラントも含むように成長し、すべてが単一のC2サーバーにレポートします。
このペイロードは、ペイロードを実行する対象ユーザーが攻撃対象のアプリケーションに認証されている必要はなく、アプリケーションに関する事前知識も、JavaScriptをアプリケーションに注入する方法を見つける以外には必要ありません。
アプリケーションサーバー自体を攻撃する代わりに、JS-Tapペイロードはアプリケーションのクライアントサイドに焦点を当て、クライアントサイドコードを大規模にインストルメント化します。C2システムにより、カスタムJavaScriptペイロードを追加してJS-Tapクライアント上でタスクとして実行でき、アプリケーションサーバーを直接攻撃する手段を提供します。サーバー攻撃への移行を迅速化するために、JS-Tapにはmimic機能が含まれており、カスタムペイロードを自動生成してC2システムに引き渡します。
サンプルのDOM Beaconペイロードは、payloadsディレクトリのtelemlib.jsファイルに含まれていますが、このディレクトリ内のファイルはすべて認証なしで提供されるため、異なる構成の複数のペイロードを同時に提供して、異なるアプリケーションをターゲットにすることができます。
telemlib.jsファイルをお好みのファイル名にコピーし、必要に応じて設定を変更してください。このファイルは難読化されていません。実際のエンゲージメントで使用する前に、エンドポイントの名前を変更し、コメントを削除し、ペイロードを高度に難読化することを強く検討してください。デフォルトでは、アプリケーションはかなり明白なAPIエンドポイント(例:/loot/screenshot)を使用しますが、App Settingsでトラフィックの難読化を有効にできます。
公開サーバーで使用する前に、以下の設定セクションを注意深く確認してください。
JS-Tapには、同じサーバーに接続する5つのビーコン/エージェントタイプがあります:
| ビーコンタイプ | 説明 | 導入方法 |
|---|---|---|
| DOM Beacon (telemlib.js) | Webページに注入されるJavaScriptペイロード。DOMを計測し、ユーザーアクティビティ、スクリーンショット、ネットワークコールをキャプチャします。 | XSS脆弱性、またはターゲットアプリのJavaScriptファイルに直接追加(ポストエクスプロイテーション)。 |
| BEX Beacon | ブラウザ拡張機能(Chrome MV3 / Firefox MV2)。すべてのブラウジングアクティビティを監視し、クッキー(httpOnlyを含む)、localStorage、sessionStorage、リクエストヘッダーをキャプチャします。コマンドにより特定のドメインにDOM Beaconを注入できます。 | ターゲットのブラウザにインストール(ソーシャルエンジニアリング、物理アクセス、ポリシープッシュなど)。 |
| Sidecar | ターゲットOS上で動作するネイティブGoバイナリ。ファイルシステムの閲覧、ファイルの読み取り、コマンド実行を提供します。 | ネイティブメッセージングを介してBEX Beaconと一緒にインストール。コマンドを中継するためにBEX Beaconが必要。 |
| Atom Beacon | Electronデスクトップアプリケーション向けの二層インプラント。メインプロセスエージェント(Node.jsランタイム)+ レンダラーペイロードをすべてのアプリウィンドウに注入します。ブラウザレベルのデータ収集とホストレベルのOSアクセスを組み合わせ、別途バイナリは不要。ブラウザプロキシモードをサポート。 | atomize.pyを使用してターゲットElectronアプリのASARアーカイブ(または展開済みアプリディレクトリ)にパッチ適用。 |
| V8 Beacon | Node.jsおよびBun CLIアプリケーション(Gemini CLI、Claude Codeなど)向けのJavaScriptエージェント。すべてのHTTP/Fetchネットワークコールをインターセプトし、キーストロークをキャプチャし、ファイルシステムとシェルアクセスを提供します。ブラウザプロキシモードをサポート。依存関係ゼロ。 | 環境変数を介して注入:NODE_OPTIONS="--require"(Node.js)またはBUN_OPTIONS="--preload"(Bun)。アプリのパッチ適用は不要。 |
5つすべてが同じJS-Tapサーバーポータルにレポートし、戦利品の閲覧やC2コマンドの発行が行われます。
ポータルには2つのセッションクローン作成ツールも含まれています:
| ツール | 機能 |
|---|---|
| Browser Proxy | JS-Tapサーバー上のMITMプロキシで、オペレーターのHTTP/HTTPSトラフィックをWebSocket経由で被害者のブラウザ(またはNode.jsプロセス)にルーティングします。リクエストは被害者のネットワークコンテキストからフェッチされるため、ターゲットサイトは被害者のIPとTLSフィンガープリントを認識します。セッションチケットと組み合わせることで、被害者のネットワークを通じた認証済みブラウジングが可能。BEX、Atom、V8ビーコンでサポートされています。詳細はBrowser Proxyを参照。 |
| JS-Tap Conductor | スタンドアロンのFirefox拡張機能で、BEX Beaconによってキャプチャされたセッションデータ("JS-Tap Ticket"として)をインポートし、ローカルで再生します。クッキーの設定、ヘッダーの注入、ストレージの投入、User-Agentのスプーフィングを行い、オペレーターが被害者としてブラウジングできるようにします。詳細はJS-Tap Tickets & JS-Tap Conductorを参照。 |
スタンドアロンDOM Beacon: DOM Beaconペイロード(telemlib.js)は単独で動作します。XSSで注入するか、ターゲットのJSファイルに埋め込みます。自動的にJS-Tapサーバーに接続します。
ドロッパーとしてのBEX Beacon: BEX Beaconはブラウジングを監視し、パッシブなインテリジェンス(クッキー、localStorage、sessionStorage、リクエストヘッダー、ナビゲーション)を収集します。JS-Tapポータルから、特定のドメインにDOM Beaconを注入するようにビーコンに命令できます。BEX Beaconによって起動されたDOM Beaconは、拡張機能のcaptureVisibleTab APIにより高品質のスクリーンショットを取得します("BEX-Assist"モード)。
OSアクセス用Sidecar: インストールされると、SidecarバイナリはBEX Beaconに基盤となるオペレーティングシステムへのアクセスを提供します。コマンドはJS-Tapポータルから送信され、ビーコンの暗号化チャネルを介してネイティブバイナリに中継され、結果が返送されます。これにより、ブラウザ拡張機能がファイルシステムアクセスとコマンド実行の足がかりとなります。
ライブブラウジング用Browser Proxy: オペレーターはブラウザをJS-Tapプロキシを使用するように設定し、すべてのHTTP/HTTPSトラフィックがリアルタイムで被害者のブラウザを経由してルーティングされます。プロキシはMITM TLS終端(自動生成CA使用)を実行するため、オペレーターはHTTPSサイトを閲覧できます。プロキシは「ダムパイプ」であり、オペレーターのブラウザが送信したものをそのまま転送します。認証済みブラウジングには、セッションチケットと組み合わせます。JS-Tap Conductorが被害者のクッキー、ヘッダー、User-Agentをオペレーターのブラウザに注入し、MITMプロキシがそれらをビーコンに転送し、ビーコンが被害者のネットワークからフェッチします。これにより、オペレーターは被害者のIPアドレスからの認証済みセッションを取得できます。BEX、Atom、V8ビーコンはすべてプロキシモードをサポートしています。
Electronアプリ向けAtom Beacon: atomize.pyパッチャーはElectronアプリのASARアーカイブを変更してAtom Beaconエージェントを注入します。起動時にエージェントはJS-Tapサーバーに登録し、暗号化C2通信を開始し、アプリが作成するすべてのBrowserWindowにレンダラーペイロードを自動的に注入します。メインプロセスエージェントはネイティブOSアクセス(ファイルシステム、コマンド実行)を提供し、レンダラーペイロードはDOMレベルのデータ(キーストローク、入力、フォーム、クッキー、ストレージ、ネットワークコール)を収集します。Electronのメインプロセス内で完全なNode.jsアクセス権限で動作するため、別途Sidecarバイナリは不要で、ファイルブラウジング、ファイル読み取り、シェルコマンドが組み込まれています。
CLIツール向けV8 Beacon: V8 BeaconはNode.jsおよびBunベースのCLIアプリケーションを対象としています。環境変数(NODE_OPTIONSまたはBUN_OPTIONS)を設定するだけで、ビーコンはアプリ自身のコードよりも前に読み込まれます。ターゲットアプリへのパッチや変更は不要です。http.request、https.request、fetch、http2.connectをモンキーパッチしてすべてのネットワークトラフィックを傍受し、process.stdinをフックしてキーストロークをキャプチャし、C2チャネルを介してファイルブラウジングとシェル実行を提供します。子プロセスを生成するCLIツール(例:Gemini CLIが対話セッションのために自身を子プロセスとして生成)は自動的に処理されます。子プロセスは親のセッションキーを継承し、ポータル上で同じ論理クライアントを共有します。クロスランタイムサブプロセスフィルタリングにより、BunアプリのNode.jsユーティリティサブプロセスが別のクライアントとして登録されるのを防ぎます。
アプリ固有攻撃用プラグイン: Atom BeaconおよびV8 Beaconクライアントは、実行時にロード可能なプラグインをサポートしています。プラグインはJS-Tapポータルから読み込まれるJavaScriptモジュールで、特定のターゲットアプリケーション(例:Mattermostプラグイン)向けにビーコンの機能を拡張します。プラグインはビーコンのNode.js API(fs、http、crypto、child_process)、Electron API(Atom Beaconの場合)、およびサーバーへのデータ流出チャネルにアクセスできます。各プラグインには、ターゲットアプリ、機能、オペレーター設定可能なオプションを宣言するマニフェスト(manifest.json)と、ポータルに表示されるオプションのUIパネル(ui.html)が含まれます。
注:XHRおよびFetch API呼び出しのコピーを受信する機能は、トラップモードで動作します。インプラントモードでは現在Fetch APIのみコピー可能です。フォーム送信の傍受はインプラントモードで見逃されることがあります。
browser.cookies.getAll()によるhttpOnlyを含む、メタデータ:httpOnly、secure、sameSite、path、domain、expiration)メインプロセスエージェント(Node.jsランタイム):
session.cookies APIによるすべてのドメインの全クッキー(httpOnlyを含む、メタデータ付き)webRequest.onBeforeSendHeadersによるリクエストヘッダー(Authorization、x-api-key、Cookie、Set-Cookie)webRequest.onHeadersReceivedによるレスポンスヘッダー(Set-Cookie、WWW-Authenticate、x-csrf-token、Location)desktopCapturer APIによるアプリケーションウィンドウのスクリーンショット(GPU合成出力をキャプチャ)