تحليل سلوك Pegasus Trojan على الشبكة

تم مؤخرا نشر الكود المصدري لتروجان بنك بيغاسوس المصرفي. على الرغم من ذكر مجموعة Carbanak باسم الأرشيف ، نفى باحثون من Minerva Labs تورط طروادة في هذه المجموعة وأثبتوا تورطهم في مجموعة Buhtrap (Ratopak). يوجد داخل الأرشيف وصف موجز لعمل طروادة ، ورموز مصدرها ، ووصفًا لنظام الدفع المصرفي وبيانات موظفي العديد من البنوك الروسية.

بنية شفرة المصدر لهذا البرنامج الضار مثيرة للاهتمام. تنقسم الوظيفة إلى وحدات مجمعة في "binpack" واحد في مرحلة التجميع. تتضمن عملية الترجمة أيضًا توقيع الملفات القابلة للتنفيذ بشهادة من ملف tric.pfx ، وهي ليست في الأرشيف.

لا يقل فضولًا عن نشاط شبكة Pegasus ، والذي يحاول بعد الإصابة الانتشار داخل النطاق ويعرف كيفية تحويل البيانات بين الأجهزة التي تستخدم الأنابيب ونقل Mailslot. ركزنا على دراسة ميزات نشاط شبكة طروادة وأضفنا اكتشاف Pegasus بسرعة إلى منتج PT Network Attack Discovery . سيسمح هذا لجميع مستخدميه بالكشف في الوقت المناسب عن نشاط هذا طروادة وتعديلاته على شبكتهم. في هذه المقالة ، سأقدم وصفًا تفصيليًا لآليات توزيع الشبكة والتفاعل بين نسخ بيغاسوس.



مقدمة


بمجرد تشغيل الجهاز ، تقوم وحدة InstallerExe الرئيسية بحقن الشفرة في ملف Svchost.exe باستخدام تقنية معالجة التجويف ، وبعد تهيئة الوحدات الرئيسية ، يبدأ Pegasus عدة عمليات متوازية:

  1. النسخ المتماثل للمجال - ينخرط في الاستخبارات داخل الشبكة ويحاول الانتشار إلى أجهزة Windows الأخرى.
  2. يستمع مستمع Mailslot لرسائل mailslot الإذاعية ، التي يرسل من خلالها بيغاسوس حسابات ملغومة. يتم إنشاء اسم الفتحة في وقت الترجمة.
  3. يستمع موزع خوادم الأنابيب إلى أنبوب Windows باسم تم إنشاؤه بالنيابة عن الجهاز. تستخدم هذه الأنابيب بشكل رئيسي للكشف عن نسخ بيغاسوس الأخرى على الشبكة وتفاعلها.
  4. تحاول كلمات مرور تسجيل الدخول بشكل دوري كل بضع دقائق تفريغ بيانات الحساب مع وحدة نمطية من Mimikatz.
  5. اتصال الشبكة مسؤول عن الاتصال بخادم CnC والرسائل الدورية.

// start transports which links data with our CB-manager pwInitPipeServerAsync(dcmGetServerCallback()); mwInitMailslotServer(dcmGetServerCallback()); ... // start broadcasting creds to other machines cmStartupNetworkBroadcaster(); 

تكرار المجال


أحد الأنظمة الفرعية في Pegasus مسؤول عن الحركة الجانبية على شبكة Windows. ينقسم التوزيع إلى خطوتين هامتين:

  1. الكشف عن السيارات المجاورة.
  2. محاولة النسخ المتماثل للجهاز.

يتم اكتشاف الأجهزة المجاورة في المجال من خلال مكالمتين API:

NetServerEnum ، الذي يتطلب خدمة المتصفح والمكالمات إلى WNetOpenEnum / WNetEnumResource.
يجب فحص جميع الأجهزة الموجودة في المجال إذا كانت مصابة بالفعل. يقوم بيغاسوس باستقصاء اسم الأنبوب الناتج كل 200 مللي ثانية لأكثر من 20 مرة على التوالي. استخدمنا هذا السلوك غير الطبيعي كأحد مؤشرات نشاط بيغاسوس في المجال. بعد عدم اكتشاف أي علامات للعدوى ، تنتقل البرامج الضارة إلى الخطوة التالية - محاولة النسخ المتماثل.

