في منتصف يونيو ، كانت المعركة ضد فيروس كورونا في كازاخستان على قدم وساق. بدافع القلق من زيادة عدد الحالات (حتى الرئيس السابق نور سلطان نزارباييف أصيب بعدوى) ، قررت السلطات المحلية مرة أخرى إغلاق جميع مراكز التسوق والترفيه ، والمتاجر والأسواق والبازارات. في تلك اللحظة ، استغل مجرمو الإنترنت الموقف عن طريق إرسال رسائل بريدية ضارة إلى الشركات الروسية والدولية.
تم اعتراض الرسائل الخطيرة ، المتخفية في شكل نداء من وزير الصحة في جمهورية كازاخستان ، من قبل نظام اكتشاف التهديدات (TDS) Group-IB. احتوى المرفق على مستندات ثبتت عند إطلاقها برنامجًا ضارًا من عائلة Loki PWS (Password Stealer) ، مصممًا لسرقة تسجيلات الدخول وكلمات المرور من جهاز كمبيوتر مصاب. في المستقبل ، يمكن للمهاجمين استخدامها للوصول إلى حسابات البريد الإلكتروني للاحتيال المالي أو التجسس أو بيعها في منتديات المتسللين.
في هذه المقالة ، يفحص نيكيتا كاربوف ، المحلل في CERT-GIB ، مثيلًا لواحد من أكثر مخترقي البيانات شيوعًا الآن - Loki.
سننظر اليوم في أحد الإصدارات الشائعة من الروبوت - 1.8. يتم بيعه بنشاط ، ويمكن حتى العثور على لوحة الإدارة في المجال العام: هنا .
مثال على لوحة الإدارة:

تمت كتابة Loki بلغة C ++ وهي واحدة من أشهر البرامج الضارة المستخدمة لسرقة معلومات المستخدم من جهاز كمبيوتر مصاب. مثل بلاء عصرنا - فيروسات الفدية - يقوم Data Stealer ، بعد تعرضه للضرب على كمبيوتر الضحية ، بأداء المهمة بسرعة عالية جدًا - لا يحتاج إلى الحصول على موطئ قدم وزيادة امتيازاته في النظام ، فهو لا يترك أي وقت تقريبًا للدفاع ضد أي هجوم. لذلك ، في أحداث البرامج الضارة التي تسرق بيانات المستخدم ، يتم لعب الدور الرئيسي من خلال التحقيق في الحادث.
التفريغ والحصول على تفريغ برنامج ضار عملي
يتم التوزيع في معظم الحالات من خلال المرفقات في القوائم البريدية. يقوم المستخدم ، متنكرا كملف شرعي ، بتنزيل المرفق وفتحه ، ويطلق البرنامج الضار.
تشير علامة الحقن إلى وجود اللودر.

بمساعدة DIE نحصل على معلومات تفيد بأن الملف المصدر مكتوب في VB6.

يشير الرسم البياني الانتروبيا إلى كمية كبيرة من البيانات المشفرة.

عند إطلاق العملية الأولى ، تخلق العملية الفرعية ، وتحقنها وتخرج. العملية الثانية هي المسؤولة عن عمل البرمجيات الخبيثة. بعد فترة قصيرة من الوقت نوقف العملية ونحفظ تفريغ الذاكرة. للتأكد من وجود Loki داخل ملف التفريغ ، انظر داخل عنوان url لمركز الأوامر ، والذي ينتهي في معظم الحالات بـ fre.php .

نقوم بتفريغ جزء الذاكرة الذي يحتوي على Loki ونقوم بتصحيح رأس PE.
سوف نتحقق من أداء التفريغ باستخدام نظام TDS Huntbox.

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

