macOS Network Services & Protocols

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Durchsuche den vollständigen HackTricks Training-Katalog nach den Assessment-Tracks (ARTA/GRTA/AzRTA) und Linux Hacking Expert (LHE).

Support HackTricks

Remote Access Services

Dies sind die gängigen macOS-Dienste, um remote auf sie zuzugreifen.
Du kannst diese Dienste in System Settings –> Sharing aktivieren/deaktivieren

  • VNC, bekannt als “Screen Sharing” (tcp:5900)
  • SSH, genannt “Remote Login” (tcp:22)
  • Apple Remote Desktop (ARD), oder “Remote Management” (tcp:3283, tcp:5900)
  • AppleEvent, bekannt als “Remote Apple Event” (tcp:3031)

Prüfe, ob einer aktiviert ist, indem du Folgendes ausführst:

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";

Lokales Auflisten der Sharing-Konfiguration

Wenn du bereits lokale Codeausführung auf einem Mac hast, prüfe den konfigurierten Zustand, nicht nur die lauschten Sockets. systemsetup und launchctl zeigen dir normalerweise, ob der Dienst administrativ aktiviert ist, während kickstart und system_profiler helfen, die effektive ARD/Sharing-Konfiguration zu bestätigen:

system_profiler SPSharingDataType
sudo /usr/sbin/systemsetup -getremotelogin
sudo /usr/sbin/systemsetup -getremoteappleevents
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -status
sudo launchctl print-disabled system | egrep 'com.apple.screensharing|com.apple.AEServer|ssh'

Pentesting ARD

Apple Remote Desktop (ARD) ist eine erweiterte Version von Virtual Network Computing (VNC), die auf macOS zugeschnitten ist und zusätzliche Funktionen bietet. Eine bemerkenswerte Schwachstelle in ARD ist die Authentifizierungsmethode für das control screen password, bei der nur die ersten 8 Zeichen des Passworts verwendet werden, was es anfällig für brute force attacks mit Tools wie Hydra oder GoRedShell macht, da es keine standardmäßigen Rate Limits gibt.

Verwundbare Instanzen können mit dem vnc-info-Script von nmap identifiziert werden. Dienste, die VNC Authentication (2) unterstützen, sind aufgrund der 8-Zeichen-Kürzung des Passworts besonders anfällig für brute force attacks.

Um ARD für verschiedene administrative Aufgaben wie privilege escalation, GUI access oder user monitoring zu aktivieren, verwende den folgenden Befehl:

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

ARD bietet vielseitige Kontrollstufen, einschließlich Beobachtung, geteilte Kontrolle und volle Kontrolle, wobei Sitzungen selbst nach Passwortänderungen des Users bestehen bleiben. Es ermöglicht das direkte Senden von Unix-Befehlen und führt sie für administrative Users als root aus. Aufgabenplanung und die Remote Spotlight-Suche sind bemerkenswerte Features, die ferngesteuerte, wenig invasive Suchen nach sensiblen Dateien über mehrere Maschinen hinweg ermöglichen.

Aus Operator-Perspektive hat Monterey 12.1+ die Workflows zur Remote-Aktivierung in verwalteten Fleets geändert. Wenn du bereits das MDM des Opfers kontrollierst, ist Apples EnableRemoteDesktop-Befehl oft der sauberste Weg, um die Remote-Desktop-Funktionalität auf neueren Systemen zu aktivieren. Wenn du bereits einen foothold auf dem Host hast, ist kickstart weiterhin nützlich, um ARD-Privilegien über die Command Line zu prüfen oder neu zu konfigurieren.

Pentesting Remote Apple Events (RAE / EPPC)

Apple nennt dieses Feature in modernen System Settings Remote Application Scripting. Unter der Haube stellt es den Apple Event Manager remote über EPPC auf TCP/3031 über den Dienst com.apple.AEServer bereit. Palo Alto Unit 42 hob es erneut als praktische macOS lateral movement-Primitive hervor, da gültige Credentials plus ein aktivierter RAE-Dienst es einem Operator ermöglichen, skriptfähige Anwendungen auf einem entfernten Mac zu steuern.

Nützliche Checks:

sudo /usr/sbin/systemsetup -getremoteappleevents
sudo launchctl print-disabled system | grep AEServer
lsof -nP -iTCP:3031 -sTCP:LISTEN

Wenn du bereits admin/root auf dem Zielsystem hast und es aktivieren möchtest:

sudo /usr/sbin/systemsetup -setremoteappleevents on

Grundlegender Konnektivitätstest von einem anderen Mac aus:

