ES|QLの例

ウィンドウズイベントログの集約と強化

Esql

  1. FROM logs-*
  2. | WHERE event.code IS NOT NULL
  3. | STATS event_code_count = COUNT(event.code) BY event.code,host.name
  4. | ENRICH win_events ON event.code WITH event_description
  5. | WHERE event_description IS NOT NULL and host.name IS NOT NULL
  6. | RENAME event_description AS event.description
  7. | SORT event_code_count DESC
  8. | KEEP event_code_count,event.code,host.name,event.description
  • パターン「logs-*」に一致するインデックスからログをクエリします。
  • 「event.code」フィールドがnullでないイベントをフィルタリングします。
  • 「event.code」と「host.name」によってイベントのカウントを集約します。
  • 「EVENT_DESCRIPTION」フィールドを使用してイベントに追加情報を強化します。
  • 「EVENT_DESCRIPTION」または「host.name」がnullのイベントを除外します。
  • 「EVENT_DESCRIPTION」を「event.description」に名前変更します。
  • 結果を「event_code_count」で降順にソートします。
  • 選択したフィールドのみを保持します: 「event_code_count」、「event.code」、「host.name」、および「event.description」。

プロセスcurl.exeからのアウトバウンドトラフィックの合計

Esql

  1. FROM logs-endpoint
  2. | WHERE process.name == "curl.exe"
  3. | STATS bytes = SUM(destination.bytes) BY destination.address
  4. | EVAL kb = bytes/1024
  5. | SORT kb DESC
  6. | LIMIT 10
  7. | KEEP kb,destination.address
  • 「logs-endpoint」ソースからログをクエリします。
  • 「process.name」フィールドが「curl.exe」であるイベントをフィルタリングします。
  • 宛先アドレスに送信されたバイトの合計を計算し、キロバイト(KB)に変換します。
  • 結果を「kb」(キロバイト)で降順にソートします。
  • 出力を上位10件に制限します。
  • 「kb」と「destination.address」フィールドのみを保持します。

DNSログを操作して登録されたドメインごとのユニークDNSクエリの高い数を見つける

Esql

  1. FROM logs-*
  2. | GROK dns.question.name "%{DATA}\\.%{GREEDYDATA:dns.question.registered_domain:string}"
  3. | STATS unique_queries = COUNT_DISTINCT(dns.question.name) BY dns.question.registered_domain, process.name
  4. | WHERE unique_queries > 10
  5. | SORT unique_queries DESC
  6. | RENAME unique_queries AS `Unique Queries`, dns.question.registered_domain AS `Registered Domain`, process.name AS `Process`
  • 「logs-*」に一致するインデックスからログをクエリします。
  • 「grok」パターンを使用して「dns.question.name」フィールドから登録されたドメインを抽出します。
  • 登録されたドメインとプロセス名ごとのユニークDNSクエリのカウントを計算します。
  • 「unique_queries」が10を超える結果をフィルタリングします。
  • 結果を「unique_queries」で降順にソートします。
  • 明確さのためにフィールド名を変更します: 「unique_queries」を「ユニーククエリ」、「dns.question.registered_domain」を「登録ドメイン」、「process.name」を「プロセス」に変更します。

アウトバウンドユーザー接続の高い数を特定する

Esql

  1. FROM logs-*
  2. | WHERE NOT CIDR_MATCH(destination.ip, "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16")
  3. | STATS destcount = COUNT(destination.ip) BY user.name, host.name
  4. | ENRICH ldap_lookup_new ON user.name
  5. | WHERE group.name IS NOT NULL
  6. | EVAL follow_up = CASE(destcount >= 100, "true","false")
  7. | SORT destcount DESC
  8. | KEEP destcount, host.name, user.name, group.name, follow_up
  • 「logs-*」に一致するインデックスからログをクエリします。
  • 宛先IPアドレスがプライベートIPアドレス範囲(例: 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)に該当するイベントを除外します。
  • 「user.name」と「host.name」によってユニークな宛先IPのカウントを計算します。
  • 「user.name」フィールドにLDAPグループ情報を強化します。
  • 「group.name」がnullでない結果を除外します。
  • 「CASE」文を使用して「follow_up」フィールドを作成し、「destcount」が100以上のときは「true」に、そうでないときは「false」に設定します。
  • 結果を「destcount」で降順にソートします。
  • 選択したフィールドを保持します: 「destcount」、「host.name」、「user.name」、「group.name」、および「follow_up」。