Eine vermeintlich iranische Hackergruppe, genannt APT34, nutzt CVE-2017-11882 für neue gezielte Angriffe aus

Wenige Tage nachdem Microsoft am 14. November 2017 einen Patch für CVE-2017-11882 veröffentlicht hatte, beobachtete FireEye einen Angriff auf eine Regierungsbehörde im Nahen Osten, bei dem ein Exploit für diese Sicherheitslücke in Microsoft Office genutzt wurde. Unsere Analysen fanden heraus, dass der Angriff von einer iranischen Cyberspionagegruppe ausging, die wir APT34 nennen. Die Angreifer nutzten eine speziell angepasste PowerShell-Backdoor.

Mandiant vermutet, dass APT34 mindestens seit 2014 tätig und in langfristige Cyberspionageaktivitäten involviert ist, die vor allem Interessen des Iran verfolgen. Diese Hackergruppe hat bereits diverse Ziele in unterschiedlichen Branchen angegriffen, zum Beispiel Finanzdienstleister, staatliche Institutionen, Energie- und Chemieunternehmen sowie Telekommunikationskonzerne. Die meisten dieser Angriffe galten Zielen im Nahen Osten. APT34 agiert vermutlich im Auftrag der iranischen Regierung. Darauf lassen Infrastrukturdetails mit Verweisen auf den Iran, die Nutzung der iranischen Infrastruktur und die Ziele schließen, die im Interesse des Iran liegen.

APT34 setzt sowohl öffentliche als auch nicht öffentliche Tools ein und führt häufig Spear-Phishing-Angriffe mit manipulierten Konten durch, gelegentlich auch in Kombination mit Social-Engineering-Taktiken. In Mai 2016 haben wir einen Blogartikel  veröffentlicht , in dem wir eine Spear-Phishing-Kampagne beschrieben haben, mit der Banken im Nahen Osten angegriffen wurden. Dabei wurden Anhänge mit Makros eingesetzt, um die Malware POWBAT zu verbreiten. Inzwischen gehen wir davon aus, dass diese Kampagne ebenfalls von APT34 durchgeführt wurde. Im Juli 2017 beobachteten wir, wie APT34 ein Unternehmen im Nahen Osten angriff. Dabei setzte die Gruppe eine PowerShell-basierte Backdoor ein, die wir POWRUNER nennen, und einen Downloader mit DGA-Funktion (Domain Generation Algorithm), den wir aufgrund einer bestimmten Zeichenfolge in der Malware als BONDUPDATER bezeichnen. Die Backdoor wurde über eine schädliche RTF-Datei eingeschleust, die CVE-2017-0199 ausnutzt.

Beim jüngsten Angriff nutzte APT34 die neu aufgedeckte Sicherheitslücke CVE-2017-11882 in Microsoft Office aus, um POWRUNER und BONDUPDATER zu implementieren.

Den vollständigen Bericht über APT34 finden Sie in unserer MySIGHT-Community.  Es gibt auch einige Übereinstimmungen zwischen den Aktivitäten von APT34 und öffentlichen Berichten zur Gruppe „OilRig“. Da verschiedene Organisationen Hacker anhand von unterschiedlichen Datensätzen verfolgen, schreiben sie einzelne Aktivitäten unter Umständen verschiedenen Tätern zu.

CVE-2017-11882: Sicherheitslücke in Microsoft Office führt zur Beschädigung des Stapelspeichers

Von der Schwachstelle CVE-2017-11882 sind mehrere Versionen von Microsoft Office betroffen. Sie führt dazu, dass Objekte im Speicher fehlerhaft verarbeitet werden und erlaubt es Angreifern, per Remote-Zugriff beliebigen Code mit den Rechten des gerade angemeldeten Benutzers auszuführen. Diese Sicherheitslücke wurde von Microsoft am 14. November 2017 gepatcht. Eine Woche später wurde ein umfassender Proof-of-Concept (POC) von der Person veröffentlicht, die die Sicherheitslücke gemeldet hatte.