التكرار على النحو التالي. باستخدام الحسابات الموجودة (KM) على المضيف ، يحاول Pegasus تسجيل الدخول إلى كرات IPC $ و ADMIN $ على الجهاز عبر SMB ، وإذا كان هناك وصول إلى IPC $ ولا يوجد وصول إلى ADMIN $ ، فإن Pegasus يستنتج أنه على حق الحساب غير كافٍ ويجب وضع علامة عليه باعتباره غير صالح. بعد الوصول إلى الكرة ADMIN $ ، وهو اسم مستعار للمجلد٪ windir٪ ، تحاول البرامج الضارة تحديد بنية الجهاز من أجل استخدام الوحدة النمطية المناسبة في المستقبل.

تعتمد خوارزمية تحديد البنية على رؤوس ملفات PE على الجهاز البعيد. على هذا النحو ، يحاول Pegasus قراءة أول 4 كيلوبايت من notepad.exe من المجلد٪ windir٪. من العوائق الواضحة لهذه الطريقة أنه في Windows Server 2012 ، توجد المفكرة على المسار٪ windir٪ \ System32.

موقع notepad.exe على نظام التشغيل Windows 7:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe C:\Windows\notepad.exe 

على Windows Server 2012:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe 

إذا لم يكتشف Pegasus ملف notepad.exe ، فلن يتمكن من إصابة الخادم ، حتى إذا كان لديه معلومات حساب مع الحقوق اللازمة. يمكن أن يؤدي الغياب البسيط للمفكرة في٪ windir٪ إلى إيقاف توزيع Pegasus على Windows Server 2012. يعد استخدام regedit.exe في هذا الصدد أكثر موثوقية.

بعد تحديد بنية الخادم الهدف بنجاح ، يقوم Pegasus بتحميل قطارة RSE (Exe Service Service Exe) صغيرة بحجم 10 كيلوبايت تقريبًا ، وتتمثل مهمتها في تحميل binpack من وحدات Pegasus عبر الأنبوب بشكل واضح والتحكم في النقل إلى وحدة Shellcode. يتكون اسم القطارة بطريقة عشوائية زائفة ويتكون من سلسلة من الأحرف السداسية العشرية من 8 إلى 15 حرفًا. تتم تهيئة المولد العشوائي الكاذب اعتمادًا على اسم الجهاز الهدف وسيكون هو نفسه بين البدء لتجنب الفوضى المحتملة لـ٪ windir٪ مع النسخ السابقة من القطارة.



يتم التحقق من سلامة القطارة وإزالتها المحتملة بواسطة برنامج مكافحة الفيروسات ، وبعد ذلك يتم إطلاقها بواسطة إحدى آليتين مطبقتين - SCM أو WMI ، أولاً وقبل كل محاولات Pegasus لبدء RSE من خلال آلية WMI ، وبعد ذلك فقط باستخدام إدارة التحكم بالخدمة (SCM). وذلك لأن SCM يترك آثارًا أكثر في سجلات Windows. خطط منشئو Pegasus أيضًا طرق توزيع أخرى - Wsh Remote و Powershell remoting و Task Scheduler ووحدة تنفيذ الأوامر عبر RDP قيد التطوير.

كما ذكر أعلاه ، بعد الإطلاق الناجح ، يتحقق القطارة ويفتح الأنبوب للاستماع والتحكم في التحكم في الحمولة الواردة.



نظرًا لأن شفرة Pegasus يتم حقنها بواسطة طريقة معالجة الجرف في عملية svchost.exe ، فلا يجب أن تظل وحدة InstallerExe الأصلية على القرص في حالة الإصابة الأولية ، ولا قطارة RSE في حالة التوزيع. إذا كان لا يزال يمكن الوصول إلى القطارة بمسار معروف ، فإن Pegasus تزيلها بطريقتها الخاصة:

  1. استبدال محتويات الملف ببيانات عشوائية ؛
  2. الكتابة فوق البيانات الفارغة (الأصفار) ؛
  3. إعادة تسمية الملف ؛
  4. حذف الملف.



بعد نجاح الإصابة ، تبدأ عملية توزيع النسخ المتماثل للمجال مرة أخرى.

يعمل Mailslot


