hacktricks/macos-hardening/macos-red-teaming
2024-02-05 03:11:06 +00:00
..
macos-mdm Translated ['exploiting/linux-exploiting-basic-esp/README.md', 'exploiti 2024-02-05 03:11:06 +00:00
macos-keychain.md Translated ['linux-hardening/bypass-bash-restrictions/bypass-fs-protecti 2023-12-31 00:07:27 +00:00
README.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-01-10 07:09:16 +00:00

macOS Red Teaming

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Abusando de MDMs

  • JAMF Pro: jamf checkJSSConnection
  • Kandji

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

Para red teaming em ambientes MacOS, é altamente recomendável ter algum entendimento de como os MDMs funcionam:

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

Usando MDM como um C2

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

Para executar seu próprio MDM, você precisa ter seu CSR assinado por um fornecedor, o que você poderia tentar obter com https://mdmcert.download/. E para executar seu próprio MDM para dispositivos Apple, você poderia 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, após a inscrição 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 via um arquivo pkg (você poderia comprimi-lo em zip e quando baixado pelo safari ele será descomprimido).

O agente Mythic Orthrus usa essa técnica.

Abusando do JAMF PRO

O JAMF pode executar scripts personalizados (scripts desenvolvidos pelo sysadmin), payloads nativos (criação de conta local, definição de senha EFI, monitoramento de arquivo/processo...) e MDM (configurações de dispositivo, certificados de dispositivo...).

Autoinscrição no JAMF

Vá para uma página como https://<nome-da-empresa>.jamfcloud.com/enroll/ para ver se eles têm autoinscrição habilitada. Se tiverem, pode pedir credenciais para acesso.

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

Além disso, após encontrar credenciais adequadas, você poderia ser capaz de forçar bruta outros nomes de usuário com o seguinte formulário:

Autenticação de dispositivo JAMF

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

Tomada de Controle de 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>
[...]

{% endcode %}

Assim, um atacante poderia inserir um pacote malicioso (pkg) que sobrescreve este arquivo quando instalado, configurando 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

Imitação do JAMF

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

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

Com essa informação, crie uma VM com o UUID do Hardware roubado e com o SIP desativado, insira o chaveiro JAMF, intercepte o agente 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, credenciais podem ser passadas para esses scripts como parâmetros, então você precisaria monitorar ps aux | grep -i jamf (sem mesmo ser root).

O script JamfExplorer.py pode escutar por novos arquivos sendo adicionados e novos argumentos de processos.

Acesso Remoto no macOS

E também sobre os 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. Neste cenário, você deve tentar enumerar o active directory como está acostumado. Encontre 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 %}

Uma ferramenta local do MacOS que também pode ajudá-lo é dscl:

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

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

  • Machound: MacHound é uma extensão da ferramenta de auditoria Bloodhound que permite coletar e ingerir relações do Active Directory em hosts MacOS.
  • Bifrost: Bifrost é um projeto em Objective-C projetado para interagir com as APIs krb5 do Heimdal no macOS. O objetivo do projeto é possibilitar um teste de segurança mais eficaz em torno do Kerberos em dispositivos macOS usando APIs nativas, sem a necessidade de qualquer outro framework ou pacotes no alvo.
  • Orchard: Ferramenta JavaScript for Automation (JXA) para fazer enumeração do Active Directory.

Informações de Domínio

echo show com.apple.opendirectoryd.ActiveDirectory | scutil

Usuários

Os três tipos de usuários 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 para 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 estã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 para SSH ao host
  • CanVNC - entidade permitida para VNC ao host
  • CanAE - entidade permitida para 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 aviso, podem ajudar a avançar 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 do Red Teaming regular no Windows, pois geralmente o MacOS é integrado diretamente com várias plataformas externas. 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 Diversas de Red Team

Safari

Quando um arquivo é baixado no Safari, se for um arquivo "seguro", ele será aberto automaticamente. Então, por exemplo, se você baixar um zip, ele será descomprimido automaticamente:

Referências

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: