يحتوي هذا المستودع على رمز ورقة ACSAC'19: "JSTAP: مرشح ثابت قبل الكشف عن جافا سكريبت الضار".
يرجى ملاحظة أنه في حالته الحالية ، فإن الرمز هو POC وليس واجهة برمجة تطبيقات جاهزة للإنتاج بالكامل.
JSTAP هو نظام اكتشاف جافا سكريبت ضار ثابت. يتكون الكاشف الخاص بنا من عشر وحدات ، بما في ذلك خمس طرق مختلفة لتجريد الكود (وهي الرموز الرموز ، وشجرة بناء الجملة المجردة (AST) ، ورسم التحكم في تدفق التحكم (CFG) ، ورسم بياني تبعية للبرنامج مع الأخذ في الاعتبار تدفق البيانات (PDG-DFG) ، و PDG) ، وطريقتين لاستخراج ميزات الميزات (الجودة N-Grams ، أو قيم الهوية). بناءً على تواتر هذه الأنماط المحددة ، نقوم بتدريب مصنف الغابات العشوائي لكل وحدة.
install python3 version 3.6.7
install python3-pip # (tested with 9.0.1)
pip3 install -r requirements.txt # (tested versions indicated in requirements.txt)
install nodejs # (tested with 8.10.0)
install npm # (tested with 3.5.2)
cd pdg_generation
npm install escodegen # (tested with 1.9.1)
cd ../classification
npm install esprima # (tested with 4.0.1)
cd ..
بالنسبة لتحليلات AST و CFG و PDG-DFG و PDG ، يجب عليك إنشاء PDGs للملفات المدروسة بشكل منفصل ومسبق. بعد ذلك ، أعط المجلد (المجلد) الذي يحتوي على PDGs كمدخلات للمتعلم أو المصنف (في حالة التحليل المستند إلى AST ، على سبيل المثال ، نستخدم فقط معلومات AST الموجودة في PDG). على عكس النهج القائم على الرمز المميز ، يجب عليك إعطاء المجلد مباشرة يحتوي على ملفات JS كمدخل للمتعلم/المصنف.
لإنشاء PDGs لملفات JS (.js) من المجلد المجلد ، قم بتشغيل أمر shell التالي من موقع مجلد pdg_generation :
$ python3 -c "from pdgs_generation import *; store_pdg_folder('FOLDER_NAME')"
سيتم تخزين PDGs المقابلة في Folder_Name/Analysis/PDG.
حاليًا ، نستخدم 2 وحدات المعالجة المركزية لعملية توليد PDGS ؛ يمكن تغيير ذلك عن طريق تعديل المتغير num_workers من pdg_generation/utility_df.py.
لإنشاء نموذج من المجلدات الحميدة والضارة ، التي تحتوي على ملفات JS (للتحليل المستند إلى الرمز المميز) أو PDGs (للتحليلات الأخرى) ، استخدم الخيار-D حميدة ضارة وأضف الحقيقة الأرضية المقابلة مع-L الحميدة الخبيثة.
حدد الميزات التي تظهر في مجموعة التدريب مع CHI2 على 2 من مجموعات بيانات مستقلة:-VD الحميد التحقق من التحقق من الصحة الضارة مع الحقيقة المقابلة لها-VL حميدة خبيثة.
أشر إلى مستوى التحليل الخاص بك مع-المستوى متبوعًا إما "الرموز المميزة" أو "AST" أو "CFG" أو "PDG-DFG" أو "PDG".
تشير إلى الميزات التي يجب أن يستخدمها التحليل مع -الميزات التي تليها إما "ngrams" ، "القيمة". يمكنك اختيار مكان تخزين الميزات التي تم تحديدها بواسطة CHI2 مع -Analysis_Path (الافتراضي JSTAP/تحليل).
يمكنك اختيار اسم النموذج مع -MN (الافتراضي كونه "نموذج") ودليله مع -MD (الافتراضي JSTAP/تحليل).
$ python3 learner.py --d BENIGN/ MALICIOUS/ --l benign malicious --vd BENIGN-VALIDATE/ MALICIOUS-VALIDATE/ --vl benign malicious --level LEVEL --features FEATURES --mn FEATURES_LEVEL
هذه العملية مماثلة لعملية التصنيف.
لتصنيف عينات JS من المجلدات الحميدة 2 و Salicious2 ، استخدم الخيار -D qualign2 salicious2. لتحميل Model Model Features_level لاستخدامها في عملية التصنيف ، استخدم الخيار -METTRATIONS_LEVEL. احتفظ بنفس مستوى التحليل وميزات تدريب المصنف:
$ python3 classifier.py --d BENIGN2/ MALICIOUS2/ --level LEVEL --features FEATURES --m FEATURES_LEVEL
إذا كنت تعرف الحقيقة الأرضية للعينات التي تصنفها وترغب في تقييم دقة المصنف الخاص بك ، فاستخدم الخيار -L مع الحقيقة الأساسية المقابلة:
$ python3 classifier.py --d BENIGN2 MALICIOUS2 --l benign malicious --level LEVEL --features FEATURES --m FEATURES_LEVEL
حاليًا ، نستخدم 2 وحدات المعالجة المركزية لعمليات التعلم والتصنيف ؛ يمكن تغيير ذلك عن طريق تعديل المتغير num_workers من التصنيف/الأداة المساعدة.
لإنشاء تمثيلات رسومية لـ AST (Save_Path_AST) ، CFG (save_path_cfg) ، و/أو PDG (save_path_pdg) من واحد معطى ملف JS input_file ، نقوم بالاستفادة من مكتبة GraphViz.
لتثبيت GraphViz:
pip3 install graphviz
On MacOS: install brew and then brew install graphviz
On Linux: install graphviz
قم بتشغيل أوامر Python3 التالية من موقع مجلد pdg_generation وأشار إلى الاسم الذي تحت تخزين الرسم البياني (S):
>>> from pdgs_generation import *
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), save_path_ast='ast', save_path_cfg='cfg', save_path_pdg='pdg')
احذر ، قد يرمي GraphViz خطأ عندما تصبح الرسوم البيانية كبيرة جدًا.
لعرض الرسوم البيانية فقط دون تخزينها ، استخدم القيمة "لا شيء". خلاف ذلك و PER الافتراضي ، القيمة خاطئة.
ملاحظة: لكل افتراضي ، لن يتم تخزين PDG المقابل. لتخزينه في مجلد pdg_path موجود ، أضف المعلمة store_pdgs='PDG_PATH' إلى الأمر السابق.
إذا كنت تستخدم JSTAP للبحث الأكاديمي ، فأنت نشجعك بشدة على الاستشهاد بالورقة التالية:
@inproceedings{fass2019jstap,
author="Fass, Aurore and Backes, Michael and Stock, Ben",
title="{textsc{JStap}: A Static Pre-Filter for Malicious JavaScript Detection}",
booktitle="Proceedings of the Annual Computer Security Applications Conference~(ACSAC)",
year="2019"
}
بالنظر إلى نجاح منصة الويب ، فقد أساء المهاجمون لغة البرمجة الرئيسية ، وهي JavaScript ، لتركيب أنواع مختلفة من الهجمات على ضحاياهم. نظرًا للحجم الكبير من هذه البرامج النصية الخبيثة ، تعتمد أنظمة الكشف على التحليلات الثابتة لمعالجة الغالبية العظمى من العينات بسرعة. هذه الأساليب الثابتة ليست معصومة على الرغم من أنها تؤدي إلى سوء التصنيف. كما أنها تفتقر إلى المعلومات الدلالية لتجاوز الأساليب النحوية البحتة. في هذه الورقة ، نقترح JSTAP ، نظام اكتشاف JavaScript الثابت المعياري ، والذي يمتد قدرة الكشف عن خطوط الأنابيب المعجمية والمعجمية القائمة على AST من خلال الاستفادة من معلومات التحكم وتدفق البيانات. يتكون كاشفنا من عشر وحدات ، بما في ذلك خمس طرق مختلفة لاستخلاص التعليمات البرمجية ، مع مستويات مختلفة من السياق والمعلومات الدلالية ، وطريقتين لاستخراج الميزات. بناءً على تواتر هذه الأنماط المحددة ، نقوم بتدريب مصنف الغابات العشوائي لكل وحدة.
في الممارسة العملية ، يتفوق JSTAP على الأنظمة الحالية ، والتي قمنا بتنفيذ واختبارها على مجموعة البيانات التي بلغ مجموعها أكثر من 270،000 عينة. لتحسين الكشف ، نحن أيضًا نجمع بين تنبؤات عدة وحدات. تصنف الطبقة الأولى من التصويت بالإجماع 93 ٪ من مجموعة البيانات الخاصة بنا بدقة 99.73 ٪ ، في حين أن مجموعة ثانية قائمة على الطبقة البديلة-تتسم بنسبة 6.5 ٪ أخرى من مجموعة البيانات الأولية مع دقة تزيد عن 99 ٪. وبهذه الطريقة ، يمكن استخدام JSTAP كمرشح دقيق قبل ، مما يعني أنه لن يحتاج إلا إلى إعادة توجيه أقل من 1 ٪ من العينات إلى تحليلات إضافية. من أجل الاستنساخ وقابلية النشر المباشرة لوحداتنا ، نجعل نظامنا متاحًا للجمهور.
تم ترخيص هذا المشروع بموجب شروط ترخيص AGPL3 الذي يمكنك العثور عليه في LICENSE .