تمت إعادة تسمية أسماء الوظائف لتكون أكثر وصفية للراحة.
يتم تحديد وظيفة الروبوت من خلال وظيفتين رئيسيتين:
- Data Stealer هي الوظيفة الأولى المسؤولة عن سرقة البيانات من 101 تطبيقًا وإرسالها إلى الخادم.
- Downloader - طلب من أوامر CnC (الأمر والتحكم) للتنفيذ.
للراحة ، يسرد الجدول أدناه جميع التطبيقات التي يحاول مثيل Loki الذي يتم فحصه منه سرقة البيانات.
| معرف الوظيفة | تطبيق | معرف الوظيفة | تطبيق | معرف الوظيفة | تطبيق |
|---|---|---|---|---|---|
| 1 | موزيلا فايرفوكس | 35 | معلومات FTP | 69 | ClassicFTP |
| 2 | كومودو آيس دراغون | 36 | LinasFTP | 70 | PuTTY / KiTTY |
| 3 | أبل سفاري | 37 | فايلزيلا | 71 | ثندربيرد |
| 4 | K-Meleon | 38 | طاقم العمل- FTP | 72 | فوكسميل |
| خمسة | قرد البحر | 39 | BlazeFtp | 73 | بوكومايل |
| 6 | قطيع | 40 | NETFile | 74 | إنكريديميل |
| 7 | NETGATE بلاك هوك | 41 | GoFTP | 75 | برنامج تنبيه Gmail المحترف |
| 8 | لوناسكيب | 42 | ALFTP | 76 | افحص البريد |
| تسع | جوجل كروم | 43 | برنامج DeluxeFTP | 77 | WinFtp |
| عشرة | أوبرا | 44 | القائد الكلي | 78 | مارتن بريكريل |
| أحد عشر | متصفح QTWeb | 45 | FTP الحصول على | 79 | 32 بت إف تي بي |
| 12 | QupZilla | 46 | WS_FTP | 80 | متصفح FTP |
| ثلاثة عشر | متصفح الانترنت | 47 | ملفات تكوين عميل البريد | 81 | البريد
(softwarenetz) |
| أربعة عشرة | أوبرا 2 | 48 | لعبة البوكر Full Tilt | 82 | بريد أوبرا |
| خمسة عشر | سايبرفوكس | 49 | بوكر ستارز | 83 | صندوق بريد |
| السادس عشر | القمر الشاحب | 50 | اكسبان درايف | 84 | FossaMail |
| 17 | ووترفوكس | 51 | فرس | 85 | بيكي! |
| الثامنة عشر | لغة مبسطة | 52 | برنامج FlashFXP | 86 | POP3 |
| 19 | سوبربوتي | 53 | نوفافتب | 87 | الآفاق |
| 20 | FTPShell | 54 | NetDrive | 88 | Ymail2 |
| 21 | NppFTP | 55 | قائد المجموع 2 | 89 | تروجيتا |
| 22 | MyFTP | 56 | سمارت إف تي بي | 90 | TrulyMail |
| 23 | FTPBox | 57 | مدير FAR | 91 | ملفات spn |
| 24 | شيرود FTP | 58 | بيتفيز | 92 | قائمة المهام |
| 25 | FTP الآن | 59 | RealVNC
TightVNC |
93 | مثبتات |
| 26 | NexusFile | 60 | محفظة mSecure | 94 | ملحوظة |
| 27 | Xftp | 61 | سينكوفيري | 95 | نوت زيلا |
| 28 | EasyFTP | 62 | FreshFTP | 96 | ورق ملاحظات |
| 29 | SftpNetDrive | 63 | BitKinex | 97 | KeePass |
| ثلاثين | AbleFTP | 64 | UltraFXP | 98 | Enpass |
| 31 | JaSFtp | 65 | FTP الآن 2 | 99 | RoboForm الخاص بي |
| 32 | أتمتة | 66 | Vandyk SecureFX | 100 | 1 كلمة المرور |
| 33 | سايبرداك | 67 | Odin Secure FTP Expert | 101 | برنامج Mikrotik WinBox |
| 34 | Fullsync | 68 | قذف |
الشبكات
هناك مشكلتان يجب معالجتهما لتسجيل تفاعلات الشبكة:
- مركز القيادة متاح فقط وقت الهجوم.
- لا يسجل Wireshark اتصالات الروبوت في الاسترجاع ، لذلك تحتاج إلى استخدام وسائل أخرى.
أبسط حل هو إعادة توجيه عنوان CnC الذي سيتواصل Loki معه إلى المضيف المحلي. بالنسبة إلى الروبوت ، يتوفر الخادم الآن في أي وقت ، على الرغم من أنه لا يستجيب ، ولكن ليس من الضروري تسجيل اتصالات الروبوت. لحل المشكلة الثانية ، سنستخدم الأداة RawCap ، التي تسمح لنا بكتابة الاتصالات التي نحتاجها إلى pcap. بعد ذلك ، سنقوم بتحليل pcap المسجل في Wireshark.

