
JAW: クライアントサイドJavaScriptのためのグラフベースのセキュリティ分析フレームワーク
J A W
Webサイト | ドキュメント | セットアップ | クローラ | クイックスタート | Docker(例)
JavaScript用のプロパティグラフのオープンソース・プロトタイプ実装です。esprima パーサと EsTree SpiderMonkey Spec に基づいています。JAWは、WebアプリケーションのクライアントサイドやJavaScriptベースのプログラムの解析に使用できます。
このプロジェクトは GNU AFFERO GENERAL PUBLIC LICENSE V3.0 の下でライセンスされています。詳細はこちらをご覧ください。
JAWはGithub PagesのWebサイトを https://soheilkhodayari.github.io/JAW/ で公開しています。
リリースノート:
JAW-V2ブランチを参照。JAW-V1ブランチを参照。JAWのアーキテクチャを以下に示します。
JAWは2つの異なる方法で使用できます。
path を指定することで、任意のJavaScriptプログラムのモデリングと解析にJAWを利用します。Neo4j グラフデータベースを様々な解析のためにクエリします。JAWは、データフロー解析、制御フロー解析、到達可能性解析、パターンマッチングのためのユーティリティトラバーサルを提供します。これらはカスタムのセキュリティ解析の開発に使用できます。インストールスクリプトは以下の前提条件に依存します。
npm package manager(node js)の最新バージョンpython 3.x の安定版pip パッケージマネージャその後、以下で必要な依存関係をインストールします。
$ ./install.sh
詳細なインストール手順については、こちらを参照してください。
パイプラインのインスタンスをバックグラウンド画面で実行するには、以下を実行します。
$ python3 -m run_pipeline --conf=config.yaml
CLIは以下のオプションを提供します。
$ python3 -m run_pipeline -h
usage: run_pipeline.py [-h] [--conf FILE] [--site SITE] [--list LIST] [--from FROM] [--to TO]
This script runs the tool pipeline.
optional arguments:
-h, --help show this help message and exit
--conf FILE, -C FILE pipeline configuration file. (default: config.yaml)
--site SITE, -S SITE website to test; overrides config file (default: None)
--list LIST, -L LIST site list to test; overrides config file (default: None)
--from FROM, -F FROM the first entry to consider when a site list is provided; overrides config file (default: -1)
--to TO, -T TO the last entry to consider when a site list is provided; overrides config file (default: -1)
入力設定: JAWは入力として .yaml 設定ファイルを期待します。例は config.yaml を参照してください。
ヒント: 設定ファイルは異なるパス(例: クローリング、静的解析など)を指定し、脆弱性クラスごとに有効/無効を切り替えることができます。これにより、ツールのビルディングブロックを個別に、または異なる順序(例: 最初にすべてのWebアプリをクロールし、その後セキュリティ解析を実施)で実行できます。
プロパティグラフを構築し、その上でCypherクエリを実行する方法を示すクイック例を実行するには、以下を実行します。
$ python3 -m analyses.example.example_analysis --input=$(pwd)/data/test_program/test.js
このモジュールは、テストに必要なデータ(JavaScriptコードとWebページの状態値)を収集します。すでにファイルシステム上に特定のJavaScriptファイルがある場合は、このステップをスキップできます。
JAWには、Selenium(JAW-v1)、Puppeteer(JAW-v2、v3)、Playwright(JAW-v3)に基づくクローラがあります。最新の機能については、PuppeteerまたはPlaywrightベースのバージョンを使用することをお勧めします。
このWebクローラは、foxhound(Firefoxの計装版)を使用して、Webページを移動しながら動的タイントラッキングを実行します。クローラを起動するには、以下を実行します。
$ cd crawler
$ node crawler-taint.js --seedurl=https://google.com --maxurls=100 --headless=true --foxhoundpath=<optional-foxhound-executable-path>
foxhoundpath はデフォルトで crawler/foxhound/firefox ディレクトリに設定されており、firefox というバイナリが含まれています。
注意: このバージョンを使用するには、foxhound のビルドが必要です。UbuntuビルドはJAW-v3のリリースに含まれています。
クローラを起動するには、以下を実行します。
$ cd crawler
$ node crawler.js --seedurl=https://google.com --maxurls=100 --browser=chrome --headless=true
詳細はこちらを参照してください。
クローラを起動するには、以下を実行します。
$ cd crawler/hpg_crawler
$ vim docker-compose.yaml # クロールしたいWebサイトをここに設定して保存
$ docker-compose build
$ docker-compose up -d
hpg_crawler のドキュメントはこちらを参照してください。
特定の(複数の)JavaScriptファイルのHPGを生成するには、以下を実行します。
$ node engine/cli.js --lang=js --graphid=graph1 --input=/in/file1.js --input=/in/file2.js --output=$(pwd)/data/out/ --mode=csv