macOS ネットワークサービスとプロトコル

Reading time: 14 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

リモートアクセスサービス

これらはリモートでアクセスするための一般的な macOS サービスです。
これらのサービスは System Settings --> Sharing で有効/無効にできます。

  • VNC、通称「Screen Sharing」 (tcp:5900)
  • SSH、通称「Remote Login」 (tcp:22)
  • Apple Remote Desktop (ARD)、または「Remote Management」 (tcp:3283, tcp:5900)
  • AppleEvent、通称「Remote Apple Event」 (tcp:3031)

有効になっているかどうかを確認するには、次のコマンドを実行します:

bash
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) は、macOS 向けに特別に設計された Virtual Network Computing (VNC) の強化版で、追加機能を提供します。ARD の顕著な脆弱性は、制御画面パスワードの認証方法で、パスワードの最初の 8 文字のみを使用するため、Hydra や GoRedShell のようなツールを使用した brute force attacks に対して脆弱です。デフォルトのレート制限がないためです。

脆弱なインスタンスは、nmapvnc-info スクリプトを使用して特定できます。VNC Authentication (2) をサポートするサービスは、8 文字のパスワード切り捨てのため、特にブルートフォース攻撃に対して脆弱です。

特権昇格、GUI アクセス、またはユーザー監視などのさまざまな管理タスクのために ARD を有効にするには、次のコマンドを使用します:

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

ARDは、観察、共有制御、完全制御を含む多様な制御レベルを提供し、ユーザーパスワードの変更後もセッションが持続します。これにより、Unixコマンドを直接送信し、管理者ユーザーとしてrootで実行することができます。タスクスケジューリングやリモートSpotlight検索は注目すべき機能であり、複数のマシンにわたる機密ファイルのリモートでの低影響検索を容易にします。

最近の画面共有 / ARDの脆弱性 (2023-2025)

CVEコンポーネント影響修正済み
2023CVE-2023-42940画面共有不正なセッションレンダリングにより、誤ったデスクトップまたはウィンドウが送信され、機密情報が漏洩する可能性があるmacOS Sonoma 14.2.1 (2023年12月)
2024CVE-2024-23296launchservicesd / login成功したリモートログイン後に連鎖可能なカーネルメモリ保護バイパス(実際に悪用されている)macOS Ventura 13.6.4 / Sonoma 14.4 (2024年3月)

ハードニングのヒント

  • 必要ない場合は画面共有/リモート管理を無効にします。
  • macOSを完全にパッチ適用します(Appleは一般的に最新の3つのメジャーリリースに対してセキュリティ修正を提供します)。
  • 強力なパスワードを使用し、可能な限り*「VNCビューワーはパスワードで画面を制御できる」*オプションを無効にします。
  • サービスをVPNの背後に置き、TCP 5900/3283をインターネットにさらさないようにします。
  • ARDAgentをローカルサブネットに制限するアプリケーションファイアウォールルールを追加します:
bash
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プロトコル

Bonjourは、Appleが設計した技術で、同じネットワーク上のデバイスが互いに提供するサービスを検出できるようにします。Rendezvous、ゼロコンフィギュレーション、またはZeroconfとも呼ばれ、デバイスがTCP/IPネットワークに参加し、自動的にIPアドレスを選択し、他のネットワークデバイスにサービスをブロードキャストすることを可能にします。

Bonjourが提供するゼロコンフィギュレーションネットワーキングにより、デバイスは以下を実現できます:

  • DHCPサーバーがない場合でも自動的にIPアドレスを取得
  • DNSサーバーを必要とせずに名前からアドレスへの変換を実行。
  • ネットワーク上の利用可能なサービスを発見

Bonjourを使用するデバイスは、169.254/16範囲からIPアドレスを自動的に割り当て、ネットワーク上での一意性を確認します。Macはこのサブネットのルーティングテーブルエントリを保持し、netstat -rn | grep 169で確認できます。

DNSに関して、BonjourはマルチキャストDNS (mDNS) プロトコルを利用します。mDNSはポート5353/UDPで動作し、標準DNSクエリを使用しますが、マルチキャストアドレス224.0.0.251をターゲットにします。このアプローチにより、ネットワーク上のすべてのリスニングデバイスがクエリを受信し応答できるようになり、レコードの更新が促進されます。

