
ЧЕЛЮСТЬ
Веб -сайт | Документы | Настройка | Crawler | Quick Start Docker (пример)
Прототип реализации графиков свойств с открытым исходным кодом для JavaScript на основе анализатора Esprima и эфирной спецификации Spidermonkey. JAW можно использовать для анализа клиентской стороны веб-приложений и программ на основе JavaScript.
Этот проект лицензирован в рамках GNU AFFERO GENERAL PUBLIC LICENSE V3.0 . Смотрите здесь для получения дополнительной информации.
У Jaw есть веб -сайт Github Pages, доступный по адресу https://soheilkhodayari.github.io/jaw/.
Примечания релиза:
JAW-V2 .JAW-V1 .Архитектура челюсти показана ниже.

Челюсть может быть использована двумя различными способами:
Произвольный анализ JavaScript: используйте челюсть для моделирования и анализа любой программы JavaScript, указав path файловой системы программы.
Анализ веб -приложений: проанализируйте веб -приложение, предоставляя единый URL -адрес Seed.
Используйте собранные веб -ресурсы для создания гибридного графа программы (HPG), который будет импортирован в базу данных NEO4J.
Необязательно, поставьте модуль строительства HPG с отображением семантических типов на пользовательские токены JavaScript Language, способствуя категоризации функций JavaScript на основе их цели (например, функции HTTP -запроса).
Запросите построенную базу данных графика Neo4j для различных анализов. JAW предлагает утилита для анализа потока данных, анализа потока управления, анализа достижимости и сопоставления схем. Эти обходы могут быть использованы для разработки пользовательского анализа безопасности.
Jaw также включает в себя встроенные обходы для обнаружения CSRF на стороне клиента, DOM Clobbering и запроса уязвимостей.
Выходы будут храниться в той же папке, что и вход.
Сценарий установки опирается на следующие предпосылки:
npm package manager (Node JS)python 3.xpip Package ManagerПосле этого установите необходимые зависимости через:
$ ./install.sh Для получения detailed инструкций по установке, см. Здесь.
Вы можете запустить экземпляр трубопровода на фоновом экране через:
$ python3 -m run_pipeline --conf=config.yamlCLI предоставляет следующие варианты:
$ python3 -m run_pipeline -h
usage: run_pipeline.py [-h] [--conf FILE] [--site SITE] [--list LIST] [--from FROM] [--to TO]
This script runs the tool pipeline.
optional arguments:
-h, --help show this help message and exit
--conf FILE, -C FILE pipeline configuration file. (default: config.yaml)
--site SITE, -S SITE website to test; overrides config file (default: None)
--list LIST, -L LIST site list to test; overrides config file (default: None)
--from FROM, -F FROM the first entry to consider when a site list is provided; overrides config file (default: -1)
--to TO, -T TO the last entry to consider when a site list is provided; overrides config file (default: -1)
Конфигурация ввода: Jaw ожидает файла конфигурации .yaml в качестве ввода. См. Config.yaml для примера.
Намекать. Файл конфигурации определяет различные проходы (например, ползание, статический анализ и т. Д.), Которые могут быть включены или отключены для каждого класса уязвимости. Это позволяет запустить строительные блоки инструмента индивидуально или в другом порядке (например, сначала ползуйте все веб -приложения, а затем проводят анализ безопасности).
Для запуска быстрого примера, демонстрирующего, как построить график свойств и запустить запросы Cypher над ним, Do:
$ python3 -m analyses.example.example_analysis --input= $( pwd ) /data/test_program/test.jsЭтот модуль собирает данные (то есть код JavaScript и значения состояния веб -страниц), необходимых для тестирования. Если вы хотите проверить конкретный файл Javascipt, который у вас уже есть в вашей файловой системе, вы можете пропустить этот шаг.
У Jaw есть Crawlers на основе Selenium (JAW-V1), кукловода (JAW-V2, V3) и драматурга (JAW-V3). Для большинства современных функций рекомендуется использовать версии кукловода или драматурга.
В этом веб -гусенике используется Foxhound, инструментальную версию Firefox, для выполнения динамического отслеживания улова, когда он перемещается по веб -страницам. Чтобы начать гусеница, сделайте:
$ cd crawler
$ node crawler-taint.js --seedurl=https://google.com --maxurls=100 --headless=true --foxhoundpath= < optional-foxhound-executable-path > foxhoundpath по умолчанию устанавливается на следующий каталог: crawler/foxhound/firefox который содержит бинарную под названием firefox .
Примечание: вам нужна сборка Foxhound, чтобы использовать эту версию. Сборка Ubuntu включена в выпуск Jaw-V3.
Чтобы начать гусеница, сделайте:
$ cd crawler
$ node crawler.js --seedurl=https://google.com --maxurls=100 --browser=chrome --headless=trueСмотрите здесь для получения дополнительной информации.
Чтобы начать гусеница, сделайте:
$ cd crawler/hpg_crawler
$ vim docker-compose.yaml # set the websites you want to crawl here and save
$ docker-compose build
$ docker-compose up -d Пожалуйста, обратитесь к документации hpg_crawler для получения дополнительной информации.
Чтобы сгенерировать HPG для заданного (набора) файлов JavaScript, DO:
$ node engine/cli.js --lang=js --graphid=graph1 --input=/in/file1.js --input=/in/file2.js --output=$(pwd)/data/out/ --mode=csv
optional arguments:
--lang: language of the input program
--graphid: an identifier for the generated HPG
--input: path of the input program(s)
--output: path of the output HPG, must be i
--mode: determines the output format (csv or graphML)
Для импорта HPG в базе данных GRAPE NEO4J (экземпляр Docker), DO:
$ python3 -m hpg_neo4j.hpg_import --rpath=<path-to-the-folder-of-the-csv-files> --id=<xyz> --nodes=<nodes.csv> --edges=<rels.csv>
$ python3 -m hpg_neo4j.hpg_import -h
usage: hpg_import.py [-h] [--rpath P] [--id I] [--nodes N] [--edges E]
This script imports a CSV of a property graph into a neo4j docker database.
optional arguments:
-h, --help show this help message and exit
--rpath P relative path to the folder containing the graph CSV files inside the `data` directory
--id I an identifier for the graph or docker container
--nodes N the name of the nodes csv file (default: nodes.csv)
--edges E the name of the relations csv file (default: rels.csv)
Чтобы создать график гибридного свойства для вывода hpg_crawler и импортировать его внутри локального экземпляра NEO4J, вы также можете сделать:
$ python3 -m engine.api < path > --js= < program.js > --import= < bool > --hybrid= < bool > --reqs= < requests.out > --evts= < events.out > --cookies= < cookies.pkl > --html= < html_snapshot.html >Спецификация параметров:
<path> : абсолютный путь к папке, содержащей файлы программы для анализа (должен быть под папкой engine/outputs ).--js=<program.js> : имя программы JavaScript для анализа (по умолчанию: js_program.js ).--import=<bool> : следует ли импортировать построенный график свойств в активную базу данных NEO4J (по умолчанию: true).--hybrid=bool : включен ли гибридный режим (по умолчанию: false ). Это подразумевает, что тестер хочет обогатить график свойств путем ввода файлов для любого из снимка HTML, запускаемых событий, HTTP -запросов и файлов cookie, собранных челюстью.--reqs=<requests.out> : только для гибридного режима, имя файла, содержащего последовательность подселенных сетевых запросов, передайте строку false , чтобы исключить (по умолчанию: request_logs_short.out ).--evts=<events.out> : только для гибридного режима, имя файла, содержащего последовательность запускаемых событий, передайте строку false , чтобы исключить (по умолчанию: events.out ).--cookies=<cookies.pkl> : только для гибридного режима имени файла, содержащего файлы cookie, передайте строку false , чтобы исключить (по умолчанию: cookies.pkl ).--html=<html_snapshot.html> : только для гибридного режима, имя файла, содержащего снимок дерева DOM, передайте строку false , чтобы исключить (по умолчанию: html_rendered.html ).Для получения дополнительной информации вы можете использовать справочную CLI, предоставленную API конструкции графика:
$ python3 -m engine.api -hЗатем построенный HPG может быть запрошен с использованием Cypher или Neomodel ORM.
Вы должны разместить и запустить свои запросы в analyses/<ANALYSIS_NAME> .
Вы можете использовать Neomodel ORM для запроса HPG. Написать запрос:
example_query_orm.py в папке analyses/example . $ python3 -m analyses.example.example_query_orm Для получения дополнительной информации, пожалуйста, смотрите здесь.
Вы можете использовать Cypher для написания пользовательских запросов. Для этого:
example_query_cypher.py в папке analyses/example . $ python3 -m analyses.example.example_query_cypherДля получения дополнительной информации, пожалуйста, смотрите здесь.
В этом разделе описывается, как настроить и использовать челюсть для обнаружения уязвимости, и как интерпретировать выход. Челюсть содержит, среди прочего, автономные запросы для обнаружения CSRF на стороне клиента и Clobbering DOM
Шаг 1. Включите компонент анализа для класса уязвимости в файле input.yaml:
request_hijacking :
enabled : true
# [...]
open_redirect :
enabled : false
# [...]
domclobbering :
enabled : false
# [...]
cs_csrf :
enabled : false
# [...]Шаг 2. Запустите экземпляр трубопровода с:
$ python3 -m run_pipeline --conf=config.yaml Намекать. Вы можете запустить несколько экземпляров трубопровода под разными screen :
$ screen -dmS s1 bash -c ' python3 -m run_pipeline --conf=conf1.yaml; exec sh '
$ screen -dmS s2 bash -c ' python3 -m run_pipeline --conf=conf2.yaml; exec sh '
$ # [...] Чтобы автоматически генерировать файлы параллельной конфигурации, вы можете использовать скрипт generate_config.py .
Выходы будут храниться в файле с именем sink.flows.out в той же папке, что и у ввода. Для CSRF на стороне клиента, например, для каждого обнаруженного HTTP-запроса, челюсть выводит запись, отмечающую набор семантических типов (он же, семантические теги или этикетки), связанные с элементами, построением запроса (т. Е. Срезы программы). Например, HTTP -запрос, отмеченный семантическим типом ['WIN.LOC'] прощается через window.location . Тем не менее, запрос, отмеченный ['NON-REACH'] не прощается.
Пример вывода показан ниже:
[*] Tags: ['WIN.LOC']
[*] NodeId: {'TopExpression': '86', 'CallExpression': '87', 'Argument': '94'}
[*] Location: 29
[*] Function: ajax
[*] Template: ajaxloc + "/bearer1234/"
[*] Top Expression: $.ajax({ xhrFields: { withCredentials: "true" }, url: ajaxloc + "/bearer1234/" })
1:['WIN.LOC'] variable=ajaxloc
0 (loc:6)- var ajaxloc = window.location.href
Эта запись показывает ajax что ajaxloc + "/bearer1234/ строке 29 ajaxloc выражение window.location.href $.ajax ['WIN.LOC']
Чтобы упростить процесс тестирования для JAW и убедиться, что ваша настройка является точной, мы предоставляем простое веб -приложение node.js , с которым вы можете протестировать челюсть.
Во -первых, установите зависимости через:
$ cd tests/test-webapp
$ npm installЗатем запустите приложение на новом экране:
$ screen -dmS jawwebapp bash -c ' PORT=6789 npm run devstart; exec sh 'Для получения дополнительной информации посетите нашу вики -страницу здесь. Ниже приведена оглавление для быстрого доступа.
Запросы на вытягивание всегда приветствуются. Этот проект предназначен для безопасного, гостеприимного пространства, и ожидается, что участники будут придерживаться Кодекса поведения участника.
Если вы используете челюсть для академических исследований, мы рекомендуем вам привести следующую статью:
@inproceedings{JAW,
title = {JAW: Studying Client-side CSRF with Hybrid Property Graphs and Declarative Traversals},
author= {Soheil Khodayari and Giancarlo Pellegrino},
booktitle = {30th {USENIX} Security Symposium ({USENIX} Security 21)},
year = {2021},
address = {Vancouver, B.C.},
publisher = {{USENIX} Association},
}
Челюсть прошла долгий путь, и мы хотим дать нашим участникам заслуженный крик!
@tmbrbr, @c01gide, @jndre и sepehr mirzaei.