يحتوي هذا المستودع على معظم رمز ورقة CCS'19: "Hidenoseek: تمويه جافا سكريبت ضار في Asts الحميدة" ، وهي:
يرجى ملاحظة أنه في حالته الحالية ، فإن الرمز هو POC وليس واجهة برمجة تطبيقات جاهزة للإنتاج بالكامل.
Hidenoseek هو هجوم مموه جديد وعامة ، والذي يغير بنيات عينات JavaScript الضارة لإعادة إنتاج بناء جملة حميدة موجود تمامًا. لهذا الغرض ، نعزز بشكل ثابت أشجار بناء الجملة المجردة (ASTS) من مدخلات JavaScript صالحة مع معلومات التحكم وتدفق البيانات. نشير إلى بنية البيانات الناتجة كرسوم بيانية للاعتماد على البرنامج (PDG). على وجه الخصوص ، يبحث Hidenoseek عن الرسوم الفرعية المتماثلة بين الملفات الخبيثة والمشاركة الحميدة. على وجه التحديد ، فإنه يحل محل الأطباق الفرعية الحميدة من خلال ما يعادلها (نفس التركيب النحوي) ويضبط تبعيات البيانات الحميدة-دون تغيير AST-بحيث يتم الاحتفاظ بالدلالات الخبيثة.
لأسباب أخلاقية ، قررنا نشر الكود الكامل لوحدة اختيار الاستنساخ لدينا ولا وحدة استبدال استنساخنا. لذلك ، يمكن استخدام هذه النسخة hidenoseek للكشف عن الحيوانات المستنسخة النحوية ، ولكن ليس لإعادة كتابتها .
install python3 # (tested with 3.6.7)
install nodejs # (tested with 8.10.0)
install npm # (tested with 3.5.2)
cd src
npm install escodegen # (tested with 1.9.1)
cd ..
Hidenoseek يعمل مباشرة على مستوى PDG. للكشف عن الحيوانات المستنسخة بين مجلدين JavaScript 2 ، يجب عليك إنشاء PDGs مسبقًا (راجع توليد PDGS) ومنحها كمدخلات إلى وظيفة src/samples_generation.replace_ast_df_folder .
لاكتشاف الحيوانات المستنسخة بين عينات JavaScript 2 ، يجب عليك إعطاء مسارات الملفات مباشرة كمدخلات إلى وظيفة src/samples_generation.replace_ast .
لإنشاء PDGs لملفات JS من المجلد المجلد ، قم بتشغيل أمر shell التالي من موقع مجلد src :
$ python3 -c "from pdgs_generation import store_pdg_folder; store_pdg_folder('FOLDER_NAME')"
سيتم تخزين PDGs المقابلة في Folder_Name/PDG.
لإنشاء PDG من واحد معطى ملف js input_file ، قم بتشغيل أوامر python3 التالية من موقع src :
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict())
لكل افتراضي ، لن يتم تخزين PDG المقابل. لتخزينه في مجلد PDG_Path موجود ، اتصل على:
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), store_pdgs='PDG_PATH')
لاحظ أنه بالنسبة لهذا الإصدار Hidenoseek ، أضفنا مهلة 60 ثانية لعملية توليد PDG (راجع السطر 83 من src/pdgs_generation.py ).
للعثور على الحيوانات المستنسخة بين PDGs الحميدة من المجلد المجلد_بينجنينيون والرسوم الخبيثة من src
$ python3 -c "from samples_generation import replace_ast_df_folder; replace_ast_df_folder('FOLDER_BENIGN_PDGS', 'FOLDER_MALICIOUS_PDGS')"
لكل PDG ضار ، سيتم إنشاء تحليل مجلد PDG_NAME في Folder_Malicious_PDGS. لكل تحليل PDG الحميد ، سيحتوي على ملف JSON (تنسيق الاسم: requin_malicious.json) ، الذي يلخص النتائج الرئيسية ، مثل العقد المتطابقة ، ونسبة العقد المتطابقة ، صخور متباينة ، معايير مختلفة ...
بالإضافة إلى ذلك ، نعرض في stdout الكود الحميد والضارة من الحيوانات المستنسخة المبلغ عنها. يمكن تعطيل ذلك ، على سبيل المثال ، للمعالجة المتعددة ، من خلال التعليق على خط print_clones السطر 153 من src/samples_generation.py .
للعثور على الحيوانات المستنسخة بين ملف JS الحميد الحميد requens_js و One Salicious_JS ، قم بتشغيل أوامر Python3 التالية من موقع مجلد src :
>>> from samples_generation import replace_ast
>>> replace_ast('BENIGN_JS', 'MALICIOUS_JS')
المخرجات ، من حيث ملف JSON وعلى stdout ، هي سابقا.
src/pdgs_generation.store_pdg_folder و src/samples_generation.replace_ast_df_folder متوازية تمامًا. في كلتا الحالتين ، نستخدم حاليًا وحدة المعالجة المركزية واحدة ، ولكن يمكنك تغيير ذلك عن طريق تعديل Fariable Num_workers من src/utility_df.py . إذا كنت تستخدم أكثر من وحدة المعالجة المركزية 1 ، فيجب عليك التعليق على المكالمة ل print_clones السطر 153 من src/samples_generation.py .
يحتوي example/Benign-example example.js مثال حميد من ورقتنا ، في حين أن example/Malicious-seed/seed.js هو البذور الضارة من ورقتنا.
للكشف عن الحيوانات المستنسخة بين هذين الملفين ، قم بتشغيل أوامر Python3 التالية من موقع مجلد src :
>>> from samples_generation import replace_ast
>>> replace_ast('../example/Benign-example/example.js', '../example/Malicious-seed/seed.js')
ستحصل على الإخراج التالي على stdout:
INFO:Successfully selected 2 clones in XXXs
==============
[<node.Node object at XXX>, <node.Node object at XXX>]
obj.setAttribute('type', 'application/x-shockwave-flash');
obj = document.createElement('object');
[<node.Node object at XXX>, <node.Node object at XXX>]
wscript.run('cmd.exe /c "<malicious powershell>;"', '0');
wscript = WScript.CreateObject('WScript.Shell');
--
[<node.Node object at XXX>, <node.Node object at XXX>]
obj.setAttribute('tabindex', '-1');
obj = document.createElement('object');
[<node.Node object at XXX>, <node.Node object at XXX>]
wscript.run('cmd.exe /c "<malicious powershell>;"', '0');
wscript = WScript.CreateObject('WScript.Shell');
--
==============
INFO:Could find 100.0% of the malicious nodes in the benign AST
وجدت أدائنا 2 استنساخ (في كل مرة تتكون من 2 عبارات). وهذا يعني أنه يمكن إعادة كتابة البذور الخبيثة بأكملها بطريقتين مختلفتين في المثال الحميد.
بالإضافة إلى ذلك ، تم إنشاء example/Malicious-seed/seed-analysis/example_seed.json ، الذي يحتوي على معلومات استنساخ إضافية.
إذا كنت تستخدم Hidenoseek للبحث الأكاديمي ، فأنت نشجعك بشدة على الاستشهاد بالورقة التالية:
@inproceedings{fass2019hidenoseek,
author="Fass, Aurore and Backes, Michael and Stock, Ben",
title="{textsc{HideNoSeek}: Camouflaging Malicious JavaScript in Benign ASTs}",
booktitle="ACM CCS",
year="2019"
}
في مجال البرامج الضارة ، أصبحت الأنظمة القائمة على التعلم شائعة للكشف عن المتغيرات الضارة الجديدة. ومع ذلك ، فإن المهاجمين الذين لديهم معرفة محددة وداخلية للنظام المستهدف قد يكونون قادرين على إنتاج عينات من الإدخال التي تم تصنيفها. في الممارسة العملية ، فإن افتراض المهاجمين الأقوياء ليس واقعيًا لأنه يعني الوصول إلى المعلومات الداخلية. بدلاً من ذلك ، نقترح Hidenoseek ، وهو هجوم مموه جديد وعامة ، والذي يتهرب من فئة الكاشفات بأكملها على أساس الميزات النحوية ، دون الحاجة إلى أي معلومات حول النظام الذي تحاول التهرب منه. يتكون هجومنا من تغيير بنيات عينات JavaScript الضارة لإعادة إنتاج بناء جملة حميدة.
لهذا الغرض ، نعيد كتابة أشجار بناء الجملة المجردة تلقائيًا (ASTS) من مدخلات JavaScript الضارة في تلك الحميدة الموجودة. على وجه الخصوص ، يستخدم Hidenoseek البذور الخبيثة وعمليات البحث عن الخراطيم الفرعية المتماثلة بين البذور والبرامج النصية الحميدة التقليدية. على وجه التحديد ، يحل محل الأطباق الفرعية الحميدة من خلال مكافئاتها الخبيثة (نفس التركيب النحوي) وضبط تبعيات البيانات الحميدة-دون تغيير AST-، بحيث يتم الاحتفاظ بالدلالات الخبيثة. في الممارسة العملية ، استفدنا من 23 بذرة ضارة لتوليد 91،020 نصوصًا خبيثة ، والتي تُعيد إنتاج ASTS من أفضل 10،000 صفحة ويب من Alexa. أيضًا ، يمكننا أن ننتج في المتوسط 14 عينة ضارة مختلفة مع نفس AST مثل كل Alexa Top 10.
بشكل عام ، يحتوي المصنف المعتاد المدربين على 99.98 ٪ من السلبيات الخاطئة مع مدخلات Hidenoseek ، في حين أن المصنف المدرب على هذه العينات لديه أكثر من 88.74 ٪ من الإيجابيات الخاطئة ، مما يجعل الكشفات الثابتة المستهدفة غير موثوقة.
تم ترخيص هذا المشروع بموجب شروط ترخيص AGPL3 ، والذي يمكنك العثور عليه في LICENSE .