はじめに
Active Directory (AD) は、多くの組織でユーザー、コンピュータ、その他のリソースを管理するための中核的なシステムです。この複雑な環境を理解し、管理、そして保護するためには、AD内に存在するオブジェクトに関する正確な情報を効率的に収集する能力が不可欠です。特に、ドメインに参加しているコンピュータアカウントの情報は、セキュリティ監査、インベントリ管理、脆弱性評価など、様々な目的で重要となります。
ここで登場するのが Impacket です。Impacket は、ネットワークプロトコルを扱うためのPythonクラスのコレクションであり、特にWindowsネットワーク環境における対話(SMB, MSRPCなど)を容易にする強力なツール群を提供します。その中でも impacket-GetADComputers
は、Active Directoryドメイン内のコンピュータアカウントに関する情報をLDAP (Lightweight Directory Access Protocol) を介して照会し、取得するために特化したスクリプトです。
このブログ記事では、impacket-GetADComputers
の基本的な使い方から、様々なオプションを活用した実践的なテクニック、そして利用上の注意点まで、包括的に解説します。この記事を読むことで、以下の点を理解できるようになります。
impacket-GetADComputers
の基本的な実行方法- 様々な認証方式(パスワード、NTLMハッシュ、Kerberos)の利用
- LDAPフィルターを用いた柔軟なコンピュータ検索
- 特定の属性情報の抽出と出力方法
- コンピュータオブジェクトのIPアドレス解決機能
- 実行時の注意点とベストプラクティス
システム管理者、ペネトレーションテスター、セキュリティ研究者など、Active Directory環境に関わるすべての方にとって、impacket-GetADComputers
は強力な武器となるでしょう。さあ、その使い方をマスターしていきましょう!🚀
準備:Impacketのインストールと必要な権限
impacket-GetADComputers
を使用する前に、いくつかの準備が必要です。まず、Impacketがシステムにインストールされていることを確認しましょう。
Impacketのインストール
Impacket のインストールは、Pythonのパッケージマネージャーである pip
を使用するのが最も一般的です。ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行します。
pip install impacket
システム全体へのインストールよりも、pipx
を使用することが推奨されています。pipx
は、Pythonアプリケーションを独立した環境にインストールし、実行するためのツールです。
pip install --user pipx
pipx ensurepath
pipx install impacket
開発版(最新の変更が含まれる可能性があります)を試したい場合は、GitHubリポジトリから直接インストールすることもできます。
pipx install git+https://github.com/fortra/impacket.git
注意: 環境によっては、pip
の代わりに pip3
、python
の代わりに python3
を使用する必要がある場合があります。また、依存関係の問題が発生した場合は、公式ドキュメントやエラーメッセージに従って必要なライブラリを追加インストールしてください。
Kali Linuxなどのペネトレーションテスト用ディストリビューションでは、Impacketのツール群が impacket-scripts
パッケージとしてプリインストールされている場合があります。
sudo apt update && sudo apt install impacket-scripts
必要な権限
impacket-GetADComputers
を実行するには、ターゲットのActive Directoryドメインに対してLDAPクエリを実行できる権限が必要です。通常、ドメインユーザーであれば、ドメイン内のコンピュータオブジェクトに関する基本的な情報を読み取る権限を持っています。
特別な権限は通常必要ありませんが、環境によっては読み取りアクセスが制限されている可能性もあります。アクセスが拒否される場合は、より高い権限を持つアカウント(例:ドメイン管理者)を使用するか、必要な読み取り権限が付与されたアカウントを使用する必要があります。
重要: 業務で利用する場合やテスト環境以外で使用する場合は、必ず組織のポリシーと手順に従い、適切な承認を得てから実行してください。不正なアクセスや情報収集は法的な問題を引き起こす可能性があります。🚫
基本的な使い方
impacket-GetADComputers
の基本的な構文は比較的シンプルです。ターゲットとなるドメインと、認証情報を指定して実行します。
基本構文
最も基本的なコマンド形式は以下のようになります。
impacket-GetADComputers <ドメイン名>/<ユーザー名>[:<パスワード>] -dc-ip <ドメインコントローラーIP>
<ドメイン名>/<ユーザー名>[:<パスワード>]
: ターゲットドメイン、接続に使用するユーザー名、そしてパスワードを指定します。パスワード部分を省略すると、実行時に入力を求められます。-dc-ip <ドメインコントローラーIP>
: 接続先のドメインコントローラーのIPアドレスを指定します。これを指定しない場合、ImpacketはDNSを通じてドメインコントローラーを検索しようとします。
認証情報の指定方法
impacket-GetADComputers
は、いくつかの認証方法をサポートしています。
-
パスワード認証 (デフォルト):
上記基本構文のように、ユーザー名とパスワードを直接指定します。
パスワードをコマンドラインに残したくない場合は、パスワード部分を省略します。impacket-GetADComputers CONTOSO.COM/john.doe:Password123 -dc-ip 192.168.1.100
impacket-GetADComputers CONTOSO.COM/john.doe -dc-ip 192.168.1.100 Password:
-
NTLMハッシュ認証 (Pass-the-Hash):
ユーザーのパスワードの代わりに、LMハッシュとNTハッシュ(通常はNTハッシュのみで十分)を使用して認証します。-hashes
オプションを使用します。LMハッシュがない場合は、空文字またはダミーのハッシュ(例: `aad3b435b51404eeaad3b435b51404ee`)を指定します。impacket-GetADComputers CONTOSO.COM/jane.doe -hashes :<NTハッシュ> -dc-ip 192.168.1.100
impacket-GetADComputers CONTOSO.COM/admin.user -hashes aad3b435b51404eeaad3b435b51404ee:5d8a1e7f0719d64a8a001f6a3e4b4f3e -dc-ip 192.168.1.100
-
Kerberos認証:
有効なKerberosチケット(通常は TGT: Ticket Granting Ticket)を持っている場合、それを使用して認証できます。-k
オプションを使用し、-no-pass
オプションでパスワード入力を省略します。Impacketは、環境変数 `KRB5CCNAME` で指定されたKerberosチケットキャッシュファイル(ccache)を検索します。
AESキーを直接指定することも可能です (export KRB5CCNAME=/tmp/my_kerberos_ticket.ccache # (事前に kinit などでチケットを取得しておく) impacket-GetADComputers CONTOSO.COM/john.doe -k -no-pass -dc-ip 192.168.1.100
-aesKey
)。impacket-GetADComputers CONTOSO.COM/svc_account -aesKey <AES256キー> -k -no-pass -dc-ip 192.168.1.100
シンプルな実行例と出力
CONTOSO.COM ドメインのドメインコントローラー (192.168.1.100) に、ユーザー `john.doe` とパスワード `Password123` で接続し、コンピュータアカウント情報を取得してみましょう。
impacket-GetADComputers CONTOSO.COM/john.doe:Password123 -dc-ip 192.168.1.100
成功すると、以下のような形式でコンピュータアカウントの情報が出力されます(デフォルトでは主要な属性が表示されます)。
Impacket v0.12.0 - Copyright 2023 Fortra
[*] Querying domain contoso.com for computers...
[*] Total computers retrieved: 150
sAMAccountName dNSHostName operatingSystem operatingSystemVersion whenCreated pwdLastSet lastLogonTimestamp description
-------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- --------------------------
WEBSRV01$ websrv01.contoso.com Windows Server 2019 StandardWindows Server 2019 Standard10.0 (17763) 2023-05-10 14:20:15 2024-11-01 08:00:05 2025-03-20 10:15:30 Main Web Server
CLIENTPC01$ clientpc01.contoso.com Windows 10 Pro 10.0 (19045) 2023-06-15 09:05:10 2024-12-10 11:30:00 2025-03-25 16:45:00 Marketing Department PC
DC01$ dc01.contoso.com Windows Server 2022 Datacenter10.0 (20348) 2023-01-20 11:00:00 2025-01-15 09:00:10 2025-04-01 06:00:00 Primary Domain Controller
OLDXPCLIENT$ oldxpclient.contoso.com Windows XP Professional 5.1 (2600) 2010-03-01 16:30:00 2024-08-01 07:10:00 2024-09-15 12:00:00 Legacy System (Disabled)
... (他のコンピュータ情報) ...
出力される主な列の意味は以下の通りです。
sAMAccountName
: コンピュータアカウント名 (末尾に `$` が付く)dNSHostName
: 完全修飾ドメイン名 (FQDN)operatingSystem
: オペレーティングシステム名operatingSystemVersion
: オペレーティングシステムのバージョンwhenCreated
: アカウントが作成された日時pwdLastSet
: パスワードが最後に設定された日時lastLogonTimestamp
: 最後にログオンした日時 (注意: これはリアルタイムではなく、複製遅延があります)description
: コンピュータの説明 (設定されていれば)
基本的な使い方を理解したところで、次はより詳細な情報を取得したり、特定の条件でコンピュータを検索したりするためのオプションを見ていきましょう。🕵️♀️
主要なオプション解説
impacket-GetADComputers
は、基本的な情報取得以外にも、様々なオプションを指定することで、より詳細な情報を得たり、特定の条件に合致するコンピュータを効率的に検索したりすることが可能です。ここでは、よく使われる主要なオプションについて解説します。
オプション | 説明 | 例 |
---|---|---|
-all |
LDAPクエリで取得可能なすべての属性を表示します。出力が非常に冗長になるため、特定の属性を探す場合や詳細な分析が必要な場合に利用します。 | impacket-GetADComputers ... -all |
-filter <LDAPフィルター> |
標準のLDAPフィルター構文を使用して、取得するコンピュータアカウントを絞り込みます。非常に強力なオプションで、特定の条件を持つコンピュータを効率的に検索できます。 | impacket-GetADComputers ... -filter "(operatingSystem=*Server*)" (OS名に “Server” を含むコンピュータ) |
-attributes <属性1,属性2,...> |
デフォルトで表示される属性の代わりに、指定したLDAP属性のみを表示します。カンマ区切りで複数の属性を指定可能です。属性名はLDAPスキーマ上の名前 (例: operatingSystem , memberOf ) を使用します。 |
impacket-GetADComputers ... -attributes sAMAccountName,operatingSystem,lastLogonTimestamp |
-ts |
タイムスタンプ形式の属性 (例: whenCreated , pwdLastSet , lastLogonTimestamp ) を、より人間が読みやすい形式 (YYYY-MM-DD HH:MM:SS) に変換して表示します。デフォルトで有効になっていることが多いですが、明示的に指定することも可能です。 |
impacket-GetADComputers ... -ts |
-resolveIP |
取得したコンピュータオブジェクトの dNSHostName 属性値を使って、ドメインコントローラーに対してDNSのAレコード検索を行い、IPアドレスを解決しようと試みます。解決できた場合は、出力に追加の `ip_address` 列が表示されます。ネットワーク状況によっては時間がかかる場合があります。 |
impacket-GetADComputers ... -resolveIP |
-outputfile <ファイル名> |
取得した結果を、標準出力に表示する代わりに指定したファイルに保存します。大量のデータを扱う場合や、他のツールで処理する場合に便利です。出力形式はタブ区切りテキスト(TSV)に近いです。 | impacket-GetADComputers ... -outputfile computers_list.txt |
-dc-host <ホスト名> |
-dc-ip の代わりに、接続先のドメインコントローラーをホスト名で指定します。DNS解決が必要です。 |
impacket-GetADComputers ... -dc-host dc01.contoso.com |
-debug |
デバッグモードを有効にします。LDAPクエリの詳細や認証プロセスなど、内部的な動作に関する詳細なログが出力されます。問題のトラブルシューティングに役立ちます。 | impacket-GetADComputers ... -debug |
-h , --help |
ヘルプメッセージを表示し、利用可能なすべてのオプションと簡単な説明を確認できます。 | impacket-GetADComputers -h |
認証関連オプション (再掲) | ||
-hashes <LMHASH:NTHASH> |
NTLMハッシュ (Pass-the-Hash) を使用して認証します。 | impacket-GetADComputers ... -hashes :<NTハッシュ> |
-no-pass |
パスワードの入力を求めません。Kerberos認証 (-k ) や NTLMハッシュ認証 (-hashes ) と組み合わせて使用します。 |
impacket-GetADComputers ... -k -no-pass |
-k |
Kerberos認証を使用します。有効なチケットキャッシュが必要です (KRB5CCNAME 環境変数)。 |
impacket-GetADComputers ... -k -no-pass |
-aesKey <16進キー> |
Kerberos認証で使用するAESキーを16進数形式で指定します。 | impacket-GetADComputers ... -aesKey <キー> -k -no-pass |
これらのオプションを組み合わせることで、Active Directory内のコンピュータ情報を非常に柔軟かつ効率的に収集することが可能になります。特に -filter
オプションは強力で、LDAPフィルターの構文を理解することで、目的の情報をピンポイントで抽出できます。
次のセクションでは、これらのオプションを実際に活用したユースケースをいくつか紹介します。🔧
実践的なユースケース
impacket-GetADComputers
のオプションを組み合わせることで、様々なシナリオに応じた情報収集が可能です。ここでは、いくつかの実践的なユースケースを見ていきましょう。
1. 特定のOSを実行しているコンピュータのリストアップ
例えば、ドメイン内のすべての Windows Server 2019 を実行しているコンピュータをリストアップしたい場合、-filter
オプションで operatingSystem
属性をフィルタリングします。
impacket-GetADComputers CONTOSO.COM/john.doe -dc-ip 192.168.1.100 -filter "(operatingSystem=Windows Server 2019*)" -attributes sAMAccountName,operatingSystem,dNSHostName
Password:
*
はワイルドカードとして機能します。より具体的にバージョンも指定する場合は、operatingSystemVersion
属性もフィルターに含めることができます。
impacket-GetADComputers CONTOSO.COM/john.doe -dc-ip 192.168.1.100 -filter "(&(operatingSystem=Windows Server*)(operatingSystemVersion=10.0 (17763)))" -attributes sAMAccountName,operatingSystemVersion,dNSHostName
Password:
(&(...)(...))
はAND条件を示します。
2. 特定のグループに所属するコンピュータの検索
コンピュータアカウントもグループのメンバーになることができます。例えば、「Domain Controllers」グループに所属するコンピュータ(つまりドメインコントローラー)を検索するには、memberOf
属性をフィルターで利用します。グループの識別名 (Distinguished Name, DN) を指定する必要があります。
# まず Domain Controllers グループの DN を確認する必要がある場合がある
# 例: CN=Domain Controllers,OU=Groups,DC=contoso,DC=com
impacket-GetADComputers CONTOSO.COM/john.doe -dc-ip 192.168.1.100 -filter "(memberOf=CN=Domain Controllers,OU=Groups,DC=contoso,DC=com)" -attributes sAMAccountName,dNSHostName
Password:
3. 無効化されているコンピュータアカウントの特定
長期間使用されていない、あるいは意図的に無効化されたコンピュータアカウントを特定するには、userAccountControl
属性のフラグを利用します。アカウントが無効であることを示すフラグ (UF_ACCOUNTDISABLE
) は、値 `2` を持ちます。LDAPフィルターではビット演算子 (:1.2.840.113556.1.4.803:=
) を使ってフラグの存在を確認します。
impacket-GetADComputers CONTOSO.COM/john.doe -dc-ip 192.168.1.100 -filter "(userAccountControl:1.2.840.113556.1.4.803:=2)" -attributes sAMAccountName,whenCreated,lastLogonTimestamp
Password:
これにより、クリーンアップが必要な古いアカウントや、セキュリティリスクとなる可能性のあるアカウントを発見できます。🧹
4. 特定の属性を抽出し、IPアドレスを解決してファイルに保存
インベントリ作成などの目的で、コンピュータ名、OS、最終ログオン日時、そしてIPアドレスを取得し、ファイルに保存したい場合、-attributes
、-resolveIP
、-outputfile
オプションを組み合わせます。
impacket-GetADComputers CONTOSO.COM/john.doe -dc-ip 192.168.1.100 -attributes sAMAccountName,operatingSystem,lastLogonTimestamp,dNSHostName -resolveIP -outputfile ad_computers_inventory.tsv
Password:
ad_computers_inventory.tsv
ファイルには、指定した属性と解決されたIPアドレス(`ip_address` 列が追加)がタブ区切り形式で保存されます。これをExcelや他のデータ処理ツールで簡単に利用できます。📊
5. Kerberos認証を使った実行例
Kerberosチケット (例: `/tmp/krb5cc_john`) を使用して認証する場合のコマンド例です。
export KRB5CCNAME=/tmp/krb5cc_john
impacket-GetADComputers CONTOSO.COM/john.doe -k -no-pass -dc-ip 192.168.1.100 -filter "(operatingSystem=*Windows 10*)" -attributes sAMAccountName,dNSHostName
パスワードやハッシュを直接扱わないため、よりセキュアな認証方法と言えます。🔑
これらのユースケースはほんの一例です。LDAPフィルターの表現力と impacket-GetADComputers
のオプションを組み合わせることで、Active Directory内のコンピュータに関する様々な情報を、目的に応じて柔軟に取得することが可能です。
注意点とベストプラクティス
impacket-GetADComputers
は非常に便利なツールですが、利用にあたってはいくつかの注意点と推奨されるプラクティスがあります。これらを理解しておくことで、安全かつ効果的にツールを活用できます。
-
権限の確認と承認:
- 前述の通り、実行には少なくともドメインユーザーの読み取り権限が必要です。
- 絶対に許可なく他者の環境や本番環境で実行しないでください。
- 組織のセキュリティポリシーと利用手順を遵守し、必要な承認を得てから使用してください。
-
パフォーマンスへの影響:
- 大規模なActive Directory環境(数万〜数十万のコンピュータオブジェクト)に対して、
-all
オプションや非常に広範なフィルター(またはフィルターなし)でクエリを実行すると、ドメインコントローラーとネットワークに大きな負荷がかかる可能性があります。 - 特に
-resolveIP
オプションは、オブジェクトごとにDNSクエリを追加で発行するため、実行時間が大幅に増加する可能性があります。 - 業務時間中の実行は避け、可能な限りオフピーク時間帯に実行するか、対象を絞ったクエリを使用することを検討してください。
- 大規模なActive Directory環境(数万〜数十万のコンピュータオブジェクト)に対して、
-
ログ記録と監査証跡:
impacket-GetADComputers
の実行は、ドメインコントローラーのセキュリティログに記録される可能性があります(LDAPクエリや認証イベントなど)。- 誰が、いつ、どの情報にアクセスしたかを追跡可能にしておくことは、セキュリティインシデント発生時の調査やコンプライアンス要件のために重要です。
- 実行する際には、目的、実行日時、実行者、使用したコマンドなどを記録しておくことを推奨します。📝
-
認証情報の安全な管理:
- コマンドラインに直接パスワードを入力すると、シェルの履歴などに残ってしまうリスクがあります。可能な限り、パスワードプロンプトを使用するか、より安全なKerberos認証や、一時的な認証情報を使用することを検討してください。
- NTLMハッシュを使用する場合も、そのハッシュ情報が漏洩しないように厳重に管理してください。ハッシュはパスワードと同様に機密情報です。
- サービスアカウントなどでスクリプトを自動実行する場合は、認証情報の保管方法に細心の注意を払い、最小権限の原則に従ってください。
-
ツールのアップデート:
- Impacket は活発に開発されており、機能追加やバグ修正、セキュリティ修正が行われています。定期的に最新バージョンにアップデートすることを推奨します。
- 古いバージョンのImpacketには既知の脆弱性が存在する可能性もあります。
pipx upgrade impacket
やpip install --upgrade impacket
といったコマンドでアップデートできます。
-
情報の正確性 (特に lastLogonTimestamp):
lastLogonTimestamp
属性は、リアルタイムの最終ログオン日時ではありません。ドメインコントローラー間で複製される際に遅延が発生するため、最大で9〜14日程度の誤差が生じる可能性があります。アカウントの活動状況を判断する際には、この点を考慮に入れてください。
これらの注意点を守り、責任ある方法で impacket-GetADComputers
を使用することで、Active Directory環境の理解を深め、管理やセキュリティ評価を効果的に行うことができます。🧐
まとめ
impacket-GetADComputers
は、Active Directoryドメイン内のコンピュータアカウントに関する情報を効率的に収集するための強力なツールです。この記事では、その基本的な使い方から、各種オプション(-filter
, -attributes
, -resolveIP
, 各種認証方法など)を活用した実践的なユースケース、そして利用上の注意点までを解説しました。
このツールを使いこなすことで、以下のようなタスクを効率化できます。
- 🖥️ コンピュータインベントリの作成と更新
- 🛡️ 特定のOSや構成を持つコンピュータの特定(脆弱性管理など)
- 🧹 古い、または無効なコンピュータアカウントの検出とクリーンアップ
- 📊 セキュリティ監査や構成評価に必要な情報の収集
特に -filter
オプションによるLDAPフィルターの活用は、目的の情報をピンポイントで抽出するために非常に重要です。LDAPフィルターの構文に慣れることで、より高度な情報収集が可能になります。
一方で、ツールの強力さゆえに、利用には責任が伴います。適切な権限と承認の下で、パフォーマンスへの影響やセキュリティ上のリスクを考慮し、慎重に使用することが不可欠です。
impacket-GetADComputers
は、Impacketが提供する多くの便利なツールの一つに過ぎません。Active Directory環境の管理やセキュリティに関わる方は、Impacketの他のツール(例: GetADUsers
, GetUserSPNs
, secretsdump
など)についても学習することで、さらに多くの知見を得ることができるでしょう。
ぜひこのツールをマスターして、日々のActive Directory管理やセキュリティ業務に役立ててください!💪 Happy Hacking (ethically, of course)! 😉
より詳細な情報や最新情報については、Impacketの公式ドキュメントやGitHubリポジトリを参照することをお勧めします。
- Impacket GitHub Repository: https://github.com/fortra/impacket
- Impacket Documentation (Examples): (公式の包括的なドキュメントは少ないですが、各スクリプトのヘルプやコード自体が参考になります)
コメント