Mitte Juni war der Kampf gegen das Coronavirus in Kasachstan in vollem Gange. Angesichts der wachsenden Zahl von Fällen (damals wurde sogar der frühere Präsident Nursultan Nasarbajew infiziert) beschlossen die lokalen Behörden, alle Einkaufs- und Unterhaltungszentren, Filialisten, Märkte und Basare wieder zu schließen. In diesem Moment nutzten Cyberkriminelle die Situation, indem sie böswillige Mailings an russische und internationale Unternehmen schickten.
Gefährliche Briefe, getarnt als Appell des Gesundheitsministers der Republik Kasachstan, wurden von der Gruppe IB des Threat Detection System (TDS) abgefangen. Der Anhang enthielt Dokumente, die beim Start ein Schadprogramm aus der Loki PWS-Familie (Password Stealer) installierten, mit dem Anmeldungen und Kennwörter von einem infizierten Computer gestohlen werden konnten. In Zukunft können Angreifer sie verwenden, um Zugriff auf E-Mail-Konten für Finanzbetrug, Spionage zu erhalten oder sie in Hackerforen zu verkaufen.
In diesem Artikel untersucht Nikita Karpov, Analyst bei CERT-GIB , eine Instanz eines der derzeit beliebtesten Data Stealer - Loki.
Heute werden wir eine der beliebtesten Bot-Versionen betrachten - 1.8. Es wird aktiv verkauft und das Admin-Panel ist sogar gemeinfrei: hier .
Beispiel für das Admin-Panel:

Loki ist in C ++ geschrieben und eine der beliebtesten Malware, mit der Benutzerinformationen von einem infizierten Computer gestohlen werden. Wie die Geißel unserer Zeit - Ransomware-Viren - führt Data Stealer, nachdem er auf dem Computer des Opfers getroffen wurde, die Aufgabe mit sehr hoher Geschwindigkeit aus - er muss nicht Fuß fassen und seine Privilegien im System erhöhen, er lässt fast keine Zeit, sich gegen einen Angriff zu verteidigen. Daher spielt bei Ereignissen mit Malware, die Benutzerdaten stiehlt, die Untersuchung von Vorfällen die Hauptrolle.
Auspacken und Abrufen eines funktionsfähigen Malware-Dumps
Die Verteilung erfolgt in den meisten Fällen über Anhänge in Mailinglisten. Der als legitime Datei getarnte Benutzer lädt den Anhang herunter, öffnet ihn und startet die Malware.
Der Injektionsmarker weist auf das Vorhandensein eines Laders hin.

Mit Hilfe von DIE erhalten wir Informationen, dass die Quelldatei in VB6 geschrieben ist.

Das Entropiediagramm zeigt eine große Menge verschlüsselter Daten an.

Beim Start erstellt der erste Prozess einen untergeordneten Prozess, injiziert ihn und wird beendet. Der zweite Prozess ist für die Arbeit der Malware verantwortlich. Nach kurzer Zeit stoppen wir den Prozess und speichern den Speicherauszug. Um zu bestätigen, dass sich Loki im Dump befindet, schauen Sie in die URL der Kommandozentrale, die in den meisten Fällen mit fre.php endet .

Wir sichern das Speicherfragment mit dem Loki und korrigieren den PE-Header.
Wir werden die Leistung des Dumps mit dem TDS Huntbox-System überprüfen.

Bot-Funktionalität
Bei der Prüfung des dekompilierten Malware-Codes finden wir einen Teil mit vier Funktionen, die unmittelbar nach der Initialisierung der für den Vorgang erforderlichen Bibliotheken ausgeführt werden. Nachdem wir jeden von ihnen im Inneren zerlegt haben, bestimmen wir ihren Zweck und ihre Funktionalität für unsere Malware.