ネットワークに参加すると、各デバイスは通常**.local**で終わる名前を自動的に選択し、これはホスト名から派生するか、ランダムに生成されることがあります。

ネットワーク内のサービス発見はDNSサービス発見 (DNS-SD)によって促進されます。DNS SRVレコードの形式を利用し、DNS-SDはDNS PTRレコードを使用して複数のサービスのリストを可能にします。特定のサービスを求めるクライアントは<Service>.<Domain>のPTRレコードを要求し、サービスが複数のホストから利用可能な場合、<Instance>.<Service>.<Domain>形式のPTRレコードのリストを受け取ります。

dns-sdユーティリティは、ネットワークサービスの発見と広告に使用できます。以下はその使用例です:

SSHサービスの検索

ネットワーク上のSSHサービスを検索するには、次のコマンドを使用します:

bash
dns-sd -B _ssh._tcp

このコマンドは、_ssh._tcpサービスのブラウジングを開始し、タイムスタンプ、フラグ、インターフェース、ドメイン、サービスタイプ、およびインスタンス名などの詳細を出力します。

HTTPサービスの広告

HTTPサービスを広告するには、次のようにします:

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

このコマンドは、ポート80で/index.htmlのパスを持つ「Index」という名前のHTTPサービスを登録します。

次に、ネットワーク上のHTTPサービスを検索するには:

bash
dns-sd -B _http._tcp

サービスが開始されると、その存在をマルチキャストしてサブネット上のすべてのデバイスに利用可能であることを通知します。これらのサービスに興味のあるデバイスは、リクエストを送信する必要はなく、単にこれらの通知を聞くだけです。

よりユーザーフレンドリーなインターフェースのために、Apple App Storeで利用可能なDiscovery - DNS-SD Browserアプリは、ローカルネットワーク上で提供されているサービスを視覚化できます。

また、python-zeroconfライブラリを使用してサービスをブラウズおよび発見するためのカスタムスクリプトを作成することもできます。python-zeroconfスクリプトは、_http._tcp.local.サービスのためのサービスブラウザを作成し、追加または削除されたサービスを印刷することを示しています。

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

ネットワーク上のBonjourの列挙

  • Nmap NSE – 単一ホストによって広告されたサービスを発見します:
bash
nmap -sU -p 5353 --script=dns-service-discovery <target>

dns-service-discoveryスクリプトは、_services._dns-sd._udp.localクエリを送信し、各広告されたサービスタイプを列挙します。

  • mdns_reconmisconfigured mDNSレスポンダーを探すために全範囲をスキャンするPythonツール(サブネット/WANを越えて到達可能なデバイスを見つけるのに便利):
bash
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

これにより、ローカルリンクの外でBonjourを介してSSHを公開しているホストが返されます。

セキュリティ考慮事項と最近の脆弱性 (2024-2025)

CVE深刻度問題パッチ適用
2024CVE-2024-44183mDNSResponderの論理エラーにより、作成されたパケットがサービス拒否を引き起こすことができたmacOS Ventura 13.7 / Sonoma 14.7 / Sequoia 15.0 (2024年9月)
2025CVE-2025-31222mDNSResponderの正確性の問題がローカル特権昇格に悪用される可能性があるmacOS Ventura 13.7.6 / Sonoma 14.7.6 / Sequoia 15.5 (2025年5月)

緩和ガイダンス

  1. UDP 5353をリンクローカルスコープに制限する – ワイヤレスコントローラー、ルーター、ホストベースのファイアウォールでブロックまたはレート制限します。
  2. サービス発見を必要としないシステムではBonjourを完全に無効にします:
bash
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
  1. Bonjourが内部で必要だがネットワーク境界を越えてはならない環境では、AirPlay Receiverプロファイル制限(MDM)またはmDNSプロキシを使用します。
  2. **System Integrity Protection (SIP)**を有効にし、macOSを最新の状態に保ちます – 上記の両方の脆弱性は迅速にパッチが適用されましたが、完全な保護のためにはSIPが有効であることに依存していました。

Bonjourの無効化

セキュリティ上の懸念やその他の理由でBonjourを無効にする必要がある場合、次のコマンドを使用してオフにできます:

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

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする