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 に転送します。

    Deployment のアーキテクチャ

サポートされているデバイスとバージョンを確認する

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 サーバーを構成する手順:

  1. すべてのシステムを UTC タイムゾーンで構成します。
  2. 各 Microsoft Windows Active Directory サーバーで、ログデータを出力ファイルに収集する PowerShell スクリプトを作成して構成します。NXLog は、出力ファイルを読み取り、中央の Microsoft Windows または Linux サーバーにデータを送信します。
  3. PowerShell スクリプトを作成します。次の例をご覧ください。$OUTPUT_FILENAME の値を出力ファイルを書き込む場所に変更します。このファイルは NXLog によって読み取られます。データは JSON 形式で保存する必要があります。エンコードを utf8 に設定します。Get-ADUserGet-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 }
    
  4. 繰り返しスクリプトを作成して、スクリプトを実行し、出力ファイルにデータを取得して書き込みます。

    1. タスク スケジューラ アプリケーションを開きます。
    2. [タスクを作成] をクリックします。
    3. カタログの名前と説明を入力します。
    4. [最も高い権限で実行] チェックボックスをオンにして、すべてのデータが取得されるようにします。
    5. [トリガー] タブで、タスクを繰り返すタイミングを定義します。
    6. [アクション] タブで、新しいアクションを追加し、スクリプトを保存するファイルのパスを指定します。
  5. 各 Microsoft Windows Active Directory サーバーに NXLog エージェントをインストールします。 このアプリケーションは、中央の Microsoft Windows または Linux サーバーにログを転送します。NXLog のドキュメントに従ってください。

  6. NXLog インスタンスごとに構成ファイルを作成します。NXLog im_file モジュールを使用して、ファイルから読み取り、行をフィールドにパースします。 om_tcp モジュールを使用して、中央の Microsoft Windows または Linux サーバーにデータを転送します。

    NXLog 構成の例を次に示します。<hostname><port> の値は、転送先の中央の Microsoft Windows または Linux サーバーに関する情報に置き換えます。<Input in_adcontext> セクションと File プロパティで、PowerShell スクリプトによって書き込まれた出力ログファイルのパスを追加します。常に DirCheckIntervalPollInterval を設定します。これらが定義されていない場合、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>
    
  7. 各システムで NXLog サービスを起動します。

中央の Microsoft Windows または Linux サーバーを構成する

フォワーダーのインストールと構成については、Linux でのフォワーダーのインストールと構成または Microsoft Windows でのフォワーダーのインストールと構成をご覧ください。

  1. UTC タイムゾーンでシステムを構成します。
  2. 中央の Microsoft Windows または Linux サーバーに Google Security Operations フォワーダーをインストールします。
  3. 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