Die Sicherheitslücke befindet sich im alten Formel-Editor (EQNEDT32.EXE), einer Komponente von Microsoft Office, die zum Einfügen und Berechnen mathematischer Formeln dient. Der Formel-Editor wird über Objektverknüpfung und OLE-Technologie in die Office-Dokumente eingebettet. Er wird als eigenständiger Prozess und nicht als Tochterprozess von Microsoft Office ausgeführt. Wenn eine Formel an den Formel-Editor übergeben wurde, überprüfte dieser die Datenlänge beim Kopieren nicht richtig. Dies konnte dazu führen, dass Daten im Stapelspeicher beschädigt wurden. Da EQNEDT32.exe mit einem älteren Compiler erstellt wurde und die zufällige Anordnung des Layouts des Adressraums (Address Space Layout Randomization, ASLR) – eine Technik zum Schutz vor Speicherbeschädigung – nicht unterstützte, konnten Angreifer die Abfolge der Programmausführung relativ leicht manipulieren.

Analyse

APT34 sendete eine schädliche RTF-Datei (MD5: a0e6933f4e0497269620f44a083b2ed4) als Anhang einer Spear-Phishing-E-Mail an das anvisierte Unternehmen. Die RTF-Datei nutzte die Sicherheitslücke CVE-2017-11882 aus, wodurch der Stapelspeicher manipuliert und die schädlichen Daten in die Liste der auszuführenden Programme eingetragen wurden. Anschließend überschrieb die Malware die Funktionsadresse mit der Adresse eines Befehlssatzes aus EQNEDT32.EXE. Der manipulierte Befehlssatz (siehe Abbildung 1) wird zum Aufrufen der WinExec-Funktion aus kernel32.dll genutzt, wie an Position 00430c12 erkennbar.


Abbildung 1: Aufschlüsselung der manipulierten Funktionsadresse

Anschließend wird die WinExec-Funktion aufgerufen, um mit den Rechten des angemeldeten Benutzers einen Tochterprozess namens „mshta.exe“ zu erstellen. Dieser Prozess lädt ein schädliches Skript von hxxp://mumbai-m[.]site/b.txt herunter und führt dieses aus (siehe Abbildung 2).


Abbildung 2: Angriffsdaten werden in den kompromittierten Stapelpuffer kopiert.

Angriffsverlauf

Das Schadskript arbeitet mehrere Schritte ab, um die Befehle auszuführen und eine Verbindung zum Command-and-Control-Server (C2-Server) herzustellen. Abbildung 3 zeigt alle Schritte ab dem Öffnen des Exploit-Dokuments.


Abbildung 3: Angriffsverlauf für CVE-2017-11882 und POWRUNER

  1. Die schädliche RTF-Datei nutzt die Sicherheitslücke CVE-2017-11882 aus.
  2. Die Malware überschreibt die Funktionsadresse mit einem Befehlssatz aus EQNEDT32.EXE.
  3. Die Malware erstellt den Tochterprozess „mshta.exe“, der eine Datei von hxxp://mumbai-m[.]site/b.txt herunterlädt.
  4. b.txt enthält einen PowerShell-Befehl zum Herunterladen eines Droppers von hxxp://dns-update[.]club/v.txt. Mit dem PowerShell-Befehl wird auch die heruntergeladene Datei umbenannt (von „v.txt“ in „v.vbs“) und dann das Skript ausgeführt.
  5. Das v.vbs-Skript lädt vier Komponenten (hUpdateCheckers.base, dUpdateCheckers.base, cUpdateCheckers.bat und GoogleUpdateschecker.vbs) in das folgende Verzeichnis herunter: C:\ProgramData\Windows\Microsoft\java\
  6. v.vbs verwendet CertUtil.exe, ein legitimes Microsoft-Befehlszeilenprogramm, das als Teil der Zertifikatdienste installiert wird. Damit werden die mit Base64 verschlüsselten Dateien hUpdateCheckers.base und dUpdateCheckers.base entschlüsselt sowie hUpdateCheckers.ps1 und dUpdateCheckers.ps1 im Staging-Verzeichnis abgelegt.
  7. cUpdateCheckers.bat wird gestartet und erstellt eine geplante Aufgabe für die persistente Ausführung von GoogleUpdateschecker.vbs.
  8. GoogleUpdateschecker.vbs schläft fünf Sekunden und wird dann ausgeführt.
  9. cUpdateCheckers.bat und *.base werden aus dem Staging-Verzeichnis gelöscht.

In Abbildung 4 sehen Sie einen Auszug des Skripts v.vbs, das bei dem Angriff genutzt wird.


