クエリ文法

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

概要

クエリ文法は、ML(機械学習)モデルが理解できるクエリ構文を構築する際に使用できる言語であり、高度なルール作成の際にルール条件やルールパラメータを構築するのに役立ちます。

このページには、基本的な条件、サポートされているデータ型、関係演算子および論理演算子、高度な関数、集計構文、相関ステートメント、実用的な検出例など、クエリ文法の完全なリファレンスが掲載されています。

基本条件

  1. データ型
  2. 数値関係演算子
  3. 文字列の比較演算子
  4. 論理演算子
  5. 例

1. データ型

型名説明例
文字列文字列値"surname" "198.51.100.255" "バイト数"
Int整数値23 -32 4000000244553
Float浮動小数点数。3.14 -1.2e5
時間間隔1 桁または 2 桁の数字に、秒の場合は「s」、分の場合は「m」が続く形式で表される時間間隔。時間の場合は「h」、日の場合は「d」、週の場合は「w」、月の場合は「M」、四半期の場合は「q」、年の場合は「y」が続く。2s、45m、4h、2d、3w、2M、4q、1y
メモリデータサイズは、バイトの場合は「B」、キロバイトの場合は「KB」、メガバイトの場合は「MB」、ギガバイトの場合は「GB」、テラバイトの場合は「TB」、ペタバイトの場合は「PB」で表されます。 2B、3KB、3 MB、34GB、9TB、9PB
日付・時刻「YYYY-MM-DD」、「YYYY-MM-DD HH-MM-SS」で表される日付・時刻の形式「2000-08-30」、「2000-08-30 15:45:06」

2. 数値関係演算子

演算子説明サポートされているデータ型例
>より大きいInt、Float、Memory、IPsource_IP > 10.53.12.0
>=以上整数、浮動小数点、メモリ、IPsource_IP >= 10.53.12.0source_ip >= 10.53.12.0
<未満整数、浮動小数点数、メモリ、IPsource_IP < 10.53.12.0
<=以下整数、浮動小数点数、メモリ、IPsource_IP <= 10.53.12.0
=等しい文字列、整数、浮動小数点数、メモリ、IPEventID=4624
!=等しくない文字列、整数、浮動小数点数、メモリ、IPEventID ≠ 4624EventID ≠ 4624
in/IN以下のいずれかの要素と等しい文字列、整数、浮動小数点数、IPEventID が (4624,4625) の場合
notin/NOTINいずれの要素とも等しくない文字列、整数、浮動小数点数、IPEventID notin (4624,4625)
isExistフィールドが空の文字列でも null でもない。すべてのフィールドについてisExist(source_ip)
isNotExistフィールドが空の文字列であり、かつ null です。すべてのフィールドについてisNotExist(source_ip)

3. 文字列の比較演算子

演算子説明例
=等しいusername = "name"
!=等しくないusername != "name"
含む/CONTAINSフィールドに特定のデータが含まれている場合、trueを返すeventname に "success" が含まれる場合
notcontains/NOTCONTAINSフィールドにデータが設定されていない場合、trueを返しますeventname に「success」が含まれていない
startswith/STARTSWITHフィールドの値が指定されたデータで始まる場合、true を返しますusername startswith "Ja"
endswith/ENDSWITHフィールド値がデータで終わる場合、true を返しますusername endswith "kumar"
notstartswith/NOTSTARTSWITHフィールドの値が指定されたデータで始まらない場合、trueを返しますusername notstartswith "Ja"
notendswith/NOTENDSWITHフィールドの値が指定されたデータで終わらない場合、trueを返しますusername notendswith "kumar"
matches/MATCHESフィールドの値が正規表現と一致する場合、true を返しますusername が "pree.*" に一致する場合
notmatches/NOTMATCHESフィールドの値が正規表現と一致しない場合、trueを返しますusername が "pree.*" に一致しない

4. 論理演算子

演算子説明例
AND/and両方の条件が真の場合にのみ true を返すusername = "preethi" かつ eventid=4624
OR/またはいずれかの条件が真であれば、もう一方の条件にかかわらず true を返します。eventid = "4688" または eventid = "592"