بعد وصول Pegasus إلى بيانات الحساب إما من نسخة أخرى من Pegasus أو من وحدة mod_LogonPasswords ، سيبدأ بث بيانات الولايات المتحدة حسب المجال. يتم التوزيع باستخدام آلية SMB المستندة إلى Mailslot ، والتي تسمح بالبث أحادي الاتجاه لجزء صغير من البيانات عبر المجال. يتم التوزيع وفقًا لاسم الفتحة التي يتم إنشاؤها عشوائيًا ، وبالتالي يمكن لجميع الأجهزة المصابة في المجال إرسال واستقبال البيانات باسم واحد ، وتتم تهيئة المولد العشوائي الزائف للأسماء من المتغير TARGET_BUILDCHAIN_HASH المحدد في التكوين أثناء الإنشاء.

نظرًا لأن آلية Mailslot تفرض حدًا على الحد الأقصى لحجم الحزمة ، يتم إرسال KM واحد فقط في كل مرة وفقًا لمبدأ وقت المراسلة الأخير: من بين جميع KMs المتاحة ، يتم إرسال النطاق الذي يكون آخر تاريخ بريد له هو الأقدم حسب المجال.

لا يتم إرسال البيانات في Mailslot بنص واضح ، ولكن يتم لفها في ثلاث طبقات من تشفير XOR ، ويتم إرسال المفاتيح جنبًا إلى جنب مع البيانات. طبقة البيانات الأولى هي مغلف NetMessageEnvelope مع فحص تكامل البيانات بواسطة خوارزمية SHA1 ، المستخدمة لجميع البيانات المرسلة عبر الشبكة المحلية. 4 بايت من البيانات في بداية الحزمة هي المفتاح ، والذي يتم تغييره عن طريق تحولات البت من 5 بت إلى اليمين لكل دورة. يوجد داخل المغلف بنية بيانات مشفرة باستخدام XOR مع حقول أمريكية مباشرة وتاريخ إضافتها. يوجد أيضًا مفتاح 8 بايت في بداية الهيكل ، ولكن يتم تطبيقه بدون إزاحة. بعد فك تشفير بنية KM ، يبقى فقط لإلغاء تسلسل الحقول الفردية من هياكل ENC_BUFFER مثل اسم الكمبيوتر واسم المجال واسم المستخدم وكلمة المرور. يتم تشفير هذه الحقول بمفتاح 8 بايت مع الإزاحات. يمكن العثور على البرنامج النصي لفك تشفير حزمة Mailslot ومثال لهذه الحزمة هنا: script ، PCAP .

تتراوح فترة إرسال رسائل Mailslot في نسخة الإصدار من 20 ثانية إلى 11 دقيقة.

 // some random wait before making next step DbgPrint("going to sleep"); #ifdef _DEBUG // debug - 2-5 s Sleep(rg.rgGetRnd(&rg, 2000, 5000)); #else // release - 20 - 650 s //Sleep(rg.rgGetRnd(&rg, 2000, 65000) * 10); Sleep(rg.rgGetRnd(&rg, 2000, 15000)); #endif 

بالإضافة إلى تبادل الحسابات ، يتم استخدام آلية Mailslot للبحث عن جهاز مصاب لديه إمكانية الوصول إلى الإنترنت والإعلان عن الوصول إلى الإنترنت. يقوم مغلف NetMessageEnvelope بتخزين نوع الرسالة التي يتم إرسالها. يتم تبادل البيانات بين الجهاز بدون الوصول والجهاز مع الوصول إلى الإنترنت من خلال الأنابيب.

أعمال الأنابيب


للاتصال ثنائي الاتجاه أو لنقل كميات كبيرة من البيانات ، تستخدم نسخ بيغاسوس الأنابيب كقناة اتصال. اسم الأنبوب ، على الرغم من أنه يتم إنشاؤه أيضًا بواسطة مولد عشوائي ، ولكنه يعتمد على اسم الجهاز والبناء ، وبالتالي يسمح للعميل وخادم الخادم باستخدام نفس الاسم.

في الاتصال أحادي الاتجاه ، على سبيل المثال ، نقل binpack أثناء النسخ المتماثل إلى جهاز آخر ، لا يتم تشفير البيانات وإرسالها بشكل واضح. يبدأ Binpack ببنية SHELLCODE_CONTEXT بطول 561 بايت.



