Mafalda Ferreira, Miguel Monteiro, Tiago Brito, Miguel E. Coimbra, Nuno Santos, Limin Jia und José Fragoso Santos. 2024. Effiziente statische Sicherheitsanalyse für JavaScript mit Multiversion -Abhängigkeitsgraphen. https://doi.org/xxxx
Der Artefaktbewertungsordner enthält alle erforderlichen Anweisungen und Skripte, mit denen die Ergebnisse und Figuren aus dem Originalpapier reproduziert werden.
| Mafalda Ferreira | José Fragoso Santos | Filipe Marques | Nuno Santos |
Graph.js ist ein statischer Sicherheitsanlagenscanner, der auf die Analyse von NPM- Paketen und zur Erkennung von Schwachstellen im Makelstil und der Prototypverschmutzung spezialisiert ist.
Der Ausführungsfluss besteht aus zwei Phasen: Grafikkonstruktion und Grafikabfragen . In der ersten Phase erstellt Graph.js ein Multiversion -Abhängigkeits -Graph (MDG) des zu analysierenden Programms. Diese draphbasierte Datenstruktur verschmilzt sich in dieselbe Darstellung als abstrakte Syntaxbaum, Steuerflussgrafik und Datenabhängigkeitsgraphen. Diese Phase hat zwei Ausgänge:
In der zweiten Phase importiert Graph.js das Diagramm in eine NEO4J -Diagrammdatenbank und führt in Cypher geschriebene Grafikabfragen aus, um gefährdete Codemuster zu erfassen, z.
Graph.js generiert einen Diagramm mit dem Knoten und bezieht Neo4J zum Abfragen des Diagramms.
Es kann lokal oder in einem Docker -Container ausgeführt werden (einfacher und robuster).
Erstellen Sie den Docker -Container, indem Sie den Befehl ausführen:
docker build -t graphjs .
Richten Sie die lokale Umgebung ein, indem Sie den Befehl ausführen:
./setup.sh
Graph.js bietet eine Befehlszeilenschnittstelle. Führen Sie es mit -H für eine kurze Beschreibung aus.
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.Um graph.js auszuführen, führen Sie den Befehl aus:
./graphjs_docker.sh -f < file_to_analyze > [options]Graph.js bietet eine Befehlszeilenschnittstelle. Führen Sie es mit -H für eine kurze Beschreibung aus.
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.Um graph.js auszuführen, führen Sie den Befehl aus:
python3 graphjs.py -f < file_to_analyze > [options]Standardmäßig werden alle Ergebnisse in einem Ordner von GraphJS-Results im Wurzel des Projekts mit der folgenden Struktur gespeichert:
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 Code ist so konzipiert, dass sie einen einfachen Gebrauch durch andere ermöglichen, und kann leicht angepasst werden, um neue Szenarien aufzunehmen. Wie bereits beschrieben, besteht graph.js aus zwei Phasen: Grafikkonstruktion und Grafikabfragen. Der Graph Construction Code befindet sich im Ordner graphjs/parser/src , und die relevantesten Dateien werden wie folgt organisiert:
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
Der Code, der sich auf den MDG -Konstruktionsalgorithmus bezieht, befindet sich in src/traverse/dependency, where the file /Abhängigkeit_Trackers.ts "die im Papier genannten Regeln und Strukturen enthält. Das MDG soll generisch sein, sodass alle Gebäudetufen an neue Szenarien angepasst werden können, indem neue Arten von Knoten und Kanten erstellt werden.
Der Code für die Abfragen befindet sich im Ordner graphjs/detection . Die Abfragen sind völlig anpassbar. Es ist daher nicht nur die vorhandenen Abfragen, sondern auch neue Abfragen zu erstellen, die nach neuen und unterschiedlichen Mustern in der Grafik suchen.
npm start -- -f < file_to_be_analyzed > [options]| Beschreibung | Flagge | Standard | Erforderlich | Erfordert |
|---|---|---|---|---|
| Die zu analysierende JavaScript -Datei | -F | - - | Ja | - - |
| Speicherort der Konfigurationsdatei | -C | '../config.json' ' | NEIN | - - |
| Speicherort der normalisierten Datei | -O | - - | NEIN | - - |
| Speicherort des Graph -Ausgangsverzeichnisses (CSV- und SVG -Dateien) | -G | 'src/graphs/' ' | NEIN | - - |
| Ausgabe der Grafik -CSV -Dateien ausgeben | -CSV | FALSCH | NEIN | - - |
| Ausgabe der Grafikfigur | --Graph | FALSCH | NEIN | - - |
| Stellen Sie eine Array von Strukturen fest, um die Grafikfigur zu ignorieren | --i = [AST, CFG ...] | [] | NEIN | Graph |
| Stellen Sie eine Reihe von Funktionen fest, um in der Grafikfigur zu ignorieren | -wenn = [...] | [] | NEIN | Graph |
| Zeigen Sie den Code in jeder Anweisung in der Graphfigur an | --sc | FALSCH | NEIN | Graph |
| Stille Modus (nicht ausführlich) | --still | FALSCH | NEIN | - - |
Die Entwicklung von Graph.js bezieht sich auf zusätzliche Forschungsergebnisse dieser Gruppe.
Diese Arbeit umfasst eine empirische Untersuchung statischer Code -Analyse -Tools zum Erkennen von Schwachstellen im Node.js -Code. Wir haben einen kuratierten Datensatz von 957 Node.JS -Code -Sicherheitslücken erstellt, der durch Analyse der in NPM -Beratungsberichte enthaltenen Informationen charakterisiert und kommentiert wurde.
Der Datensatz ist hier verfügbar.
Die mit dieser Arbeit verbundene Veröffentlichung lautet:
@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},
}
In dieser Arbeit haben wir einen Prototyp des Regelkeeper entwickelt, ein GDPR-bewusstes Richtlinien-Compliance-System für Web-Frameworks. Rulekeeper verwendet Graph.js, um automatisch auf das Vorhandensein von DSGVO -Compliance -Fehler auf Node.js -Servern zu prüfen.
Der Prototyp ist hier verfügbar.
Die mit dieser Arbeit verbundene Veröffentlichung lautet:
@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},
}