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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Loki — 🧙♂️ スクリプトジャッキングの脆弱性があるElectronアプリケーション向けNode.jsコマンド&コントロール | Kitploit
ツール/GitHubGitHub/boku7/loki
永続化メカニズムエクスプロイトIDS/IPS回避シェルコードポストエクスプロイトコマンド&コントロールレッドチーミングペイロード開発
GitHubboku7/loki

Loki

🧙♂️ スクリプトジャッキングの脆弱性があるElectronアプリケーション向けNode.jsコマンド&コントロール

リポジトリを見る
1.4k2204ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

🧙‍♂️ Loki Command & Control

Lokiは、Node.jsで書かれたステージ1のコマンド&コントロール(C2)フレームワークで、脆弱なElectronアプリをスクリプトジャックするために構築されています MITRE ATT&CK T1218.015。レッドチーム運用向けに開発されたLokiは、信頼された署名済みElectronアプリを悪用することで、セキュリティソフトウェアの回避とアプリケーション制御のバイパスを実現します。

スクリプトジャックは、実行時に読み込まれるJavaScriptファイルを任意のNode.jsコードで改変することにより、Electronアプリの実行フローを乗っ取ります。この手法は以下の目的に利用できます:

  • Electronアプリへのバックドア設置
  • Electronアプリのホローイング
  • 別プロセスへのチェーン実行

スクリプトジャックを利用して別プロセスへのチェーン実行を行うツールはすでにいくつか存在しますが、Lokiは、コード署名を無効化することなく署名済みElectronアプリへのバックドア設置とホローイングを可能にする初めてのツールです。

Lokiの仕組みの詳細については、こちらのブログ記事をチェックしてください:

  • Loki C2でWindows Defender Application Controlをバイパスする

🚀 コントリビューター

名前貢献内容
Bobby Cooke開発者兼メンテナー
Dylan Tran開発者
Ellis Springeアルファテスター
Shawn Jonesアセンブリ実行コード
Trusted SecCOFFLoaderコード
Simon Exleyビデオ制作者
Clinton Elvesビデオ制作者
John Hammondビデオ制作者

ビデオ

John Hammondによる、Loki C2でCursor AIにバックドアを仕掛けるビデオをチェックしてください! 🎩

  • このビデオでは、新しい脆弱なElectronアプリケーションの発見、Loki C2によるバックドア設置、クライアントGUIでのセットアップまでを解説しており、さらにアプリをバックグラウンドで永続的に実行し続ける2つの方法も考案しました 🪄 -- エンドユーザーから見るとCursorは正常に動作しています! 🥷

Cursor AIにバックドアを仕掛けた

Simon Exley & Clinton Elvesによる、Loki C2のセットアップから使い始めるまでのビデオをチェックしてください! 🧙‍♂️

Loki C2でWindows Defender Application Controlをバイパスする

機能と詳細

  • Azure Storage Blob C2チャネル
    • C2ストレージアカウントを保護するSASトークン
  • AES暗号化されたC2メッセージ
  • プロキシ対応エージェント
    • エージェント、シェルコード実行、アセンブリのfork-n-run方式の実行にChromiumレンダラーの子プロセスを使用します -- Chromiumのプロキシ対応機能を継承します。
  • チームサーバーレス
    • エージェントがTeamserverにメッセージを送信する従来のC2とは異なり、Teamserverは存在しません
    • GUIクライアントとエージェントの両方が同じデータストアにチェックインします
  • 隠密実行 -- バックグラウンドで動作します

コマンド

すべてのエージェントコマンドはネイティブなNode.JSで記述されており、追加の依存関係やライブラリのロードイベントを必要としません。ただし、scexecコマンドとassemblyコマンドは例外で、keytar.nodeとassembly.nodeのライブラリロードを行います。

  • すべてのコマンドは/を使用したパスを受け付けます。パス内の\は機能しません。

