
BloodHoundを拡張し、macOSホストからActive Directoryの関係性を収集・取り込みます。ログインユーザー、管理者グループ、SSH/VNC/AppleEventアクセスエッジなど、攻撃経路のマッピングに必要な情報を含みます。
MacHound は、Bloodhound 監査ツールの拡張機能であり、MacOS ホスト上の Active Directory 関連の関係性を収集・取り込むことを可能にします。 MacHound は、ログイン中のユーザーと Mac マシン上の管理グループメンバーに関する情報を収集し、Bloodhound データベースに取り込みます。 HasSession および AdminTo エッジの使用に加えて、MacHound は Bloodhound データベースに3つの新しいエッジを追加します。
MacHound の詳細については、導入記事を参照してください。
MacHound は utmpx API を使用して現在アクティブなユーザーをクエリし、OpenDirectory とメンバーシップ API を使用して Active Directory ユーザーを検証します。
MacHound は以下のローカル管理グループの Active Directory メンバーを収集します。
ローカル管理グループで、ルート操作を許可します。
このローカルグループのメンバーは、リモートログインサービス (SSH) へのアクセスが許可されます。
このローカルグループのメンバーは、AppleEvent スクリプトをリモートで実行できます。
このローカルグループのメンバーは、画面共有サービス (VNC) へのアクセスが許可されます。
MacHound は、コレクタとインジェスタの2つの主要コンポーネントに分かれています。
MacHound コレクタは、Active Directory に参加している MacOS ホスト上でローカルに実行される Python3.7 スクリプトです。 コレクタは、特権ユーザーとグループに関する情報をローカルの OpenDirectory および Active Directory にクエリします。 実行の出力は、収集されたすべての情報を含む JSON ファイルです。
MacHound インジェスタは、出力 JSON ファイル(ホストごとに1つ)を解析し、neo4j データベースに接続してエッジをデータベースに挿入する Python3.7 スクリプトです。 インジェスタは、Python 用の neo4j ライブラリを使用して neo4j データベースとの間で情報をクエリします。 インジェスタは、neo4j データベースに TCP アクセスできるホスト上で実行する必要があります。
MacHound には Python3.7 が必要です。 インジェスタには Python3.7 用の neo4j ライブラリが必要です。
コレクタは Mac 上にデプロイし、ローカルで実行する必要があります。出力はローカルに保存され、インジェスタを実行するホストに転送する必要があります。コレクタは Python3.7 の組み込みライブラリに依存しており、追加のインストールは必要ありません。 MacHound は、py2app ライブラリを使用してアプリケーションとしてコンパイルし、デプロイを容易にすることができます。
コレクタはデフォルトで引数を取らず、すべての情報をクエリし、出力ファイルを ./output.json に書き込みます。 コレクタは root ユーザーとして実行する必要があります。
collector.py -o <出力ファイル> -c <Admin,CanSSH,CanVNC,CanAE,HasSession> [-v] [-l ログファイルパス]
インジェスタは、Bloodhound の neo4j データベースへの直接 TCP 接続を持つホスト(できればセキュリティリスクを避けるために neo4j データベースサーバー上)にデプロイする必要があります。 インジェスタには、Python 用の neo4j ドライバーのインストールが必要です(requirements ファイルを参照)。
ingestor.py <url_to_neo4j> -u <ユーザー名> -p <パスワード> -i <jsonフォルダ>
MacHound は GPL-3.0 ライセンスの下で公開されています。詳細については LICENSE.md を参照してください。
ご質問、ご提案、バグ報告などございましたら、[email protected] までお気軽にご連絡ください。