マファルダ・フェレイラ、ミゲル・モンテイロ、ティアゴ・ブリト、ミゲル・E・コインブラ、ヌノ・サントス、リミン・ジア、ホセ・フラグソ・サントス。 2024。多額の依存性グラフを使用したJavaScriptの効率的な静的脆弱性分析。 https://doi.org/xxxx
Artifact評価フォルダーには、元の論文の結果と数値を再現するために使用されるすべての必要な指示とスクリプトが含まれています。
| マファルダフェレイラ | ホセ・フラグソ・サントス | フィリペマルクス | ヌノ・サントス |
Graph.JSは、 NPMパッケージの分析と汚染スタイルおよびプロトタイプの汚染の脆弱性の検出に特化した静的脆弱性スキャナーです。
その実行フローは、グラフ構造とグラフクエリの2つのフェーズで構成されています。最初のフェーズでは、Graph.jsは分析するプログラムのマルチソリオン依存性グラフ(MDG)を構築します。このグラフベースのデータ構造は、抽象的な構文ツリー、制御フローグラフ、およびデータ依存性グラフを同じ表現に合体します。このフェーズには2つの出力があります。
第2フェーズでは、graph.jsはグラフをNeo4jグラフデータベースにインポートし、Cypherで記述されたグラフクエリを実行して、脆弱なコードパターン、例えば信頼できないソースを危険なシンクに接続するデータ依存関係パスをキャプチャします。
Graph.jsは、ノードを使用してグラフを生成し、NEO4Jを使用してグラフをクエリします。
ローカルで実行するか、Dockerコンテナ(より簡単で堅牢なセットアップ)で実行できます。
コマンドを実行してDockerコンテナを構築します。
docker build -t graphjs .
コマンドを実行してローカル環境を設定します。
./setup.sh
Graph.jsはコマンドラインインターフェイスを提供します。簡単な説明のために-Hで実行します。
Usage: ./graphjs_docker.sh -f <file> [options]
Description: Run Graph.js for a given file <file> in a Docker container.
Required:
-f <file> Filename (.js).
Options:
-o <path> Path to store analysis results.
-l Store docker logs.
-e Create exploit template.
-s Silent mode: Does not save graph .svg.
-h Print this help.graph.jsを実行するには、コマンドを実行します。
./graphjs_docker.sh -f < file_to_analyze > [options]Graph.jsはコマンドラインインターフェイスを提供します。簡単な説明のために-Hで実行します。
Usage: graphjs.py [-h] -f FILE [-o OUTPUT] [-s] [-d] [-e]
Options:
-h, --help show this help message and exit
-f FILE, --file FILE Path to JavaScript file (.js) or directory containing JavaScript files for analysis.
-o OUTPUT, --output OUTPUT
Path to store all output files.
-s, --silent Silent mode - no console and graph output.
-d, --docker Query mode - executes neo4j in a docker container instead of running locally.
-e, --exploit Generates symbolic tests.graph.jsを実行するには、コマンドを実行します。
python3 graphjs.py -f < file_to_analyze > [options]デフォルトでは、すべての結果は、プロジェクトのルートにあるGraphJS-Resultsフォルダーに保存され、次の構造があります。
graphjs-results
├── graph
│ ├── graph_stats.json (stores some metrics)
│ ├── nodes.csv (csv file of the graph nodes)
│ ├── rels.csv (csv file of the graph relationships)
│ └── normalized.js (normalized code)
└── taint_summary_detection.json (detection results)
Graph.JSコードは、他の人が簡単に使用できるように設計されており、新しいシナリオに対応するために簡単に適応できます。前述のように、Graph.jsは、グラフ構造とグラフクエリの2つのフェーズで構成されています。グラフ構造コードはgraphjs/parser/srcフォルダーにあり、最も関連性の高いファイルは次のように編成されています。
src
├── parser.ts
├── output # Code to generate outputs (.csv and .svg)
├── traverse # Parsing algorithms
├── dependency
│ ├── structures/dependency_trackers.ts
│ └── dep_builder.ts
├── ast-builder.ts
├── cfg-builder.ts
└── cg-builder.ts
MDG構造アルゴリズムを参照するコードはsrc/traverse/dependency, where the file論文で言及されているルールと構造が含まれています。 MDGは一般的なものであることを目的としているため、すべての構築ステップは、新しいタイプのノードとエッジを作成することにより、新しいシナリオに適合させることができます。
クエリのコードはgraphjs/detectionフォルダーにあります。クエリは完全にカスタマイズ可能であるため、既存のクエリを変更するだけでなく、グラフ内の新しい異なるパターンを検索する新しいクエリを作成することもできます。
npm start -- -f < file_to_be_analyzed > [options]| 説明 | フラグ | デフォルト | 必須 | 必要 |
|---|---|---|---|---|
| 分析するJavaScriptファイル | -f | - | はい | - |
| 構成ファイルの場所 | -C | '../config.json' | いいえ | - |
| 正規化されたファイルの場所 | -o | - | いいえ | - |
| グラフ出力ディレクトリの場所(CSVおよびSVGファイル) | -g | 'src/graphs/' | いいえ | - |
| グラフCSVファイルを出力します | -CSV | 間違い | いいえ | - |
| グラフ図を出力します | - グラフ | 間違い | いいえ | - |
| グラフ図で無視する構造の配列を設定します | -i = [ast、cfg ...] | [] | いいえ | グラフ |
| グラフ図で無視する機能の配列を設定します | -if = [...] | [] | いいえ | グラフ |
| グラフ図に各ステートメントのコードを表示します | -SC | 間違い | いいえ | グラフ |
| サイレントモード(冗長ではない) | - 静けさ | 間違い | いいえ | - |
graph.jsの開発は、このグループが実施した追加の研究に関連しています。
この作業は、node.jsコードの脆弱性を検出するための静的コード分析ツールの経験的研究で構成されています。 NPMアドバイザリーレポートに含まれる情報を分析することで特徴付けられ、注釈が付けられた957 node.jsコードの脆弱性のキュレーションデータセットを作成しました。
データセットはこちらから入手できます。
この作業に関連する出版物は次のとおりです。
@inproceedings{vulcan_tor,
author = {Brito, Tiago and Ferreira, Mafalda and Monteiro, Miguel and Lopes, Pedro and Barros, Miguel and Santos, José Fragoso and Santos, Nuno},
booktitle = {IEEE Transactions on Reliability},
title = {Study of JavaScript Static Analysis Tools for Vulnerability Detection in Node.js Packages},
year = {2023},
pages = {1-16},
doi = {10.1109/TR.2023.3286301},
}
この作業では、Webフレームワーク向けのGDPR認識ポリシーコンプライアンスシステムであるRuleKeeperのプロトタイプを開発しました。ルールキーパーはgraph.jsを使用して、node.jsサーバーにGDPRコンプライアンスバグが存在することを自動的に確認します。
プロトタイプはこちらから入手できます。
この作業に関連する出版物は次のとおりです。
@inproceedings{ferreira_sp23,
author = {Ferreira, Mafalda and Brito, Tiago and Santos, José Fragoso and Santos, Nuno},
title = {RuleKeeper: GDPR-Aware Personal Data Compliance for Web Frameworks},
booktitle = {Proceedings of 44th IEEE Symposium on Security and Privacy (S&P'23)},
year = {2023},
doi = {10.1109/SP46215.2023.00058},
pages = {1014-1031},
publisher = {IEEE Computer Society},
address = {Los Alamitos, CA, USA},
}