أثناء الإرسال ثنائي الاتجاه ، على سبيل المثال ، يتم استخدام البيانات الوكيلة بين نسخة Pegasus بدون الوصول إلى الإنترنت وخادم CnC ، يتم استخدام نفس بنية مغلف NetMessageEnvelope مع تشفير XOR كما هو الحال في Mailslot ، لأنه يسمح لك بالتمييز بين أنواع الرسائل المختلفة في حقل المعرف.

من الناحية المعمارية ، يتم تنفيذ توكيل البيانات من خلال طلب نقل جزء من البيانات (PMI_SEND_QUERY) ، وتلقي معرف الطلب في الرد والاستعلام عن حالة المهمة بالمعرف (PMI_CHECK_STATUS_QUERY). كقاعدة ، يتم نقل بنية مغلف أخرى كحمل ، بإضافة وظائف متنوعة وطبقة أخرى من التشفير.

بالإضافة إلى ذلك ، لا ينتهي العمل مع الأنابيب على التفاعل بين الآلات المصابة. تقوم وحدة mod_KBRI_hd بإدخال التعليمات البرمجية في عمليات cmd.exe التي تعترض مكالمات MoveFileExW وتحلل جميع البيانات التي يتم نسخها ، لأن هذا جزء من عملية الدفع. إذا احتوى الملف المنسوخ على بيانات تهم المهاجمين - بيانات ذات مدفوعات ، يتم إرسال إشعار حول ذلك إلى خادم CnC. يتم الاتصال بين وحدة mod_KBRI المحقونة في cmd.exe ونسخة من Pegasus داخل الجهاز المصاب عبر أنبوب لم يتم إنشاؤه ولكن تم ترميزه في كود المصدر:

 \.\pipe\pg0F9EC0DB75F67E1DBEFB3AFA2 

تتضمن وظيفة الوحدة أيضًا استبدال حسابات البيانات أثناء التنقل وفقًا للنموذج. مثال على أنماط للبحث في لقطة الشاشة.

حركة المرور باستخدام الحاسب الآلي


دفق منفصل مسؤول عن التبادل المباشر للبيانات مع خادم CnC ، الذي يتحقق من قائمة انتظار قطع البيانات من العمليات الداخلية أو نسخ أخرى من البرامج الضارة كل بضع دقائق ويرسلها إلى الخادم.

أثناء تهيئة الوحدة النمطية mod_NetworkConnectivity ، تقوم بإجراء فحص متعدد المراحل لاتصال الشبكة:

1) اكتشاف إعدادات الخادم الوكيل ومحاولة الاتصال بموقع www.google.com :

  • في فرع التسجيل \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ إعدادات الإنترنت.
  • عبر WPAD (اتصل WinHttpGetProxyForUrl).
  • عبر تكوين الوكيل للمستخدم الحالي (استدعاء WinHttpGetIEProxyConfigForCurrentUser).

2) التحقق من الاتصال بخوادم تحديث Microsoft والبيانات التي تم إرجاعها ( authrootseq.txt ، authrootstl.cab ، rootupd.exe )

3) اختبار اتصالات HTTPS بأحد عناوين 6:


فقط بعد اجتياز جميع عمليات التحقق ، تعتقد Pegasus أن لديها الوصول الضروري إلى الشبكة الخارجية ويمكنها الإعلان عن ذلك عبر نطاق Mailslot برسالة. علاوة على ذلك ، يمكن لـ Pegasus إخفاء نفسها والتواصل مع خادم CnC فقط خلال ساعات العمل - من الساعة 9 صباحًا حتى الساعة 7 مساءً بالتوقيت المحلي.

يرسل Pegasus قطعًا من البيانات ملفوفة في مغلف مع حساب تجزئة الكمية في شكل مشفر باستخدام تشفير DES في وضع CRYPT_MODE_CBC / PKCS5_PADDING. يعتمد مفتاح التشفير فقط على المتغير أثناء التجميع ، وبالتالي يمكننا فك تشفير حركة المرور بين البرامج الضارة والخادم مع معرفة BUILDCHAIN_HASH فقط. في شفرة المصدر داخل الأرشيف ، كان لهذا المتغير القيمة 0x7393c9a643eb4a76. يمكن العثور على برنامج نصي لفك تشفير تسجيل الوصول إلى الخادم ومثال على هذه الحزمة هنا: script و PCAP .