Abbildung 4: Auszug des beim Angriff verwendeten Skripts v.vbs

Nachdem diese Schritte erfolgreich abgeschlossen wurden, startet die Aufgabenplanung GoogleUpdateschecker.vbs jede Minute. Dadurch werden die Skripte dUpdateCheckers.ps1 und hUpdateCheckers.ps1 ausgeführt. Diese PowerShell-Skripte sind die Malware für die letzte Stufe. Sie enthalten einen Downloader mit DGA und die Backdoor zum C2-Server, um Befehle zu empfangen und weitere Angriffe auszuführen. 

hUpdateCheckers.ps1 (POWRUNER)

Die Backdoor-Komponente POWRUNER ist ein PowerShell-Skript, das Befehle vom C2-Server empfängt und an diesen sendet. POWRUNER wird jede Minute von der Aufgabenplanung ausgeführt. In Abbildung 5 ist ein Auszug der POWRUNER-Backdoor dargestellt.


Abbildung 1: POWRUNER-PowerShell-Skript hUpdateCheckers.ps1

POWRUNER sendet eine zufällig gewählte GET-Anfrage an den C2-Server und wartet auf eine Antwort. Der Server antwortet entweder mit „not_now“ oder mit einer elfstelligen Zufallszahl. Wenn POWRUNER eine Zufallszahl empfängt, sendet es eine weitere zufällig gewählte GET-Anfrage an den Server und speichert die Antwort in einem String. POWRUNER überprüft dann die letzte Ziffer der Zufallszahl, deutet den Wert als Befehl um und führt diesen aus. Die Befehlswerte und die zugehörigen Aktionen sind in Tabelle 1 beschrieben.

Befehl

Beschreibung

Maßnahmen

0

Die Antwort des Servers enthält Batch-Befehle.

Die Batch-Befehle werden ausgeführt und die Ergebnisse an den Server zurückgegeben.

1

Die Antwort des Servers enthält einen Dateipfad.

Der Dateipfad wird überprüft und die Datei auf den Server hochgeladen (PUT).

2

Die Antwort des Servers enthält einen Dateipfad.

Der Dateipfad wird überprüft und die Datei wird heruntergeladen (GET).

Tabelle 1: POWRUNER-Befehle

Nachdem POWRUNER den Befehl erfolgreich ausgeführt hat, sendet es die Ergebnisse an den C2-Server und stoppt die Ausführung.

Der C2-Server kann auch einen PowerShell-Befehl senden, um einen Screenshot von dem System des Opfers zu erstellen und zu speichern. Wird der Befehl „fileupload“ ausgegeben, sendet POWRUNER die Bilddatei mit dem Screenshot an den C2-Server. In Abbildung 6 ist der PowerShell-Befehl „Get-Screenshot“ dargestellt, den der C2-Server sendet.


Abbildung 6: PowerShell-Befehl zum Erstellen eines Screenshots

dUpdateCheckers.ps1 (BONDUPDATER)

Eine der neuesten Änderungen, die APT34 vorgenommen hat, ist die Einführung eines DGA zur Generierung von Subdomains. Das Skript BONDUPDATER, dessen Name sich aus dem hartcodierten String „B007“ ableitet, verwendet einen benutzerdefinierten DGA, um Subdomains für die Kommunikation mit dem C2-Server zu generieren.

DGA-Implementierung

In Abbildung 7 ist aufgeschlüsselt, wie eine Beispiel-Domain (456341921300006B0C8B2CE9C9B007.mumbai-m[.]site) mithilfe des benutzerdefinierten DGA von BONDUPDATER generiert wird.


Abbildung 7: Aufschlüsselung der Generierung einer Subdomain mit BONDUPDATER

  1. Dies ist eine Zufallszahl, die mithilfe des folgenden Ausdrucks generiert wird: $rnd = -join (Get-Random -InputObject (10..99) -Count (%{ Get-Random -InputObject (1..6)}));
  2. Ihr Wert ist entweder 0 oder 1. Zunächst wird er auf 0 gesetzt. Wenn die erste aufgelöste IP-Adresse der Domain mit 24.125.X.X beginnt, wird er auf 1 gesetzt.
  3. ursprünglich auf 000 gesetzt und nach jeder DNS-Anfrage um 3 erhöht
  4. die ersten 12 Stellen der System-UUID
  5. hartcodierter String „B007“
  6. hartcodierte Domain „mumbai-m[.]site“

