Mafalda Ferreira, Miguel Monteiro, Tiago Brito, Miguel E. Coimbra, Nuno Santos, Limin Jia 및 José Fragoso Santos. 2024. Multiversion 의존성 그래프를 사용한 JavaScript의 효율적인 정적 취약성 분석. https://doi.org/xxxx
아티팩트 평가 폴더에는 원래 논문의 결과와 수치를 재현하는 데 사용되는 모든 필요한 지침과 스크립트가 포함되어 있습니다.
| Mafalda Ferreira | José Fragoso Santos | Filipe Marques | Nuno Santos |
Graph.js는 NPM 패키지 분석 및 오염 스타일 및 프로토 타입 오염 취약점을 탐지하는 데 특화된 정적 취약성 스캐너입니다.
실행 흐름은 그래프 구성 및 그래프 쿼리의 두 단계로 구성됩니다. 첫 번째 단계에서 Graph.js는 분석 할 프로그램의 MDG (Multiversion Dependency Graph)를 빌드합니다. 이 그래프 기반 데이터 구조는 추상 구문 트리, 제어 흐름 그래프 및 데이터 종속성 그래프와 동일한 표현으로 합쳐집니다. 이 단계에는 두 가지 출력이 있습니다.
두 번째 단계에서 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 구성 알고리즘을 참조하는 코드는 src/traverse/dependency, where the file 논문에 언급 된 규칙 및 구조가 포함되어 있습니다. MDG는 일반적이기 때문에 새로운 유형의 노드와 가장자리를 만들어 모든 건물 단계를 새로운 시나리오에 적용 할 수 있습니다.
쿼리 코드는 graphjs/detection Folder에 있습니다. 쿼리는 전적으로 사용자 정의 할 수 있으므로 기존 쿼리를 수정할뿐만 아니라 그래프에서 새롭고 다른 패턴을 검색하는 새로운 쿼리를 만들 수 있습니다.
npm start -- -f < file_to_be_analyzed > [options]| 설명 | 깃발 | 기본 | 필수의 | 필요합니다 |
|---|---|---|---|---|
| 분석 할 JavaScript 파일 | -에프 | - | 예 | - |
| 구성 파일의 위치 | -기음 | '../config.json' | 아니요 | - |
| 정규화 된 파일의 위치 | -영형 | - | 아니요 | - |
| 그래프 출력 디렉토리의 위치 (CSV 및 SVG 파일) | -g | 'src/graphs/' | 아니요 | - |
| 그래프 CSV 파일을 출력합니다 | -CSV | 거짓 | 아니요 | - |
| 그래프 그림을 출력하십시오 | --그래프 | 거짓 | 아니요 | - |
| 그래프 그림에서 무시할 구조 배열을 설정하십시오 | --i = [ast, cfg ...] | [] | 아니요 | 그래프 |
| 그래프 그림에서 무시할 함수 배열을 설정하십시오 | -if = [...] | [] | 아니요 | 그래프 |
| 그래프 그림에서 각 문의 코드를 표시하십시오 | --sc | 거짓 | 아니요 | 그래프 |
| 침묵 모드 (Verbose 아님) | --조용한 | 거짓 | 아니요 | - |
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},
}
이 작업에서 우리는 웹 프레임 워크를위한 GDPR 인식 정책 준수 시스템 인 Rulekeeper의 프로토 타입을 개발했습니다. 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},
}