osascript -e 'tell application "Finder" of machine "eppc://user:pass@192.0.2.10" to get name of startup disk'

In der Praxis ist der Missbrauchsfall nicht auf Finder beschränkt. Jede scriptable application, die die erforderlichen Apple events akzeptiert, wird zu einer Remote-Angriffsfläche, was RAE besonders interessant nach Credential Theft in internen macOS-Netzwerken macht.

Recent Screen-Sharing / ARD vulnerabilities (2023-2025)

YearCVEComponentImpactFixed in
2023CVE-2023-42940Screen SharingIncorrect session rendering could cause the wrong desktop or window to be transmitted, resulting in leakage of sensitive informationmacOS Sonoma 14.2.1 (Dec 2023)
2024CVE-2024-44248Screen Sharing ServerA user with screen sharing access may be able to view another user’s screen because of a state-management issuemacOS Ventura 13.7.2 / Sonoma 14.7.2 / Sequoia 15.1 (Oct-Dec 2024)

Hardening tips

  • Disable Screen Sharing/Remote Management when not strictly required.
  • Keep macOS fully patched (Apple generally ships security fixes for the last three major releases).
  • Use a Strong Password and enforce the “VNC viewers may control screen with password” option disabled when possible.
  • Put the service behind a VPN instead of exposing TCP 5900/3283 to the Internet.
  • Add an Application Firewall rule to limit ARDAgent to the local subnet:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/MacOS/ARDAgent
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setblockapp /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/MacOS/ARDAgent on

Bonjour Protocol

Bonjour, eine von Apple entwickelte Technologie, ermöglicht es Geräten im selben Netzwerk, die angebotenen Dienste der jeweils anderen zu erkennen. Auch bekannt als Rendezvous, Zero Configuration oder Zeroconf, erlaubt sie einem Gerät, sich einem TCP/IP-Netzwerk anzuschließen, automatisch eine IP-Adresse zu wählen und seine Dienste an andere Netzwerkgeräte zu senden.

Zero Configuration Networking, bereitgestellt durch Bonjour, stellt sicher, dass Geräte:

  • Automatisch eine IP Address erhalten können, auch wenn kein DHCP server vorhanden ist.
  • Namens-zu-Adresse-Übersetzung durchführen können, ohne einen DNS server zu benötigen.
  • Dienste entdecken können, die im Netzwerk verfügbar sind.

Geräte, die Bonjour verwenden, weisen sich selbst eine IP address aus dem 169.254/16-Bereich zu und überprüfen deren Eindeutigkeit im Netzwerk. Macs behalten einen Routing-Table-Eintrag für dieses Subnetz bei, der mit netstat -rn | grep 169 überprüft werden kann.

Für DNS nutzt Bonjour das Multicast DNS (mDNS)-Protokoll. mDNS läuft über port 5353/UDP, verwendet standard DNS queries und richtet sich an die multicast address 224.0.0.251. Dieser Ansatz stellt sicher, dass alle lauschenden Geräte im Netzwerk die Queries empfangen und beantworten können, wodurch die Aktualisierung ihrer Records erleichtert wird.

Nach dem Beitritt zum Netzwerk wählt sich jedes Gerät selbst einen Namen, typischerweise endend auf .local, der vom Hostname abgeleitet oder zufällig generiert sein kann.

Die Service Discovery innerhalb des Netzwerks wird durch DNS Service Discovery (DNS-SD) ermöglicht. Unter Nutzung des Formats von DNS SRV records verwendet DNS-SD DNS PTR records, um die Auflistung mehrerer Dienste zu ermöglichen. Ein Client, der einen bestimmten Dienst sucht, fragt einen PTR record für <Service>.<Domain> an und erhält im Gegenzug eine Liste von PTR records im Format <Instance>.<Service>.<Domain>, wenn der Dienst von mehreren Hosts bereitgestellt wird.

Das dns-sd-Tool kann zum Entdecken und Bewerben von network services verwendet werden. Hier sind einige Beispiele für seine Nutzung:

Searching for SSH Services

Um nach SSH-Diensten im Netzwerk zu suchen, wird der folgende Befehl verwendet:

dns-sd -B _ssh._tcp

Dieser Befehl startet die Suche nach _ssh._tcp-Diensten und gibt Details wie Zeitstempel, Flags, Schnittstelle, Domäne, Diensttyp und Instanzname aus.

Einen HTTP-Service bewerben

Um einen HTTP-Service zu bewerben, kannst du Folgendes verwenden:

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

Dieser Befehl registriert einen HTTP-Dienst namens “Index” auf Port 80 mit einem Pfad von /index.html.

