
Javaアプリケーションの保護されたリソースへのアクセスをログメッセージとして外部化します。
JVMXRayは、バイトコードインジェクションを介してJavaアプリケーションをリアルタイムで監視し、コード変更なしで脆弱性や不審なアクティビティを検出します。19のモジュラーセンサーがファイルアクセス、ネットワーク接続、SQLクエリ、暗号化操作、認証、プロセス実行などを追跡し、構造化された機械可読なセキュリティイベントを生成し、自動的にセンサー間の相関を取ります。
git clone https://github.com/spoofzu/jvmxray.git
cd jvmxray
mvn clean install
Mavenのテストフェーズでは、Turtleと呼ばれる小さなプログラムが新しくビルドされたJVMXRayエージェントの下で実行されます。TurtleはファイルI/O、暗号化、プロセス実行、シリアル化、リフレクションなどのアクティビティを実行し、センサーをトリガーします。そのため、ビルドが成功すれば、./target/test-jvmxray/ に実際のセキュリティイベントログが生成され、すぐに調査できます。また、簡単な実験用に ./target/test-jvmxray/common/data/jvmxray-test.db にSQLiteデータベースも作成されます。詳細はドキュメントを参照してください。
Deploy as a Java agent in your own applications:
java -javaagent:target/jvmxray-0.0.1-agent.jar -jar yourapp.jar
trace_idとscope_chainで関連付けられたイベントにより、SOCチームは単一のクエリでHTTPリクエストからSQLインジェクション、データ流出までインシデントを追跡できます。JVMXRayはJavaアプリケーションが何をしているかの真実の情報源であり、分析エンジンではないことに注意してください。分析は、集中ログソリューションやAIツールプロジェクトによって提供されます。
すべてのセンサーイベントには、攻撃チェーンを再構築するための相関フィールドが含まれています:
HTTP>Serialization>Reflection>Process のようなスコープチェーンは、一目でデシリアライズ攻撃のシグネチャです。TRACE_ID カラムはデータベースにインデックス化されており、高速な相関クエリを可能にします。
java -javaagent:jvmxray-agent.jar -jar app.jar
|
AgentBootstrap (isolated classloader)
|
ByteBuddy installs sensor interceptors
|
Sensors fire on method entry/exit
|
LogProxy merges MCC correlation context
|
+----------+----------+----------+
| SQLite | File | Socket |
| Appender | Appender | Appender |
+----------+----------+----------+
このプロジェクトは、以下のものからアイデア、アーキテクチャ、場合によってはコードを使用して開発されました。
Milton Smith — プロジェクト作成者、リーダー
開示: JVMXRayはOracle Corporationによって承認、推奨、または提携されていません。
| Sensor | 監視対象 |
|---|
| ファイルI/O | ファイルの読み取り、書き込み、削除、パーミッション、シンボリックリンク(パス解決付き)、集計I/O統計 |
| ネットワーク | ソケット接続/受付/バインド/クローズ(TLS検出、プライベートIP分類、タイミング付き) |
| SQL | クエリ取得(パラメータ化検出、操作タイプ、期間、接続メタデータ付き) |
| HTTP | リクエスト/レスポンス(セキュリティヘッダー分析、ユーザー/セッション相関付き) |
| プロセス | ProcessBuilder.start()およびRuntime.exec()(コマンド引数、期間、終了ステータス付き) |
| 暗号 | Cipher/KeyStore/MessageDigest/SSL(脆弱なアルゴリズム検出と鍵強度検証付き) |
| 認証 | セッション操作、JAASログイン、Spring Securityの認証、プリンシパルクエリ(成功/失敗追跡付き) |
| API呼び出し | HttpClient.send()(URI、メソッド、ホスト、TLS、レスポンスステータス、タイミング付き) |
| スクリプトエンジン | ScriptEngine.eval()(エンジン識別、コンテンツハッシュ、不審なパターン検出、リスクレベル付き) |
| シリアル化 | Javaネイティブ、Jackson、Gson、XStreamのデシリアライズ(ガジェットチェーン検出付き) |
| リフレクション | Class.forName、Method.invoke、Fieldアクセス、setAccessible(脅威分類付き) |
| 設定 | システムプロパティ、環境変数、Propertiesファイル、Preferences(セキュリティ注釈付き) |
| ライブラリ | 静的および動的JARロード(SHA-256、Maven座標、パッケージインベントリ付き) |
| モニター | JVMヘルス: メモリ、スレッド、GC、CPU、オープンファイル、デッドロック検出(60秒間隔) |
| キャッチされない例外 | クラッシュ診断: 完全なスタック、メモリ状態、スレッドダンプ、原因チェーン、インシデントID |
| アプリ初期化 | 1回限りの起動キャプチャ: JVMバージョン、OS、コンテナ検出、環境変数(編集済み) |
| データ転送 | InputStream.read()のバイトカウント(現在無効 — 範囲が広すぎる) |
| スレッド | スレッドライフサイクル監視(現在無効 — 再帰的ログ修正が必要) |
| メモリ | メモリアロケーション追跡(現在無効 — 再帰的ログ修正が必要) |
| フィールド | 例 | 目的 |
|---|
trace_id | a1b2c3d4e5f6 | 同じ実行コンテキスト内のすべてのイベントをリンク |
scope_chain | HTTP>SQL>FileIO | ネストされたセンサーパス — 「セキュリティスタックトレース」 |
parent_scope | SQL | ツリー再構築のための直接の親 |
scope_depth | 3 | ネストレベル — 深さ6以上は調査が必要 |