正規表現パターンの作成

ログ・ソース拡張を作成するには、正規表現を使用して、サポートされていないログ・ソースからのテキスト・ストリングと比較します。

このタスクについて

以下の例に、参照するログ項目をステップに分けて示します。

May 20 17:24:59 kernel: DROP MAC=<MAC_address> 
SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 TOS=0x00 PREC=0x00 TTL=64 ID=9582 
PROTO=UDP SPT=67 DPT=68 LEN=331
May 20 17:24:59 kernel: PASS MAC=<MAC_address> 
SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 TOS=0x00 PREC=0x00 TTL=64 
ID=9583 PROTO=TCP SPT=1057 DPT=80 LEN=331 
May 20 17:24:59 kernel: REJECT 
MAC=<MAC_address>  SRC=<Source_IP_address> DST=<Destination_IP_address> LEN=351 
TOS=0x00 PREC=0x00 TTL=64 ID=9584 PROTO=TCP SPT=25212 DPT=6881 LEN=331 

手順

  1. サポートされていないログ・ソースを目視で分析し、固有のパターンを見つけ出します。

    それらのパターンを、後で正規表現に変換します。

  2. 比較するテキスト・ストリングを探します。
    ヒント: 基本的なエラー検査を行うには、値の前後に文字を含めて、類似した値が誤って一致しないようにします。 後で、実際の値を余分な文字から分離することができます。
  3. 比較パターンの疑似コードを作成して、パターンの先頭と末尾を示すスペース文字を含めます。

    引用符は無視して構いません。 例に示したログ項目では、イベント名は DROP、PASS、および REJECT です。 使用可能なイベント・フィールドを以下に示します。

    • EventName: " kernel: VALUE "
    • SourceMAC: " MAC=VALUE "
    • SourceIp: " SRC=VALUE "
    • DestinationIp: " DST=VALUE "
    • Protocol: " PROTO=VALUE "
    • SourcePort: " SPT=VALUE "
    • DestinationPort: " DPT=VALUE "
  4. スペースを \s 正規表現に置き換えます。

    英数字以外の文字には必ずエスケープ文字を使用してください。 例えば = は &#xa5;= とし、: は &#xa5;: とします。

  5. 疑似コードを正規表現に変換します。
    表 1. 疑似コードから正規表現への変換
    フィールド 疑似コード 正規表現

    EventName

    " kernel: VALUE

    "

    &#xa5;skernel&#xa5;:&#xa5;s.*?&#xa5;s

    SourceMAC

    " MAC=VALUE "

    \sMAC\=(?:[0-9a-fA-F]{2}\:){5}[0-9a-fA-F]{2}\s

    SourceIP

    " SRC=VALUE "

    \sSRC\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    DestinationIp

    " DST=VALUE "

    \sDST\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    プロトコル

    " PROTO=VALUE "

    \sPROTO\=(TCP|UDP|ICMP|GRE)\s

    SourcePort

    " SPT=VALUE "

    \sSPT\=\d{1,5}\s

    DestinationPort

    " DPT=VALUE "

    \sDPT\=\d{1,5}\s

  6. キャプチャー・グループを指定します。

    キャプチャー・グループは、正規表現の中の特定の値を分離します。

    例えば、前記の例に示した SourcePort パターンでは、スペースおよび SRC=<code> を含んでいるため、値全体を渡すことができません。 代わりに、キャプチャー・グループを使用してポート番号のみを指定します。 キャプチャー・グループの値は、 IBM QRadarの関連フィールドに渡される値です。

    以下のように、取り込む値の前後に小括弧を挿入します。

    表 2. 正規表現からイベント・フィールドのキャプチャー・グループへのマッピング
    フィールド 正規表現 キャプチャー・グループ

    EventName

    &#xa5;skernel&#xa5;:&#xa5;s.*?&#xa5;s

    \skernel\:\s(.*?)\s

    SourceMAC

    &#xa5;sMAC&#xa5;=(?:[0-9a-fA- F]{2}&#xa5;:){5}[0-9a-fA-F]{2}&#xa5;s

    &#xa5;sMAC&#xa5;=((?:[0-9a-fA- F]{2}&#xa5;:){5}[0-9a-fA-F]{2})&#xa5;s

    SourceIP

    \sSRC\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    \sSRC\=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s

    宛先 IP

    \sDST\=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s

    \sDST\=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s

    プロトコル

    \sPROTO\=(TCP|UDP|ICMP|GRE)\s

    \sPROTO\=((TCP|UDP|ICMP|GRE))\s

    SourcePort

    \sSPT\=\d{1,5}\s

    \sSPT\=(\d{1,5})\s

    DestinationPort

    \sDPT\=\d{1,5}\s

    \sDPT\=(\d{1,5})\s

  7. パターンおよびキャプチャー・グループをログ・ソース拡張文書に移行します。

    使用する文書の一部を以下のコード・スニペットに示します。

    
    <device-extension xmlns="event_parsing/device_extension"> 
    <pattern id="EventNameFWSM_Pattern" xmlns=""><![CDATA[%FWSM[a-zA-Z\-]*\d-(\d{1,6})]]></pattern>
    <pattern id="SourceIp_Pattern" xmlns=""><![CDATA[gaddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern> 
    <pattern id="SourceIpPreNAT_Pattern" xmlns=""><![CDATA[gaddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="SourceIpPostNAT_Pattern" xmlns=""><![CDATA[laddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="DestinationIp_Pattern" xmlns=""><![CDATA[faddr (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/([\d]{1,5})]]></pattern>
    <pattern id="Protocol_Pattern" case-insensitive="true" xmlns=""><![CDATA[(TCP|UDP|ICMP|GRE)]]></pattern>
    <pattern id="Protocol_6_Pattern" case-insensitive="true" xmlns=""><![CDATA[protocol=6]]></pattern> 
    <pattern id="EventNameId_Pattern" xmlns=""><![CDATA[(\d{1,6})]]></pattern>