مجموعة أدوات العلاقة والتحقيق في الكود المستند إلى مينهاش (MCRIT)
MCRIT هو إطار عمل تم إنشاؤه لتبسيط تطبيق خوارزمية Minhash في سياق تشابه الكود. يمكن استخدامه لتنفيذ "shinglers" بسرعة ، أي طرق تشفر خصائص الوظائف المفككة ، لاستخدامها بعد ذلك لتقدير التشابه عبر خوارزمية Minhash. تم تصميمه للعمل مع تقارير التفكيك المنبعثة من قبل SMDA.
الاستخدام
الاستخدام المقيد
نوصي بشدة باستخدام Docker-mcrit المعبأة بالكامل للنشر التافهة والاستخدام.
أولاً وقبل كل شيء ، سيضمن ذلك أن يكون لديك إصدارات متوافقة تمامًا عبر جميع المكونات ، بما في ذلك قاعدة بيانات للمثابرة وواجهة ويب للتفاعل المريح.
الاستخدام المستقل
سيتطلب تثبيت MCRIT من تلقاء نفسه بعض الخطوات الأخرى.
بالنسبة لما يلي ، نفترض أن أوبونتو كنظام تشغيل مضيف.
يتم سرد متطلبات تثبيت Python في requirements.txt ويمكن تثبيتها باستخدام:
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
بشكل افتراضي ، يتم استخدام MongoDB 5.0 كواجهة خلفية ، وهو أيضًا الوضع الموصى به للتشغيل لأنه يوفر تخزين بيانات مستمر. تحدد الأوامر التالية تثبيت مثال على Ubuntu:
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
عند القيام بالتثبيت المستقل ، ربما ترغب في تثبيت وحدة MCRIT استنادًا إلى المستودع المستنسخ ، مثل ذلك:
بعد هذا التثبيت الأولي وإذا رغبت في ذلك ، يمكن استخدام MCRIT بدون اتصال بالإنترنت.
عملية
يتم تقسيم الواجهة الخلفية MCRIT عمومًا إلى مكونين ، وخادم يوفر واجهة API للعمل مع واحد أو أكثر من العمال الذين يقومون بمعالجة الوظائف في قائمة الانتظار. يمكن أن تبدأ في قذائف منفصلة باستخدام:
و
بشكل افتراضي ، سيستمع خادم REST API على http://127.0.0.1:8000/.
تفاعل
بغض النظر عن اختيارك للتثبيت ، بمجرد تشغيلك ، يمكنك التفاعل مع الواجهة الخلفية MCRIT.
عميل mcrit
لقد أنشأنا وحدة عميل Python قادرة على العمل مع جميع نقاط النهاية المتاحة للخادم.
الوثائق الخاصة بوحدة العميل هذه قيد التطوير حاليًا.
mcrit cli
يوجد أيضًا CLI يعتمد على حزمة العميل هذه ، أمثلة:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions تتوفر وثائق أكثر شمولاً لـ MCRIT CLI هنا
McRit IDA البرنامج المساعد
المكون الإضافي IDA هو أيضًا قيد التطوير حاليًا. لاستخدامه ، قم أولاً بإنشاء config.py وقم بإجراء التغييرات المطلوبة اعتمادًا على نشر مثيل MCRIT الخاص بك:
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
ثم ببساطة تشغيل البرنامج النصي الموجود في
./plugins/ida/ida_mcrit.py
في IDA.
البيانات المرجعية
في يوليو 2023 ، بدأنا في ملء مستودع github الذي يحتوي على بيانات مرجعية جاهزة للاستخدام للمجموعات المترجمة والمكتبات الشائعة.
تاريخ الإصدار
- 2024-06-20 v1.3.17: حذف الوظائف والتنظيف أصبحت الآن أكثر قوة ولن تطهير العينات عن غير قصد - yankovs - thx !!
- 2024-05-10 V1.3.16: تم توسيع تنظيف قائمة الانتظار لتطهير الملفات التي تم تحميلها خلال جميع أنواع الاستعلامات الثلاثة (تم تعيينها ، غير مُعين ، SMDA).
- 2024-04-17 V1.3.15: سيقوم عمال
spawningworker نوع العمال الآن بإنهاء الأطفال بعد Queueconfig.queue_spawningworker_children_timeout Seconds. - 2024-04-02 V1.3.14: التجريبية: إدخال عمل
spawningworker من نوع العامل الجديد-سوف يستهلك هذا البديل وظائف من قائمة الانتظار كالمعتاد ولكنه يؤجل تنفيذ الوظائف الفعلي إلى عملية منفصلة (فرعية) ، والتي يجب أن تقلل من المشكلات مع مخصصات الذاكرة المقفلة. - 2024-04-02 V1.3.13: عند تنظيف قائمة الانتظار ، حذف الآن جميع الوظائف الفاشلة yankovs-THX !!
- 2024-03-06 V1.3.12: تم إصلاح خطأ حيث تؤدي حماية العينات الحديثة من تنظيف قائمة الانتظار إلى أخطاء رئيسية كما ذكرت yankovs-THX !!
- 2024-02-21 V1.3.10: Bump SMDA إلى 1.13.16 ، والذي يغطي 200 تعليمات أخرى في فئة أفضل هربًا (تؤثر على Minhashes).
- 2024-02-16 V1.3.9: ميزة تنظيف قائمة الانتظار التلقائية المدمجة والمتكاملة (معطل بشكل افتراضي) المقترحة من قبل Yankovs-THX !!
- 2024-02-15 V1.3.8: Bump SMDA لمعالجة المشكلات مع التعرف على الإصدار في SMDAFUNCTION ، يطبع الاستثناء الثابت في MCRITINTERFACE's Plugin (thx to malwarefrank !!).
- 2024-02-12 V1.3.5: سيظهر إعادة حساب minhashes الآن النسب المئوية الصحيحة (thx إلى malwarefrank !!).
- 2024-02-02 V1.3.4: إصلاح صغير في المكون الإضافي IDA لتجنب الرجوع إلى كائن يحتمل أن يكون غير مهذب (THX إلى @R0NY123 !!).
- 2024-02-01 V1.3.2: الإصلاح: المطابقة غير المسببة لم يخرج الآن تنسيق البيانات نفسه (thx إلى dannyquist !!).
- 2024-01-30 V1.3.1: أصبح الاتصال بـ MongoDB قابلاً للتكوين بالكامل (thx to dannyquist !!).
- 2024-01-24 V1.3.0: Breaking: الإصدار البارز مع تحسينات الفهرسة لـ Pichash و Minhash. لضمان التوافق الكامل للخلف ، يوصى بإعادة حساب جميع التجزئة. تحقق من دليل الترحيل هذا.
- 2024-01-23 V1.2.26: تثبيت LIEF إلى 0.13.2 من أجل التأكد من أن SMDA المثبتة تظل متوافقة.
- 2024-01-09 V1.2.25: تأكد من أننا نتمكن من تقديم حالة النظام بغض النظر عما إذا كان هناك
db_state و db_timestamp أم لا. - 2024-01-05 V1.2.24: دعم الآن وسيطة "الاستعلام" في CLI ، وكذلك مضغوط مطابقة (بدون معلومات مطابقة الوظيفة) لتقليل بصمة الملف.
- 2024-01-03 V1.2.23: الحد الأقصى لحجم التصدير لحماية النظام من حوادث OOM.
- 2024-01-02 V1.2.22: فئة البيانات المقدمة لـ FreefileBlockSressult مع وظائف الراحة.
- 2023-12-28 V1.2.21: يقوم McRitclient الآن بالمرور لمطابقة الاستعلام الثنائي.
- 2023-12-28 V1.2.20: توفر الحالة الآن الطابع الزمني لتحديث DB الأخير.
- 2023-12-13 V1.2.18: تم تمرير الحدود مقابل العينة _ids التي تم تمريرها إلى getUniqueBlocks.
- 2023-12-05 V1.2.15: إضافة وظائف الراحة إلى كائنات الوظائف ، رقم الإصدار محاذاة مع MCRITWEB.
- 2023-11-24 V1.2.11: تم تثبيت SMDA على الإصدار 1.12.7 قبل ترقية SMDA ونقدم ترحيل قاعدة البيانات لإعادة حساب تجزئة PIC + Picblock مع التعميم المحسن.
- 2023-11-17 V1.2.10: القدرة المضافة على تعيين رمز تفويض للخادم عبر حقل الرأس:
apitoken ؛ إضافة القدرة على التصفية حسب المجموعات الوظيفية ؛ إضافة القدرة على فشل الوظائف اليتيمة. - 2023-10-17 V1.2.8: إصلاح بسيط في مجموعات الوظائف.
- 2023-10-16 V1.2.6: إحصاءات قائمة انتظار ملخصة ، تصنيف الوظائف المكررة.
- 2023-10-13 V1.2.4: قائمة الانتظار/الوظيفة المكشوفة إلى واجهة الراحة ، وتحسين سرعة الاستعلام لمختلف عمليات البحث عن قائمة الانتظار عبر فهرسة واستعلامات MongoDB المعلمة.
- 2023-10-13 V1.2.3: سيقوم العمال الآن بإلغاء التسجيل من الوظائف قيد التقدم في حالة تعطلها (THX إلى Yankovs لقالب الكود).
- 2023-10-03 V1.2.2: تصفية MatchingResult لعينات Min/Max NUM (بما في ذلك الإصلاح).
- 2023-10-02 V1.2.0: الإصدار المعلم لنشرة الفيروس 2023.
- 2023-09-18 V1.1.7: Bugfix: مطابقة المهام مع 0 نطاقات تنشط الآن Minhash مطابقة كما كان من المفترض أن تكون من قبل. أيضا مطابقة النسبة المئوية للتقدم في الوظيفة.
- 2023-09-15 v1.1.6: bugfix في blockmatching ، وظيفة الراحة للتفاعل مع كائنات الوظيفة.
- 2023-09-14 V1.1.5: إلغاء تنشيط Gunicorn كمعالج WSGI افتراضي في الوقت الحالي بسبب المشكلات المتعلقة بالمكالمات غير الموقرة عند التعامل مع المكالمات الثقيلة.
- 2023-09-14 v1.1.4: bugfix: إضافة
requirements.txt txt إلى data_files في setup.py لضمان توفرها للحزمة. - 2023-09-13 V1.1.3: استخرجت بعض الثوابت الهامة في الأداء في المعلمات القابلة للتكوين في MinhashConfig و StorageConfig ، التقارير المرحلية الثابتة للمطابقة المزجدة ، bugfix: استخدام GunicornConfig إلى لوحة البيانات المناسبة.
- 2023-09-13 v1.1.1: المتطلبات / الإعداد المبسطة ، مستبعدة
gunicorn للنوافذ (thx to yankovs !!). - 2023-09-12 v1.1.0: بالنسبة لنشر Linux ، تستخدم MCRIT الآن
gunicorn بدلاً من waitress كخادم WSGI بسبب أداء أفضل بكثير. نظرًا لأن Gunicorn يحتاج إلى تكوين خاص به ، فإن هذا يتطلب صدم الإصدارات الصغيرة (Thx to Yankovs !!). - 2023-09-08 V1.0.21: جميع طرق mcritclient الآن توجيه الأسماء/أسماء المستخدمين إلى الواجهة الخلفية.
- 2023-09-05 V1.0.20: استخدم مكتملين لتمثيل العناوين في العينة ، وظائف عند التخزين في MongoDB لمعالجة قيود BSON (THX إلى Yankovs).
- 2023-09-05 v1.0.19: تستخدم الإحصائيات الآن العدادات الداخلية التي تم إنشاؤها منذ فترة (thx إلى yankovs).
- 2023-08-30 v1.0.18: تسجيل وربط النتائج المكررة وتجميع النتائج عبر علاقة ICFG.
- 2023-08-24 V1.0.15: المحاولة الأولى المتكاملة لقدرة صيد الارتباط في MatchingResult.
- 2023-08-24 V1.0.13: لم تعد إعادة بناء فرق Minhash تنفجر استخدام RAM. تم إزالة عمليات فحص المسار الزائدة (THX إلى Yankovs).
- 2023-08-23 V1.0.12: أضاف القدرة على إعادة بناء نطاقات Minhash المستخدمة للفهرسة.
- 2023-08-22 v1.0.11: إصلاح خطأ عند استيراد البيانات بالجملة ، لم تتم إضافة
function_name أيضًا function_label . - 2023-08-11 V1.0.10: إصلاح خطأ حيث عند استيراد البيانات بالجملة ، لن يتم تعديل الدالة _id قبل إضافة minhashes إلى النطاقات ، وربما تؤدي إلى وظيفة غير موجودة.
- 2023-08-02 V1.0.9: يمكن الآن تصفية المكون الإضافي IDA بمقدار حجم الكتلة ودرجة Minhash ، والتخطيط المحسّن وتجربة المستخدم (THX للحصول على ردود الفعل إلى @R0NY123 !!)
- 2023-07-28 V1.0.8: يمكن الآن عرض IDA Plugin الرسوم البيانية الملونة للوظائف عن بُعد وإجراء استعلامات على picblockhashes (للكتل الأساسية) للوظيفة التي يتم عرضها حاليًا.
- 2023-06-06 V1.0.7: إمكانيات الترشيح الموسعة على MatchingResult.
- 2023-06-02 V1.0.6: يمكن الآن للمكون من IDA أن يتولى المهام الوظائف ، وإظهار نتائجها وعلامات استيراد الدُفعات. تنسيق المطابقة.
- 2023-05-22 V1.0.3: مزيد من المتانة للتحقق من المسار عند استخدام MCRIT CLI على مجلد Malpedia repo.
- 2023-05-12 v1.0.1: بعض التقدم في استيراد التسمية للمكون من IDA. انعكاس امتداد API من mcritweb في mcritclient.
- 2023-04-10 V1.0.0: إصدار معلم لـ Botconf 2023.
- 2023-04-10 V0.25.0: يمكن الآن القيام بمساعد IDA للاستعلامات للوظيفة للوظيفة التي تم عرضها حاليًا.
- 2023-03-24 V0.24.2: يمكن لـ McRitclient إعادة توجيه اسم المستخدم/Apitoken ، أصبح AddJsonReport قابلاً للتوجيه الآن.
- 2023-03-21 V0.24.0: يمكن للوظائف الآن تخزين الوظائف الإضافية للدالة ، على طول إرسال المستخدم/التاريخ.
- 2023-03-17 V0.23.0: أصبح من الممكن الآن الاستعلام عن مباريات smdafunctions الفردية (متزامنة).
- 2023-03-15 V0.22.0: يدعم McRitclient الآن Apitokens والاستجابات الخام لمجموعة فرعية من الوظائف.
- 2023-03-14 V0.21.0: دعم الواجهة الخلفية لمزيد من تصفية الحبيبات.
- 2023-03-13 V0.20.6: دعم الخلفية لتصفية العائلة/العينة من النتيجة في MatchResult.
- 2023-02-22 V0.20.4: Bugfix لحساب الدرجات الفريدة والوصول إلى هذه النتائج.
- 2023-02-21 V0.20.3: دعم إمكانيات الواجهة الأمامية مع عرض النتيجة.
- 2023-02-17 V0.20.2: كائن تقرير المطابقة الممتد لدعم تحسينات الواجهة الأمامية.
- 2023-02-14 V0.20.0: تم إصلاح عميل وحدة التحكم لتبسيط التفاعلات المستندة إلى الصدفة مع الواجهة الخلفية.
- 2023-01-12 V0.19.4: إمكانيات تصفية إضافية لـ MatchingResults.
- 2022-12-13 V0.19.1: أصبح من الممكن الآن أن تتطلب كميات محددة (أعلى) من مباريات النطاق للمرشحين (أي تقليل غموض المطابقة).
- 2022-12-13 V0.18.x: تمكين مطابقة معرفات الوظيفة التعسفية.
- 2022-11-25 V0.18.9: مطابقة الاستعلام المتسارع.
- 2022-11-18 V0.18.8: تعامل المنسق للحذف والتعديلات ، إصلاحات بسيطة.
- 2022-11-13 V0.18.7: حذف العينة المتسارع بشكل كبير.
- 2022-11-13 V0.18.6: وظيفة إضافية لتعديل معلومات العينة والأسرة الحالية.
- 2022-11-11 V0.18.2: ترقية إجراء المطابقة ، يجب أن يكون الآن قادرًا على التعامل مع الثنائيات الكبيرة بشكل أكثر قوة وكفاءة.
- 2022-11-03 V0.18.1: إصلاحات صغيرة.
- 2022-11-03 V0.18.0: العزلة الفريدة من نوعها تنشئ أيضًا اقتراحًا لقاعدة YARA ، التي تم إعادة هيكلتها.
- 2022-10-24 V0.17.4: setup.py المنسق مع المتطلبات ، وتحسين كفاءة الذاكرة لمعالجة الوظائف المتقاطعة.
- 2022-10-18 V0.17.3: أضاف نصًا مريحًا لإنتاج تقارير SMDA بشكل متكرر من مجلد شبه منظم.
- 2022-10-13 V0.17.2: مشكلات OOM المحتملة الثابتة أثناء حساب Minhash عن طريق معالجة وظائف ليتم تجزئها في دفعات أصغر.
- 2022-10-12 V0.17.1: أضيفت وظيفة لتحديد موعد وظيفة من شأنها أن تضمن حساب Minhashes لجميع العينات/الوظائف.
- 2022-10-11 V0.17.0: أصبح البحث عن كتل فريدة الآن مهمة غير رسمية من خلال العامل.
- 2022-10-11 V0.16.0: سيتم الآن تخزين عينات من وظائف Matchquery مع عينة/وظائفهم للسماح بتحسين معالجة ما بعد.
- 2022-10-04 V0.15.4: يمكن للخادم الآن عرض نسخته.
- 2022-09-28 V0.15.3: معالجة مشكلات الأداء للحالات الأكبر ، وتوليد تسلسل تعليمات نار للكتل الفريدة.
- 2022-09-26 V0.15.0: بدأ Crossjobs الآن في الواجهة الخلفية ، في توفير وظائف لتحديد الكتل الأساسية الفريدة في العينات.
- 2022-08-29 V0.14.2: إصلاحات صغيرة للنشر.
- 2022-08-22 V0.14.0: يمكن أن تعتمد الوظائف الآن على وظائف أخرى (التحضير لنقل Crossjobs إلى الخلفية) ، وتحسينات QoL في التعامل مع الوظائف.
- 2022-08-17 V0.13.1: خيار سطر الأوامر المضافة للتوصيف (يتطلب cprofile).
- 2022-08-09 V0.13.0: يمكن الآن القيام باستعلامات مباشرة فعالة لمباريات Pichash و PicBlockhash.
- 2022-08-09 V0.12.3: bugfix for familyentry
- 2022-08-08 V0.12.2: Bugfix لتسليم بيانات XCFG ، إضافة التبعية المفقودة.
- 2022-08-08 V0.12.0: بناء جملة البحث المتقدم المتكامل.
- 2022-08-03 V0.11.0: يتم الآن تمثيل العائلات (كسر) مع عائلة.
- 2022-08-03 V0.10.3: الآن ترك الوظيفة XCFG بيانات افتراضيًا في DB ، مكشوفة الوصول إليها عبر API REST و MCRITCLIENT.
- 2022-07-29 V0.10.2: القدرة المضافة على حذف العائلات-الآن أيضًا الاحتفاظ بمعلومات XCFG لجميع الوظائف افتراضيًا.
- 2022-07-12 V0.10.1: تحسين الأداء.
- 2022-07-12 V0.10.0: (كسر) معالجة الوظائف مبسطة.
- 2022-05-13 V0.9.4: إصلاح الأخطاء لاستلام الملفات المقدمة.
- 2022-05-13 V0.9.3: المزيد من التحديثات إلى MatchingResults.
- 2022-05-13 V0.9.2: تمت إضافة حقل آخر ومزيد من وظائف الراحة في MatchingResult لتحسين الوصول-تلك هي التغييرات التي تم إنشاؤها مسبقًا.
- 2022-05-05 V0.9.1: معالجة التقديمات الثنائية ، والإصلاحات البسيطة لقائمة انتظار Minhash-الإصدار الأولي.
- 2022-02-09 V0.9.0: أضيفت picblocks إلى mcrit.
- 2022-01-19 V0.8.0: تم ترحيل العميل والأمثلة في مستودع MCRIT الأساسي.
- 2021-12-16 V0.7.0: الإصدار الخاص الأولي.
الاعتمادات والملاحظات
بفضل Steffen Enders و Paul Hordiienko على مساهماتهما في النموذج الأولي للبحث الداخلي لهذا المشروع! بفضل Manuel Blatt على مساهماته الواسعة في هذا المشروع ، وكذلك لوحدة العميل!
سحب طلبات الترحيب! سائدا
رخصة
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.