Funktionsnamen wurden umbenannt, um der Einfachheit halber aussagekräftiger zu sein.
Die Bot-Funktionalität wird durch zwei Hauptfunktionen bestimmt:
- Data Stealer ist die erste Funktion, die Daten aus 101 Anwendungen stiehlt und an den Server sendet.
- Downloader - eine Anforderung von CnC-Befehlen (Command & Control) zur Ausführung.
In der folgenden Tabelle sind der Einfachheit halber alle Anwendungen aufgeführt, aus denen die untersuchte Loki-Instanz versucht, Daten zu stehlen.
| Funktions-ID | Anwendung | Funktions-ID | Anwendung | Funktions-ID | Anwendung |
|---|---|---|---|---|---|
| 1 | Mozilla Firefox | 35 | FTPInfo | 69 | ClassicFTP |
| 2 | Comodo IceDragon | 36 | LinasFTP | 70 | PuTTY / KiTTY |
| 3 | Apple Safari | 37 | FileZilla | 71 | Thunderbird |
| 4 | K-Meleon | 38 | Mitarbeiter-FTP | 72 | Foxmail |
| fünf | Seeaffe | 39 | BlazeFtp | 73 | Pocomail |
| 6 | Herde | 40 | NETFile | 74 | IncrediMail |
| 7 | NETGATE BlackHawk | 41 | GoFTP | 75 | Google Mail Notifier Pro |
| 8 | Lunascape | 42 | ALFTP | 76 | Checkmail |
| neun | Google Chrome | 43 | DeluxeFTP | 77 | WinFtp |
| zehn | Oper | 44 | Total Commander | 78 | Martin Prikryl |
| elf | QTWeb Browser | 45 | FTPGetter | 79 | 32BitFtp |
| 12 | QupZilla | 46 | WS_FTP | 80 | FTP Navigator |
| dreizehn | Internet Explorer | 47 | Mail Client-Konfigurationsdateien | 81 | Mailing
(softwarenetz) |
| vierzehn | Oper 2 | 48 | Full Tilt Poker | 82 | Opera Mail |
| fünfzehn | Cyberfox | 49 | Pokerstars | 83 | Briefkasten |
| Sechszehn | Blasser Mond | 50 | ExpanDrive | 84 | FossaMail |
| 17 | Wasserfuchs | 51 | Ross | 85 | Becky! |
| achtzehn | Pidgin | 52 | FlashFXP | 86 | POP3 |
| 19 | SuperPutty | 53 | NovaFTP | 87 | Ausblick |
| 20 | FTPShell | 54 | NetDrive | 88 | Ymail2 |
| 21 | NppFTP | 55 | Total Commander 2 | 89 | Trojitá |
| 22 | MyFTP | 56 | SmartFTP | 90 | TrulyMail |
| 23 | FTPBox | 57 | FAR Manager | 91 | .spn-Dateien |
| 24 | Sherrod FTP | 58 | Bitvise | 92 | To-Do-Desklist |
| 25 | FTP jetzt | 59 | RealVNC
TightVNC |
93 | Stickies |
| 26 | NexusFile | 60 | mSecure Wallet | 94 | NoteFly |
| 27 | Xftp | 61 | Syncovery | 95 | NoteZilla |
| 28 | EasyFTP | 62 | FreshFTP | 96 | Haftnotizen |
| 29 | SftpNetDrive | 63 | BitKinex | 97 | KeePass |
| dreißig | AbleFTP | 64 | UltraFXP | 98 | Übergeben |
| 31 | JaSFtp | 65 | FTP jetzt 2 | 99 | Mein RoboForm |
| 32 | Automatisieren | 66 | Vandyk SecureFX | 100 | 1Passwort |
| 33 | Cyberduck | 67 | Odin Secure FTP-Experte | 101 | Mikrotik WinBox |
| 34 | Fullsync | 68 | Schleudern |
Vernetzung
Es gibt zwei Probleme, die behoben werden müssen, um Netzwerkinteraktionen aufzuzeichnen:
- Das Command Center ist nur zum Zeitpunkt des Angriffs verfügbar.
- Wireshark zeichnet keine Bot-Kommunikation im Loopback auf, daher müssen Sie andere Mittel verwenden.
Die einfachste Lösung besteht darin, die CnC-Adresse, mit der Loki kommuniziert, an localhost weiterzuleiten. Für den Bot ist der Server jetzt jederzeit verfügbar, obwohl er nicht antwortet, aber es ist nicht erforderlich, die Kommunikation des Bots aufzuzeichnen. Um das zweite Problem zu lösen, verwenden wir das Dienstprogramm RawCap, mit dem wir die für pcap erforderlichen Mitteilungen schreiben können. Als nächstes werden wir die aufgezeichnete PCAP in Wireshark analysieren.