例

  • SUDO コマンドの繰り返し失敗に関する基本的な基準: logtype="unix" かつ iename = "sudo commandexecution failed"
  • 過度なパスワード変更の失敗に関する基本基準:common_report_name= "user account password changes" かつ severity ="failure" または iename = "password update failure"
  • RyukのWake on LANコマンドに関する基本条件:logtype in("Windows", "Fortinet", "Sonic wall") かつ (eventid = "4688" または eventid = "592" ) かつ (commandline に "8 lan" を含む または commandline に "9rep" を含む )
  • Windowsのログオン失敗に関する基本条件:logtype = "Windows" かつ actionname = "Failed logon"
  • ログイン成功の基本条件:actionname = "Successlogon"
注:
  • logtype には、*(すべてのログタイプを含む)、Windows、Unix、Cisco などの値が含まれます。
  • actionname 演算子を使用すると、クエリ内で事前定義されたアクションとカスタムアクションの両方を使用できます。

クエリ構文

このクエリ言語は、さまざまな演算子や節をサポートしています。以下に完全な構文リファレンスを示します。

1. 基本構文:

action_name:

logtype = (* | windows | syslog | ...) [ logical_operator basic_criteria ... ] with [aggregate_func(fieldname), ... ]

例: eventid = 4624

2. ソート:

| sort フィールド名 (asc | desc)

3. 時間ウィンドウ:

| timewindow 値 単位 sort [ aggregateField | count ] (asc | desc) limit 値 having countoperator 値

4. グループ化:

| groupby フィールド名 with [ aggregate_func(フィールド名), ... ] sort [ aggregateExpr | count ](asc | desc) limit 件数 having [ aggregateExpr | count ] 比較演算子 件数

注:
  • 括弧内の演算子(groupby など)は、任意の順序で記述できます。
  • timewindow演算子は1回のみ指定できます。
  • groupby は、任意の順序で最大 3 回まで指定できます。
  • sort関数は、同じクエリ内でfirst関数またはlast関数と併用することはできません。

5. Distinct:

| distinct フィールド名 sort (asc | desc) limit [1-200] having カウント 演算子 値

6. 後処理:

| having aggregateExpr operator value [ logical_operator (aggregateExpr operator value) ]
| isanomalous(field, model, field)

7. first および last:

| first [1-10] フィールド名 [, フィールド名 ...]
| last [1-10] フィールド名 [, フィールド名 ...]

8. 定義:

def: 変数名 = <式>

サポートされる型: int, string, float, time, boolean

9. フィルタリング:

filter: <条件>

これにより、条件に一致しない結果が除外されます。

10. イベントシーケンス:

follow: アクション名1 の後に | アクション名2 が [1-60](ミリ秒 | 秒 | 分 | 時間 | 日)以内に続かない

例:あるイベントの発生後、10分以内に別のイベントが発生することを相関に基づいて検出する。

11. 選択:

select アクション名.フィールド, アクション名.フィールド群, def_name

高度な演算子

  1. isMalicious 関数
  2. isVulnerable関数
  3. isMisConfiguredFor 関数

1. 悪意のあるものか

  • 「isMalicious」条件は、IPアドレスフィールドでのみ利用可能です。これは、検出されたIPアドレスが、内部データベースに保存されている悪意のあるIPアドレスの事前定義リストに含まれているかどうかを確認します。
  • この関数は true または false を返します。

構文:isMalicious(fieldname)

例:外部リモートサービス

パブリック IP からのログオン失敗:

logtype = "*" かつ eventid = 4625 かつ isExists(remoteip) かつ isMalicious(remoteip)

2. 脆弱性があるか

  • Endpoint Centralとの統合後にのみ利用可能で、devicefieldsと組み合わせて使用できます。デバイスがEndpoint Centralで「脆弱」とタグ付けされているかどうかを確認し、特定の攻撃(例:CVE-2023-38831)に対して脆弱なデバイスを特定します。
  • この関数は true または false を返します。