قبل كل اتصال ، يتحقق الروبوت من توفر CnC ويفتح المقبس إذا كان متاحًا. تتم جميع اتصالات الشبكة على مستوى النقل باستخدام بروتوكول TCP ، وعلى مستوى التطبيق ، يتم استخدام HTTP.
يوضح الجدول أدناه رؤوس الحزم التي يستخدمها Loki كمعيار.
| حقل | القيمة | وصف |
|---|---|---|
| وكيل المستخدم | Mozilla / 4.08 (Charon؛ Inferno) | وكيل مستخدم نموذجي لـ Loki |
| قبول | * / * | |
| نوع المحتوى | التطبيق / الثماني تيار | |
| ترميز المحتوى | الثنائية | |
| مفتاح المحتوى | 7DE968CC | نتيجة تجزئة للرؤوس السابقة (يتم التجزئة بواسطة خوارزمية CRC مخصصة مع كثير الحدود 0xE8677835) |
| الإتصال | أغلق |
- تعتمد بنية البيانات المسجلة على إصدار الروبوت ، وفي الإصدارات السابقة لا توجد حقول مسؤولة عن خيارات التشفير والضغط.
- يحدد الخادم كيفية معالجة البيانات المستلمة حسب نوع الطلب. هناك 7 أنواع من البيانات يمكن للخادم قراءتها:
- 0x26 بيانات المحفظة المسروقة
- 0x27 بيانات التطبيق المسروقة
- 0x28 طلب الأمر من الخادم
- 0x29 تفريغ ملف مسروق
- 0x2A نقاط البيع
- 0x2B بيانات كلوغر
- لقطة شاشة 0x2C
- في الحالة التي تم فحصها ، كانت 0x27 و 0x28 و 0x2B موجودة فقط.
- يحتوي كل طلب على معلومات عامة حول الروبوت والنظام المصاب ، والتي بموجبها يحدد الخادم جميع التقارير لجهاز واحد ، ثم هناك معلومات تعتمد على نوع الطلب.
- في أحدث إصدار من الروبوت ، يتم تنفيذ ضغط البيانات فقط ، ويتم إعداد الحقول المشفرة للمستقبل ولا تتم معالجتها بواسطة الخادم.
- تُستخدم مكتبة APLib مفتوحة المصدر لضغط البيانات.
عند تكوين طلب ببيانات مسروقة ، يخصص الروبوت مخزنًا مؤقتًا بحجم 0x1388 (5000 بايت). يظهر هيكل طلبات 0x27 في الجدول أدناه:
| انحياز، نزعة | الحجم | القيمة | وصف |
|---|---|---|---|
| 0x0 | 0x2 | 0x0012 | نسخة بوت |
| 0x2 | 0x2 | 0x0027 | نوع الطلب (إرسال بيانات مسروقة) |
| 0x4 | 0xD | ckav.ru | المعرّف الثنائي (XXXXX11111 يحدث أيضًا) |
| 0x11 | 0x10 | - | اسم المستخدم |
| 0x21 | 0x12 | - | اسم الحاسوب |
| 0x33 | 0x12 | - | اسم مجال الكمبيوتر |
| 0x45 | 0x4 | - | دقة الشاشة (العرض والارتفاع)
|
| 0x49 | 0x4 | - | |
| 0x4D | 0x2 | 0x0001 | علامة حقوق المستخدم (1 إذا كان المسؤول) |
| 0x4F | 0x2 | 0x0001 | علم SID (1 إذا تم تعيينه) |
| 0x51 | 0x2 | 0x0001 | علم شاهد النظام (1 إذا كان x64) |
| 0x53 | 0x2 | 0x0006 | إصدار Windows (رقم الإصدار الرئيسي) |
| 0x55 | 0x2 | 0x0001 | إصدار Windows (رقم الإصدار الثانوي) |
| 0x57 | 0x2 | 0x0001 | معلومات النظام الإضافية (1 = VER_NT_WORKSTATION) |
| 0x59 | 0x2 | - | |
| 0x5B | 0x2 | 0x0000 | هل تم إرسال البيانات المسروقة |
| 0x5D | 0x2 | 0x0001 | هل تم استخدام ضغط البيانات |
| 0x5F | 0x2 | 0x0000 | نوع الضغط |
| 0x61 | 0x2 | 0x0000 | هل تم استخدام تشفير البيانات |
| 0x63 | 0x2 | 0x0000 | نوع التشفير |
| 0x65 | 0x36 | - | MD5 من قيمة سجل MachineGuid |
| 0x9B | - | - | البيانات المضغوطة المسروقة |
الروبوت طلبًا من النوع 0x28 ، والذي يظهر هيكله أدناه: حجم المخزن المؤقت: 0x2BC (700 بايت)
| انحياز، نزعة | الحجم | القيمة | وصف |
|---|---|---|---|
| 0x0 | 0x2 | 0x0012 | نسخة بوت |
| 0x2 | 0x2 | 0x0028 | نوع الطلب (طلب أمر من مركز القيادة) |
| 0x4 | 0xD | ckav.ru | المعرّف الثنائي (XXXXX11111 يحدث أيضًا) |
| 0x11 | 0x10 | - | اسم المستخدم |
| 0x21 | 0x12 | - | اسم الحاسوب |
| 0x33 | 0x12 | - | اسم مجال الكمبيوتر |
| 0x45 | 0x4 | - | دقة الشاشة (العرض والارتفاع) |
| 0x49 | 0x4 | - | |
| 0x4D | 0x2 | 0x0001 | علامة حقوق المستخدم (1 إذا كان المسؤول) |
| 0x4F | 0x2 | 0x0001 | علم SID (1 إذا تم تعيينه) |
| 0x51 | 0x2 | 0x0001 | علم شاهد النظام (1 إذا كان x64) |
| 0x53 | 0x2 | 0x0006 | إصدار Windows (رقم الإصدار الرئيسي) |
| 0x55 | 0x2 | 0x0001 | إصدار Windows (رقم الإصدار الثانوي) |
| 0x57 | 0x2 | 0x0001 | معلومات النظام الإضافية (1 = VER_NT_WORKSTATION) |
| 0x59 | 0x2 | 0xFED0 | |
| 0x5B | 0x36 | - | MD5 من قيمة سجل MachineGuid |
حجم المخزن المؤقت: 0x10 (16 بايت) + 0x10 (16 بايت) لكل أمر في الحزمة.
| رأس HTTP (بداية البيانات) | \ r \ n \ r \ n | [0D 0A 0D 0A] | 4 بايت | ||
| - | - | 4 | |||
| 2 | [00 00 00 02] | 4 | |||
|
4 |
4 |
4 |
4 |
() |
|
|---|---|---|---|---|---|
| #0
EXE- |
[00 00 00 00] | [00 00 00 00] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.exe |
| #1
DLL |
[00 00 00 00] | [00 00 00 01] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.dll |
| #2
EXE- |
[00 00 00 00] | [00 00 00 02] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.exe |
| #8
(HDB file) |
[00 00 00 00] | [00 00 00 08] | [00 00 00 00] | [00 00 00 00] | - |
| #9
|
[00 00 00 00] | [00 00 00 09] | [00 00 00 00] | [00 00 00 00] | - |
| #10
|
[00 00 00 00] | [00 00 00 0A] | [00 00 00 00] | [00 00 00 00] | - |
| #14
Loki |
[00 00 00 00] | [00 00 00 0E] | [00 00 00 00] | [00 00 00 00] | - |
| #15
Loki |
[00 00 00 00] | [00 00 00 0F] | [00 00 00 00] | [00 00 00 23] | www.notsogood.site/malicious.exe |
| # 16
تغيير وتيرة التحقق من الاستجابة من الخادم |
[00 00 00 00] | [00 00 00 10] | [00 00 00 00] | [00 00 00 01] | خمسة |
| # 17
قم بإزالة Loki واستقال |
[00 00 00 00] | [00 00 00 11] | [00 00 00 00] | [00 00 00 00] | - |
محلل حركة مرور الشبكة
بفضل هذا التحليل ، لدينا كل المعلومات التي نحتاجها لتحليل تفاعلات شبكة Loki.
يتم تنفيذ المحلل اللغوي في Python ، ويتلقى ملف pcap كمدخل ويجد جميع الاتصالات الخاصة بـ Loki فيه.
أولاً ، دعنا نستخدم مكتبة dkpt للعثور على جميع حزم TCP. لتلقي حزم http فقط ، دعنا نضع مرشحًا على المنفذ المستخدم. من بين حزم http المستلمة ، نختار تلك التي تحتوي على رؤوس Loki المعروفة ، ونحصل على الاتصالات التي تحتاج إلى تحليل من أجل استخراج المعلومات منها في شكل قابل للقراءة.
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
if not isinstance(eth.data, dpkt.ip.IP):
ip = dpkt.ip.IP(buf)
else:
ip = eth.data
if isinstance(ip.data, dpkt.tcp.TCP):
tcp = ip.data
try:
if tcp.dport == 80 and len(tcp.data) > 0: # HTTP REQUEST
if str(tcp.data).find('POST') != -1:
http += 1
httpheader = tcp.data
continue
else:
if httpheader != "":
print('Request information:')
pkt = httpheader + tcp.data
httpheader = ""
if debug:
print(pkt)
req += 1
request = dpkt.http.Request(pkt)
uri = request.headers['host'] + request.uri
parsed_payload['Network']['Source IP'] = socket.inet_ntoa(ip.src)
parsed_payload['Network']['Destination IP'] = socket.inet_ntoa(ip.dst)
parsed_payload_same['Network']['CnC'] = uri
parsed_payload['Network']['HTTP Method'] = request.method
if uri.find("fre.php"):
print("Loki detected!")
pt = parseLokicontent(tcp.data, debug)
parsed_payload_same['Malware Artifacts/IOCs']['User-Agent String'] = request.headers['user-agent']
print(json.dumps(parsed_payload, ensure_ascii=False, sort_keys=False, indent=4))
parsed_payload['Network'].clear()
parsed_payload['Compromised Host/User Data'].clear()
parsed_payload['Malware Artifacts/IOCs'].clear()
print("----------------------")
if tcp.sport == 80 and len(tcp.data) > 0: # HTTP RESPONCE
resp += 1
if pt == 40:
print('Responce information:')
parseC2commands(tcp.data, debug)
print("----------------------")
pt = 0
except(dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError):
continue
في جميع طلبات Loki ، تكون أول 4 بايتات مسؤولة عن إصدار الروبوت ونوع الطلب. باستخدام هاتين المعلمتين ، نحدد كيفية معالجة البيانات.
def parseLokicontent(data, debug):
index = 0
botV = int.from_bytes(data[0:2], byteorder=sys.byteorder)
parsed_payload_same['Malware Artifacts/IOCs']['Loki-Bot Version'] = botV
payloadtype = int.from_bytes(data[2:4], byteorder=sys.byteorder)
index = 4
print("Payload type: : %s" % payloadtype)
if payloadtype == 39:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Application/Credential Data"
parse_type27(data, debug)
elif payloadtype == 40:
parsed_payload['Network']['Traffic Purpose'] = "Get C2 Commands"
parse_type28(data, debug)
elif payloadtype == 43:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Keylogger Data"
parse_type2b(lb_payload)
elif payloadtype == 38:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Cryptocurrency Wallet"
elif payloadtype == 41:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Files"
elif payloadtype == 42:
parsed_payload['Network'].['Traffic Purpose'] = "Exfiltrate POS Data"
elif payloadtype == 44:
parsed_payload['Network']['Traffic Purpose'] = "Exfiltrate Screenshots"
return payloadtype
سيكون التالي في السطر هو تحليل الاستجابة من الخادم. لقراءة المعلومات المفيدة فقط ، ابحث عن التسلسل \ r \ n \ r \ n الذي يحدد نهاية رؤوس الحزم وبداية الأوامر من الملقم.
def parseC2commands(data, debug):
word = 2
dword = 4
end = data.find(b'\r\n\r\n')
if end != -1:
index = end + 4
if (str(data).find('<html>')) == -1:
if debug:
print(data)
fullsize = getDWord(data, index)
print("Body size: : %s" % fullsize)
index += dword
count = getDWord(data, index)
print("Commands: : %s" % count)
if count == 0:
print('No commands received')
else:
index += dword
for i in range(count):
print("Command: %s" % (i + 1))
id = getDWord(data, index)
print("Command ID: %s" % id)
index += dword
type = getDWord(data, index)
print("Command type: %s" % type)
index += dword
timelimit = getDWord(data, index)
print("Command timelimit: %s" % timelimit)
index += dword
datalen = getDWord(data, index)
index += dword
command_data = getString(data, index, datalen)
print("Command data: %s" % command_data)
index += datalen
else:
print('No commands received')
return None
هذا ينهي تحليل الجزء الرئيسي من خوارزمية المحلل وينتقل إلى النتيجة التي نحصل عليها في الإخراج. يتم عرض جميع المعلومات بتنسيق json.
فيما يلي صور لنتيجة عمل المحلل اللغوي ، تم الحصول عليها من اتصالات مختلف الروبوتات ، مع CnC مختلفة ومسجلة في بيئات مختلفة.
Request information:
Loki detected!
Payload type: 39
Decompressed data:
{'Module': {'Mozilla Firefox'}, 'Version': {0}, 'Data': {'domain': {'https://accounts.google.com'}, 'username': {'none@gmail.com'}, 'password': {'test'}}}
{'Module': {'NppFTP'}, 'Version': {0}, 'Data': {b'<?xml version="1.0" encoding="UTF-8" ?>\r\n<NppFTP defaultCache="%CONFIGDIR%\\Cache\\%USERNAME%@%HOSTNAME%" outputShown="0" windowRatio="0.5" clearCache="0" clearCachePermanent="0">\r\n <Profiles />\r\n</NppFTP>\r\n'}}
{
"Network": {
"Source IP": "-",
"Destination IP": "185.141.27.187",
"HTTP Method": "POST",
"Traffic Purpose": "Exfiltrate Application/Credential Data",
"First Transmission": true
},
"Compromised Host/User Data": {},
"Malware Artifacts/IOCs": {}
}
أعلاه هو مثال لطلب الخادم 0x27 (تحميل بيانات التطبيق). للاختبار ، تم إنشاء الحسابات في ثلاثة تطبيقات: Mozilla Firefox و NppFTP و FileZilla. لدى Loki ثلاثة خيارات لتسجيل بيانات التطبيق:
- كقاعدة بيانات SQL (يحفظ المحلل اللغوي قاعدة البيانات ويعرض جميع الصفوف المتوفرة فيها).
- في شكل مفتوح ، كما في Firefox في المثال.
- كملف xml مثل NppFTP و FileZilla.
Request information:
Loki detected!
Payload type: 39
No data stolen
{
"Network": {
"Source IP": "-",
"Destination IP": "185.141.27.187",
"HTTP Method": "POST",
"Traffic Purpose": "Exfiltrate Application/Credential Data",
"First Transmission": false
},
"Compromised Host/User Data": {},
"Malware Artifacts/IOCs": {}
}
الطلب الثاني من النوع 0x28 ويطلب أوامر من الخادم.
Responce information:
Body size: 26
Commands: 1
Command: 1
Command ID: 0
Command type: 9
Command timelimit: 0
Command data: 35
مثال على استجابة من CnC ، والتي أرسلت أمرًا واحدًا لبدء تشغيل برنامج تسجيل المفاتيح. والتفريغ اللاحق لبيانات راصد لوحة المفاتيح.
Request information:
Loki detected!
Payload type: : 43
{
"Network": {
"Source IP": "-",
"Destination IP": "185.141.27.187",
"HTTP Method": "POST",
"Traffic Purpose": "Exfiltrate Keylogger Data"
},
"Compromised Host/User Data": {},
"Malware Artifacts/IOCs": {}
}
في نهاية العمل ، يقوم المحلل اللغوي بطباعة المعلومات الواردة في كل طلب من الروبوت (معلومات حول الروبوت والنظام) ، وعدد الطلبات والاستجابات المرتبطة بـ Loki في ملف pcap.
General information:
{
"Network": {
"CnC": "nganyin-my.com/chief6/five/fre.php"
},
"Compromised Host/User Description": {
"User Name": "-",
"Hostname": "-",
"Domain Hostname": "-",
"Screen Resolution": "1024x768",
"Local Admin": true,
"Built-In Admin": true,
"64bit OS": false,
"Operating System": "Windows 7 Workstation"
},
"Malware Artifacts/IOCs": {
"Loki-Bot Version": 18,
"Binary ID": "ckav.ru",
"MD5 from GUID": "-",
"User-Agent String": "Mozilla/4.08 (Charon; Inferno)"
}
}
Requests: 3
Responces: 3
كود المحلل اللغوي الكامل متاح على: github.com/Group-IB/LokiParser
خاتمة
في هذه المقالة ، ألقينا نظرة فاحصة على برامج Loki الضارة وفككنا وظائفها ونفذنا محللًا لحركة مرور الشبكة من شأنه تبسيط عملية تحليل الحوادث بشكل كبير ومساعدتنا على فهم ما سُرق بالضبط من الكمبيوتر المصاب. بينما لا يزال تطوير Loki مستمرًا ، تم دمج الإصدار 1.8 (والإصدارات الأقدم) فقط ، وهو الإصدار الذي يواجهه محترفو الأمان كل يوم.
في المقالة التالية ، سنقوم بتحليل سارق بيانات آخر شهير ، المهر ، ومقارنة هذه البرامج الضارة.
مؤشر التسوية (IOCs):
عناوين URL:
- nganyin-my.com/chief6/five/fre.php
- Wardia.com.pe/wp-includes/texts/five/fre.php
- break2.cf/Work2/fre.php
- 185.141.27.187/danielsden/ver.php
- تجزئة MD5: B0C33B1EF30110C424BABD66126017E5
- User-Agent String: «Mozilla/4.08 (Charon; Inferno)»
- Binary ID: «ckav.ru»