Mafalda Ferreira ، Miguel Monteiro ، Tiago Brito ، Miguel E. Coimbra ، Nuno Santos ، Limin Jia ، and José Fragoso Santos. 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 واجهة سطر الأوامر. قم بتشغيله مع -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.لتشغيل Graph.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.لتشغيل 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
يقع الرمز الذي يشير إلى خوارزمية بناء MDG في src/traverse/dependency, where the file /REPENCELENT_TRACKERS.TS` على القواعد والهياكل المشار إليها في الورقة. يهدف MDG إلى أن تكون عامة ، لذلك يمكن تكييف جميع خطوات البناء مع سيناريوهات جديدة من خلال إنشاء أنواع جديدة من العقد والحواف.
يقع رمز الاستعلامات في مجلد graphjs/detection . الاستعلامات قابلة للتخصيص بالكامل ، لذلك ، لا يمكن تعديل الاستعلامات الحالية فحسب ، بل أيضًا لإنشاء استعلامات جديدة تبحث عن أنماط جديدة ومختلفة في الرسم البياني.
npm start -- -f < file_to_be_analyzed > [options]| وصف | علَم | تقصير | مطلوب | يتطلب |
|---|---|---|---|---|
| يتم تحليل ملف JavaScript | -f | - | نعم | - |
| موقع ملف التكوين | -C | '../config.json " | لا | - |
| موقع الملف الطبيعي | -أ | - | لا | - |
| موقع دليل إخراج الرسم البياني (ملفات CSV و SVG) | -ج | 'SRC/الرسوم البيانية/' | لا | - |
| إخراج ملفات الرسم البياني CSV | -CSV | خطأ شنيع | لا | - |
| إخراج الرقم الرسم البياني | -الرسم | خطأ شنيع | لا | - |
| مجموعة مجموعة من الهياكل لتجاهلها في الشكل الرسم البياني | -i = [AST ، CFG ...] | [] | لا | رسم بياني |
| تعيين مجموعة من الوظائف لتجاهلها في شخصية الرسم البياني | -if = [...] | [] | لا | رسم بياني |
| اعرض الرمز في كل عبارة في رقم الرسم البياني | -SC | خطأ شنيع | لا | رسم بياني |
| الوضع الصامت (وليس مطوّل) | -صامت | خطأ شنيع | لا | - |
يتعلق تطوير Graph.js بأبحاث إضافية تؤديها هذه المجموعة.
يشتمل هذا العمل على دراسة تجريبية لأدوات تحليل التعليمات البرمجية الثابتة للكشف عن نقاط الضعف في رمز Node.js. أنشأنا مجموعة بيانات منسقة من 957 Node.JS Code Code ، تتميز وشرح بتحليل المعلومات الواردة في التقارير الاستشارية 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},
}
في هذا العمل ، قمنا بتطوير نموذج أولي من حارس المساعد ، وهو نظام امتثال لسياسة إجمالي الناتج المحلي الإجمالي لأطر الويب. يستخدم حارس المسطة Graph.js للتحقق تلقائيًا من وجود أخطاء امتثال الناتج المحلي الإجمالي في خوادم 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},
}