注:この演算子は、EventLog Analyzerの連続実行モードでのみ利用可能です。

構文:

isVulnerable(fieldname)

isVulnerable(fieldname, matchvalue)

例:

A. Microsoft Outlook の脆弱性の悪用

WebDAV または SMB 共有に接続する Outlook:

logtype = "windows" かつ eventid = 4656 かつ objectname に "\REGISTRY\MACHINE\SYSTEM" が含まれる、または objectname に "Services" が含まれる、または objectname に "WebClient\NetworkProvider,LanmanWorkstation\NetworkProvider" かつ accesslist に "ReadData (または ListDirectory)" が含まれる かつ isVulnerable(デバイス名, "CVE-2023-23397")

| groupby processname

Rundll.exe 経由での不審な WebDAV クライアントの実行:

logtype = "sysmon" かつ iename = "Sysmon Process Creation" かつ parentprocessname に "svchost.exe" が含まれる かつ parentprocesscommandline に "-s WebClient" が含まれる かつ processname に "rundll.exe" が含まれる かつ processname = WebDAV または SMB 共有に接続している Outlook.processname

B. AWS ログイン失敗

エラーイベント:

logtype = "aws cloudtrail" かつ isVulnerable(errorcode)

3. 設定不備

Endpoint Central との統合後にのみ利用可能で、デバイスフィールドと併用できます。Endpoint Central によって特定された設定ミス(例:Windows Credential Guard が無効化されているなど)があるデバイスを検出します。

注:この演算子は、EventLog Analyzerの連続実行モードでのみ利用可能です。

構文:

misConfiguredFor(fieldname , match_value)

例:

A. 組み込みのゲストアカウントによる権限昇格

ネットワークゲストによるログオン成功:

logtype = "windows" かつ eventid = 4624 かつ username に "Guest" が含まれる かつ logontype = 3 かつ MisconfiguredFor(Devicename, "組み込みのゲストアカウントが無効化されていないか、適切に制限されていない")

| groupby logonid

B. 特権操作の試行:

logtype = "windows" かつ eventid = 4672 かつ logonid = 「ネットワークゲストログオン成功」の logonid かつ MisconfiguredFor(デバイス名, "組み込みゲストアカウントが無効化されていないか、適切に制限されていない")

C. ユーザーアカウントのローカルグループメンバーシップ変更の試行:

logtype = "windows" かつ eventid = 4732 かつ groupname に "Administrators" が含まれる かつ logonid = ネットワークゲストログオン成功.logonid かつ MisconfiguredFor(デバイス名, "組み込みのゲストアカウントが無効化されていないか、適切に制限されていない")

クエリ構成要素

  • 集計関数
  • ソート演算子
  • 時間ウィンドウ演算子
  • Groupby 演算子
  • DISTINCT演算子
  • Having演算子
  • First/Last演算子
  • WITH演算子
  • ステートメントの順序

1. 集計関数

関数説明構文例出力
SUM
  • フィールド内の選択された値の合計を返します。
  • 単一の数値を返します。
sum(field) または SUM(field)sum(bytes_in)3.27MB (3,432,605)
AVG
  • フィールド内の値の平均を返します。
  • 単一の数値を返します。
avg(field) または AVG(field)avg(_zl_timestamp)1.36kb (1,393.156)
MAX
  • フィールド内の最大値を返します。
  • 単一の数値を返します。
max(field) または MAX(field)max(received_bytes_i)107.61kb (110,196)
MIN
  • フィールド内の最小値を返します。
  • 単一の数値を返します。
min(field) または MIN(field)min(received_bytes_i)107.61kb (110,196)
STDEV
  • 指定されたフィールドの標準偏差を返します。
  • 単一の数値を返します。
stdev(field) または STDEV(field)stdev(_zl_timestamp)2.46kb (2,521.297)
COUNT
  • クエリに一致するログメッセージの数を返します。
  • 「with」演算子と併用 → 数値を返します。
  • 「having」演算子を使用する場合 → ブール値(true/false)を返します。
counthaving count > 100true/false
DCOUNT一意の値の数を返します。「with」演算子を使用する場合 → 数値を返します。「having」演算子を使用する場合 → ブール値(true/false)を返します。dcount(field) または DCOUNT(field)having dcount(_zl_host) > 2true/false

2. ソート演算子

  • 指定されたフィールドに基づいてすべての結果をソートします。
  • デフォルトでは、結果はカウント数の降順でソートされます。
  • 「sort」の後は、集計フィールド以外のフィールドのみ指定可能です。
  • 構文:sort フィールド名1 (asc/desc) [, フィールド名2 (asc/desc) ...]
  • 例:
    • logtype="windows" and eventid = 4625 | sort username asc, hosttype desc

3. タイムウィンドウ演算子

  • ログを指定された時間スライスごとにグループ化します。
  • 「sort」の後は、集計フィールドのみ使用可能です。
  • 「group by」キーワードの最大制限値は 1000 です。
  • 使用可能なタイムウィンドウ単位:y(年)、M(月)、w(週)、d(日)、h(時間)、m(分)、s(秒)。
  • 構文: timewindow 値 単位 sort [集計フィールド, カウント] (asc/desc) limit 値 having カウント 演算子 値
  • 例:
    • logtype="windows" | timewindow 5m
    • logtype="windows" | timewindow 5m sort count desc
    • logtype="windows" | timewindow 1h sort sum(bytes_in) as totalBytes asc
    • logtype="windows" | timewindow 1h sort timewindow desc
    • logtype="windows" | timewindow 5m limit 5
    • logtype="unix" and eventid = 4625 | timewindow 10m limit 10 having count >100
    • logtype="windows" | timewindow 10m | groupby username

4. GROUP BY 演算子

  • フィールドの一意の値を取得するために使用されます。
  • 複数の GroupBy フィールドが指定された場合、最初のフィールドがプライマリ、2番目のフィールドがセカンダリとなります。
  • 「sort」の後は、集計フィールドのみが許可されます。
  • groupby の最大制限は 1000 です。
  • 構文: groupby フィールド名1 with 集計フィールド sort [集計フィールド, カウント] [asc/desc] limit [1-1000] having 集計式 演算子 値
  • 例:
    • logtype="unix" | groupby username sort sum(sent_bytes_i) as total desc
    • logtype="unix" | groupby username sort sum(sent_bytes_i) as total desc limit 10|groupby hostname
    • logtype="unix" | groupby username sort sum(sent_bytes_i) as total desc limit 10|groupby hostname with sum(sent_bytes_i) as total
    • logtype="windows" and eventid = 4625 | groupby username having count > 100
    • logtype="windows" and eventid = 4625 | groupby username having avg(sent_bytes) as average > 10 MB
    • logtype="windows" | groupby username limit 20 | groupby hosttype having avg(sent_bytes_i) as average > 10MB | groupby hostname having sum(received_bytes_i) as total < 500 MB

5. Distinct 演算子

  • 一意の値のみを含むテーブルを取得します。
  • 指定できる一意なフィールドは1つだけです。
  • Distinct フィールドは、カウント順でのみソートできます。
  • DISTINCTの最大制限は 200 です。
  • 構文: distinct フィールド名 sort (asc | desc) limit [1-200] having countoperator 値
  • 例:
    • logtype="windows" | distinct zuid
    • logtype="windows" | distinct zuid sort asc
    • logtype="windows" | distinct zuid limit 150
    • logtype="windows" | distinct location having count > 5

6. Having 演算子

  • 結果後演算子。外側集計条件に使用されます。
  • 構文:having aggregateExpr operator value [ 論理演算子(aggregateExpr operator value) ]
  • 例:
    • logtype="unix" かつ eventname に "logon" が含まれる | having count > 120
    • logtype="windows" and eventid = 4625 | having avg(sent_bytes) as average > 10MB

