정규식 패턴 빌드

로그 소스 확장을 작성하려면 정규식(regex)을 사용하여 지원되지 않는 로그 소스의 텍스트 문자열을 일치시키십시오.

이 태스크에 대한 정보

다음 예제는 단계에서 참조되는 로그 항목을 표시합니다.

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 정규식으로 대체하십시오.

    숫자가 아니거나 알파벳이 아닌 문자에는 이스케이프 문자를 사용해야 합니다. 예를 들어, =는 \=이 되고 :는 \:이 됩니다.

  5. 의사 코드를 정규식으로 변환하십시오.
    표 1. 의사 코드를 정규식으로 변환
    필드 의사 코드 정규식

    EventName

    " kernel: VALUE

    "

    \skernel\:\s.*?\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

    \skernel\:\s.*?\s

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

    SourceMAC

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

    \sMAC\=((?:[0-9a-fA- F]{2}\:){5}[0-9a-fA-F]{2})\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>