Microsoft SQL Server のログを収集する

以下でサポートされています。

このドキュメントでは、Bindplane を使用して Microsoft SQL Server ログを Google Security Operations に取り込む方法について説明します。このパーサーは、構造化(JSON、Key-Value ペア)と半構造化(syslog)の両方の Microsoft SQL Server ログを処理します。フィールドを抽出し、タイムスタンプを正規化し、SourceModuleTypeMessage のコンテンツ(監査、ログイン、データベース イベントなど)に基づいてさまざまなログ形式を処理し、それらを UDM にマッピングします。また、監査レコード、ログイン試行、データベース オペレーションに対して特定の解析ロジックを実行し、追加のコンテキストと重大度情報でデータを拡充します。syslog 転送(NXLog)を使用して Windows イベントログから SQL Server の監査ログとエラーログを収集し、BindPlane エージェントに送信して Google SecOps に配信します。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Microsoft SQL Server を実行している Windows Server 2016 以降のホスト
  • BindPlane Agent と NXLog をインストールして構成するための管理者アクセス権
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します

Google SecOps の取り込み認証ファイルを取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [コレクション エージェント] に移動します。
  3. Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。

Google SecOps のお客様 ID を取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [プロファイル] に移動します。
  3. [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。

Bindplane エージェントをインストールする

次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。

Windows のインストール

  1. 管理者として コマンド プロンプトまたは PowerShell を開きます。
  2. 次のコマンドを実行します。

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

その他のインストール リソース

その他のインストール オプションについては、インストール ガイドをご覧ください。

Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する

  1. 構成ファイルにアクセスします。
    • config.yaml ファイルを見つけます。通常、Windows の場合は `C:\Program Files\observIQ\bindplane-agent` ディレクトリにあります。
    • テキスト エディタ(nanovi、メモ帳など)を使用してファイルを開きます。
  2. config.yaml ファイルを次のように編集します。

      receivers:
      udplog:
         # Replace the port and IP address as required
         listen_address: "0.0.0.0:1514"
    
      exporters:
      chronicle/chronicle_w_labels:
         compression: gzip
         # Adjust the path to the credentials file you downloaded in Step 1
         creds_file_path: '/path/to/ingestion-authentication-file.json'
         # Replace with your actual customer ID from Step 2
         customer_id: <YOUR_CUSTOMER_ID>
         endpoint: malachiteingestion-pa.googleapis.com
         # Add optional ingestion labels for better organization
         log_type: 'MICROSOFT_SQL'
         raw_log_field: body
         ingestion_labels:
    
      service:
      pipelines:
         logs/source0__chronicle_w_labels-0:
            receivers:
            - udplog
            exporters:
            - chronicle/chronicle_w_labels
    
    • 自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。
    • <customer_id> は、実際の顧客 ID に置き換えます。
    • /path/to/ingestion-authentication-file.json の値を、Google SecOps の取り込み認証ファイルを取得するで認証ファイルを保存したパスに更新します。

Bindplane エージェントを再起動して変更を適用する

  • Windows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Windows イベントログで SQL Server Audit を有効にする

SQL Server Audit は、SQL Server Management Studio(SSMS)GUI または T-SQL コマンドを使用して有効にできます。ご使用の環境に最適なオプションを選択してください。

オプション 1: SSMS GUI を使用して SQL Server Audit を有効にする

SQL Server Management Studio UI でサーバー監査を作成する

  1. SQL Server Management Studio(SSMS)を開き、SQL Server インスタンスに接続します。
  2. [オブジェクト エクスプローラ] で、サーバー インスタンスを開きます。
  3. [Security] フォルダを開きます。
  4. [監査] を右クリックし、[新しい監査] を選択します。
  5. [監査の作成] ダイアログで、次の構成の詳細を指定します。
    • 監査名: 「ChronicleAudit」と入力します。
    • キューの遅延(ミリ秒単位): 「1000」と入力します。
    • 監査ログの失敗時: [続行] を選択します。
    • 監査の宛先: [アプリケーション ログ] を選択します。
  6. [OK] をクリックして監査を作成します。
  7. オブジェクト エクスプローラーで、新しく作成した ChronicleAudit を右クリックし、[監査を有効にする] を選択します。

SSMS GUI を使用してサーバー監査の仕様を作成する

  1. [オブジェクト エクスプローラ] で、[セキュリティ] を開きます。
  2. [サーバー監査仕様] を右クリックし、[新しいサーバー監査仕様] を選択します。
  3. [サーバー監査仕様の作成] ダイアログで、次の構成の詳細を指定します。
    • 名前: 「ChronicleAuditSpec」と入力します。
    • 監査: メニューから [ChronicleAudit] を選択します。
  4. [監査アクション タイプ] セクションで [追加] をクリックし、次の監査アクション グループを選択します(それぞれを選択してから [追加] をクリックして、個別に 1 つずつ追加します)。
    • FAILED_LOGIN_GROUP
    • SUCCESSFUL_LOGIN_GROUP
    • LOGOUT_GROUP
    • SERVER_ROLE_MEMBER_CHANGE_GROUP
    • DATABASE_OBJECT_CHANGE_GROUP
    • DATABASE_PRINCIPAL_CHANGE_GROUP
    • SCHEMA_OBJECT_CHANGE_GROUP
    • DATABASE_PERMISSION_CHANGE_GROUP
  5. [OK] をクリックして、監査仕様を作成します。
  6. [オブジェクト エクスプローラー] で、新しく作成した ChronicleAuditSpec を右クリックし、[サーバー監査仕様を有効にする] を選択します。

監査構成を確認する

  1. オブジェクト エクスプローラーで、[セキュリティ > 監査] を開きます。
  2. [ChronicleAudit] を右クリックして、[プロパティ] を選択します。
  3. [ステータス] が [開始] または [有効] と表示されていることを確認します。
  4. [セキュリティ] > [サーバー監査仕様] を開きます。
  5. [ChronicleAuditSpec] を右クリックして、[プロパティ] を選択します。
  6. 8 つの監査アクション グループがすべて一覧表示され、仕様が有効になっていることを確認します。

オプション 2: T-SQL を使用して SQL Server Audit を有効にする

  1. SQL Server Management Studio(SSMS)を開き、SQL Server インスタンスに接続します。
  2. 次の T-SQL コマンドを実行して、Windows アプリケーション ログに書き込むサーバー監査を作成します。

    USE master;
    GO
    
    CREATE SERVER AUDIT ChronicleAudit
    TO APPLICATION_LOG
    WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
    GO
    
    ALTER SERVER AUDIT ChronicleAudit WITH (STATE = ON);
    GO
    
  3. 関連するセキュリティ イベントをキャプチャする監査仕様を作成します。

    CREATE SERVER AUDIT SPECIFICATION ChronicleAuditSpec
    FOR SERVER AUDIT ChronicleAudit
    ADD (FAILED_LOGIN_GROUP),
    ADD (SUCCESSFUL_LOGIN_GROUP),
    ADD (LOGOUT_GROUP),
    ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
    ADD (DATABASE_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
    ADD (SCHEMA_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PERMISSION_CHANGE_GROUP);
    GO
    
    ALTER SERVER AUDIT SPECIFICATION ChronicleAuditSpec WITH (STATE = ON);
    GO
    

この構成により、認証イベント、権限の変更、オブジェクトの変更が Windows イベントログに記録されます。

イベントを Bindplane に転送するように NXLog をインストールして構成する

  1. nxlog.co/downloads から NXLog Community Edition をダウンロードします。
  2. インストーラを実行し、インストール ウィザードを完了します。
  3. 次の場所にある NXLog 構成ファイルを開きます。

    C:\Program Files\nxlog\conf\nxlog.conf
    
  4. 内容を次の構成に置き換えます。

    define ROOT C:\Program Files\nxlog
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    
    <Extension _json>
       Module      xm_json
    </Extension>
    
    <Input in_eventlog>
       Module      im_msvistalog
       Query       <QueryList>\
                      <Query Id="0">\
                            <Select Path="Application">*[System[Provider[@Name='MSSQLSERVER']]]</Select>\
                      </Query>\
                   </QueryList>
    </Input>
    
    <Output out_syslog>
       Module      om_udp
       Host        127.0.0.1
       Port        1514
       Exec        to_json();
    </Output>
    
    <Route r1>
       Path        in_eventlog => out_syslog
    </Route>
    
    • ホストの現在の値 127.0.0.1 を Bindplane エージェントの IP アドレスに置き換えます。
    • ポートの値が、先ほど構成した Bindplane udplog レシーバー ポートと一致していることを確認します。
  5. ファイルを保存して、NXLog サービスを再起動します。

    net stop nxlog && net start nxlog
    

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
AccountName principal.user.userid Starting up database や Log was backed up などのログに存在する場合、principal.user.userid に使用されます。
AgentDevice additional.fields キー「AgentDevice」で additional.fields に Key-Value ペアとして追加されます。
AgentLogFile additional.fields キー「AgentLogFile」で additional.fields に Key-Value ペアとして追加されます。
agent.hostname observer.asset.hostname オブザーバーのホスト名にマッピングされます。
agent.id observer.asset_id agent.type と連結して observer.asset_id を形成します。
agent.type observer.asset_id agent.id と連結して observer.asset_id を形成します。
agent.version observer.platform_version オブザーバー プラットフォーム バージョンにマッピングします。
ApplicationName principal.application プリンシパル アプリケーションにマッピングされます。
application_name target.application ターゲット アプリケーションにマッピングします。
client_address principal.ip ホストと異なり、ローカルまたは名前付きパイプでない場合、プリンシパル IP に使用されます。
client_ip principal.ip プリンシパル IP にマッピングされます。
computer_name about.hostname about ホスト名にマッピングされます。
correlationId security_result.detection_fields キー「correlationId」で security_result.detection_fields に Key-Value ペアとして追加されます。
Date metadata.event_timestamp Time と組み合わせてイベント タイムスタンプを作成します。
database_name target.resource_ancestors.name 監査ログに存在する場合、ターゲット リソースの祖先名に使用されます。
durationMs network.session_duration.seconds ミリ秒から秒に変換され、マッピングされます。
ecs.version metadata.product_version プロダクト バージョンにマッピングされます。
error security_result.detection_fields キー「error」で security_result.detection_fields に Key-Value ペアとして追加されます。
err_msg security_result.description セキュリティ結果の説明にマッピングされます。
EventID metadata.product_event_type 他のフィールドが利用できない場合に、プロダクト イベントのタイプを構築するために使用されます。接頭辞として「EventID: 」が付加されます。
event.action Source 存在する場合はソースとして使用されます。
event.code metadata.product_event_type event.provider と組み合わされて metadata.product_event_type を形成します。
event.provider metadata.product_event_type event.code と組み合わされて metadata.product_event_type を形成します。
EventReceivedTime metadata.ingested_timestamp 解析され、取り込まれたタイムスタンプとして使用されます。
event_time metadata.event_timestamp 解析され、イベント タイムスタンプとして使用されます。
file_name principal.process.file.full_path プリンシパル プロセス ファイルのフルパスにマッピングされます。
file_path target.file.full_path バックアップ ログで見つかった場合、ターゲット ファイルのフルパスに使用されます。
first_lsn target.resource.attribute.labels キー「First LSN」で target.resource.attribute.labels に Key-Value ペアとして追加されます。
host principal.hostnameobserver.hostname IP ではない場合、プリンシパルまたはオブザーバーのホスト名に使用されます。IP かどうかによって、ターゲット ホスト名または IP にも使用されます。
host.ip principal.ip プリンシパル IP に統合されます。
host.name host ホストとして使用されます(存在する場合)。
Hostname principal.hostnametarget.hostname プリンシパルまたはターゲット ホスト名に使用されます(存在する場合)。
hostinfo.architecture principal.asset.hardware.cpu_platform プリンシパル アセットのハードウェア CPU プラットフォームにマッピングされます。
hostinfo.os.build additional.fields キー「os_build」で additional.fields に Key-Value ペアとして追加されます。
hostinfo.os.kernel principal.platform_patch_level プリンシパル プラットフォームのパッチレベルにマッピングされます。
hostinfo.os.name additional.fields キー「os_name」で additional.fields に Key-Value ペアとして追加されます。
hostinfo.os.platform principal.platform 大文字に変換され、プリンシパル プラットフォームにマッピングされます。
hostinfo.os.version principal.platform_version プリンシパル プラットフォーム バージョンにマッピングされます。
last_lsn target.resource.attribute.labels キー「Last LSN」で target.resource.attribute.labels に Key-Value ペアとして追加されます。
level security_result.severity 「Informational」の場合は、security_result.severity を「INFORMATIONAL」に設定します。
log.level security_result.severity_details セキュリティ結果の重大度の詳細にマッピングされます。
LoginName principal.user.userid KV ログに存在する場合、プリンシパル ユーザー ID に使用されます。
login_result security_result.action セキュリティ結果のアクション(ALLOW または BLOCK)を決定します。
logon_user principal.user.userid ログインログに存在する場合、プリンシパル ユーザー ID に使用されます。
logstash.process.host intermediary.hostname 仲介ホスト名にマッピングされます。
Message metadata.descriptionsecurity_result.description ログタイプに応じて、イベントの説明またはセキュリティ結果の説明に使用されます。
msg metadata.description イベントの説明に使用されます(存在する場合)。
ObjectName target.resource.name ターゲット リソース名にマッピングされます。
object_name target.resource.name 監査ログに存在する場合、ターゲット リソース名に使用されます。
ObjectType target.resource.type ターゲット リソースタイプにマッピングします。
operationId security_result.detection_fields キー「operationId」で security_result.detection_fields に Key-Value ペアとして追加されます。
operationName metadata.product_event_type プロダクト イベントタイプにマッピングされます。
operationVersion additional.fields キー「operationVersion」で additional.fields に Key-Value ペアとして追加されます。
ProcessInfo additional.fields キー「ProcessInfo」で additional.fields に Key-Value ペアとして追加されます。
properties.apiVersion metadata.product_version プロダクト バージョンにマッピングされます。
properties.appId target.resource.product_object_id ターゲット リソースのプロダクト オブジェクト ID にマッピングされます。
properties.clientAuthMethod extensions.auth.auth_details 認証の詳細を決定するために使用されます。
properties.clientRequestId additional.fields キー「clientRequestId」で additional.fields に Key-Value ペアとして追加されます。
properties.durationMs network.session_duration.seconds 秒に変換され、マッピングされます。
properties.identityProvider security_result.detection_fields キー「identityProvider」で security_result.detection_fields に Key-Value ペアとして追加されます。
properties.ipAddress principal.ipprincipal.asset.ip IP を解析し、プリンシパル IP とプリンシパル アセット IP に統合されます。
properties.location principal.location.name プリンシパルのロケーション名にマッピングされます。
properties.operationId security_result.detection_fields キー「operationId」で security_result.detection_fields に Key-Value ペアとして追加されます。
properties.requestId metadata.product_log_id プロダクトログ ID にマッピングされます。
properties.requestMethod network.http.method ネットワーク HTTP メソッドにマッピングされます。
properties.requestUri target.url ターゲット URL にマッピングされます。
properties.responseSizeBytes network.received_bytes 符号なし整数に変換され、マッピングされます。
properties.responseStatusCode network.http.response_code 整数に変換され、マッピングされます。
properties.roles additional.fields キー「roles」で additional.fields に Key-Value ペアとして追加されます。
properties.servicePrincipalId principal.user.userid properties.userId が存在しない場合、プリンシパル ユーザー ID に使用されます。
properties.signInActivityId network.session_id ネットワーク セッション ID にマッピングされます。
properties.tenantId metadata.product_deployment_id プロダクト デプロイ ID にマッピングされます。
properties.tokenIssuedAt additional.fields キー「tokenIssuedAt」で additional.fields に Key-Value ペアとして追加されます。
properties.userAgent network.http.user_agent ネットワーク HTTP ユーザー エージェントにマッピングされます。
properties.userId principal.user.userid プリンシパル ユーザー ID に使用されます(存在する場合)。
properties.wids security_result.detection_fields キー「wids」で security_result.detection_fields に Key-Value ペアとして追加されます。
reason security_result.summary ログイン イベントのセキュリティ結果の概要に使用されます。
resourceId target.resource.attribute.labels キー「Resource ID」で target.resource.attribute.labels に Key-Value ペアとして追加されます。
schema_name target.resource_ancestors.resource_subtype 監査ログに存在する場合、ターゲット リソースの祖先サブタイプに使用されます。
security_result.description metadata.description 監査イベントでない場合のイベントの説明に使用されます。
security_result.severity security_result.severity 存在する場合は直接マッピングされます。KV ログの場合は「LOW」、特定のエラー メッセージの場合は「INFORMATIONAL」に設定され、level フィールドまたは Severity フィールドから派生します。
security_result.severity_details security_result.severity_details 存在する場合は直接マッピングされます。
security_result.summary security_result.summary 存在する場合は直接マッピングされます。ログイン イベントの場合は「Windows 認証を使用して接続が確立されました」またはログイン イベントの特定の理由に設定します。監査イベントの場合は「SQL Server 監査レコード」に設定します。
security_result_action security_result.action security_result.action に統合されました。ほとんどのイベントでは「ALLOW」に設定され、ログイン イベントでは login_result から派生します。
server_instance_name target.hostname 監査ログにターゲット ホスト名が存在する場合に使用されます。
server_principal_name principal.user.userid 監査ログに存在する場合、プリンシパル ユーザー ID に使用されます。
server_principal_sid principal.asset_id プリンシパル アセット ID の構築に使用されます。「server SID:」という接頭辞が付いています。
session_id network.session_id 監査ログに存在する場合、ネットワーク セッション ID に使用されます。
sev security_result.severity セキュリティ結果の重大度を判断するために使用されます。
Severity security_result.severity セキュリティ結果の重大度を判断するために使用されます。
Source additional.fields キー「Source」で additional.fields に Key-Value ペアとして追加されます。
source principal.resource.attribute.labels キー「source」で principal.resource.attribute.labels に Key-Value ペアとして追加されます。
SourceModuleType observer.application オブザーバー アプリケーションにマッピングします。
SourceModuleName additional.fields キー「SourceModuleName」で additional.fields に Key-Value ペアとして追加されます。
source_module_name observer.labels キー「SourceModuleName」で observer.labels に Key-Value ペアとして追加されます。
source_module_type observer.application オブザーバー アプリケーションにマッピングします。
SPID network.session_id ネットワーク セッション ID にマッピングされます。
statement target.process.command_line 監査ログに存在する場合、ターゲット プロセスのコマンドラインに使用されます。
TextData security_result.descriptionmetadata.description ログイン イベントでない場合はセキュリティ結果の説明に使用され、ログイン イベントの場合はイベントの説明に使用されます。
time metadata.event_timestamp 解析され、イベント タイムスタンプとして使用されます。
Time metadata.event_timestamp Date と組み合わせてイベント タイムスタンプを作成します。
transaction_id target.resource.attribute.labels キー「transaction_id」で target.resource.attribute.labels に Key-Value ペアとして追加されます。
UserID principal.user.windows_sid 存在し、正しい形式の場合、プリンシパル ユーザーの Windows SID に使用されます。
user_id principal.user.userid プリンシパル ユーザー ID に使用されます(存在する場合)。
metadata.log_type metadata.log_type 「MICROSOFT_SQL」にハードコードされています。
metadata.vendor_name metadata.vendor_name 「Microsoft」にハードコードされています。
metadata.product_name metadata.product_name 「SQL Server」にハードコードされています。
metadata.event_type metadata.event_type ログの内容に応じてさまざまな値に設定されます。デフォルトでは、「USER_LOGIN」、「USER_LOGOUT」、「STATUS_STARTUP」、「STATUS_SHUTDOWN」、「NETWORK_HTTP」、「GENERIC_EVENT」、「STATUS_UNCATEGORIZED」などがあります。
extensions.auth.type extensions.auth.type ログイン イベントとログアウト イベントの場合は「MACHINE」に設定されます。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。