Set - アプリケーション制御の除外パスからのノードのロード

  • ノードファイルに対するライブラリのロードを妨げるアプリケーション制御ルールがある場合、setコマンドを使用してassembly.nodeとscexec.nodeのロードパスを変更できます。
  • ls、cat、cp、mvを使用することで、アプリケーション制御ルールを列挙し、除外対象となっている書き込み可能なディレクトリを発見できる可能性があります。
  • これにより、ノードファイルを除外ディレクトリに配置し、setコマンドでロードパスを除外ディレクトリに変更することで、アプリケーション制御をバイパスできます。
  • この攻撃ベクトルの詳細については、Daniel Duggan (@_RastaMouse)によるCRTO2コースを参照してください。
root@kitploit:~
[04-04-2025 8:50AM MST] advsim$ help set
Set the Node load paths for assembly node and scexec nodes
	set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
	set assembly_path C:/Users/user/AppData/ExcludedApp/assembly.node
[04-04-2025 8:51AM MST] advsim$ set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
SCEXEC Node Load Path Set to : C:/Users/user/AppData/ExcludedApp/scexec.node

エージェントの機能

エージェントの機能の詳細はこちらをクリック

クライアントの機能

クライアントの機能の詳細はこちらをクリック

🧙‍♂️ イリュージョンの展開

まず、Microsoft TeamsのようにASARのセキュリティ整合性チェックを行わない、脆弱なElectronアプリケーションを特定する必要があります。新しいアプリケーションには、バックドア設置を防ぐ整合性チェックが含まれている場合があります。対象アプリの古いバージョンの方が脆弱である可能性が高くなります。

  • 脆弱なElectronアプリの発見ガイド

簡単な手順

Electronアプリにバックドアを仕掛ける場合、エージェントをコンパイルする必要はありません。{ELECTRONAPP}/resources/app/の内容をLokiエージェントのファイルに置き換えるだけです。

詳細な手順

ステップ1 : Azure Storage Blobアカウントの作成とSASトークンの取得

  • Azure Portalを使用してAzure Storage Accountを作成
  • Azure CLIを使用してAzure Storage Accountを作成

ステップ2 : 難読化されたLokiペイロードの作成

  • このリポジトリをクローンしてcdで移動します
  • Node.JSをインストールします
  • javascript-obfuscatorモジュールをインストールします
root@kitploit:~
npm install --save-dev javascript-obfuscator
  • create_agent_payload.jsスクリプトを実行して、ストレージアカウント情報を含むLokiペイロードを作成します
root@kitploit:~
bobby$ node create_agent_payload.js 
[+] Provide Azure storage account information:
        - Enter Storage Account  : 7f7584ty218ba5dba778.blob.core.windows.net
        - Enter SAS Token        : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D

[+] Configuration:
        - Storage Account : 7f7584ty218ba5dba778.blob.core.windows.net
        - SAS Token       : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D
        - Meta Container  : mllyi2zjmafjm

[+] Updated /Users/bobby/apr2/LokiC2/config.js with storage configuration. 
 - Enter into the Loki Client UI
        Loki Client > Configuration

[+] Modifying PE binaries to have new hashes...
        - Payload assembly.node hash : e9d126407264821d3c2d324da0e2d1bc13cbc53e7c56340fe12b07f69b707f02
        - Payload keytar.node   hash : 292c14ffebd6cae3df99d9fbee525e29a5a704f076b82207eb3e650de45b075d

[+] Payload ready!
         - Obfuscated payload in the ./app directory

ステップ3 : Electronアプリケーションへのバックドア設置

  • 難読化されたLokiペイロードは./app/に出力されます
  • {ELECTRONAPP}/resources/にディレクトリを変更します
  • すべてを削除します
  • Lokiの./app/フォルダを{ELECTRONAPP}/resources/app/にコピーします
  • ElectronのPEファイルをクリックして、Lokiが動作することを確認します

