hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md
2023-07-07 23:42:27 +00:00

14 KiB
Raw Blame History

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

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

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

これらはmacOSのリモートアクセスに使用される一般的なサービスです。
これらのサービスは「システム環境設定」→「共有」で有効/無効にできます。

  • VNCtcp:5900として知られる「スクリーン共有」
  • SSHtcp:22として呼ばれる「リモートログイン」
  • Apple Remote DesktopARDまたは「リモート管理」tcp:3283、tcp:5900
  • AppleEventtcp:3031として知られる「リモートAppleイベント」

有効になっているかどうかを確認するには、次を実行してください:

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

(この部分はこのブログ記事から引用されました)

ARDは、いくつかの追加のmacOS固有の機能を備えた、実質的には改変されたVNCです。
ただし、Screen Sharingオプションは単なる基本的なVNCサーバーです。また、高度なARDまたはリモート管理オプションもあり、ARDをVNCクライアントと互換性のあるものにするために制御画面のパスワードを設定することができます。ただし、この認証方法には弱点があり、このパスワード8文字の認証バッファに制限されているため、HydraGoRedShellなどのツールを使用して非常に簡単にブルートフォース攻撃を行うことができます(デフォルトではレート制限はありません)。
Screen Sharingまたはリモート管理の脆弱なインスタンスを特定するには、vnc-infoスクリプトを使用してnmapを実行し、サービスがVNC Authentication (2)をサポートしている場合、おそらくブルートフォース攻撃の脆弱性があります。サービスは、ワイヤ上で送信されるすべてのパスワードを8文字に切り詰めるため、VNC認証を「password」と設定した場合、「passwords」と「password123」の両方が認証されます。

特権のエスカレーションTCCプロンプトの受け入れ、GUIでのアクセス、ユーザーの監視を有効にするには、次のコマンドを使用して有効にすることができます

{% code overflow="wrap" %}

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

{% endcode %}

ユーザーの監視からデスクトップの完全な制御まで、観察モード共有制御フル制御の間を切り替えることができます。さらに、ARDセッションにアクセスできた場合、そのセッションはセッションが終了するまで開いたままになります。セッション中にユーザーのパスワードが変更されても同様です。

また、ARDを介して直接UNIXコマンドを送信することもできます。管理者ユーザーの場合、rootユーザーを指定してrootとして実行することもできます。さらに、このUNIXコマンドの方法を使用して、特定の時間にリモートタスクをスケジュールすることもできますが、これは指定された時間にネットワーク接続として発生します対象サーバーに保存され、実行されるのではなく。最後に、リモートスポットライトは私のお気に入りの機能の1つです。これは本当に素晴らしいもので、低負荷でインデックス付けされた検索を迅速かつリモートで実行できます。これは、クイックで、複数のマシンで同時に検索を実行できるため、機密ファイルの検索には最適であり、CPUの使用率が急上昇することはありません。

Bonjourプロトコル

Bonjourは、同じネットワークにあるコンピュータやデバイスが他のコンピュータやデバイスが提供するサービスについて学ぶことができるようにする、Appleが設計した技術です。Bonjour対応のデバイスは、TCP/IPネットワークに接続されると、IPアドレスを選択し、そのネットワーク上の他のコンピュータに提供するサービスを知らせることができます。Bonjourは、Rendezvous、Zero Configuration、またはZeroconfとも呼ばれることがあります。
BonjourなどのZero Configuration Networkingは、次の機能を提供します。

  • DHCPサーバーがなくてもIPアドレスを取得できる必要があります。
  • DNSサーバーがなくても名前からアドレスへの変換を行う必要があります。
  • ネットワーク上のサービスを検出できる必要があります。

デバイスは、169.254/16の範囲のIPアドレスを取得し、他のデバイスがそのIPアドレスを使用していないかどうかを確認します。使用されていない場合、IPアドレスを保持します。Macは、このサブネットのルーティングテーブルにエントリを保持しますnetstat -rn | grep 169

DNSでは、マルチキャストDNSmDNSプロトコルが使用されます。mDNS servicesはポート5353/UDPでリッスンします。通常のDNSクエリを使用し、リクエストを単一のIPアドレスに送信する代わりに、マルチキャストアドレス224.0.0.251に送信します。これらのリクエストを受信する任意のマシンは応答し、通常はマルチキャストアドレスに応答するため、すべてのデバイスがテーブルを更新できます。
各デバイスは、ネットワークにアクセスする際に独自の名前を選択します。デバイスは、ホスト名または完全にランダムな名前に基づく名前を**.localで終わる名前**を選択します。

**サービスの検出にはDNS Service DiscoveryDNS-SD**が使用されます。

Zero Configuration Networkingの最後の要件は、DNS Service DiscoveryDNS-SDによって満たされます。DNS Service Discoveryは、DNS SRVレコードの構文を使用しますが、特定のサービスを提供する複数のホストがある場合に複数の結果を返すためにDNS PTRレコードを使用します。クライアントは、<Service>.<Domain>の名前のPTRルックアップを要求し、<Instance>.<Service>.<Domain>の形式のゼロ個以上のPTRレコードのリストを受け取ります

dns-sdバイナリを使用して、サービスの広告を表示し、サービスの検索を実行できます。

#Search ssh services
dns-sd -B _ssh._tcp

Browsing for _ssh._tcp
DATE: ---Tue 27 Jul 2021---
12:23:20.361  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
12:23:20.362  Add        3   1 local.               _ssh._tcp.           M-C02C934RMD6R
12:23:20.362  Add        3  10 local.               _ssh._tcp.           M-C02C934RMD6R
12:23:20.362  Add        2  16 local.               _ssh._tcp.           M-C02C934RMD6R
#Announce HTTP service
dns-sd -R "Index" _http._tcp . 80 path=/index.html

#Search HTTP services
dns-sd -B _http._tcp

新しいサービスが開始されると、新しいサービスはサブネット上のすべての人にその存在をマルチキャストします。リスナーは尋ねる必要はありませんでした。ただリスニングするだけでした。

このツールを使用して、現在のローカルネットワークで提供されているサービスを確認できます。
または、python-zeroconfを使用して、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がより安全であると感じるなら、無効化することもできます。以下の手順で行います:

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

参考文献

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