7. 最初/最後の演算子

  • First演算子は最も古いログを返し、last演算子は最も新しいログを返します。
  • first または last のいずれかを使用できます。
  • first/last には Limit を併用できます。
  • 上限 = 10。
  • 構文:first/last [1-10] フィールド名1 (, フィールド名2, ...)
  • 例:
    • logtype="windows" | groupby status | first 2 request_uri,remote_ip
    • logtype="windows" | groupby status | last 2 request_uri,remote_ip

8. With 演算子

  • 集計式は、基本条件およびグループ化演算子で使用できます。
  • 構文: with aggregateExpr (, aggregateExpr ...)
  • 例:
    • logtype="windows" and with sum(sent_bytes) as bytesSum, avg(received_bytes) as average | groupby srcip
    • logtype="windows" and | groupby srcip with sum(sent_bytes) as bytesSum, avg(received_bytes) as average

9. ステートメントの順序

| basic_criteria with field.aggregate_func [, field.aggregate_func, ...]

| sort フィールド (asc/desc)

[sort [aggregateField, count] [asc/desc]

| timewindow 値 limit 値

| groupby フィールド sort aggregate(フィールド) (昇順/降順) limit 数 ]

| distinct フィールド

| first/last [1-10] フィールド名

| having (グループ化フィールド.フィールド / 時間ウィンドウ.カウント 演算子 / グループ化フィールド.一意フィールド.集計値 / 集計関数.フィールド) 演算子 値

注:
  • 括弧内の演算子は、任意の順序で指定できます。
  • timewindow は 1 回のみ指定できます。
  • Groupbyは、任意の順序で最大3回まで指定できます。

相関条件

  1. 算術演算子
  2. 相関の複数アクション
  3. Link ステートメント
  4. シーケンス文
  5. Def および Filter ステートメント
  6. SELECT文

1. 算術演算子

演算子説明例
+加算timestamp + 3600000ms > 4800000
-減算timestamp - 3600000ms > 2400000
*乗算比率 = (failure_event.count / access.count)
/除算比率 = (failure_event.count / access.count) * 100

2. 相関(複数アクション)

  • 条件付きで複数のアクション(e1、e2 など)を定義できます。
  • 各アクションには基本条件が必要です。集計関数およびルックアップはオプションです。
  • 構文:アクション名 : 基本条件 | 集計条件 | ルックアップ条件 | 相関条件
  • 例:
    • e1: logtype = cisco かつ common_report_name が (unix user added, firewall useradded, user account created, computer account created) のいずれか
    • e2: logtype = cisco かつ common_report_name が (computer account deleted, useraccount deleted, unix user deleted, firewall user deleted) のいずれかであり、かつ hosttype = e1.hosttype かつ targetuser = e1.targetuser かつ _zl_timestamp が e1._zl_timestamp と (e1._zl_timestamp + 3600000ms) の間
  • link ステートメントは、あるアクションのフィールドが別のアクションのフィールドと一致するか、一致しないかを比較します。
  • AND / OR / NOT を使用して、他の条件と組み合わせることができます。
  • 構文:フィールド名 (演算子) アクション名.フィールド名 [ および/またはその他の比較 ]
  • 例:
    • 総当たりログイン
      • e1: logtype = windows and event_name = failed windowslogin | groupby username | groupby devicename
      • e2: logtype = windows and event_name = successfulwindowslogin and username = e1.username and devicename = e1.devicename
      • シーケンス:e1 の後に 10 分以内に e2 が続く
      • e1.username、e2.devicename を選択
    • 異常なユーザーアカウントの変更
      • e1: logtype = windows かつ common_report_name が (unixuseradded、firewall user added、user account created、computer account created) のいずれか
      • e2: logtype = windows かつ common_report_name が (computeraccount deleted, user account deleted, unix user deleted, firewall userdeleted) のいずれかであり、hosttype = e1.hosttype かつ targetuser = e1.targetuser かつ time >= e1.time
      • SELECT e1.hosttype, e1.targetuser

4. シーケンス文

  • 特定の時間内に、あるアクションが別のアクションに続くか、続かないかを定義します。
  • 必ず時間枠を指定する必要があります。
  • 構文:sequence : action1 (followedby / notfollowedby) action2 withintime [ and action2 followedby/notfollowedby action3 ... ]
  • 例:
    • 権限のないファイルアクセス
      • e1: logtype = windows かつ eventid = 4663 (オブジェクトへのアクセス試行)
      • e2: logtype = windows かつ eventid = 4656 (ハンドラー要求)
      • シーケンス: e1 の後に e2 が続かない 5分以内
      • e1.username、e1.devicename を選択
    • ブルートフォースログイン
      • e1: logtype = windows かつ event_name = failed windowslogin | groupby username | groupby devicename
      • e2: logtype = windows かつ event_name = successfulwindowslogin かつ username = e1.username かつ devicename = e1.devicename
      • シーケンス:10分以内に e1 の後に e2 が続く
      • e1.username、e2.devicename を選択
    • Ragnar Locker ランサムウェアの検出
      • e1: logtype = windows かつ processid = 4688 かつ processname = msiexec.exe
      • e2: logtype = windows かつ eventid = 4654 かつ objectname に Program Files(X86) が含まれ、かつ末尾が VirtualAppliances\va.exe で終わり、かつ devicename = e1.devicename
      • e3: logtype = windows かつ processid = 4688 かつ processname = e2.objectname かつ devicename = e1.devicename
      • シーケンス: e1 の後に 30 分以内に e2 が続いて、さらに 2 分以内に e3 が続く
    • 不審な SQL バックアップアクティビティ
      • e1: ログタイプ = windows、イベントID = 4625 | デバイス名の重複を除く
      • e2: logtype = windows かつ eventid = 4624 かつ devicename=e1.devicename かつ username = e1.username
      • e3: logtype = mssql かつ actionid = lgis
      • e4: ログタイプ = * かつ アクション = ba
      • シーケンス:e1の後に10分以内にe2が続き、e3の後に5分以内にe4が続く
注:ルール内のアクションは、定義された順序で順次実行されます。継続的なルールの場合、デフォルトの「followedby」時間は4時間です。スケジュールされたルールの場合、ログは設定された時間枠内で照合されます。

5. Def および Filter ステートメント

Def ステートメント

  • def ステートメントは式を計算し、その結果の値を searchresults フィールドに格納します。
  • これは、検索結果に新しいフィールドを作成するために使用され、その新しいフィールドの値は式の計算結果となります。
  • def ステートメントでは、actioncount や「e1.count」、「e1.sent_bytes.sum」のようなアクションベースのフィールド集計など、総数、平均、または合計のみを取得できます。
  • 構文:def: 変数名 = アクション名. (count /フィールド.集計関数) 演算子 アクション名. (count | フィールド.集計関数 /値)

filter ステートメント

  • filter 演算子は、フィルタ条件に一致するレコードのみを保持します。
  • def ステートメントのフィールド制約は、filter ステートメントにも適用されます。
  • 構文:filter: (def_variable_name / actionname. (count /field.aggregate_function)) operator value

例: 2 つのイベントの比率

  • access: logtype="windows" かつ
  • failure_event: eventid=4625
  • def: ratio = count(failure_event) / count(access)
  • def: percent = ratio * 100
  • filter: percent > 50
  • Select ratio, count(failure_event), count(access)

