macOS Network Services & Protocols

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

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

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

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

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

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

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のペンテスト

Apple Remote Desktop (ARD) は、macOS向けにカスタマイズされたVirtual Network Computing (VNC)の強化バージョンであり、追加機能を提供しています。 ARDの顕著な脆弱性は、制御画面パスワードの認証方法であり、パスワードの最初の8文字のみを使用するため、HydraGoRedShellなどのツールを使用した総当たり攻撃に対して脆弱性があります。デフォルトのレート制限がないため、特にVNC Authentication (2)をサポートするサービスは、8文字のパスワードの切り捨てにより、総当たり攻撃に特に脆弱です。

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

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

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

ARDは、観察、共有制御、フル制御など、さまざまな制御レベルを提供し、ユーザーパスワードの変更後もセッションが継続します。管理者ユーザーに対して、Unixコマンドを直接送信し、rootとして実行することができます。タスクスケジューリングやリモートスポットライト検索などの機能があり、複数のマシンで機密ファイルをリモートで検索するのに役立ちます。

Bonjourプロトコル

Bonjourは、Appleが設計した技術で、同じネットワーク上のデバイスが提供するサービスを検出できます。Rendezvous、Zero Configuration、またはZeroconfとしても知られ、TCP/IPネットワークにデバイスを参加させ、自動的にIPアドレスを選択し、そのサービスを他のネットワークデバイスにブロードキャストできます。

Bonjourによって提供されるZero Configuration Networkingにより、デバイスは次のことができます:

  • DHCPサーバーが存在しなくてもIPアドレスを自動的に取得できます。

  • DNSサーバーを必要とせずに名前からアドレスへの変換を実行できます。

  • ネットワーク上で利用可能なサービスを検出できます。

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

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

ネットワークに参加すると、各デバイスは通常、ホスト名から派生した**.local**で終わる名前を自己選択します。

ネットワーク内でのサービス検出は、**DNS Service Discovery(DNS-SD)**によって容易になります。DNS SRVレコードの形式を活用するDNS-SDは、DNS PTRレコードを使用して複数のサービスをリスト化します。特定のサービスを求めるクライアントは、複数のホストから利用可能な場合、<Instance>.<Service>.<Domain>という形式のPTRレコードのリストを受け取ります。

dns-sdユーティリティを使用して、ネットワークサービスの検出と広告ができます。以下はその使用例です:

SSHサービスの検索

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

dns-sd -B _ssh._tcp

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

HTTPサービスの広告

HTTPサービスを広告するには、次のコマンドを使用できます:

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

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

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

dns-sd -B _http._tcp

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

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

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

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の無効化

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

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

参考文献

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

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

Last updated