
RAHANG
Situs web | Docs | Pengaturan | Crawler | Docker start cepat (contoh)
Implementasi prototipe open-source, prototipe grafik properti untuk JavaScript berdasarkan Esprima Parser, dan Spece Spidermonkey Estree. Jaw dapat digunakan untuk menganalisis sisi klien aplikasi web dan program berbasis JavaScript.
Proyek ini dilisensikan di bawah GNU AFFERO GENERAL PUBLIC LICENSE V3.0 . Lihat di sini untuk informasi lebih lanjut.
Jaw memiliki situs web halaman github yang tersedia di https://soheilkhodayari.github.io/jaw/.
Catatan rilis:
JAW-V2 .JAW-V1 .Arsitektur rahang ditunjukkan di bawah ini.

Jaw dapat digunakan dengan dua cara berbeda:
Analisis JavaScript yang sewenang -wenang: Memanfaatkan rahang untuk memodelkan dan menganalisis program JavaScript apa pun dengan menentukan path sistem file program.
Analisis Aplikasi Web: Menganalisis aplikasi web dengan menyediakan URL benih tunggal.
Gunakan sumber daya web yang dikumpulkan untuk membuat grafik program hybrid (HPG), yang akan diimpor ke dalam database NEO4J.
Secara opsional, berikan modul konstruksi HPG dengan pemetaan jenis semantik ke token bahasa JavaScript khusus, memfasilitasi kategorisasi fungsi JavaScript berdasarkan tujuannya (misalnya, fungsi permintaan HTTP).
Permintaan database grafik Neo4j yang dibangun untuk berbagai analisis. Jaw menawarkan traversal utilitas untuk analisis aliran data, analisis aliran kontrol, analisis jangkauan, dan pencocokan pola. Traversal ini dapat digunakan untuk mengembangkan analisis keamanan khusus.
Jaw juga menyertakan traversal bawaan untuk mendeteksi CSRF sisi klien, Dom Clobbering dan meminta kerentanan pembajakan.
Output akan disimpan dalam folder yang sama dengan input.
Skrip instalasi bergantung pada prasyarat berikut:
npm package manager (Node JS)python 3.x yang stabilpipSetelah itu, instal dependensi yang diperlukan melalui:
$ ./install.sh Untuk instruksi instalasi detailed , silakan lihat di sini.
Anda dapat menjalankan instance pipa di layar latar belakang melalui:
$ python3 -m run_pipeline --conf=config.yamlCLI memberikan opsi berikut:
$ 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)
Input Config: Jaw mengharapkan file konfigurasi .yaml sebagai input. Lihat Config.yaml Sebagai contoh.
Petunjuk. File konfigurasi menentukan umpan yang berbeda (misalnya, merangkak, analisis statis, dll) yang dapat diaktifkan atau dinonaktifkan untuk setiap kelas kerentanan. Hal ini memungkinkan menjalankan blok bangunan alat secara individual, atau dalam urutan yang berbeda (misalnya, merangkak semua Webapps terlebih dahulu, kemudian melakukan analisis keamanan).
Untuk menjalankan contoh cepat yang menunjukkan cara membangun grafik properti dan menjalankan kueri Cypher di atasnya, lakukan:
$ python3 -m analyses.example.example_analysis --input= $( pwd ) /data/test_program/test.jsModul ini mengumpulkan data (yaitu, kode JavaScript dan nilai -nilai status halaman web) yang diperlukan untuk pengujian. Jika Anda ingin menguji file Javascipt tertentu yang sudah Anda miliki di sistem file Anda, Anda dapat melewatkan langkah ini.
Jaw memiliki crawler berdasarkan Selenium (Jaw-V1), Puppeteer (Jaw-V2, V3) dan Playwright (Jaw-V3). Untuk sebagian besar fitur terkini, disarankan untuk menggunakan versi boneka atau penulis drama.
Web Crawler ini mempekerjakan Foxhound, versi Firefox yang diinstrumentasi, untuk melakukan pelacakan noda yang dinamis saat menavigasi melalui halaman web. Untuk memulai crawler, lakukan:
$ cd crawler
$ node crawler-taint.js --seedurl=https://google.com --maxurls=100 --headless=true --foxhoundpath= < optional-foxhound-executable-path > foxhoundpath secara default diatur ke direktori berikut: crawler/foxhound/firefox yang berisi biner bernama firefox .
Catatan: Anda memerlukan build of foxhound untuk menggunakan versi ini. Build Ubuntu termasuk dalam rilis Jaw-V3.
Untuk memulai crawler, lakukan:
$ cd crawler
$ node crawler.js --seedurl=https://google.com --maxurls=100 --browser=chrome --headless=trueLihat di sini untuk informasi lebih lanjut.
Untuk memulai crawler, lakukan:
$ 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 Silakan merujuk ke dokumentasi hpg_crawler di sini untuk informasi lebih lanjut.
Untuk menghasilkan HPG untuk file JavaScript yang diberikan, lakukan:
$ 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)
Untuk mengimpor HPG di dalam database grafik NEO4J (instance Docker), lakukan:
$ 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)
Untuk membuat grafik properti hybrid untuk output hpg_crawler dan mengimpornya di dalam instance neo4j lokal, Anda juga dapat melakukan:
$ 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 >Spesifikasi parameter:
<path> : Jalur absolut ke folder yang berisi file program untuk analisis (harus berada di bawah folder engine/outputs ).--js=<program.js> : nama program JavaScript untuk analisis (default: js_program.js ).--import=<bool> : Apakah grafik properti yang dibangun harus diimpor ke database NEO4J aktif (default: true).--hybrid=bool : apakah mode hybrid diaktifkan (default: false ). Ini menyiratkan bahwa penguji ingin memperkaya grafik properti dengan memasukkan file untuk salah satu snapshot HTML, acara yang dipecat, permintaan dan cookie HTTP, sebagaimana dikumpulkan oleh perayap rahang.--reqs=<requests.out> : Untuk mode hybrid saja, nama file yang berisi urutan permintaan jaringan obsevered, lewati string false untuk dikecualikan (default: request_logs_short.out ).--evts=<events.out> : Untuk mode hybrid saja, nama file yang berisi urutan peristiwa yang dipecat, lewati string false untuk dikecualikan (default: events.out ).--cookies=<cookies.pkl> : untuk mode hybrid saja, nama file yang berisi cookie, lewati string false untuk dikecualikan (default: cookies.pkl ).--html=<html_snapshot.html> : Untuk mode hybrid saja, nama file yang berisi snapshot pohon dom, lewati string false untuk dikecualikan (default: html_rendered.html ).Untuk informasi lebih lanjut, Anda dapat menggunakan bantuan CLI yang disediakan dengan grafik konstruksi API:
$ python3 -m engine.api -hHPG yang dibangun kemudian dapat ditanya menggunakan Cypher atau Neomodel ORM.
Anda harus menempatkan dan menjalankan kueri Anda dalam analyses/<ANALYSIS_NAME> .
Anda dapat menggunakan Neomodel ORM untuk menanyakan HPG. Untuk menulis kueri:
example_query_orm.py dalam folder analyses/example . $ python3 -m analyses.example.example_query_orm Untuk informasi lebih lanjut, silakan lihat di sini.
Anda dapat menggunakan Cypher untuk menulis kueri khusus. Untuk ini:
example_query_cypher.py dalam folder analyses/example . $ python3 -m analyses.example.example_query_cypherUntuk informasi lebih lanjut, silakan lihat di sini.
Bagian ini menjelaskan cara mengkonfigurasi dan menggunakan rahang untuk deteksi kerentanan, dan bagaimana menafsirkan output. Jaw berisi, antara lain, pertanyaan mandiri untuk mendeteksi CSRF sisi klien dan dom clobbering
Langkah 1. Aktifkan komponen analisis untuk kelas kerentanan dalam file input.yaml input:
request_hijacking :
enabled : true
# [...]
open_redirect :
enabled : false
# [...]
domclobbering :
enabled : false
# [...]
cs_csrf :
enabled : false
# [...]Langkah 2. Jalankan contoh pipa dengan:
$ python3 -m run_pipeline --conf=config.yaml Petunjuk. Anda dapat menjalankan beberapa instance pipa di bawah screen yang berbeda:
$ 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 '
$ # [...] Untuk menghasilkan file konfigurasi paralel secara otomatis, Anda dapat menggunakan skrip generate_config.py .
Output akan disimpan dalam file yang disebut sink.flows.out di folder yang sama dengan input. Untuk CSRF sisi klien, misalnya, untuk setiap permintaan HTTP terdeteksi, rahang menghasilkan entri yang menandai set jenis semantik (alias, tag semantik atau label) yang terkait dengan elemen yang membangun permintaan (yaitu, irisan program). Misalnya, permintaan HTTP yang ditandai dengan tipe semantik ['WIN.LOC'] dilupakan melalui window.location Titik injeksi lokasi. Namun, permintaan yang ditandai dengan ['NON-REACH'] tidak dilupakan.
Contoh entri output ditunjukkan di bawah ini:
[*] 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
Entri ini menunjukkan bahwa pada baris 29, ada ekspresi panggilan $.ajax , dan ekspresi panggilan ini memicu permintaan ajax dengan nilai template URL dari ajaxloc + "/bearer1234/ , di mana parameter ajaxloc adalah pemisahan program yang membaca nilainya di baris 6 dari window.location.href , dengan demikian dilupakan melalui ['WIN.LOC'] .
Untuk merampingkan proses pengujian untuk rahang dan memastikan bahwa pengaturan Anda akurat, kami menyediakan aplikasi web node.js sederhana yang dapat Anda uji dengan rahang.
Pertama, instal dependensi melalui:
$ cd tests/test-webapp
$ npm installKemudian, jalankan aplikasi di layar baru:
$ screen -dmS jawwebapp bash -c ' PORT=6789 npm run devstart; exec sh 'Untuk informasi lebih lanjut, kunjungi halaman wiki kami di sini. Di bawah ini adalah daftar isi untuk akses cepat.
Permintaan tarik selalu disambut. Proyek ini dimaksudkan untuk menjadi ruang yang aman dan ramah, dan kontributor diharapkan mematuhi kode perilaku kontributor.
Jika Anda menggunakan rahang untuk penelitian akademik, kami mendorong Anda untuk mengutip makalah berikut:
@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},
}
Jaw telah berjalan jauh dan kami ingin memberi kontributor kami teriakan yang layak di sini!
@tmbrbr, @c01gide, @jndre, dan sepehr mirzaei.