6. SELECT文

  • SELECT文は、結果に表示したいフィールドや集計値を指定するために使用されます。
  • 構文: select フィールド, 集計値
  • 例:
    • 過度なログオン失敗
      • e1: logtype = windows かつ common_report_name が (routerlogonfailed, unix logon failed, firewall logon failed, logon failed, vpnlogout, firewall logoff, failed cloud logon) のいずれか | groupby username
      • SELECT e1._zl_timestamp, e1.hostname
    • 異常なユーザーアカウントの変更
      • e1: logtype = windows かつ common_report_name が (unixuseradded, firewall user added, user account created, computer accountcreated) のいずれか
      • e2: logtype = * かつ common_report_name が (computeraccountdeleted, user account deleted, unix user deleted, firewall user deleted) のいずれかであり、かつ hosttype = e1.hosttype かつ targetuser = e1.targetuser かつ _zl_timestamp が e1._zl_timestamp かつ (e1._zl_timestamp + 3600000ms)
      • Select e1._zl_timestamp, e1.log_uuid, e2._zl_timestamp, e2.log_uuid
    • 過度な VPN ログオン失敗
      • failed_logon: logtype = * かつ eventtype = vpn_logon_failure|distinct username かつ count > 5
      • SELECT failed_logon.username, COUNT(failed_logon)
    • 不審なファイルアクセス
      • file_access: logtype = windows かつ eventid = 4663 | groupby username | groupby objectname かつ count > 3
      • file_modified: logtype = windows かつ eventid = 4663 かつ type = modify かつ username = file_access.username かつ objectname = file_access.objectname
      • シーケンス: file_access に続いて file_modified が 5 分以内に発生
      • file_access.username、file_modified.objectname、count(file_access.objectname) を選択

ユースケース別の具体例

以下に、クエリ文法を適用して一般的なセキュリティシナリオを検出する方法の実用的な例を示します。各例では、クエリのロジック、サポートされている演算子、および出力フィールドを示しています。

1. ログオン成功

説明:Windows における正常なログオンイベントを検出します。

クエリ:

logtype = "Windows"
and eventid = 4624
and message contains "successful logon"

2. 過度なログイン失敗の試行

説明:ログイン失敗の試行回数が過剰なユーザー名またはデバイスを特定します。

クエリ:

logtype in ("windows", "unix")
and eventid = 4625
| groupby username
| groupby devicename having count > 10

3. ブルートフォースログインの検出

説明:短時間の間に、同じデバイス上で同じユーザーによる複数のログイン失敗の後にログインに成功するブルートフォース攻撃を検出します。

クエリ:

ステップ 1 – ログイン失敗 (e1):

e1:
logtype = "windows"
かつ event_name = "Failed Windows Login"
| groupby username
| groupby devicename

ステップ 2 – ログイン成功 (e2):

e2:
logtype = "windows"
かつ event_name = "Successful Windows Login"
かつ username = e1.username
かつ devicename = e1.devicename

シーケンスロジック:

e1 の後に 10 分以内に e2 が続く

最終出力:

e1.username、e2.devicename を選択

4. ポートスキャン攻撃

説明:短期間に複数のポートをスキャンしているデバイスまたはIPを特定します。

クエリ:

e1:
logtype in ("unix", "windows", "sysmon")
and event_name = "allowed connection"
| groupby remoteip
| groupby host
| groupby port having count > 100

SELECT e1.host, COUNT(e1.host)

5. データ流出の検知

説明:異常に多いアウトバウンドデータ転送量を検出します。

クエリ:

netlog:
logtype = "unix"
and event_name = "allowed connection"
| groupby srcip
| groupby destip having sum(sentbytes) > 100MB

select netlog.srcip, netlog.destip, sum(netlog.sentbytes)

6. 失敗したイベントと成功したイベントの比率

説明:アクセスイベント全体に占める失敗したアクセスイベントの割合を算出します。

クエリ:

ステップ 1 – アクセスイベントの総数:

access:
logtype = "*"
and type = "access"

ステップ 2 – 失敗したアクセスイベント:

failure_event:
logtype = "*"
and type = "access"
and status = "failure"

比率の定義:

def: ratio = (failure_event.count / access.count) * 100

失敗率が高いものをフィルタリング:

filter: ratio > 50

最終出力:

select ratio, access.count, failure_event.count

検出ルールの制限

検出ルールの制限事項は、ELAおよびL3Cの各相関モードにおける機能上の制約と演算子のサポート範囲を規定します。

以下の表は、スケジュール型検出ルールと継続型検出ルールにおける、サポートされる演算子、しきい値、集計、およびクエリ構文の違いを詳細に示しています。

