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

13 KiB
Raw Blame History

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

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!

HackTricksをサポートする他の方法:

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

これらはmacOSをリモートでアクセスするための一般的なサービスです。
これらのサービスは システム設定 --> 共有 で有効/無効にできます。

  • VNC、「スクリーン共有」として知られています (tcp:5900)
  • SSH、「リモートログイン」と呼ばれます (tcp:22)
  • Apple Remote Desktop (ARD)、または「リモート管理」として知られています (tcp:3283, tcp:5900)
  • AppleEvent、「リモートAppleイベント」として知られています (tcp:3031)

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

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

ARDのペネトレーションテスト

(この部分はこのブログ投稿から取られました

基本的には、macOS固有の機能をいくつか追加したVNCの変形版です。
しかし、スクリーン共有オプションは、ただの基本的なVNCサーバーです。また、ARDまたはリモート管理オプションには、コントロールスクリーンのパスワードを設定する高度な機能があり、これによりARDはVNCクライアントとの互換性を持ちます。ただし、この認証方法には、パスワード8文字の認証バッファ制限する弱点があり、HydraGoRedShellのようなツールを使用して非常に簡単にブルートフォースすることができます(デフォルトではレート制限もありません)。
nmapを使用して脆弱なスクリーン共有またはリモート管理のインスタンスを特定できます。スクリプトvnc-infoを使用し、サービスが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ユーザーとして実行するための指定も可能です。このUnixコマンドメソッドを使用して、特定の時間にリモートタスクを実行するようスケジュールすることもできますが、これは指定された時間にネットワーク接続として発生しますターゲットサーバーに保存されて実行されるのではありません。最後に、リモートSpotlightは私のお気に入りの機能の一つです。インデックス付きの検索を迅速かつリモートで実行できるため、非常に便利です。これは、検索を複数のマシンで同時に実行でき、CPUの使用率を上げることなく、機密ファイルを素早く検索するのに最適です。

Bonjourプロトコル

Bonjourは、同じネットワーク上にあるコンピューターやデバイスが他のコンピューターやデバイスが提供するサービスを認識することを可能にするAppleが設計した技術です。Bonjour対応デバイスはTCP/IPネットワークに接続するだけでIPアドレスを取得し、そのネットワーク上の他のコンピューターに提供するサービスを認識させるように設計されています。Bonjourは、Rendezvous、ゼロコンフィギュレーション、またはZeroconfとしても知られています。
ゼロコンフィギュレーションネットワーキング、Bonjourが提供するものは以下の通りです

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

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

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

**サービスの発見にはDNSサービスディスカバリーDNS-SD**が使用されます。

ゼロコンフィギュレーションネットワーキングの最終要件は、DNSサービスディスカバリーDNS-SDによって満たされます。DNSサービスディスカバリーはDNS SRVレコードの構文を使用しますが、複数の結果を返すことができるようにDNS PTRレコードを使用します。クライアントは<Service>.<Domain>の名前に対するPTRルックアップを要求し、0個以上のPTRレコードの形式<Instance>.<Service>.<Domain>リストを受け取ります

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

参考文献

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をチェック!

HackTricksをサポートする他の方法: