Microsoft Windows AD データを収集する
このドキュメントには、次の情報が含まれています。
- デプロイ アーキテクチャとインストール手順、さらに Microsoft Windows Active Directory イベントに対して Google Security Operations パーサーがサポートするログを生成するために必要な構成。Google Security Operations のデータ取り込みの概要については、Google Security Operations へのデータの取り込みをご覧ください。
- パーサーが元のログのフィールドを Google Security Operations Unified Data Model フィールドにマッピングする方法に関する情報。
このドキュメントの情報は、WINDOWS_AD 取り込みラベルを持つパーサーに適用されます。 取り込みラベルは、未加工ログデータを構造化 UDM 形式に正規化するパーサーを識別します。
準備
推奨されるデプロイ アーキテクチャを確認する
この図は、Microsoft Windows イベントを収集して Google Security Operations に送信するデプロイ アーキテクチャで推奨される基本コンポーネントを示しています。この情報とお客様の環境を比較して、これらのコンポーネントがインストールされていることを確認してください。それぞれのお客様のデプロイはこの表現とは異なり、より複雑になる場合があります。以下が必須です。
- デプロイ アーキテクチャのすべてのシステムは、UTC タイムゾーンで構成されています。
- PowerShell スクリプトは、Microsoft Windows AD サーバーごとに作成、構成され、USER_CONTEXT と ASSET_CONTEXT のデータを収集します。
- NXLog は、各 Microsoft Windows AD サーバーにインストールされ、中央の Microsoft Windows または Linux サーバーにデータを送信します。
Google Security Operations フォワーダーは、中央の Microsoft Windows または Linux サーバーにインストールされ、ログデータを Google Security Operations に転送します。
サポートされているデバイスとバージョンを確認する
Google Security Operations パーサーは、次の Microsoft Windows サーバー バージョンのログをサポートしています。 Microsoft Windows Server は、Foundation、Essentials、Standard、Datacenter でリリースされています。各エディションによって生成されたログのイベント スキーマは変わりません。
- Microsoft Windows Server 2019
- Microsoft Windows Server 2016
- Microsoft Windows Server 2012
Google Security Operations パーサーは、NXLog Community または Enterprise エディションによって収集されたログをサポートします。
サポートされているログタイプを確認する
Google Security Operations パーサーは、ユーザー コンテキストとアセット コンテキストから取得したデータを解析し、正規化します。英語のテキストで生成されたログは、英語以外の言語で生成されたログではサポートされません。
Microsoft Windows AD サーバーを構成する
デプロイ アーキテクチャで Microsoft Windows AD サーバーを構成する手順:
- すべてのシステムを UTC タイムゾーンで構成します。
- 各 Microsoft Windows Active Directory サーバーで、ログデータを出力ファイルに収集する PowerShell スクリプトを作成して構成します。NXLog は、出力ファイルを読み取り、中央の Microsoft Windows または Linux サーバーにデータを送信します。
PowerShell スクリプトを作成します。次の例をご覧ください。
$OUTPUT_FILENAME
の値を出力ファイルを書き込む場所に変更します。このファイルは NXLog によって読み取られます。データは JSON 形式で保存する必要があります。エンコードを utf8 に設定します。Get-ADUser
とGet-ADComputer
コマンドレットを呼び出すときは、-LDAPFilter
パラメータではなく、-Filter
パラメータを使用します。# Set the location where the log file will be written $OUTPUT_FILENAME="<Path_of_the_output_file>" If (Test-Path -Path $OUTPUT_FILENAME) { Remove-Item -path $OUTPUT_FILENAME -ErrorAction SilentlyContinue} # USER_CONTEXT: Gets all Active Directory users and their properties. Get-ADUser -Filter * -properties samAccountName | % { Get-ADUser $_.SamAccountName -properties * | ConvertTo-JSON -compress | Out-File -encoding utf8 $OUTPUT_FILENAME -Append } # ASSET_CONTEXT: Gets all Active Directory assets and their properties. Get-ADComputer -Filter * -properties samAccountName | % { Get-ADComputer $_.SamAccountName -properties * | ConvertTo-JSON -compress | Out-File -encoding utf8 $OUTPUT_FILENAME -Append }
繰り返しスクリプトを作成して、スクリプトを実行し、出力ファイルにデータを取得して書き込みます。
- タスク スケジューラ アプリケーションを開きます。
- [タスクを作成] をクリックします。
- カタログの名前と説明を入力します。
- [最も高い権限で実行] チェックボックスをオンにして、すべてのデータが取得されるようにします。
- [トリガー] タブで、タスクを繰り返すタイミングを定義します。
- [アクション] タブで、新しいアクションを追加し、スクリプトを保存するファイルのパスを指定します。
各 Microsoft Windows Active Directory サーバーに NXLog エージェントをインストールします。 このアプリケーションは、中央の Microsoft Windows または Linux サーバーにログを転送します。NXLog のドキュメントに従ってください。
NXLog インスタンスごとに構成ファイルを作成します。NXLog im_file モジュールを使用して、ファイルから読み取り、行をフィールドにパースします。 om_tcp モジュールを使用して、中央の Microsoft Windows または Linux サーバーにデータを転送します。
NXLog 構成の例を次に示します。
<hostname>
と<port>
の値は、転送先の中央の Microsoft Windows または Linux サーバーに関する情報に置き換えます。<Input in_adcontext>
セクションとFile
プロパティで、PowerShell スクリプトによって書き込まれた出力ログファイルのパスを追加します。常にDirCheckInterval
とPollInterval
を設定します。これらが定義されていない場合、NXLog は 1 秒ごとにファイルをポーリングします。define ROOT C:\Program Files\nxlog define ADCONTEXT_OUTPUT_DESTINATION_ADDRESS <hostname> define ADCONTEXT_OUTPUT_DESTINATION_PORT <port> Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log <Input in_adcontext> Module im_file File "<Path_of_the_output_file>" DirCheckInterval 3600 PollInterval 3600 </Input> <Output out_chronicle_adcontext> Module om_tcp Host %ADCONTEXT_OUTPUT_DESTINATION_ADDRESS% Port %ADCONTEXT_OUTPUT_DESTINATION_PORT% </Output> <Route ad_context_to_chronicle> Path in_adcontext => out_chronicle_adcontext </Route>
各システムで NXLog サービスを起動します。
中央の Microsoft Windows または Linux サーバーを構成する
フォワーダーのインストールと構成については、Linux でのフォワーダーのインストールと構成または Microsoft Windows でのフォワーダーのインストールと構成をご覧ください。
- UTC タイムゾーンでシステムを構成します。
- 中央の Microsoft Windows または Linux サーバーに Google Security Operations フォワーダーをインストールします。
Google Security Operations にログを送信するように Google Security Operations フォワーダーを構成します。フォワーダー構成の例を次に示します。
- syslog: common: enabled: true data_type: WINDOWS_AD batch_n_seconds: 10 batch_n_bytes: 1048576 tcp_address: 0.0.0.0:10518 connection_timeout_sec: 60
フィールド マッピング リファレンス: デバイスログ フィールドから UDM フィールド
このセクションでは、パーサーが元のログフィールドを Unified Data Model フィールドにマッピングする方法について説明します。
ユーザー コンテキスト ログ
NXLog フィールド | UDM フィールド |
---|---|
GivenName |
entity.entity.user.first_name |
Surname |
entity.entity.user.last_name |
SamAccountName |
entity.entity.user.userid |
SID.Value |
entity.entity.user.windows_sid |
ObjectClass |
If the value is user ,entity.metadata.entity_type is set to USER |
ObjectGuid |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the
entity.entity.user.product_object_id UDM field.
|
objectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
|
ObjectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
|
AccountExpirationDate |
entity.entity.user.account_expiration_time |
badPwdCount |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
CanonicalName |
entity.entity.administrative_domain |
City |
entity.entity.user.personal_address.city |
Company |
entity.entity.user.company_name |
Country |
entity.entity.user.personal_address.country_or_region |
Department |
entity.entity.user.department |
Description |
entity.metadata.description |
DisplayName |
entity.entity.user.user_display_name |
EmailAddress |
entity.entity.user.email_addresses |
EmployeeID |
entity.entity.user.employee_id |
HomeDirectory |
entity.entity.file.full_path |
HomePage |
entity.entity.url |
HomePhone |
entity.entity.user.phone_numbers |
LastBadPasswordAttempt |
entity.entity.user.last_bad_password_attempt_time |
lastLogoff |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
lastLogon |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
LastLogonDate |
entity.entity.user.last_login_time |
Manager |
Values for GUID , SAMAccountname , SID all mapped to different UDM fields:- SID is stored in manager.windows_sid- Distinguished name (i.e. value in first CN) is stored in
manager.user_display_name - GUID ,SamAccountName is stored in manager.userid |
MemberOf |
The following fields in the first occurrence of CN are set:entity.relations.entity.group.group_display_name entity.relations.entity_type set to GROUP entity.relations.relationship set t0 MEMBER entity.relations.direction set to UNIDIRECTIONAL |
MobilePhone |
entity.entity.user.phone_numbers |
Office |
entity.entity.user.office_address.name |
PasswordExpired |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PasswordLastSet |
entity.entity.user.last_password_change_time |
PasswordNeverExpires |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PasswordNotRequired |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PrimaryGroup |
Following fields are set: - entity.relations.entity.group.group_display_name - entity.relations.entity_type set to GROUP - entity.relations.relationship set to MEMBER - entity.relations.direction set to UNIDIRECTIONAL |
ServicePrincipalNames |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
State |
entity.entity.user.personal_address.state |
StreetAddress |
entity.entity.user.personal_address.name |
Title |
entity.entity.user.title |
whenCreated |
entity.user.attribute.creation_time |
AccountLockoutTime |
entity.entity.user.account_lockout_time |
アセット コンテキスト ログ
NXLog フィールド | UDM フィールド |
---|---|
DNSHostName |
entity.entity.asset.hostname |
SamAccountName |
entity.entity.asset.asset_id |
SID.Value |
entity.entity.user.windows_sid |
ObjectClass |
If the value is computer , entity.metadata.entity_type set to ASSET |
ObjectGuid |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.asset.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.asset.product_object_id UDM field. |
ObjectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.asset.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.asset.product_object_id UDM field. |
AccountExpirationDate |
entity.entity.user.account_expiration_time |
badPwdCount |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
CanonicalName |
entity.entity.administrative_domain |
countryCode |
entity.entity.asset.location.country_or_region |
Description |
entity.entity.metadata.description |
HomePage |
entity.entity.url |
IPv4Address |
entity.entity.asset.ip |
IPv6Address |
entity.entity.asset.ip |
LastBadPasswordAttempt |
entity.entity.user.last_bad_password_attempt_time |
lastLogoff |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
lastLogon |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
LastLogonDate |
entity.entity.user.last_login_time |
Location |
entity.entity.asset.location.name |
ManagedBy |
The following fields are set:entity.entity.user.user_display_name entity.relations.entity_type set to USER entity.relations.relationship set to ADMINISTERS entity.relations.direction set to UNIDIRECTIONAL |
ObjectCategory |
entity.entity.asset.category |
OperatingSystem |
If the name contains Windows ,
entity.entity.asset.platform_software.platform field is set to
WINDOWS . |
OperatingSystemServicePack |
entity.entity.asset.platform_software.platform_patch_level |
OperatingSystemVersion |
The field entity.entity.asset.platform_software.platform_version is set to
%{OperatingSystem} - %{OperatingSystemVersion} |
PasswordExpired |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PasswordLastSet |
entity.entity.user.last_password_change_time |
PasswordNeverExpires |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PasswordNotRequired |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PrimaryGroup |
The following fields are set: - entity.relations.entity.group.group_display_name - entity.relations.entity_type set to GROUP - entity.relations.relationship set to MEMBER - entity.relations.direction set to UNIDIRECTIONAL |
ServicePrincipalNames |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
whenChanged |
entity.entity.asset.attribute.last_update_time |
whenCreated |
entity.entity.asset.attribute.creation_time |
AccountLockoutTime |
entity.entity.user.account_lockout_time |