SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Active Directory のトレースログを取得 – Windows Server 2003 –

leave a comment

以前、AD の勉強をしていた時にクライアントから発行される AD の LDAP クエリはキャプチャできないのかな~と思い調べたことがあり、
パフォーマンスモニタのトレースログで AD の情報を取得することで、LDAP クエリがキャプチャできそうでした。
今週、このトレースを久しぶりに取得してみる機会があったので、せっかくなのでブログにも投稿を。
# この辺の情報があまり見つけられず、これであっているのかがいまいちわからないのですがそれらしい情報が取得できます。

私の検証環境に Windows Server 2003 / Windows Server 2008 の AD がありましたのでこれを使ってトレースログを
取得してみたいと思います。
今回は Windows Server 2003 で。

■Windows Server 2003 でトレースログを取得

トレースログはパフォーマンスモニタから取得することができます。

  1. パフォーマンスモニタは [管理ツール] の [パフォーマンス] または、[ファイル名を指定して実行] から [perfmon.exe] を実行します。
    image
    image 
    パフォーマンスモニタの [パフォーマンス ログと警告] の中に [トレース ログ] があります。
    このトレース ログを使用することで AD のクエリ情報を取得できそうです。
    image 
  2. トレース ログを右クリックして、[新しいログの設定] をクリックします。
    image
  3. ログの名前を入力して、[OK] をクリックします。
    image
  4. ここでシステム外のプロバイダの [追加] をクリックし、[Active Directory: Core] を追加します。
    image image
  5. デフォルトの設定では、作成したと同時に開始されてしまいますので、スケジュールを [手動] にしておきます。
    image
  6. [OK] を押して準備完了です。
    image 

    ログの出力先のディレクトリが存在していない場合は、警告メッセージが表示されるので [はい] をクリックして、
    ディレクトリを作成します。
    image

  7. 作成したトレース ログを開始すると取得が始まります。
    image

取得したファイルは出力先のディレクトリに、[etl] ファイルとして出力されます。
image

ここで、クライアント端末からログインをしてみます。
image

ログインが終わったらログの取得を停止します。
image

■ログの成形

取得したログはバイナリ形式ですのでそのままでは内容を確認できません。

以前、WSFC のログについて で投稿した、[tracerpt] コマンドを使ってログを成形することができます。
以下はコマンドの例になります。

C:perflogs>tracerpt "Active Directory Trace_000001.etl" -o log.txt

入力
—————-
ファイル:
     Active Directory Trace_000001.etl

100.00%

出力
—————-
テキスト (CSV):         log.txt

コマンドは、正しく完了しました。

このログファイルの中で [DsDirSearch] となっている個所が、LDAP のクエリ検索に使用された情報になるようですので、
[FIND] コマンドでこの行だけを切り出します。

find log.txt “DsDirSearch” > report.txt

切り出した内容がこちらです。
クライアントのログイン処理に関連しそうな情報を貼り付けてみました。
[10.2.0.2] はクライアントに割り当てている IP になります。

Event Name,       Type,        TID,           Clock-Time, Kernel(ms),   User(ms), User Data

DsDirSearch,      Start, 0x000001EC,   129103742780181356,        180,       1200, "DS", 3, 3, 1141178432,        0, "NTDSAPI", "deep", "DC=exchange,DC=local", "0, 0
DsDirSearch,        End, 0x000001EC,   129103742780181356,        180,       1200, "DS", 3, 5, 1157955648,        0, "0", " (sAMAccountName=user_2010)", "idx_sAMAccountName:1:N;", "1", "1", "0, 0

DsDirSearch,      Start, 0x000001EC,   129103742780337608,        180,       1200, "DS", 3, 3, 1141178432,        0, "NTDSAPI", "deep", "DC=exchange,DC=local", "0, 0
DsDirSearch,        End, 0x000001EC,   129103742780337608,        180,       1200, "DS", 3, 5, 1157955648,        0, "0", " (sAMAccountName=user_2010)", "idx_sAMAccountName:1:N;", "1", "1", "0, 0

