Mafalda Ferreira, Miguel Monteiro, Tiago Brito, Miguel E. Coimbra, Nuno Santos, Limin Jia, dan José Fragoso Santos. 2024. Analisis kerentanan statis yang efisien untuk JavaScript dengan grafik ketergantungan multion. https://doi.org/xxxx
Folder evaluasi artefak berisi semua instruksi dan skrip yang diperlukan yang digunakan untuk mereproduksi hasil dan angka -angka dari kertas asli.
| Mafalda Ferreira | José Fragoso Santos | Filipe Marques | Nuno Santos |
Graph.js adalah pemindai kerentanan statis yang berspesialisasi dalam menganalisis paket NPM dan mendeteksi kerentanan polusi gaya dan prototipe noda.
Aliran eksekusi terdiri dari dua fase: konstruksi grafik dan kueri grafik . Pada fase pertama, Graph.js membangun grafik ketergantungan multigerion (MDG) dari program yang akan dianalisis. Struktur data berbasis grafik ini menyatu menjadi representasi yang sama dengan pohon sintaks abstrak, grafik aliran kontrol, dan grafik ketergantungan data. Fase ini memiliki dua output:
Pada fase kedua, Graph.js mengimpor grafik ke database grafik NEO4J, dan menjalankan kueri grafik, ditulis dalam cypher, untuk menangkap pola kode yang rentan, misalnya jalur ketergantungan data yang menghubungkan sumber yang tidak dapat diandalkan ke wastafel berbahaya.
Graph.js menghasilkan grafik menggunakan node dan menggunakan neo4j untuk menanyakan grafik.
Ini dapat dieksekusi secara lokal, atau dalam wadah Docker (pengaturan yang lebih mudah dan lebih kuat).
Bangun wadah Docker dengan menjalankan perintah:
docker build -t graphjs .
Siapkan lingkungan lokal dengan menjalankan perintah:
./setup.sh
Graph.js menyediakan antarmuka baris perintah. Jalankan dengan -h untuk deskripsi singkat.
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.Untuk menjalankan Graph.js, jalankan perintah:
./graphjs_docker.sh -f < file_to_analyze > [options]Graph.js menyediakan antarmuka baris perintah. Jalankan dengan -h untuk deskripsi singkat.
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.Untuk menjalankan Graph.js, jalankan perintah:
python3 graphjs.py -f < file_to_analyze > [options]Secara default, semua hasil disimpan dalam folder GraphJS-RESULTS , di akar proyek, dengan struktur berikut:
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 dirancang untuk memungkinkan penggunaan langsung oleh orang lain, dan dapat dengan mudah diadaptasi untuk mengakomodasi skenario baru. Seperti yang dijelaskan sebelumnya, Graph.js terdiri dari dua fase: konstruksi grafik dan kueri grafik. Kode konstruksi grafik terletak di folder graphjs/parser/src , dan file yang paling relevan diatur sebagai berikut:
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
Kode yang mengacu pada algoritma konstruksi MDG terletak di src/traverse/dependency, where the file /dependency_trackers.ts` berisi aturan dan struktur yang dirujuk dalam makalah. MDG dimaksudkan untuk menjadi generik, sehingga semua langkah bangunan dapat disesuaikan dengan skenario baru dengan membuat jenis node dan tepi baru.
Kode untuk kueri berada di folder graphjs/detection . Kueri sepenuhnya dapat disesuaikan, jadi, dimungkinkan tidak hanya memodifikasi kueri yang ada tetapi juga untuk membuat kueri baru yang mencari pola baru dan berbeda dalam grafik.
npm start -- -f < file_to_be_analyzed > [options]| Keterangan | Bendera | Bawaan | Diperlukan | Memerlukan |
|---|---|---|---|---|
| File javascript yang akan dianalisis | -F | - | Ya | - |
| Lokasi file konfigurasi | -C | '../config.json' | TIDAK | - |
| Lokasi file yang dinormalisasi | -Hai | - | TIDAK | - |
| Lokasi Direktori Output Grafik (file CSV dan SVG) | -G | 'src/grafik/' | TIDAK | - |
| Keluaran file csv grafik | --CSV | PALSU | TIDAK | - |
| Output gambar grafik | --grafik | PALSU | TIDAK | - |
| Atur array struktur untuk diabaikan dalam gambar grafik | --i = [ast, cfg ...] | [] | TIDAK | grafik |
| Atur array fungsi untuk diabaikan dalam gambar grafik | --Iff = [...] | [] | TIDAK | grafik |
| Tunjukkan kode di setiap pernyataan dalam gambar grafik | --sc | PALSU | TIDAK | grafik |
| Mode diam (tidak bertele -tele) | --diam | PALSU | TIDAK | - |
Pengembangan grafik.js berkaitan dengan penelitian tambahan yang dilakukan oleh grup ini.
Karya ini terdiri dari studi empiris alat analisis kode statis untuk mendeteksi kerentanan dalam kode node.js. Kami membuat dataset yang dikuratori dari 957 Node.js kerentanan kode, ditandai dan dianotasi dengan menganalisis informasi yang terkandung dalam laporan penasihat NPM .
Dataset tersedia di sini.
Publikasi yang terkait dengan karya ini adalah:
@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},
}
Dalam karya ini kami mengembangkan prototipe RuleKeeper, sistem kepatuhan kebijakan GDPR-sadar untuk kerangka kerja web. RuleKEEKSE menggunakan Graph.js untuk secara otomatis memeriksa keberadaan bug kepatuhan GDPR di server Node.js.
Prototipe tersedia di sini.
Publikasi yang terkait dengan karya ini adalah:
@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},
}