hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md

9.7 KiB

macOS Network Services & Protocols

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Serviços de Acesso Remoto

Estes são os serviços comuns do macOS para acessá-los remotamente.
Você pode habilitar/desabilitar esses serviços em System Settings --> Sharing

  • VNC, conhecido como “Compartilhamento de Tela” (tcp:5900)
  • SSH, chamado de “Login Remoto” (tcp:22)
  • Apple Remote Desktop (ARD), ou “Gerenciamento Remoto” (tcp:3283, tcp:5900)
  • AppleEvent, conhecido como “Evento Apple Remoto” (tcp:3031)

Verifique se algum está habilitado executando:

rmMgmt=$(netstat -na | grep LISTEN | grep tcp46 | grep "*.3283" | wc -l);
scrShrng=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.5900" | wc -l);
flShrng=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | egrep "\*.88|\*.445|\*.548" | wc -l);
rLgn=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.22" | wc -l);
rAE=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.3031" | wc -l);
bmM=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.4488" | wc -l);
printf "\nThe following services are OFF if '0', or ON otherwise:\nScreen Sharing: %s\nFile Sharing: %s\nRemote Login: %s\nRemote Mgmt: %s\nRemote Apple Events: %s\nBack to My Mac: %s\n\n" "$scrShrng" "$flShrng" "$rLgn" "$rmMgmt" "$rAE" "$bmM";

Pentesting ARD

Apple Remote Desktop (ARD) é uma versão aprimorada do Virtual Network Computing (VNC) adaptada para macOS, oferecendo recursos adicionais. Uma vulnerabilidade notável no ARD é seu método de autenticação para a senha da tela de controle, que usa apenas os primeiros 8 caracteres da senha, tornando-o suscetível a ataques de força bruta com ferramentas como Hydra ou GoRedShell, já que não há limites de taxa padrão.

Instâncias vulneráveis podem ser identificadas usando o script vnc-info do nmap. Serviços que suportam VNC Authentication (2) são especialmente suscetíveis a ataques de força bruta devido à truncagem da senha de 8 caracteres.

Para habilitar o ARD para várias tarefas administrativas, como escalonamento de privilégios, acesso GUI ou monitoramento de usuários, use o seguinte comando:

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -allowAccessFor -allUsers -privs -all -clientopts -setmenuextra -menuextra yes

ARD fornece níveis de controle versáteis, incluindo observação, controle compartilhado e controle total, com sessões persistindo mesmo após mudanças de senha do usuário. Permite enviar comandos Unix diretamente, executando-os como root para usuários administrativos. O agendamento de tarefas e a pesquisa remota do Spotlight são recursos notáveis, facilitando pesquisas remotas de baixo impacto para arquivos sensíveis em várias máquinas.

Protocolo Bonjour

Bonjour, uma tecnologia projetada pela Apple, permite que dispositivos na mesma rede detectem os serviços oferecidos uns pelos outros. Conhecido também como Rendezvous, Zero Configuration ou Zeroconf, permite que um dispositivo se junte a uma rede TCP/IP, escolha automaticamente um endereço IP e transmita seus serviços para outros dispositivos da rede.

A Rede de Zero Configuração, fornecida pelo Bonjour, garante que os dispositivos possam:

  • Obter automaticamente um endereço IP mesmo na ausência de um servidor DHCP.
  • Realizar tradução de nome para endereço sem exigir um servidor DNS.
  • Descobrir serviços disponíveis na rede.

Dispositivos que utilizam Bonjour atribuirão a si mesmos um endereço IP da faixa 169.254/16 e verificarão sua exclusividade na rede. Macs mantêm uma entrada de tabela de roteamento para essa sub-rede, verificável via netstat -rn | grep 169.

Para DNS, o Bonjour utiliza o protocolo Multicast DNS (mDNS). O mDNS opera sobre a porta 5353/UDP, empregando consultas DNS padrão mas direcionando para o endereço multicast 224.0.0.251. Essa abordagem garante que todos os dispositivos ouvindo na rede possam receber e responder às consultas, facilitando a atualização de seus registros.

Ao ingressar na rede, cada dispositivo auto-seleciona um nome, geralmente terminando em .local, que pode ser derivado do nome do host ou gerado aleatoriamente.

A descoberta de serviços dentro da rede é facilitada pelo DNS Service Discovery (DNS-SD). Aproveitando o formato dos registros DNS SRV, o DNS-SD utiliza registros DNS PTR para permitir a listagem de múltiplos serviços. Um cliente que busca um serviço específico solicitará um registro PTR para <Service>.<Domain>, recebendo em troca uma lista de registros PTR formatados como <Instance>.<Service>.<Domain> se o serviço estiver disponível a partir de múltiplos hosts.

A utilidade dns-sd pode ser empregada para descobrir e anunciar serviços de rede. Aqui estão alguns exemplos de seu uso:

Buscando Serviços SSH

Para buscar serviços SSH na rede, o seguinte comando é utilizado:

dns-sd -B _ssh._tcp

Este comando inicia a busca por serviços _ssh._tcp e exibe detalhes como timestamp, flags, interface, domínio, tipo de serviço e nome da instância.

Anunciando um Serviço HTTP

Para anunciar um serviço HTTP, você pode usar:

dns-sd -R "Index" _http._tcp . 80 path=/index.html

Este comando registra um serviço HTTP chamado "Index" na porta 80 com um caminho de /index.html.

Para então procurar serviços HTTP na rede:

dns-sd -B _http._tcp

Quando um serviço é iniciado, ele anuncia sua disponibilidade para todos os dispositivos na sub-rede, transmitindo sua presença por multicast. Dispositivos interessados nesses serviços não precisam enviar solicitações, mas simplesmente ouvir esses anúncios.

Para uma interface mais amigável, o aplicativo Discovery - DNS-SD Browser disponível na Apple App Store pode visualizar os serviços oferecidos na sua rede local.

Alternativamente, scripts personalizados podem ser escritos para navegar e descobrir serviços usando a biblioteca python-zeroconf. O script python-zeroconf demonstra a criação de um navegador de serviços para serviços _http._tcp.local., imprimindo serviços adicionados ou removidos:

from zeroconf import ServiceBrowser, Zeroconf

class MyListener:

def remove_service(self, zeroconf, type, name):
print("Service %s removed" % (name,))

def add_service(self, zeroconf, type, name):
info = zeroconf.get_service_info(type, name)
print("Service %s added, service info: %s" % (name, info))

zeroconf = Zeroconf()
listener = MyListener()
browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)
try:
input("Press enter to exit...\n\n")
finally:
zeroconf.close()

Desativando o Bonjour

Se houver preocupações com a segurança ou outras razões para desativar o Bonjour, ele pode ser desligado usando o seguinte comando:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Referências

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Suporte ao HackTricks
{% endhint %}