ينقل هذا المحتوى (الهيكل INNER_ENVELOPE) إلى خادم CnC أثناء تسجيل الوصول أو مع أي بيانات. مبدئيًا ، يوجد 28 بايت من مغلف مع حقل طول ومجموع SHA1.



يتم نقل نفس البيانات بين الأجهزة أثناء التقريب عبر الأنابيب ، ولكن يتم لفها داخل مغلف NetMessageEnvelope الذي نعرفه بمجموع تجزئة وتشفير XOR.

يمكن لمشغل CnC إرسال أوامر للتنفيذ إلى نسخ Pegasus والرسائل التي تحتوي على أوامر أو بيانات أخرى ، على سبيل المثال ، يمكن أن يحتوي EID_CREDENTIALS_LIST على طبقات تشفير المجال الخاصة بهم ، كما رأينا في مثال حسابات البث.

كشف


بادئ ذي بدء ، كنا مهتمين بالكشف عن نشاط Pegasus على الشبكة ، وبعد دراسة رموز المصدر بدقة والتشغيل في بيئة الاختبار ، اكتشفنا تلك الحالات الشاذة والتحف التي تشير إلى وجود هذه البرامج الضارة المعقدة على الشبكة. يمكن استدعاء Pegasus حقًا متعدد الاستخدامات - فهو يستخدم بنشاط بروتوكول SMB لإرسال الرسائل وإقامة اتصال مع النسخ الأخرى ، وينتشر إلى أجهزة أخرى ويتواصل مع خادم CnC بطريقته الخاصة. عن طريق تثبيت شبكة نظير إلى نظير في المجال ، تمهد نسخ Pegasus الطريق إلى الشبكة الخارجية وتتواصل مع خادم CnC عن طريق نقل حركة المرور عبر بعضها البعض. استخدام الشهادات لتوقيع الملفات القابلة للتنفيذ والوصول إلى موارد Microsoft و Mozilla أثناء التحقق من الاتصال يجعل من الصعب اكتشاف نشاطها واكتشافها على المضيف.

إن مشروع شفرة مصدر Pegasus منظم جيدًا ووصفه إلى حد ما ، لذلك في المستقبل القريب يمكننا أن نتوقع استعارة أجزاء من شفرته بواسطة برامج ضارة أخرى وظهور التعديلات.

ظلت العديد من آليات تنفيذ الأوامر عن بُعد والبحث عن بيانات الحساب غير محققة ، كما كان المطورون سيضيفون أيضًا القدرة على تغيير كود القشرة أثناء التنفيذ على الفور. وهذه ليست كل أفكارهم.

لقد قمنا بتطوير العديد من التوقيعات لـ PT NAD و IDS Suricata ، مما يسمح لنا بتحديد نشاط الشبكة الخاص بـ Pegasus في مراحل مختلفة ، بدءًا من الثواني الأولى من نشاطه. يمكنك العثور على تواقيع مفتوحة لـ Suricata IDS على github و Twitter ، وسوف يصلون تلقائيًا إلى Suricata إذا كنت تستخدم آلية تحديث suricata.

يمكنك أن ترى كيف تعمل التوقيعات لنشاط Pegasus في لقطة الشاشة أدناه. هذا هو منتجنا الجديد PT Network Attack Discovery الذي يحدد الحوادث ويساعد في التحقيق فيها:



بالإضافة إلى ذلك ، يمكن استخدام مؤشرات الحل الوسط (IC) التالية للكشف:

  MAILSLOT \ 46CA075C165CBB2786 
 الأنابيب \ pg0F9EC0DB75F67E1DBEFB3AFA2

 hxxp: //denwer/pegasus/index.php
 hxxp: //mp3.ucrazy.org/music/index.php
 hxxp: //support.zakon-auto.net/tuning/index.asp
 hxxp: //video.tnt-online.info/tnt-comedy-tv/stream.php 

نشرها سيريل شيبولين منattackdetection ، تويتر | برقية

Source: https://habr.com/ru/post/ar418017/


All Articles