DsDirSearch,      Start, 0x00000A40,   129103742780493860,         15,        105, "DS", 3, 3, 1141178432, 1075970048, "10.2.0.2", "deep", "DC=exchange,DC=local", "0, 0
DsDirSearch,        End, 0x00000A40,   129103742780493860,         15,        105, "DS", 3, 5, 1157955648, 1075970048, "0", " (distinguishedName=DC=exchange,DC=local)", "idx_distinguishedName:1:N;", "1", "1", "・0, 0

DsDirSearch,      Start, 0x000003F4,   129103742780650112,        510,       5895, "DS", 3, 3, 1141178432, 1612840960, "10.2.0.2", "base", "CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=exchange,DC=local0, 0
DsDirSearch,        End, 0x000003F4,   129103742780650112,        510,       5895, "DS", 3, 5, 1157955648, 1612840960, "0", "[]", "[]", "1", "1", "0, 0

DsDirSearch,      Start, 0x00000A40,   129103742780806364,         15,        105, "DS", 3, 3, 1141178432, 1075970048, "10.2.0.2", "deep", "cn=policies,cn=system,DC=exchange,DC=local", "0, 0
DsDirSearch,        End, 0x00000A40,   129103742780806364,         15,        105, "DS", 3, 5, 1157955648, 1075970048, "0", " (distinguishedName=CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=exchange,DC=local) 0, 0

Start と End で1 ブロックのようです。Start と End は同一の TID となるようですね。
ログインに使用したユーザー名の情報が出力されています。
また、IP アドレスが記載されているものもありますね。

試しに [0x00000A40] の情報を使って AD に問い合わせをしてみたいと思います。
問い合わせには、[dsquery] コマンドを使用します。

dsquery * -filter " (distinguishedName=CN={31B2F340-016D-11D2-945F-C04FB984F9},CN=Policies,
CN=System,DC=exchange,DC=local) " -attr *

objectClass: top
objectClass: container
objectClass: groupPolicyContainer
cn: {31B2F340-016D-11D2-945F-00C04FB984F9}
distinguishedName: CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=exchange,DC=local
instanceType: 4
whenCreated: 01/17/2010 11:06:20
whenChanged: 02/11/2010 11:53:57
displayName: Default Domain Policy
uSNCreated: 17776
uSNChanged: 17776
showInAdvancedViewOnly: TRUE
name: {31B2F340-016D-11D2-945F-00C04FB984F9}
objectGUID: {37E0FE6E-DFA9-47FE-8BCA-E5AC7FFA57FA}
flags: 0
versionNumber: 65539
systemFlags: -1946157056
objectCategory: CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=exchange,DC=local
isCriticalSystemObject: TRUE
gPCFunctionalityVersion: 2
gPCFileSysPath: exchange.localsysvolexchange.localPolicies{31B2F340-016D-11D2-945F-00C04FB984F9}
gPCMachineExtensionNames: [{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}][{827D319E-6EAC-11D2-A4EA-00C04F79F83A}{803E14A0-B4FB-11
D0-A0D0-00A0C90F574B}][{B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}]
gPCUserExtensionNames: [{3060E8D0-7020-11D2-842D-00C04FA372D4}{3060E8CE-7020-11D2-842D-00C04FA372D4}]
ADsPath: LDAP://EXCHANGE-AD-02.exchange.local/CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=exchange,DC=local

この情報はグループポリシーのために発行したクエリのようですね。

トレースは、dsquery の LDAP フィルタの式のサンプルとしても利用することが可能です。
クライアント PC 起動時に AD 側でトレースを取得しているとコンピュータアカウントで発行されたクエリが取得できます。

次回は Windows Server 2008 で同様の作業を実施してみます。
こちらは、クライアント PC 起動時の情報を取得するシナリオを実施したいと思います。

Written by masayuki.ozawa

2月 11th, 2010 at 3:50 pm

Posted in Active Directory

Leave a Reply

*