Con el lanzamiento de disponibilidad general del Huntress Agent para macOS, quisimos compartir algunas de las cosas relacionadas con Apple en las que hemos estado trabajando tras bambalinas. En este artículo, nos ponemos el sombrero del equipo rojo, analizamos un script de ransomware para macOS y conversamos sobre cómo mejoramos su eficacia ofensiva.
"Las Mac no se infectan con malware, tonto."
Un mito urbano interesante de la seguridad de la información es que los productos de Apple no se infectan con malware.
Aunque esto es una tontería, por supuesto, es importante analizar brevemente lo que realmente se quiere decir con esto.
El sistema operativo Windows ha dominado el mercado durante bastante tiempo, y si eres un adversario, probablemente perfeccionarías tus habilidades en el mercado más grande, donde tus técnicas pueden tener mayor impacto.
El malware para Windows le da a los atacantes más beneficio por su esfuerzo. Nunca fue cierto que las Mac no se infectaran con malware; más bien, solo unos pocos escribían herramientas maliciosas para atacar esta pequeña porción del mercado de sistemas operativos.
A medida que el mercado de sistemas operativos se ha vuelto más multipolar, se ha vuelto cada vez más ventajoso para los atacantes enfocarse en los productos de Apple. En 2022, una realidad que debemos aceptar es que las Mac pueden ser hackeadas, pueden sufrir ransomware y, de hecho, pueden infectarse con malware.
Cómo encontramos ransomware para macOS
Somos conocedores de lo turbio. Siempre tenemos un ojo puesto en los distintos tuits, Discords, Slack y foros rusos, así que mantenemos el dedo en el pulso de lo último y mejor en seguridad ofensiva.
En uno de estos casos, encontramos un script de ransomware para macOS* que circulaba por ahí.
En una primera inspección, encontramos que no funcionaba de inmediato.
- La unidad cifrada no tenía una contraseña establecida
- Los archivos no lograban exfiltrarse a la dirección controlada por el atacante
Bueno, había algunas fallas en este script. Probablemente era una plantilla de script de ransomware que el operador ofensivo debía completar. Aun así, pudimos identificar las partes específicas del script que causaban la falla.
- diskX: Se asumió en el script un nombre o número de disco para que el ransomware lo atacara. Esto era en gran medida correcto en su valor predeterminado en la plantilla.
- ~/exfil/*: Este es un directorio codificado de forma fija que probablemente no existiría en una máquina, hasta que se crea.
- Curl: No tenemos un servidor C2 al cual enviar las credenciales, algo fácil de solucionar.
Cómo arreglamos el ransomware para macOS
Una vez que identificamos los vacíos en la plantilla, nos pusimos a trabajar para hacer que este ransomware fuera funcional.
Fue fácil solucionar los problemas con el directorio codificado de forma fija, ya que simplemente podíamos mover los archivos a un volumen y directorio que creamos. Para solucionar el problema de la exfiltración de datos, tuvimos que dar una IP o un dominio que controláramos (en este caso, usamos localhost, pero no hay razón para que no puedas insertar una IP o dominio público).
Para apuntar de forma confiable al disco correcto y cifrarlo maliciosamente, usamos el comando diskutil y editores de texto de línea de comandos para seleccionar específicamente el número de disco que contenía el Apple File System.
`diskutil info / | grep 'APFS Container:' | awk {'print $3'}`
Una vez solucionado, nos queda un script de Bash de una sola línea que crea su propia unidad cifrada en la Mac del objetivo, copia archivos críticos a esta unidad y la desmonta. Luego usa OpenSSL para enviar la contraseña de descifrado, dejando al objetivo con una unidad cifrada maliciosamente, archivos robados y la certeza de que tendrá que pagar $$$ para recuperarlo todo.
Como puedes ver, tuvimos que hacer bastantes modificaciones para que este script de shell funcionara. Esto incluyó agregar la opción de OpenSSL.
Podemos evitar usar un framework de C2 y simplemente usar OpenSSL como una fantástica alternativa. Las credenciales se envían a la máquina del atacante usando OpenSSL. No solo los datos están cifrados; la conexión en sí es segura. También incluimos `p=""` dentro del script para asegurarnos de que las credenciales no se puedan recuperar mediante un volcado de memoria, y para dificultar aún más los esfuerzos de DFIR, modificamos el script para almacenar una nueva contraseña aleatoria en `p`. 😅
Desglosando el script final
Repasemos el script:
- Primero, generamos una contraseña aleatoria de 64 caracteres como la variable `p`, usando /dev/urandom integrado, junto con herramientas de línea de comandos de edición de texto
- Luego, identificamos el contenedor APFS que se está usando y creamos una unidad APFS cifrada llamada `XX` en la máquina de la víctima
- Luego movemos archivos y carpetas importantes, desmontamos la unidad cifrada y enviamos la contraseña de vuelta a la máquina del atacante usando OpenSSL
¡Basta de charla! ¡Es hora de ejecutar a este rufián!
Podemos ver que el script se ejecutó a la perfección, y las credenciales se enviaron a la máquina del atacante sin tocar nunca el endpoint.
Ransomware en macOS
En Huntress, seguimos la filosofía de que no podemos defender redes sin entender a nuestros adversarios.
Emular técnicas de seguridad ofensiva nos permite, como equipo azul, mejorar nuestras propias técnicas y, a su vez, ser mejores a la hora de expulsar a los actores de amenazas que intentan implementar ransomware con fines maliciosos.
Si quieres probar el ransomware para macOS que se analiza en este artículo, puedes encontrarlo aquí junto con otros recursos que reunimos para esta publicación.
Si te interesa mejorar tus habilidades defensivas practicando de forma proactiva técnicas de equipo rojo, puede que te interese el Tradecraft Tuesday de noviembre de 2022, donde conversamos con más detalle sobre qué implica la seguridad proactiva.
*Se confirmó por última vez que este script funciona en macOS Monterey.