Um dann im Netzwerk nach HTTP-Diensten zu suchen:

dns-sd -B _http._tcp

Wenn ein Dienst startet, kündigt er seine Verfügbarkeit allen Geräten im Subnetz an, indem er seine Präsenz per Multicast sendet. Geräte, die an diesen Diensten interessiert sind, müssen keine Requests senden, sondern lauschen einfach auf diese Ankündigungen.

Für eine benutzerfreundlichere Oberfläche kann die App Discovery - DNS-SD Browser aus dem Apple App Store die auf deinem lokalen Netzwerk angebotenen Dienste visualisieren.

Alternativ können benutzerdefinierte Skripte geschrieben werden, um Dienste mit der python-zeroconf-Bibliothek zu durchsuchen und zu entdecken. Das python-zeroconf Skript zeigt das Erstellen eines Service-Browsers für _http._tcp.local. Dienste und gibt hinzugefügte oder entfernte Dienste aus:

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()

macOS-spezifische Bonjour-Suche

In macOS-Netzwerken ist Bonjour oft der einfachste Weg, um Remote-Administrationsoberflächen zu finden, ohne das Ziel direkt anzufassen. Apple Remote Desktop selbst kann Clients über Bonjour entdecken, daher sind dieselben Erkennungsdaten auch für einen Angreifer nützlich.

# Enumerate every advertised service type first
dns-sd -B _services._dns-sd._udp local

# Then look for common macOS admin surfaces
dns-sd -B _rfb._tcp local      # Screen Sharing / VNC
dns-sd -B _ssh._tcp local      # Remote Login
dns-sd -B _eppc._tcp local     # Remote Apple Events / EPPC

# Resolve a specific instance to hostname, port and TXT data
dns-sd -L "<Instance>" _rfb._tcp local
dns-sd -L "<Instance>" _eppc._tcp local

Für breitere mDNS spoofing, impersonation, and cross-subnet discovery-Techniken siehe die dedizierte Seite:

5353/UDP Multicast DNS (mDNS) and DNS-SD

Bonjour im Netzwerk auflisten

  • Nmap NSE – Services eines einzelnen Hosts entdecken:
nmap -sU -p 5353 --script=dns-service-discovery <target>

Das dns-service-discovery-Script sendet eine _services._dns-sd._udp.local-Query und listet anschließend jeden angekündigten Service-Typ auf.

  • mdns_recon – Python-Tool, das ganze Bereiche scannt und nach misconfigured mDNS-Respondern sucht, die Unicast-Queries beantworten (nützlich, um Geräte zu finden, die über Subnets/WAN erreichbar sind):
git clone https://github.com/chadillac/mdns_recon && cd mdns_recon
python3 mdns_recon.py -r 192.0.2.0/24 -s _ssh._tcp.local

Dies gibt Hosts zurück, die SSH via Bonjour außerhalb des lokalen Links exponieren.

Sicherheitsaspekte & aktuelle Schwachstellen (2024-2025)

YearCVESeverityIssuePatched in
2024CVE-2024-44183MediumA logic error in mDNSResponder allowed a crafted packet to trigger a denial-of-servicemacOS Ventura 13.7 / Sonoma 14.7 / Sequoia 15.0 (Sep 2024)
2025CVE-2025-31222HighA correctness issue in mDNSResponder could be abused for local privilege escalationmacOS Ventura 13.7.6 / Sonoma 14.7.6 / Sequoia 15.5 (May 2025)

Mitigation guidance

  1. UDP 5353 auf link-local Scope beschränken – auf Wireless-Controllern, Routern und hostbasierten Firewalls blockieren oder rate-limiten.
  2. Bonjour auf Systemen vollständig deaktivieren, die keine Service Discovery benötigen:
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
  1. Für Umgebungen, in denen Bonjour intern benötigt wird, aber niemals Netzwerkgrenzen überschreiten darf, AirPlay Receiver-Profileinschränkungen (MDM) oder einen mDNS-Proxy verwenden.
  2. System Integrity Protection (SIP) aktivieren und macOS aktuell halten – beide oben genannten Schwachstellen wurden schnell gepatcht, setzten für vollständigen Schutz aber darauf voraus, dass SIP aktiviert ist.

Bonjour deaktivieren

Wenn es aus Sicherheitsgründen oder anderen Gründen nötig ist, Bonjour zu deaktivieren, kann es mit dem folgenden Befehl abgeschaltet werden:

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

Referenzen

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE) Durchsuche den vollständigen HackTricks Training-Katalog nach den Assessment-Tracks (ARTA/GRTA/AzRTA) und Linux Hacking Expert (LHE).

Support HackTricks