BONDUPDATER versucht, die generierte DGA-Domain aufzulösen und entsprechend der IP-Adresse die folgenden Schritte auszuführen:

  1. Erstellen einer temporären Datei unter %temp%
    • Die erstellte Datei hat mindestens zwei Oktette der aufgelösten IP-Adresse als Dateiname.
  2. BONDUPDATER evaluiert das letzte Zeichen des Dateinamens und führt die entsprechende Aktion durch (siehe Tabelle 2).

Zeichen

Beschreibung

0

Die Datei beinhaltet Batch-Befehle und BONDUPDATER führt diese aus.

1

Die temporäre Datei wird umbenannt und die Dateiendung .ps1 angefügt.

2

Die temporäre Datei wird umbenannt und die Dateiendung .vbs angefügt.

Tabelle 2: BONDUPDATER-Aktionen

Abbildung 8 zeigt einen Screenshot der BONDUPDATER-DGA-Implementierung.


Abbildung 1: DGA (Domain Generation Algorithm)

Beispiele für Subdomains, die bei dem von uns beobachteten Angriff generiert wurden:

143610035BAF04425847B007.mumbai-m[.]site

835710065BAF04425847B007.mumbai-m[.]site

376110095BAF04425847B007.mumbai-m[.]site

Netzwerkkommunikation

Abbildung 9 zeigt ein Beispiel für die Netzwerkkommunikation zwischen dem Backdoor-Client POWRUNER und dem Server.


Abbildung 1: Beispiel für die Netzwerkkommunikation

In diesem Beispiel sendet der POWRUNER-Client eine beliebige GET-Anfrage an den C2-Server und erhält die Zufallszahl (99999999990) als Antwort zurück. Da die zurückgegebene Zufallszahl auf „0“ endet, sendet POWRUNER eine weitere zufällige GET-Anfrage, um einen weiteren Befehls-String zu erhalten. Der C2-Server sendet eine Base64-verschlüsselte Antwort zurück.

Wenn der Server hingegen (wie in Abbildung 10 dargestellt) den String „not_now“ gesendet hätte, hätte POWRUNER keine weiteren Anfragen geschickt und seine Ausführung beendet.


Abbildung 1: Beispiel für die "Serverantwort "„not_now“

Batch-Befehle

POWRUNER erhält möglicherweise auch Batch-Befehle zum Erfassen von Hostinformationen des infiltrierten Systems von seinem C2-Server, beispielsweise über den aktuell angemeldeten Benutzer, den Hostnamen, die Netzwerkkonfiguration, die aktiven Verbindungen, Prozessdaten, lokale und Domainadministratorkonten oder eine Liste der Benutzerverzeichnisse. Ein Beispiel für einen Batch-Befehl finden Sie in Abbildung 11.


Abbildung 1: Von dem POWRUNER-C2-Server gesendete Batch-Befehle

Weitere Einsatzbereiche von POWRUNER/BONDUPDATER

APT34 hat bereits im Juli 2017 POWRUNER und BONDUPDATER für Angriffe auf Ziele im Nahen Osten eingesetzt. Im Juli 2017 erkannte und blockierte eine FireEye Web MPS-Appliance einen Versuch, eine Downloader-Datei von APT34 POWRUNER/BONDUPDATER herunterzuladen und zu installieren. Im gleichen Monat deckte FireEye einen Angriff von APT34 auf ein Unternehmen im Nahen Osten auf, bei dem eine schädliche RTF-Datei (MD5: 63D66D99E46FB93676A4F475A65566D8) eingesetzt wurde, die CVE-2017-0199 ausnutzte. Diese Datei sendete eine GET-Anfrage, um eine Schaddatei von der folgenden Adresse herunterzuladen:

hxxp://94.23.172.164/dupdatechecker.doc.

Wie in Abbildung 12 dargestellt, versuchte das Skript in der dupatechecker.doc-Datei, eine weitere Datei mit der Bezeichnung dupatechecker.exe von demselben Server herunterzuladen. Die Datei enthielt zudem einen Kommentar des Malware-Entwicklers, mit dem er die Sicherheitsexperten herauszufordern schien.