ステップ4 : Lokiクライアントの設定

  • LokiのGUIクライアントを起動します

  • メニューバーからLoki Client > Configurationをクリックして設定ウィンドウを開きます

  • ストレージアカウントの詳細を入力してSaveをクリックします

  • エージェントがダッシュボードに表示されます

  • ダッシュボードのテーブルからエージェントをクリックしてエージェントウィンドウを開きます

  • Lokiが正常に動作することをテストします

Electronアプリへのバックドア設置と実際のアプリケーションを通常通り動作させ続ける方法

Lokiを使用する最も簡単な方法は、{ELECTRONAPP}/resources/app/内のファイルをLokiのファイルに置き換えることです。これによりアプリはホローアウトされ、通常通り機能しなくなります -- Lokiがその機能を置き換えたことになります。

本当にElectronアプリケーションを動作させ続け、バックグラウンドでもLokiを展開したい場合、希望はまだあります! John Hammondと私は、実際のElectronアプリケーションを動作させ続ける方法を考案しました。必要なファイルをこのリポジトリの/loki/backdoor/init.jsに追加しました。

これは現在、John Hammondによって脆弱性が発見されたCursor向けに設定されています。

これを行うには以下の手順が必要です:

  • Cursorアプリをダウンロードします
  • package.json以外のすべてのLokiファイルをcursor/resources/app/に貼り付けます
    • 実際のpackage.jsonは置き換えないでください
  • /loki/backdoor/init.jsをcursor/resources/app/にコピーします
  • cursor/resources/app/package.jsonの内容を以下のように変更します:
    • "main":"init.js",に設定
    • "type":"module",を削除
    • "private":true,を削除

仕組み

  • これらの変更により、Cursor.exeはクリック/実行時にinit.jsをロードします
  • init.jsはpackage.jsonを読み取ります
  • init.jsは"main":"init.js",を"main":"main.js",に変更します
    • main.jsはLokiです
  • init.jsはLokiを指す新しいCursor.exeを生成し、親プロセスから切り離します
  • Lokiはバックグラウンドで生成されます
  • init.jsは再度package.jsonを読み取ります
  • init.jsは"main":"main.js",をに変更します

このようにして、アプリは永続的にバックドアが仕掛けられ、通常通り動作します。Cursorアプリが終了しても、Lokiはバックグラウンドで実行され続けます。

今後の予定

将来的にこれを自動化するスクリプトを作成する予定です。

OPSECに関する推奨事項

  • OPSECに関する推奨事項

コンパイルガイド

以下は、エージェントとクライアントをビルドするためのコンパイル手順です。手順はWindows、Linux、macOSを含む複数のプラットフォームを対象としています。クライアントは対象のプラットフォームとアーキテクチャでコンパイルすることを推奨します。

クライアント

  • Windows
  • macOS
  • Linux

エージェント

Electronアプリケーションにバックドアを仕掛ける場合、エージェントをコンパイルする必要はありません。

エージェントをコンパイルして実運用で使用することはお勧めしません。エージェントのコンパイル手順は開発用です。

  • Windows
  • Linux
  • macOS

検知ガイダンス

  • このTTPに関する詳細、例、情報については、MITREが提供する情報を確認してください:
    • MITRE ATT&CK T1218.015: Electron Applications
  • ~/Downloads/Teams/Teams.exeのような異常なディレクトリからのElectronアプリの実行
  • Azure Storage Blob *.blob.core.windows.netへのビーコン通信を行うElectronアプリ
  • ネットワークトラフィックでのSASトークンの使用
  • netstat.exeやwhoami.exeなどの子プロセスを生成するElectronアプリ
  • LokiのJavaScriptがElectronプロセス内で実行されると、Lokiのpackage.json内の名前を持つディレクトリが~/AppData/Roaming/{NAME}に作成されます。
  • このLOLBAS Teamsエントリは、Electronアプリケーションへのバックドア設置の検知をカバーしています。検知情報は以下に転載されています。
  • IOC: %LOCALAPPDATA%\Microsoft\Teams\current\appディレクトリが作成される
  • IOC: %LOCALAPPDATA%\Microsoft\Teams\current\app.asarファイルがTeams以外のインストーラー/アップデータによって作成/変更される
  • ElectronアプリからのLoki C2確立を検知するSIGMAルール
  • C2フレームワークをロードするためのElectronのアプリフォルダ乗っ取り(Teams、VS Code、RingCentral、Postman)を検知するSIGMAルール

