로그 소스 확장을 작성하려면 정규식(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
프로시저
- 지원되는 로그 소스를 시각적으로 분석하여 고유 패턴을 식별하십시오.
- 일치하는 텍스트 문자열을 찾으십시오.
팁: 기본 오류 검사를 제공하려면 유사한 값이 실수로 일치하지 않도록 값 앞과 뒤에 문자를 포함시키십시오. 나중에 추가 문자에서
실제 값을 격리시킬 수 있습니다.
- 패턴 일치를 위한 의사 코드를 개발하고 패턴의
시작과 끝을 표시하는 공백 문자를 포함시키십시오.
따옴표는 무시해도 됩니다. 예제 로그 항목에서 이벤트 이름은 DROP, PASS, REJECT입니다. 다음 목록은 사용 가능한 이벤트 필드를 표시합니다.
- EventName: " kernel: VALUE "
- SourceMAC: " MAC=VALUE "
- SourceIp: " SRC=VALUE "
- DestinationIp: " DST=VALUE "
- Protocol: " PROTO=VALUE "
- SourcePort: " SPT=VALUE "
- DestinationPort: " DPT=VALUE "
- 공백을
\s 정규식으로 대체하십시오.
숫자가 아니거나 알파벳이 아닌 문자에는 이스케이프 문자를 사용해야 합니다. 예를 들어,
=는 \=이 되고 :는 \:이 됩니다.
- 의사 코드를 정규식으로 변환하십시오.
표 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
|
- 캡처 그룹을 지정하십시오.
캡처 그룹은 정규식에서 특정 값을 격리시킵니다.
예를 들어, 이전 예제의 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
|
- 패턴과 캡처 그룹을 로그 소스 확장 문서로 마이그레이션하십시오.
다음 코드 스니팻은 사용자가 사용하는 문서의 일부분입니다.
<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>