Abbildung 1: Inhalte des Skripts dupdatechecker.doc

Die Datei dupatechecker.exe (MD5: C9F16F0BE8C77F0170B9B6CE876ED7FB) lädt sowohl BONDUPDATER als auch POWRUNER herunter. Diese Dateien stellen eine Verbindung zu proxychecker[.]pro her, um Kontakt zum C2-Server zu halten.

Ausblick und mögliche Konsequenzen

Die jüngsten Aktivitäten zeigen, dass APT34 eine technisch versierte Hackergruppe ist, die vermutlich Zugang zu eigenen Entwicklungsressourcen hat. In den letzten Monaten hat APT34 bei Angriffen auf Unternehmen im Nahen Osten schnell Exploits für mindestens zwei öffentlich bekannte Sicherheitslücken (CVE-2017-0199 und CVE-2017-11882) genutzt. Unsere Untersuchungen deuten darauf hin, dass APT34 seine Malware kontinuierlich aktualisiert, zum Beispiel durch die DGA-Implementierung für den C2-Server. Das zeigt, wie sehr die Gruppe bemüht ist, unbemerkt zu bleiben. Wir gehen davon aus, dass APT34 seine Malware und Taktiken auch in Zukunft weiterentwickeln und für Angriffe auf Ziele im Nahen Osten nutzen wird.

IOCs

Dateiname/Domain/IP-Adresse

MD5-Hashwert oder Beschreibung

Dokument zur Ausnutzung von CVE-2017-11882

A0E6933F4E0497269620F44A083B2ED4

b.txt

9267D057C065EA7448ACA1511C6F29C7

v.txt/v.vbs

B2D13A336A3EB7BD27612BE7D4E334DF

dUpdateCheckers.base

4A7290A279E6F2329EDD0615178A11FF

hUpdateCheckers.base

841CE6475F271F86D0B5188E4F8BC6DB

cUpdateCheckers.bat

52CA9A7424B3CC34099AD218623A0979

dUpdateCheckers.ps1

BBDE33F5709CB1452AB941C08ACC775E

hUpdateCheckers.ps1

247B2A9FCBA6E9EC29ED818948939702

GoogleUpdateschecker.vbs

C87B0B711F60132235D7440ADD0360B0

hxxp://mumbai-m[.]site

POWRUNER C2

hxxp://dns-update[.]club

Malware-Staging-Server

Dokument zur Ausnutzung von CVE-2017-0199

63D66D99E46FB93676A4F475A65566D8

94.23.172.164:80

Malware-Staging-Server

dupdatechecker.doc

D85818E82A6E64CA185EDFDDBA2D1B76

dupdatechecker.exe

C9F16F0BE8C77F0170B9B6CE876ED7FB

proxycheker[.]pro

C2

46.105.221.247

Auflösung von mumbai-m[.]site & hpserver[.]online

148.251.55.110

Auflösung von mumbai-m[.]site und dns-update[.]club

185.15.247.147

Auflösung von dns-update[.]club

145.239.33.100

Auflösung von dns-update[.]club

82.102.14.219

Auflösung von ns2.dns-update[.]club & hpserver[.]online & anyportals[.]com

v7-hpserver.online.hta

E6AC6F18256C4DDE5BF06A9191562F82

dUpdateCheckers.base

3C63BFF9EC0A340E0727E5683466F435

hUpdateCheckers.base

EEB0FF0D8841C2EBE643FE328B6D9EF5

cUpdateCheckers.bat

FB464C365B94B03826E67EABE4BF9165

dUpdateCheckers.ps1

635ED85BFCAAB7208A8B5C730D3D0A8C

hUpdateCheckers.ps1

13B338C47C52DE3ED0B68E1CB7876AD2

googleupdateschecker.vbs

DBFEA6154D4F9D7209C1875B2D5D70D5

hpserver[.]online

C2

v7-anyportals.hta

EAF3448808481FB1FDBB675BC5EA24DE

dUpdateCheckers.base

42449DD79EA7D2B5B6482B6F0D493498

hUpdateCheckers.base

A3FCB4D23C3153DD42AC124B112F1BAE

dUpdateCheckers.ps1

EE1C482C41738AAA5964730DCBAB5DFF

hUpdateCheckers.ps1

E516C3A3247AF2F2323291A670086A8F

anyportals[.]com

C2