参考文献 || 謝辞 || オフェンシブElectronリサーチ

  • Dylan Tran (@d_tranman)
    • Lokiエージェントの共同開発者。シェルコード実行とアセンブリ実行用のNodeモジュールを作成。
  • Valentina Palmiotti (@chompie1337)、Ellis Springe (@knavesec)、Ruben Boonen -- 永続化を目的としたElectronアプリケーションへのバックドア設置に関する以前の内部研究に対して
  • Ruben Boonen
    • Wild West Hackin’ Fest講演 Statikk Shiv: ポストエクスプロイテーションのためのElectronアプリケーションの活用
  • Andrew Kisliakov
    • LOLbinsとしてのMicrosoft Teamsとその他のElectronアプリ
  • Shawn Jones
    • Lokiのアセンブリ実行のため、DylanはShawnの公開InlineExecute-Assemblyコードを移植しました
  • mr.d0x (@mrd0x) -- Teams Electronアプリケーションを利用して任意のNode.JSコードを実行し、その調査結果をLOLBASプロジェクトに公開した以前の研究に対して
  • Michael Taggart
    • quASARプロジェクト -- コマンド実行を可能にするためにElectronアプリケーションを改変するツール
    • Quasar: Electronアプリの侵害
  • Raphael Mudge -- レッドチーミングに深く飛び込むきっかけを与え、このツールのリリースを支援してくれたことに感謝
    • The Security Conversation
  • Fletcher Davis
    • BSides : Electronアプリケーションの悪用
  • Pavel Tsakalidis
    • BEEMKA - Electronエクスプロイテーションツールキット

ライセンス

このプロジェクトはBusiness Source License 1.1の下でライセンスされています。非商用利用はライセンスの条件に基づき許可されています。商用利用には作者の明示的な許可が必要です。2030年4月3日に、このライセンスはApache 2.0に変換されます。詳細はLICENSEを参照してください。

ツールをダウンロード
コマンド説明
helpヘルプを表示します。使用法: help または help scan
pwd現在の作業ディレクトリを表示
lsファイルとディレクトリの一覧表示
catファイルの内容を表示
envプロセスの環境変数を表示
spawn子プロセスを生成
drivesドライブを一覧表示
mvファイルを新しい宛先に移動
sleepジッター付きで秒単位でスリープ
cpソースファイルを宛先にコピー
exit-allエージェントを終了し、以降コールバックしなくなります
loadディスクからNode PEファイルをプロセスにロード
scexecシェルコードを実行
assembly.NETアセンブリを実行しコマンド出力を取得
uploadローカルのオペレーターマシンからリモートのエージェントマシンへファイルをアップロード
downloadリモートのエージェントマシンからローカルのオペレーターマシンへファイルをダウンロード
scan選択したポートでCIDRレンジに対してTCPネットワークスキャンを実行
dnsDNSルックアップ。システムのDNS設定を利用
setassemblyノードとscexecノードのNodeロードパスを設定
bofCOFFファイルを実行して出力を返す
"main":"./out/main.js",
  • ./out/main.js"は実際のCursorアプリケーションです
  • init.jsは実際のCursorを指す新しいCursor.exeを生成し、親プロセスから切り離します
  • 実際のCursorアプリが生成され、表示され、通常通り動作します
  • ユーザーがCursorを終了した場合:
    • init.jsが終了を検知します
    • init.jsは3回目のpackage.jsonの読み取りを行います
    • init.jsは"main":"./out/main.js",を"main":"init.js",に変更します