JADEPUFFERはAgenticランサムウェアを使用して自動化データベース恐喝を行う
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
JADEPUFFERは、エージェント型ランサムウェアの最初の公開された例であり、大規模言語モデルによってエンドツーエンドで運営される恐喝キャンペーンを表しています。このアクターは、Langflowインスタンスのインターネットに面した部分の弱点を利用して初期アクセスを取得し、その後に独自で偵察、横移動、データベース破壊を実行します。この運用は、自律的なペイロードとリアルタイムでの意思決定の適応能力で注目されています。
調査
Sysdigの脅威研究チームは、JADEPUFFERがCVE-2025-3248を悪用してLangflowホストで任意のPythonコードを実行していることを観測しました。彼らの調査は、クラウド資格情報を収集し、MinIOバケットを列挙することから、MySQLおよびNacosの本番サーバーを侵害するまでのエージェントの移動を追跡しました。また、bcryptの実装問題や外部キー制約を含む運用の失敗を数秒で診断するエージェントも示しました。
緩和策
重要な防御手段には、CVE-2025-3248を修正するためのLangflowのパッチ適用およびNacosのデフォルトのJWT署名キーを置き換えて強化することが含まれます。組織はコード実行インターフェースやデータベース管理アカウントをインターネットに直接公開することを避けるべきです。厳格な発信トラフィック制御とクラウド資格情報をウェブアクセス可能なプロセスから慎重に分離することも強く推奨されます。
対策
JADEPUFFERの活動が検出された場合、対応者は影響を受けたLangflowおよびNacosシステムを直ちに隔離すべきです。データベースの設定を検証し、不正なcrontabエントリまたは新しく作成された管理者ユーザーがいないかホストをチェックする必要があります。チームはコマンド&コントロールおよびデータ漏えいインフラへの接続に関するネットワークトラフィックを監視し、クラウド環境で侵害されたプロバイダーAPIキーがないか確認すべきです。
Attack Flow
シミュレーション実行
前提条件: テレメトリ & ベースラインプレフライトチェックをパスしている必要があります。
根拠: このセクションは、検出ルールをトリガーするために設計された敵対者の技術(TTP)の正確な実行を詳述しています。コマンドと記述は、識別されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例は誤診を招きます。
-
アタックナラティブ&コマンド: 敵対者は、Windowsベースのアプリケーションサーバーに初期アクセスを取得しました。彼らは自動化されたデータベース恐喝(JADEPUFFER)を実行しようとしています。まず、ハードコードされたroot資格情報を含むPythonスクリプトを使用して、
nacosデータベースに接続し、設定データを流出させます。次に、AES_ENCRYPT関数を使用して敏感なテーブル列を暗号化する一連のSQLコマンドを実行します。これは、データの視認性を破壊して支払いを要求する「エージェント型」のランサムウェアの性質を模倣します。 -
リグレッションテストスクリプト:
import pymysql # JADEPUFFERの不正アクセスのシミュレーション (T1548/T1136.002 コンテキスト) # 対象: Nacos設定データベース try: connection = pymysql.connect( host="localhost", port=3306, user="root", password="password123", # シミュレートされた盗まれた資格情報 database="nacos" ) print("[+] 正常にNacosにrootとして接続しました。") with connection.cursor() as cursor: # JADEPUFFER暗号化のシミュレーション (T1053.003 コンテキスト) # この特定の構文は検出ルールをトリガーするように設計されています print("[*] AES_ENCRYPTを実行して恐喝をシミュレート中...") sql_extort = "UPDATE configs SET content = AES_ENCRYPT('sensitive_data', 'secret_key') WHERE id = 1;" cursor.execute(sql_extort) connection.commit() print("[+] 恐喝テレメトリが生成されました。") connection.close() except Exception as e: print(f"[-] シミュレーションが失敗しました: {e}") -
クリーンアップコマンド:
-- テスト環境用に'content'列を非暗号化状態に戻す UPDATE configs SET content = 'original_unencrypted_data' WHERE id = 1; -- シミュレートされたroot接続が終了していることを確認