機能説明EventLog Analyzer のスケジュールされた相関EventLog Analyzer の継続的相関Log360 Cloud スケジュール型相関Log360 Cloud 継続型相関Log360 Cloud 継続的相関分析
数値関係演算子基本的な比較演算子(>, <, =, !=, >=, <=, in, not in, exists, notexists, between, not between)IP 範囲はサポートされていませんすべての演算子がサポートされていますIP 範囲はサポートされていませんすべての演算子がサポートされています
文字列の比較演算子テキストベースの比較(含む、含まない、先頭が、末尾が、一致する、一致しない)「一致」および「不一致」はサポートされていませんすべての演算子がサポートされています「一致」および「不一致」はサポートされていませんすべての演算子がサポートされています
論理演算子論理条件(and、or)すべて対応すべて対応すべて対応すべて対応
高度な演算子セキュリティチェック (isMalicious、isVulnerable、misconfiguredFor)isMaliciousのみがサポートされていますすべて対応いずれもサポートされていませんisMaliciousのみがサポートされています
ステートメントへのリンク条件ビルダー内のアクションへのリンク複数およびネストされた条件に対応複数条件に対応;ネストされた条件には対応していません複数の条件およびネストされた条件に対応最大3つの条件に対応;ネストは非対応
しきい値の制限しきい値の件数制限制限なし上限 999制限なしデフォルトの上限:10(増やすことができます)
IN演算子の値の上限IN 演算子内の項の最大数25252525
集計関数集計関数(sum、avg、max、min、stdev、percentile、count、distinct)すべて対応count と distinct のみ対応すべて対応count と distinct のみがサポートされています
WITH演算子基本条件における集計関数の使用最大10項まで未対応最大10項サポートされていません
ソート演算子フィールドによる結果の並べ替え対応済み(最大5フィールド)未対応対応済み(最大5フィールド)未対応
時間ウィンドウ演算子時間ベースのしきい値を設定します最大7日間、最大200件制限なし(時間ウィンドウは未対応)最大1日、最大200件デフォルトは1時間(延長可能);タイムウィンドウは未対応
GroupBy 演算子条件でのフィールドのグループ化最大3フィールド制限なし最大3フィールド(制限あり)最大3つのフィールド
Distinct演算子しきい値/クエリ内の Distinct カウント一意なフィールドは1つだけ(ソート・制限なし)一意なフィールドは1つだけ(ソート・LIMITなし)DISTINCTフィールドは1つだけ(ソート・LIMITなし)一意なフィールドは1つだけ(ソート・LIMITなし)
最大 GroupBy + Distinct併用時の制限最大3つのGROUP BY + 1つのDISTINCT複数のGROUP BY + 1つのDISTINCT(最大2つのGROUP BY + 1つのDISTINCT)または(最大3つのGROUP BY + 0つのDISTINCT)のいずれか最大 3 つの GROUP BY + 1 つの DISTINCT
先頭/末尾演算子フィールド最初のレコードまたは最後のレコードを返す最大10フィールド未対応最大10フィールド未対応
算術演算子クエリ内での算術演算サポートされています未対応サポートされていますサポートされていません
アクションの最大制限許可されるアクション数最大10最大10最大3最大3
シーケンス文順序付きイベントチェック(続く/続かない)最大7日間最大30日最大1日最大1時間
Defステートメント新しい計算フィールドを作成する最大10未対応最大10サポートされていません
フィルタ式条件に一致するレコードを保持する最大 10サポートされていません最大10件未対応
SELECT文フィールドの選択(エイリアスはスケジュールされたルールでのみ使用可能)最大 20最大 20最大 20最大 20
クエリの長さ1クエリあたりの最大文字数10000100001000010000
高度なルールにおける異常時のアクション異常値をしきい値/グループ化/ディスティンクト/リンク条件と組み合わせることはできません––––

こちらもご覧ください

このドキュメントでは、演算子や関数を使用した条件の定義から、相関ロジックの適用、実用的な検知ユースケースの構築に至るまで、クエリ文法が高度なルールの作成をどのようにサポートしているかを説明しました。