Vor jeder Kommunikation überprüft der Bot die Verfügbarkeit von CnC und öffnet, falls verfügbar, einen Socket. Die gesamte Netzwerkkommunikation findet auf Transportebene unter Verwendung des TCP-Protokolls statt, und auf Anwendungsebene wird HTTP verwendet.
Die folgende Tabelle zeigt die Paket-Header, die Loki standardmäßig verwendet.
| Feld | Wert | Beschreibung |
|---|---|---|
| User-Agent | Mozilla / 4.08 (Charon; Inferno) | Ein typischer User Agent für Loki |
| Akzeptieren | * / * | |
| Inhaltstyp | Anwendung / Oktett-Stream | |
| Inhaltskodierung | binär | |
| Inhaltsschlüssel | 7DE968CC | Hashing-Ergebnis früherer Header (Hashing wird von einem benutzerdefinierten CRC-Algorithmus mit dem Polynom 0xE8677835 durchgeführt) |
| Verbindung | schließen |
- Die Struktur der aufgezeichneten Daten hängt von der Version des Bots ab. In früheren Versionen gibt es keine Felder, die für die Verschlüsselungs- und Komprimierungsoptionen verantwortlich sind.
- Der Server bestimmt anhand der Art der Anforderung, wie die empfangenen Daten verarbeitet werden sollen. Es gibt 7 Arten von Daten, die der Server lesen kann:
- 0x26 Gestohlene Brieftaschendaten
- 0x27 Gestohlene Anwendungsdaten
- 0x28 Befehlsanforderung vom Server
- 0x29 Entladen einer gestohlenen Datei
- 0x2A POS
- 0x2B Keylogger-Daten
- 0x2C Screenshot
- In der untersuchten Instanz waren nur 0x27, 0x28 und 0x2B vorhanden.
- Jede Anfrage enthält allgemeine Informationen über den Bot und das infizierte System, nach denen der Server alle Berichte für einen Computer identifiziert. Anschließend gibt es Informationen, die von der Art der Anfrage abhängen.
- In der neuesten Version des Bots ist nur die Datenkomprimierung implementiert, und verschlüsselte Felder werden für die Zukunft vorbereitet und nicht vom Server verarbeitet.
- Die Open Source APLib-Bibliothek wird zum Komprimieren von Daten verwendet.
Beim Bilden einer Anfrage mit gestohlenen Daten weist der Bot einen Puffer der Größe 0x1388 (5000 Byte) zu. Die Struktur der 0x27-Anforderungen ist in der folgenden Tabelle aufgeführt:
| Vorspannen | Die Größe | Wert | Beschreibung |
|---|---|---|---|
| 0x0 | 0x2 | 0x0012 | Bot-Version |
| 0x2 | 0x2 | 0x0027 | Anfragetyp (gestohlene Daten senden) |
| 0x4 | 0xD | ckav.ru | Binäre ID (XXXXX11111 tritt auch auf) |
| 0x11 | 0x10 | - - | Benutzername |
| 0x21 | 0x12 | - - | Computername |
| 0x33 | 0x12 | - - | Domänenname des Computers |
| 0x45 | 0x4 | - - | Bildschirmauflösung (Breite und Höhe)
|
| 0x49 | 0x4 | - - | |
| 0x4D | 0x2 | 0x0001 | Benutzerrechte-Flag (1, wenn Administrator) |
| 0x4F | 0x2 | 0x0001 | SID-Flag (1, falls gesetzt) |
| 0x51 | 0x2 | 0x0001 | Systembitness-Flag (1, wenn x64) |
| 0x53 | 0x2 | 0x0006 | Windows-Version (Hauptversionsnummer) |
| 0x55 | 0x2 | 0x0001 | Windows-Version (Nebenversionsnummer) |
| 0x57 | 0x2 | 0x0001 | Zusätzliche Systeminformationen (1 = VER_NT_WORKSTATION) |
| 0x59 | 0x2 | - - | |
| 0x5B | 0x2 | 0x0000 | Wurden die gestohlenen Daten gesendet? |
| 0x5D | 0x2 | 0x0001 | Wurde Datenkomprimierung verwendet? |
| 0x5F | 0x2 | 0x0000 | Komprimierungsart |
| 0x61 | 0x2 | 0x0000 | Wurde Datenverschlüsselung verwendet? |
| 0x63 | 0x2 | 0x0000 | Verschlüsselungstyp |
| 0x65 | 0x36 | - - | MD5 aus dem MachineGuid-Registerwert |
| 0x9B | - - | - - | Komprimierte gestohlene Daten |
: Puffergröße: 0x2BC (700 Bytes)
| Vorspannen | Die Größe | Wert | Beschreibung |
|---|---|---|---|
| 0x0 | 0x2 | 0x0012 | Bot-Version |
| 0x2 | 0x2 | 0x0028 | Anfragetyp (Befehlsanforderung von der Kommandozentrale) |
| 0x4 | 0xD | ckav.ru | Binäre ID (XXXXX11111 tritt auch auf) |
| 0x11 | 0x10 | - - | Benutzername |
| 0x21 | 0x12 | - - | Computername |
| 0x33 | 0x12 | - - | Domänenname des Computers |
| 0x45 | 0x4 | - - | Bildschirmauflösung (Breite und Höhe) |
| 0x49 | 0x4 | - - | |
| 0x4D | 0x2 | 0x0001 | Benutzerrechte-Flag (1, wenn Administrator) |
| 0x4F | 0x2 | 0x0001 | SID-Flag (1, falls gesetzt) |
| 0x51 | 0x2 | 0x0001 | Systembitness-Flag (1, wenn x64) |
| 0x53 | 0x2 | 0x0006 | Windows-Version (Hauptversionsnummer) |
| 0x55 | 0x2 | 0x0001 | Windows-Version (Nebenversionsnummer) |
| 0x57 | 0x2 | 0x0001 | Zusätzliche Systeminformationen (1 = VER_NT_WORKSTATION) |
| 0x59 | 0x2 | 0xFED0 | |
| 0x5B | 0x36 | - - | MD5 aus dem MachineGuid-Registerwert |
Puffergröße: 0x10 (16 Byte) + 0x10 (16 Byte) für jeden Befehl im Paket.
| HTTP-Header (Datenanfang) | \ r \ n \ r \ n | [0D 0A 0D 0A] | 4 Bytes | ||
| - | - | 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
Ändern Sie die Häufigkeit der Überprüfung der Antwort vom Server |
[00 00 00 00] | [00 00 00 10] | [00 00 00 00] | [00 00 00 01] | fünf |
| # 17
Loki entfernen und beenden |
[00 00 00 00] | [00 00 00 11] | [00 00 00 00] | [00 00 00 00] | - - |
Netzwerkverkehrsparser
Dank dieser Analyse verfügen wir über alle Informationen, die wir zum Analysieren der Netzwerkinteraktionen von Loki benötigen.
Der Parser ist in Python implementiert, empfängt eine pcap-Datei als Eingabe und findet darin alle zu Loki gehörenden Kommunikationen.
Verwenden wir zunächst die dkpt-Bibliothek, um alle TCP-Pakete zu finden. Um nur http-Pakete zu empfangen, setzen wir einen Filter auf den verwendeten Port. Unter den empfangenen http-Paketen wählen wir diejenigen aus, die die bekannten Loki-Header enthalten, und erhalten Mitteilungen, die analysiert werden müssen, um Informationen in lesbarer Form daraus zu extrahieren.
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
Bei allen Loki-Anforderungen sind die ersten 4 Bytes für die Bot-Version und den Anforderungstyp verantwortlich. Mit diesen beiden Parametern bestimmen wir, wie wir die Daten verarbeiten.
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
Als Nächstes wird die Antwort vom Server analysiert. Um nur nützliche Informationen zu lesen, suchen Sie nach der Sequenz \ r \ n \ r \ n , die das Ende der Paket-Header und den Beginn der Befehle vom Server definiert.
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
Dies schließt die Analyse des Hauptteils des Parser-Algorithmus ab und fährt mit dem Ergebnis fort, das wir am Ausgang erhalten. Alle Informationen werden im JSON-Format angezeigt.
Unten finden Sie Bilder des Ergebnisses der Arbeit des Parsers, die aus der Kommunikation verschiedener Bots mit unterschiedlichem CnC erhalten und in verschiedenen Umgebungen aufgezeichnet wurden.
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": {}
}
Oben sehen Sie ein Beispiel für eine Anforderung an Server 0x27 (Hochladen von Anwendungsdaten). Zum Testen wurden Konten in drei Anwendungen erstellt: Mozilla Firefox, NppFTP und FileZilla. Loki bietet drei Optionen zum Aufzeichnen von Anwendungsdaten:
- In Form einer SQL-Datenbank (der Parser speichert die Datenbank und zeigt alle verfügbaren Zeilen darin an).
- In offener Form, wie im Beispiel Firefox.
- Als XML-Datei wie NppFTP und 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": {}
}
Die zweite Anforderung ist vom Typ 0x28 und fordert Befehle vom Server an.
Responce information:
Body size: 26
Commands: 1
Command: 1
Command ID: 0
Command type: 9
Command timelimit: 0
Command data: 35
Ein Beispiel für eine Antwort von CnC, die einen Befehl zum Starten des Keyloggers gesendet hat. Und das anschließende Entladen von Keylogger-Daten.
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": {}
}
Am Ende der Arbeit gibt der Parser die in jeder Anforderung enthaltenen Informationen vom Bot (Informationen über den Bot und das System) sowie die Anzahl der mit Loki verknüpften Anforderungen und Antworten in der pcap-Datei aus.
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
Der vollständige Parser-Code ist verfügbar unter: github.com/Group-IB/LokiParser
Fazit
In diesem Artikel haben wir uns die Loki-Malware genauer angesehen, ihre Funktionalität analysiert und einen Netzwerkverkehrsparser implementiert, der die Analyse eines Vorfalls erheblich vereinfacht und uns hilft, zu verstehen, was genau von einem infizierten Computer gestohlen wurde. Während die Loki-Entwicklung noch andauert, ist nur Version 1.8 (und früher) durchgesickert. Dies ist die Version, auf die Sicherheitsexperten täglich stoßen.
Im nächsten Artikel werden wir einen anderen beliebten Data Stealer, Pony, analysieren und diese Malware vergleichen.
Kompromissindikator (IOCs):
Urls:
- nganyin-my.com/chief6/five/fre.php
- wardia.com.pe/wp-includes/texts/five/fre.php
- gebrochen2.cf/Work2/fre.php
- 185.141.27.187/danielsden/ver.php
- MD5-Hash: B0C33B1EF30110C424BABD66126017E5
- User-Agent String: «Mozilla/4.08 (Charon; Inferno)»
- Binary ID: «ckav.ru»