Mafalda Ferreira, Miguel Monteiro, Tiago Brito, Miguel E. Coimbra, Nuno Santos, Limin Jia และJosé Fragoso Santos 2024. การวิเคราะห์ช่องโหว่แบบคงที่อย่างมีประสิทธิภาพสำหรับ JavaScript ด้วยกราฟการพึ่งพาหลาย ๆ https://doi.org/xxxx
โฟลเดอร์การประเมินผลของสิ่งประดิษฐ์มีคำแนะนำและสคริปต์ที่จำเป็นทั้งหมดที่ใช้ในการทำซ้ำผลลัพธ์และตัวเลขจากกระดาษต้นฉบับ
| Mafalda Ferreira | José Fragoso Santos | filipe marques | Nuno Santos |
graph.js เป็นเครื่องสแกนช่องโหว่แบบสแตติกที่เชี่ยวชาญในการวิเคราะห์แพ็คเกจ NPM และตรวจจับช่องโหว่ของมลพิษและต้นแบบ
การไหลของการดำเนินการประกอบด้วยสองขั้นตอน: การสร้างกราฟ และ การสืบค้นกราฟ ในระยะแรกกราฟ. js สร้างกราฟการพึ่งพาหลาย ๆ รายการ (MDG) ของโปรแกรมที่จะวิเคราะห์ โครงสร้างข้อมูลที่ใช้กราฟนี้รวมอยู่ในการแสดงเดียวกันแผนผังนามธรรมแบบนามธรรมกราฟการไหลของการควบคุมและกราฟการพึ่งพาข้อมูล เฟสนี้มีสองเอาต์พุต:
ในระยะที่สองกราฟ js นำเข้ากราฟไปยังฐานข้อมูลกราฟ Neo4J และดำเนินการสืบค้นกราฟที่เขียนด้วย Cypher เพื่อจับรูปแบบรหัสที่มีช่องโหว่เช่นเส้นทางการพึ่งพาข้อมูลการเชื่อมต่อแหล่งที่ไม่น่าเชื่อถือกับ Sinks อันตราย
graph.js สร้างกราฟโดยใช้โหนดและใช้ neo4j เพื่อสอบถามกราฟ
มันสามารถดำเนินการในพื้นที่หรือในคอนเทนเนอร์ Docker (การตั้งค่าที่ง่ายขึ้นและมีประสิทธิภาพมากขึ้น)
สร้างคอนเทนเนอร์ Docker โดยเรียกใช้คำสั่ง:
docker build -t graphjs .
ตั้งค่าสภาพแวดล้อมท้องถิ่นโดยเรียกใช้คำสั่ง:
./setup.sh
graph.js จัดเตรียมอินเทอร์เฟซบรรทัดคำสั่ง เรียกใช้ด้วย -H สำหรับคำอธิบายสั้น ๆ
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.ในการเรียกใช้กราฟ js เรียกใช้คำสั่ง:
./graphjs_docker.sh -f < file_to_analyze > [options]graph.js จัดเตรียมอินเทอร์เฟซบรรทัดคำสั่ง เรียกใช้ด้วย -H สำหรับคำอธิบายสั้น ๆ
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.ในการเรียกใช้กราฟ 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)
กราฟรหัส 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
รหัสที่อ้างถึงอัลกอริทึมการก่อสร้าง MDG อยู่ใน src/traverse/dependency, where the file /การพึ่งพา _trackers.TS` มีกฎและโครงสร้างที่อ้างถึงในกระดาษ MDG มีจุดประสงค์เพื่อทั่วไปดังนั้นขั้นตอนการสร้างทั้งหมดสามารถปรับให้เข้ากับสถานการณ์ใหม่โดยการสร้างโหนดและขอบประเภทใหม่
รหัสสำหรับการสืบค้นอยู่ในโฟลเดอร์ graphjs/detection แบบสอบถามสามารถปรับแต่งได้ทั้งหมดดังนั้นจึงเป็นไปได้ไม่เพียง แต่แก้ไขการสืบค้นที่มีอยู่ แต่ยังเพื่อสร้างแบบสอบถามใหม่ที่ค้นหารูปแบบใหม่และแตกต่างกันในกราฟ
npm start -- -f < file_to_be_analyzed > [options]| คำอธิบาย | ธง | ค่าเริ่มต้น | ที่จำเป็น | กำหนดให้มี |
|---|---|---|---|---|
| ไฟล์ JavaScript ที่จะวิเคราะห์ | -f | - | ใช่ | - |
| ตำแหน่งของไฟล์กำหนดค่า | -c | '../config.json' | เลขที่ | - |
| ตำแหน่งของไฟล์ปกติ | -o | - | เลขที่ | - |
| ตำแหน่งของไดเรกทอรีเอาต์พุตกราฟ (ไฟล์ CSV และ SVG) | -g | 'src/graphs/' | เลขที่ | - |
| เอาต์พุตไฟล์กราฟ CSV | -CSV | เท็จ | เลขที่ | - |
| เอาต์พุตรูปกราฟ | --กราฟ | เท็จ | เลขที่ | - |
| ตั้งค่าอาร์เรย์ของโครงสร้างเพื่อละเว้นในรูปกราฟ | --i = [ast, cfg ... ] | - | เลขที่ | กราฟ |
| ตั้งค่าอาร์เรย์ของฟังก์ชั่นเพื่อละเว้นในรูปกราฟ | -ถ้า = [... ] | - | เลขที่ | กราฟ |
| แสดงรหัสในแต่ละคำสั่งในรูปกราฟ | -SC | เท็จ | เลขที่ | กราฟ |
| โหมดเงียบ (ไม่ใช่ verbose) | --เงียบ | เท็จ | เลขที่ | - |
การพัฒนาของกราฟ 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},
}
ในงานนี้เราได้พัฒนาต้นแบบของ Rulekeeper ซึ่งเป็นระบบการปฏิบัติตามนโยบาย GDPR-Aware สำหรับเฟรมเวิร์กเว็บ Rulekeeper ใช้ graph.js เพื่อตรวจสอบการมีข้อบกพร่องของ GDPR การปฏิบัติตาม 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},
}