SUNBURST
كشف المرحلة الأولى من SUNBURST C2 باستخدام إنتروبيا شانون
حول:
استخدام إنتروبيا شانون للكشف عن خوارزميات توليد النطاقات (DGA).
يجب إدخال أسماء النطاقات المؤهلة بالكامل (FQDN) فقط في الدالة أو قراءتها من ملف CSV.
الصيغة: Prefix_or_subdomain.Domain.TLD
أُنشئ بسبب استغلال الجهات الفاعلة المتقدمة (APT) لخوارزميات DGA ذات السلاسل الطويلة في سلسلة القتل (Kill Chain) للقيادة والتحكم (C2).
تحديد عناوين URL ذات السلاسل الطويلة التي تمتلك إنتروبيا عالية > ضعفي الانحراف المعياري.
النظر إلى الحد الأعلى 2.5% من عناوين URL ذات البادئات/النطاقات الفرعية الطويلة.
حفظ بيانات وصفية إضافية إذا احتاجها محللو CND (مثل طول البادئة).
المتطلبات:
- بايثون 3.9+
- بايثون موجود في متغير PATH
- جميع الواردات المذكورة (ثبّتها عبر pip install إذا لزم الأمر)
- سجل DNS المُدخل يحتوي على اسم FQDN واحد لكل سطر (بدون أي علامات ترقيم أخرى)
- وجود ملف Cisco Top-1M (CSV, ZIP) أو Majestic Top-1M (CSV) في نفس مجلد البرنامج النصي.
طريقة التشغيل (الوضع التفاعلي مفعّل، راجع المتغيرات):
- ثبّت بايثون 3.9.x
- جهّز جميع ملفات الإدخال بالتنسيق الصحيح (النطاقات في ملف نصي، واحد لكل سطر، بدون علامات ترقيم)
- تأكد من أن ملفات الإدخال في نفس الدليل/المجلد الذي يحتوي هذا البرنامج النصي.
4a) (ويندوز) افتح هذا البرنامج النصي في Python IDLE أو Visual Studio Code.
4b) (لينكس) $~: python3 shannon.py
- أدخل ملف سجل DNS المراد فحصه.
- أدخل ملف Cisco Umbrella (CSV/ZIP) أو Majestic Top-1M (CSV) للاستفادة منه.
- انتظر حتى يتم توليد قيم التكرار وإنتروبيا شانون.
- افحص ملفات الإخراج.
طريقة التشغيل (الوضع التفاعلي متوقف، راجع المتغيرات):
- ثبّت بايثون 3.9.x
- جهّز جميع ملفات الإدخال بالتنسيق الصحيح (النطاقات في ملف نصي، واحد لكل سطر، بدون علامات ترقيم)
- تأكد من أن ملفات الإدخال في نفس الدليل/المجلد الذي يحتوي هذا البرنامج النصي.
4a) (ويندوز) افتح هذا البرنامج النصي في Python IDLE أو Visual Studio Code.
4b) (لينكس) $~: python3 shannon.py
- سجل الإدخال المراد تحليله هو "domains.txt"، راجع المتغيرات.
- اختر ملف Top-N لبناء قاموس الاحتمالات، راجع المتغيرات.
- انتظر حتى يتم توليد قيم التكرار وإنتروبيا شانون.
- افحص ملفات الإخراج.
الافتراضات:
- الأحرف الكبيرة والصغيرة لها احتمالية ظهور متساوية.
أ) تجاهل أن عُقد TOR تغيّر حساسية حالة الأحرف في استعلامات DNS وترميز 0x20.
- مخطط تردد الأحرف ETOAN غير كافٍ بسبب عدم تضمين: 0-9 والواصلة (-) والشرطة السفلية ().
أ) يمكن أن تحتوي النطاقات على واصلات (-) وشرطات سفلية () وأرقام.
- غير مصمم لمواجهة DGA الخاص بـ ExploderBot.
- الإدخال: ملف نصي بسيط، كل عنوان URL في سطر مستقل - لا شيء آخر.
- يتكون الإدخال حصريًا من سلاسل عناوين URL دون أحرف محظورة.
- يجب أن تكون ملفات الإدخال والإخراج في نفس مجلد هذا البرنامج النصي.
- بايثون 3 موجود في متغير PATH.
مجموعة البيانات (النطاقات):
مجموعة البيانات المستخدمة مُستمدة من سجل استعلامات Pi-Hole (نافذة 12 ساعة) المستخرج من SQLite.
BASH:
$~: sqlite3 /etc/pihole/pihole-FTL.db "SELECT domain FROM queries WHERE timestamp >='$(($(date +%s) - 43200))'" > domains.txt
تمت إزالة التكرارات باستخدام Excel > Data > Remove Duplicates
كما تمت إزالة بيانات الاستعلامات العكسية (PTR) في in-addr.arpa.
مجموعة البيانات (الاحتمالات):
بالاستفادة من نتائج RedCanary لتحليل DGA، يأخذ هذا البرنامج النصي عنوان URL ويحسب إنتروبيا شانون.
خط مراحل اختبار DevOps:
- shannon.py (1.0) - جعل الحسابات تعمل مع قاموس RedCanary الثابت.
- shannon.py (1.1) - دمج اختبارات بسيطة في الإصدار 1.0.
- dictionary.py (1.0) - اختبار فتح/إغلاق Cisco + Majestic Top-1M.
- shannon.py (2.0) - دمج الإصدار 1.0 مع دوال dictionary.py المختبرة.
المراجع:
إنتروبيا شانون من Splunk - من أين جاءت الفكرة*
https://www.splunk.com/en_us/blog/tips-and-tricks/when-entropy-meets-shannon.html
SANS Mark Baggett - الأداة التي استخدمتها RedCanary لتحليل Alexa Top 1M
https://github.com/markbaggett/freq
RedCanary - المدونة التي جاءت منها درجات الاحتمالات
https://redcanary.com/blog/threat-hunting-entropy/
نطاقات Alexa Top 1M - مجموعة البيانات النصية التي استخدمتها RedCanary
https://www.alexa.com/topsites
DGA Detector
https://github.com/exp0se/dga_detector
إنتروبيا شانون - الصيغة
https://towardsdatascience.com/the-intuition-behind-shannons-entropy-e74820fe9800