Mafalda Ferreira,Miguel Monteiro,Tiago Brito,Miguel E. Coimbra,Nuno Santos,Limin Jia和JoséFragosoSantos。 2024。具有多元相關圖的JavaScript的有效靜態漏洞分析。 https://doi.org/xxxx
工件評估文件夾包含用於復制原始論文結果和數字的所有必要說明和腳本。
| Mafalda Ferreira | JoséFragosoSantos | Filipe Marques | Nuno Santos |
Graph.js是一種靜態漏洞掃描儀,專門分析NPM軟件包並檢測污染風格和原型污染漏洞。
其執行流由兩個階段組成:圖形構造和圖形查詢。在第一階段,Graph.js構建了要分析程序的多元依賴圖(MDG)。基於圖的數據結構將抽象語法樹,控制流程圖和數據依賴關係圖聚合到相同的表示形式中。該階段有兩個輸出:
在第二階段中,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由兩個階段組成:圖形結構和圖形查詢。圖形構造代碼位於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 Construction算法的代碼位於src/traverse/dependency, where the file結構/distionency_trackers.ts`包含本文中引用的規則和結構。 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代碼中漏洞的靜態代碼分析工具的經驗研究。我們創建了一個由957個Node.js代碼漏洞的策劃數據集,該數據集通過分析NPM Advisory報告中包含的信息來表徵和註釋。
該數據集可在此處提供。
與這項工作相關的出版物是:
@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},
}
在這項工作中,我們開發了Rulekeeper的原型,這是一個用於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},
}