
LDAP経由のActive Directory情報ダンプツール
Active Directoryドメインでは、認証されたユーザー(またはマシン)であれば、LDAPを介して多くの興味深い情報を取得できます。 そのため、内部ネットワークのペネトレーションテストにおける偵察フェーズで情報を収集するためのプロトコルとして、LDAPは興味深いものとなっています。 問題は、LDAPからのデータが読みやすい形式で利用できないことが多いことです。
ldapdomaindumpは、LDAPから利用可能な情報を収集・解析し、人間が読みやすいHTML形式、および機械可読なJSON、CSV/TSV/grep可能なファイルとして出力することで、この問題を解決するツールです。
このツールは以下の目標を念頭に設計されました:
このツールは、ドメイン内のオブジェクトの概要を含む複数のファイルを出力します:
さらに、2つのグループ化されたファイル:
ldap3 2.0以上とdnspythonが必要です。ldapdomaindumpはPython 3.6以降が必要です。
依存関係は pip install ldap3 dnspython future で手動インストールできますが、通常はgitまたはpypiからメインパッケージをインストールする際にpipが自動的に処理します。
ldapdomaindumpパッケージは、gitソースから python setup.py install でインストールするか、最新リリースの場合は pip install ldapdomaindump でインストールできます。
このツールを使用するには3つの方法があります:
python ldapdomaindump.py を実行python -m ldapdomaindump を実行ldapdomaindump を実行ヘルプは -h スイッチで表示できます:
usage: ldapdomaindump.py [-h] [-u USERNAME] [-p PASSWORD] [-at {NTLM,SIMPLE}]
[-o DIRECTORY] [--no-html] [--no-json] [--no-grep]
[--grouped-json] [-d DELIMITER] [-r] [-n DNS_SERVER]
[-m]
HOSTNAME
Domain information dumper via LDAP. Dumps users/computers/groups and
OS/membership information to HTML/JSON/greppable output.
Required options:
HOSTNAME Hostname/ip or ldap://host:port connection string to
connect to (use ldaps:// to use SSL)
Main options:
-h, --help show this help message and exit
-u USERNAME, --user USERNAME
DOMAIN\username for authentication, leave empty for
anonymous authentication
-p PASSWORD, --password PASSWORD
Password or LM:NTLM hash, will prompt if not specified
-at {NTLM,SIMPLE}, --authtype {NTLM,SIMPLE}
Authentication type (NTLM or SIMPLE, default: NTLM)
Output options:
-o DIRECTORY, --outdir DIRECTORY
Directory in which the dump will be saved (default:
current)
--no-html Disable HTML output
--no-json Disable JSON output
--no-grep Disable Greppable output
--grouped-json Also write json files for grouped files (default:
disabled)
-d DELIMITER, --delimiter DELIMITER
Field delimiter for greppable output (default: tab)
Misc options:
-r, --resolve Resolve computer hostnames (might take a while and
cause high traffic on large networks)
-n DNS_SERVER, --dns-server DNS_SERVER
Use custom DNS resolver instead of system DNS (try a
domain controller IP)
-m, --minimal Only query minimal set of attributes to limit memmory
usage
ほとんどのADサーバーはNTLM認証をサポートしています。まれにサポートしていない場合は、--authtype SIMPLE を使用してください。
デフォルトでは、ツールはすべてのファイルをHTML、JSON、およびタブ区切り出力(grep可能)で出力します。また、便利なように2つのグループ化されたファイル(users_by_group と computers_by_os)もあります。これらにはgrep可能な出力はありません。グループ化されたファイルのJSON出力は、非常に大きなファイルを作成するだけで、他のファイルにはないデータも含まれないため、デフォルトでは無効になっています。
重要なオプションは -r オプションで、コンピューターのDNSHostName属性をIPv4アドレスに解決するかどうかを決定します。 これは非常に便利ですが、DNSHostName属性は自動的に更新されません。ADドメインがコンピューターのホスト名にサブドメインを使用している場合、DNSHostNameが正しくなく、解決できないことがよくあります。また、ドメイン内のすべてのホスト名を解決すると、ドメインコントローラーに高い負荷がかかる可能性があることに留意してください。
デフォルトでは、ldapdomaindumpは読み取れるすべての属性を.jsonファイルにダンプしようとします。大規模なネットワークでは、グループ関係がディスクに書き込まれる前にメモリ内で計算されるため、多くのメモリを使用します。最小限必要な属性(.htmlおよび.grepファイルにデフォルトで表示されるもの)のみをダンプするには、--minimal スイッチを使用してください。
LDAPDomainDumpには、ldapdomaindumpの .json ファイルをBloodHound用のCSVファイルに変換するユーティリティが含まれています。このユーティリティは ldd2bloodhound と呼ばれ、インストール時にパスに追加されます。または、ソースから実行している場合は python -m ldapdomaindump.convert または python ldapdomaindump/convert.py で実行できます。
変換ツールは、users/groups/computers/trustsの .json ファイルを読み込み、group_membership.csv と trust.csv に変換します。これらをBloodHoundに追加できます。これらのファイルは、かなり古い BloodHound 1.x とのみ互換性があることに注意してください。最新バージョンのサポートは計画されていません。BloodHound.pyプロジェクトがこの目的で作成されたためです。DCOnly収集方法では、このツールもLDAPとのみ通信し、ldapdomaindumpよりも多くの情報を収集します。
LDAPDomainDumpには、ldapdomaindumpの .json ファイルをenum4linuxのような出力に変換するユーティリティが含まれています。このユーティリティは ldd2pretty と呼ばれ、インストール時にパスに追加されます。または、ソースから実行している場合は python -m ldapdomaindump.pretty または python ldapdomaindump/pretty.py で実行できます。
MIT