Мафальда Феррейра, Мигель Монтейро, Тиаго Брито, Мигель Э. Коимбра, Нуно Сантос, Лимин Цзяя и Хосе Фаросо Сантос. 2024. Эффективный статический анализ уязвимости для JavaScript с графиками мультиверсионных зависимостей. https://doi.org/xxxx
Папка оценки артефактов содержит все необходимые инструкции и сценарии, используемые для воспроизведения результатов, и фигуры из исходной статьи.
| Мафальда Феррейра | Жозе Фагосо Сантос | Филипе Маркес | Нуно Сантос |
Graph.js-это статический сканер уязвимости, специализирующийся на анализе пакетов NPM и обнаружении уязвимостей загрязнения в стиле и прототипа.
Его поток выполнения состоит из двух этапов: строительства графика и графических запросов . На первом этапе Graph.js создает многоводный график зависимости зависимости (MDG) программы, которая будет анализироваться. Эта структура данных, основанная на графике, объединяется в одно и то же представление абстрактное синтаксисное дерево, график потока управления и график зависимости данных. Этот этап имеет два выхода:
На втором этапе Graph.js импортирует график в базу данных графика NEO4J и выполняет запросы графика, записанные в Cypher, для захвата уязвимых паттернов кода, например, путей зависимостей данных, соединяющих ненадежные источники с опасными раковинами.
Graph.js генерирует график с использованием узла и использует Neo4j для запроса графика.
Он может быть выполнен локально, или в контейнере Docker (более простая и более надежная установка).
Создайте контейнер Docker, выполнив команду:
docker build -t graphjs .
Настройте локальную среду, выполнив команду:
./setup.sh
Graph.js предоставляет интерфейс командной строки. Запустите его с -Х для краткого описания.
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 предоставляет интерфейс командной строки. Запустите его с -Х для краткого описания.
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
Код, относящийся к алгоритму конструкции ЦРТ, расположен в src/traverse/dependency, where the file структуры/Depertive_trackers.ts` содержит правила и структуры, упомянутые в статье. ЦРТ предназначен для общего, поэтому все этапы здания могут быть адаптированы к новым сценариям, создавая новые типы узлов и краев.
Код для запросов находится в папке graphjs/detection . Запросы полностью настраиваются, поэтому возможно не только изменять существующие запросы, но и создать новые запросы, которые ищут новые и разные шаблоны на графике.
npm start -- -f < file_to_be_analyzed > [options]| Описание | Флаг | По умолчанию | Необходимый | Требует |
|---|---|---|---|---|
| Файл JavaScript будет проанализирован | -f | - | Да | - |
| Расположение файла конфигурации | -c | '../config.json' | Нет | - |
| Расположение нормализованного файла | -О | - | Нет | - |
| Расположение выходного каталога графика (файлы CSV и SVG) | -g | 'src/graphs/' | Нет | - |
| Вывод графического CSV -файлов | -CSV | ЛОЖЬ | Нет | - |
| Вывести рисунок графика | -граф | ЛОЖЬ | Нет | - |
| Установите массив структур для игнорирования на рисунке графика | -i = [ast, cfg ...] | [] | Нет | график |
| Установите массив функций, чтобы игнорировать на рисунке графика | -if = [...] | [] | Нет | график |
| Показать код в каждом операторе на рисунке графика | -Ск | ЛОЖЬ | Нет | график |
| Silent Mode (не словес) | --тихий | ЛОЖЬ | Нет | - |
Разработка graph.js относится к дополнительным исследованиям, проведенным этой группой.
Эта работа включает в себя эмпирическое исследование инструментов анализа статического кода для обнаружения уязвимостей в коде node.js. Мы создали куратор уязвимого кода 957 Node.js уязвимого кода, охарактеризованный и аннотированный путем анализа информации, содержащейся в консультативных отчетах NPM .
Набор данных доступен здесь.
Публикация, связанная с этой работой:
@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 для веб-структур. Руководитель использует graph.js для автоматической проверки наличия ошибок соответствия GDPR на серверах node.js.
Прототип доступен здесь.
Публикация, связанная с этой работой:
@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},
}