hacktricks/macos-hardening/macos-red-teaming/README.md

14 KiB

Red Teaming no macOS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Abusando dos MDMs

  • JAMF Pro: jamf checkJSSConnection
  • Kandji

Se você conseguir comprometer as credenciais de administrador para acessar a plataforma de gerenciamento, você pode potencialmente comprometer todos os computadores distribuindo seu malware nas máquinas.

Para o red teaming em ambientes macOS, é altamente recomendado ter algum entendimento de como os MDMs funcionam:

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

Usando MDM como C2

Um MDM terá permissão para instalar, consultar ou remover perfis, instalar aplicativos, criar contas de administrador local, definir senha do firmware, alterar a chave do FileVault...

Para executar seu próprio MDM, você precisa do seu CSR assinado por um fornecedor, que você pode tentar obter em https://mdmcert.download/. E para executar seu próprio MDM para dispositivos Apple, você pode usar MicroMDM.

No entanto, para instalar um aplicativo em um dispositivo inscrito, você ainda precisa que ele seja assinado por uma conta de desenvolvedor... no entanto, ao se inscrever no MDM, o dispositivo adiciona o certificado SSL do MDM como uma CA confiável, então agora você pode assinar qualquer coisa.

Para inscrever o dispositivo em um MDM, você precisa instalar um arquivo mobileconfig como root, que pode ser entregue por meio de um arquivo pkg (você pode compactá-lo em zip e, quando baixado do Safari, ele será descompactado).

O agente Mythic Orthrus usa essa técnica.

Abusando do JAMF PRO

O JAMF pode executar scripts personalizados (scripts desenvolvidos pelo sysadmin), cargas úteis nativas (criação de contas locais, definição de senha EFI, monitoramento de arquivos/processos...) e MDM (configurações de dispositivo, certificados de dispositivo...).

Autoinscrição do JAMF

Acesse uma página como https://<nome-da-empresa>.jamfcloud.com/enroll/ para ver se eles têm a autoinscrição ativada. Se eles tiverem, pode solicitar credenciais para acessar.

Você pode usar o script JamfSniper.py para realizar um ataque de pulverização de senhas.

Além disso, depois de encontrar as credenciais corretas, você pode ser capaz de fazer força bruta em outros nomes de usuário com o formulário a seguir:

Autenticação de dispositivo JAMF

O binário jamf continha o segredo para abrir o keychain que, na época da descoberta, era compartilhado por todos e era: jk23ucnq91jfu9aj.
Além disso, o jamf persiste como um LaunchDaemon em /Library/LaunchAgents/com.jamf.management.agent.plist

Assumindo o controle do dispositivo JAMF

A URL do JSS (Jamf Software Server) que o jamf usará está localizada em /Library/Preferences/com.jamfsoftware.jamf.plist.
Este arquivo basicamente contém a 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>
[...]

Portanto, um invasor poderia inserir um pacote malicioso (pkg) que sobrescreve esse arquivo quando instalado, definindo a URL para um ouvinte Mythic C2 de um agente Typhon para agora poder abusar do 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

{% endcode %}

Impersonação do JAMF

Para impersonar a comunicação entre um dispositivo e o JMF, você precisa de:

  • O UUID do dispositivo: ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'
  • O keychain do JAMF em: /Library/Application\ Support/Jamf/JAMF.keychain que contém o certificado do dispositivo

Com essas informações, crie uma VM com o UUID de Hardware roubado e com o SIP desabilitado, copie o keychain do JAMF, intercepte o agente do Jamf e roube suas informações.

Roubo de segredos

a

Você também pode monitorar o local /Library/Application Support/Jamf/tmp/ para os scripts personalizados que os administradores podem querer executar via Jamf, pois eles são colocados aqui, executados e removidos. Esses scripts podem conter credenciais.

No entanto, as credenciais podem ser passadas para esses scripts como parâmetros, então você precisaria monitorar ps aux | grep -i jamf (mesmo sem ser root).

O script JamfExplorer.py pode ouvir novos arquivos sendo adicionados e novos argumentos de processo.

Acesso Remoto ao macOS

E também sobre protocolos de rede especiais do MacOS:

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

Active Directory

Em algumas ocasiões, você descobrirá que o computador MacOS está conectado a um AD. Nesse cenário, você deve tentar enumerar o active directory como está acostumado. Encontre alguma ajuda nas seguintes 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 %}

Algumas ferramentas locais do MacOS que também podem ajudar são dscl:

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

Também existem algumas ferramentas preparadas para MacOS para enumerar automaticamente o AD e brincar com o kerberos:

  • Machound: MacHound é uma extensão da ferramenta de auditoria Bloodhound que permite coletar e ingerir relacionamentos do Active Directory em hosts MacOS.
  • Bifrost: Bifrost é um projeto Objective-C projetado para interagir com as APIs Heimdal krb5 no macOS. O objetivo do projeto é permitir testes de segurança melhores em torno do Kerberos em dispositivos macOS usando APIs nativas sem exigir nenhum outro framework ou pacote no alvo.
  • Orchard: Ferramenta JavaScript for Automation (JXA) para enumerar o Active Directory.

Informações do Domínio

echo show com.apple.opendirectoryd.ActiveDirectory | scutil

Usuários

Os três tipos de usuários do MacOS são:

  • Usuários Locais - Gerenciados pelo serviço local OpenDirectory, eles não estão conectados de forma alguma ao Active Directory.
  • Usuários de Rede - Usuários voláteis do Active Directory que requerem uma conexão com o servidor DC para autenticação.
  • Usuários Móveis - Usuários do Active Directory com um backup local de suas credenciais e arquivos.

As informações locais sobre usuários e grupos são armazenadas na pasta /var/db/dslocal/nodes/Default.
Por exemplo, as informações sobre o usuário chamado mark são armazenadas em /var/db/dslocal/nodes/Default/users/mark.plist e as informações sobre o grupo admin estão em /var/db/dslocal/nodes/Default/groups/admin.plist.

Além de usar as arestas HasSession e AdminTo, MacHound adiciona três novas arestas ao banco de dados Bloodhound:

  • CanSSH - entidade permitida a fazer SSH para o host
  • CanVNC - entidade permitida a fazer VNC para o host
  • CanAE - entidade permitida a executar scripts AppleEvent no 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

Mais informações em https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/

Acessando o Keychain

O Keychain provavelmente contém informações sensíveis que, se acessadas sem gerar um prompt, podem ajudar a avançar em um exercício de red team:

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

Serviços Externos

O Red Teaming no MacOS é diferente de um Red Teaming regular no Windows, pois geralmente o MacOS está integrado a várias plataformas externas diretamente. Uma configuração comum do MacOS é acessar o computador usando credenciais sincronizadas do OneLogin e acessar vários serviços externos (como github, aws...) via OneLogin:

Técnicas Misc Red Team

Safari

Quando um arquivo é baixado no Safari, se for um arquivo "seguro", ele será aberto automaticamente. Por exemplo, se você baixar um arquivo zip, ele será descompactado automaticamente:

Referências

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