hacktricks/macos-hardening/macos-red-teaming
2024-02-05 03:10:28 +00:00
..
macos-mdm Translated ['exploiting/linux-exploiting-basic-esp/README.md', 'exploiti 2024-02-05 03:10:28 +00:00
macos-keychain.md Translated ['linux-hardening/bypass-bash-restrictions/bypass-fs-protecti 2023-12-30 23:59:08 +00:00
README.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-01-10 06:28:19 +00:00

macOS Red Teaming

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Abusando de MDMs

  • JAMF Pro: jamf checkJSSConnection
  • Kandji

Si logras comprometer credenciales de administrador para acceder a la plataforma de gestión, puedes comprometer potencialmente todos los ordenadores distribuyendo tu malware en las máquinas.

Para red teaming en entornos MacOS, es altamente recomendable tener cierto entendimiento de cómo funcionan los MDMs:

{% content-ref url="macos-mdm/" %} macos-mdm {% endcontent-ref %}

Usando MDM como un C2

Un MDM tendrá permiso para instalar, consultar o eliminar perfiles, instalar aplicaciones, crear cuentas de administrador locales, establecer contraseña de firmware, cambiar la clave de FileVault...

Para ejecutar tu propio MDM necesitas tu CSR firmado por un proveedor, lo cual podrías intentar obtener con https://mdmcert.download/. Y para ejecutar tu propio MDM para dispositivos Apple podrías usar MicroMDM.

Sin embargo, para instalar una aplicación en un dispositivo inscrito, aún necesitas que esté firmada por una cuenta de desarrollador... sin embargo, al inscribirse en el MDM, el dispositivo agrega el certificado SSL del MDM como una CA de confianza, por lo que ahora puedes firmar cualquier cosa.

Para inscribir el dispositivo en un MDM necesitas instalar un archivo mobileconfig como root, que podría ser entregado a través de un archivo pkg (podrías comprimirlo en zip y cuando se descargue desde safari se descomprimirá).

El agente Mythic Orthrus utiliza esta técnica.

Abusando de JAMF PRO

JAMF puede ejecutar scripts personalizados (scripts desarrollados por el sysadmin), cargas útiles nativas (creación de cuentas locales, establecimiento de contraseña EFI, monitoreo de archivos/procesos...) y MDM (configuraciones de dispositivos, certificados de dispositivos...).

Autoinscripción en JAMF

Ve a una página como https://<nombre-de-la-empresa>.jamfcloud.com/enroll/ para ver si tienen autoinscripción habilitada. Si la tienen, podría pedir credenciales para acceder.

Podrías usar el script JamfSniper.py para realizar un ataque de rociado de contraseñas.

Además, después de encontrar credenciales adecuadas podrías ser capaz de forzar bruscamente otros nombres de usuario con el siguiente formulario:

Autenticación de dispositivo JAMF

El binario jamf contenía el secreto para abrir el llavero que en el momento del descubrimiento era compartido entre todos y era: jk23ucnq91jfu9aj.
Además, jamf persiste como un LaunchDaemon en /Library/LaunchAgents/com.jamf.management.agent.plist

Toma de control de dispositivo JAMF

La URL de JSS (Jamf Software Server) que jamf usará se encuentra en /Library/Preferences/com.jamfsoftware.jamf.plist.
Este archivo básicamente contiene la URL:

{% code overflow="wrap" %}

plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist

[...]
<key>is_virtual_machine</key>
<false/>
<key>jss_url</key>
<string>https://halbornasd.jamfcloud.com/</string>
<key>last_management_framework_change_id</key>
<integer>4</integer>
[...]

{% endcode %}

Por lo tanto, un atacante podría introducir un paquete malicioso (pkg) que sobrescribe este archivo al instalarse, configurando la URL para un escucha de Mythic C2 de un agente Typhon para ahora poder abusar de JAMF como C2.

{% code overflow="wrap" %}

# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0

# TODO: There is an ID, maybe it's possible to have the real jamf connection and another one to the C2

Suplantación de JAMF

Para suplantar la comunicación entre un dispositivo y JMF necesitas:

  • El UUID del dispositivo: ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'
  • El llavero de JAMF de: /Library/Application\ Support/Jamf/JAMF.keychain que contiene el certificado del dispositivo

Con esta información, crea una VM con el UUID de Hardware robado y con SIP desactivado, suelta el llavero de JAMF, intercepta el agente de Jamf y roba su información.

Robo de secretos

a

También podrías monitorear la ubicación /Library/Application Support/Jamf/tmp/ para los scripts personalizados que los administradores podrían querer ejecutar a través de Jamf, ya que se colocan aquí, se ejecutan y se eliminan. Estos scripts podrían contener credenciales.

Sin embargo, las credenciales podrían pasarse a estos scripts como parámetros, por lo que necesitarías monitorear ps aux | grep -i jamf (sin siquiera ser root).

El script JamfExplorer.py puede escuchar la adición de nuevos archivos y nuevos argumentos de procesos.

Acceso Remoto en macOS

Y también sobre los protocolos de red "especiales" de MacOS:

{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %} macos-protocols.md {% endcontent-ref %}

Active Directory

En algunas ocasiones encontrarás que el ordenador MacOS está conectado a un AD. En este escenario deberías intentar enumerar el directorio activo como estás acostumbrado. Encuentra ayuda en las siguientes páginas:

{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}

{% content-ref url="../../windows-hardening/active-directory-methodology/" %} active-directory-methodology {% endcontent-ref %}

{% content-ref url="../../network-services-pentesting/pentesting-kerberos-88/" %} pentesting-kerberos-88 {% endcontent-ref %}

Una herramienta local de MacOS que también puede ayudarte es dscl:

dscl "/Active Directory/[Domain]/All Domains" ls /

También hay algunas herramientas preparadas para MacOS que permiten enumerar automáticamente el AD y jugar con kerberos:

  • Machound: MacHound es una extensión de la herramienta de auditoría Bloodhound que permite recopilar e ingerir relaciones de Active Directory en hosts MacOS.
  • Bifrost: Bifrost es un proyecto en Objective-C diseñado para interactuar con las APIs de krb5 de Heimdal en macOS. El objetivo del proyecto es permitir una mejor prueba de seguridad en torno a Kerberos en dispositivos macOS utilizando APIs nativas sin requerir ningún otro marco o paquetes en el objetivo.
  • Orchard: Herramienta de JavaScript para Automatización (JXA) para hacer enumeración de Active Directory.

Información de Dominio

echo show com.apple.opendirectoryd.ActiveDirectory | scutil

Usuarios

Los tres tipos de usuarios de MacOS son:

  • Usuarios Locales — Gestionados por el servicio local OpenDirectory, no están conectados de ninguna manera con el Active Directory.
  • Usuarios de Red — Usuarios volátiles de Active Directory que requieren una conexión con el servidor DC para autenticarse.
  • Usuarios Móviles — Usuarios de Active Directory con una copia de seguridad local para sus credenciales y archivos.

La información local sobre usuarios y grupos se almacena en la carpeta /var/db/dslocal/nodes/Default.
Por ejemplo, la información sobre el usuario llamado mark se almacena en /var/db/dslocal/nodes/Default/users/mark.plist y la información sobre el grupo admin está en /var/db/dslocal/nodes/Default/groups/admin.plist.

Además de usar los bordes HasSession y AdminTo, MacHound añade tres nuevos bordes a la base de datos de Bloodhound:

  • CanSSH - entidad permitida para realizar SSH al host
  • CanVNC - entidad permitida para realizar VNC al host
  • CanAE - entidad permitida para ejecutar scripts de AppleEvent en el host
#User enumeration
dscl . ls /Users
dscl . read /Users/[username]
dscl "/Active Directory/TEST/All Domains" ls /Users
dscl "/Active Directory/TEST/All Domains" read /Users/[username]
dscacheutil -q user

#Computer enumeration
dscl "/Active Directory/TEST/All Domains" ls /Computers
dscl "/Active Directory/TEST/All Domains" read "/Computers/[compname]$"

#Group enumeration
dscl . ls /Groups
dscl . read "/Groups/[groupname]"
dscl "/Active Directory/TEST/All Domains" ls /Groups
dscl "/Active Directory/TEST/All Domains" read "/Groups/[groupname]"

#Domain Information
dsconfigad -show

Más información en https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/

Accediendo al Llavero

El Llavero probablemente contiene información sensible que, si se accede sin generar un aviso, podría ayudar a avanzar en un ejercicio de red team:

{% content-ref url="macos-keychain.md" %} macos-keychain.md {% endcontent-ref %}

Servicios Externos

El Red Teaming en MacOS es diferente al Red Teaming regular en Windows ya que normalmente MacOS está integrado directamente con varias plataformas externas. Una configuración común de MacOS es acceder al ordenador utilizando credenciales sincronizadas de OneLogin y acceder a varios servicios externos (como github, aws...) a través de OneLogin:

Técnicas Misceláneas de Red Team

Safari

Cuando se descarga un archivo en Safari, si es un archivo "seguro", se abrirá automáticamente. Por ejemplo, si descargas un zip, se descomprimirá automáticamente:

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: