CEF 로그 포맷

CEF는 공통 이벤트 포맷 (Common Event Format)의 약어로, 아크사이트 등 ESM이나 SIEM 시스템과 연동할 목적으로 흔히 사용되는 규격입니다. 이 문서에서는 CEF 포맷의 세부사항을 다룹니다.

CEF 헤더 규격

CEF 포맷은 아래와 같이 구성됩니다.

Jan 18 11:07:53 호스트 CEF:버전|제조사|제품모델|제품버전|이벤트 클래스 ID|이벤트 이름|위험도|[확장]
  • 버전: CEF 포맷 자체의 버전을 의미합니다. 현재 유효한 값은 0 입니다.
  • 제조사: 로그를 전송하는 장치의 제조사를 의미합니다.
  • 제품모델: 로그를 전송하는 장치의 제품모델을 의미합니다. 제조사와 제품모델의 쌍으로 유일하게 해당 제품을 식별할 수 있어야 합니다.
  • 제품버전: 로그를 전송하는 장치의 버전을 의미합니다.
  • 이벤트 클래스 ID: 이벤트 유형별로 유일한 식별자입니다. 숫자일 수도 있고, 문자열일 수도 있습니다. 일반적으로 IPS의 시그니처 ID가 기입됩니다.
  • 이벤트 이름: 사람이 읽을 수 있는 형태의 이벤트 설명이 기록됩니다. 이 항목에는 IP나 포트처럼 특정한 정보는 포함하지 않고 이벤트 클래스 ID와 연결된 설명을 기록합니다.
  • 위험도: 이벤트 중요도를 문자열이나 숫자로 표현합니다. 문자열인 경우 유효한 값은 Unknown, Low, Medium, High, Veri-High 입니다. 숫자인 경우 유효한 값은 0~3 (Low), 4~6 (Medium), 7~8 (High), 9~10 (Very-High) 입니다.

CEF 확장

CEF 헤더 뒷부분은 키=값 쌍으로 기술됩니다. 각각의 키=값 쌍은 공백으로 구분되며, 순서에는 제약이 없습니다. CEF 확장 필드는 값의 타입에 따라 커스텀 필드의 이름이 결정됩니다. 예를 들면 다음과 같습니다.

  • cn1 (custom number 1): 정수 필드, cn3까지 지정 가능
  • cfp1 (custom floating point 1): 실수 필드, cfp4까지 지정 가능
  • cs1 (custom string 1): 문자열 필드, cs6까지 지정 가능
  • c6a1 (custom ipv6 address 1): IPv6 주소 필드, c6a4까지 지정 가능

각각의 커스텀 필드 값에 해당되는 필드 이름은 Label 접미사가 붙은 필드로 지정됩니다. 예를 들어, cn1 필드 값에 대한 필드 이름은 cn1Label 필드에 기록됩니다.

주로 사용되는 표준화된 확장 필드는 다음과 같습니다:

CEF 키전체 이름타입최대길이설명
externalIdexternalId문자열40원본 데이터 식별자 (Primary Key 등)
rtdeviceReceiptTime타임스탬프 이벤트를 수신한 시각, MMM dd yyyy HH:mm:ss 포맷이거나 1970년 1월 1일에서 시작하는 UNIX 타임스탬프 값
dvcdeviceAddressIPv4 주소 이벤트와 관련된 장치의 IPv4 주소
dvchostdeviceHostName문자열100이벤트와 관련된 장치의 호스트 이름
srcsourceAddressIPv4 주소 출발지 IPv4 주소
sptsourcePort정수0~65535 사이의 출발지 포트 번호
shostsourceHostName문자열1023출발지 호스트 이름
smacsourceMacAddressMAC 콜론으로 구분된 출발지 MAC 주소
dstdestinationAddressIPv4 주소 목적지 IPv4 주소
dptdestinationPort정수 0~65535 사이의 목적지 포트 번호
dhostdestinationHostName문자열1023목적지 호스트 이름
dmacdestinationMacAddressMAC 콜론으로 구분된 목적지 MAC 주소
msgmessage문자열1023멀티라인을 포함할 수 있는 상세 메시지

메세지 인코딩 규칙

메세지는 아래의 규칙으로 인코딩합니다.

  • 문자집합: 전체 메세지는 UTF-8로 인코딩합니다.
  • 파이프: 파이프(|) 문자는 헤더의 각 구성요소를 구분하는데 사용하므로, 값에 파이프 자체를 표현해야 하는 경우 백슬래시를 앞에 붙여서 이스케이프해야 합니다.
  • 백슬래시: 백슬래시() 문자는 이스케이프로 사용하므로, 값에 백슬래시 자체를 표현해야 하는 경우 백슬래시()를 앞에 하나 더 붙여야 합니다.
  • 등호: 등호(=) 문자는 CEF 메세지 확장 부분에서 키와 값을 구분하는 용도로 사용하므로, 값에 등호 자체를 표현해야 하는 경우 백슬래시()를 앞에 하나 더 붙여야 합니다. 단, 헤더 부분에서는 등호를 이스케이프하지 않습니다.
  • 개행: 멀티라인으로 구성된 필드는 개행을 \r이나 \n으로 표현합니다. 단, 개행은 확장의 값 표현에만 허용됩니다.

CEF 로그 예제

CEF를 사용하는 파이어아이 NX 시리즈의 로그 예시는 아래와 같습니다.

fenotify-20252856.warning: CEF:0|FireEye|CMS|7.8.1.468932|DM|domain-match|1|rt=Oct 19 2016 01:04:40 UTC src=172.20.1.23 
cn3Label=cncPort cn3=53 cn2Label=sid cn2=80448589 shost=dns.example.com proto=udp spt=23619 cs5Label=cncHost 
cs5=acme.com dvchost=EXAMPLE-NX2 dvc=192.168.10.11 smac=e4:c7:22:2a:c7:d2 cn1Label=vlan cn1=0 externalId=10352856 
cs4Label=link cs4=https://example.com/event_stream/events_for_bot?ev_id\=10352856 act=notified dmac=00:09:0f:09:1e:03 
cs1Label=sname cs1=Trojan.Gen.C.DNS 

참고 문헌

아래의 경로에서 원문 (영문)을 확인할 수 있습니다.

둘러보기

더보기

레지스트리 포렌식

레지스트리 하이브 파일 구조와 함께 코드게이트 컨퍼런스 포렌식 문제 풀이를 설명합니다.

2020-11-01

바이러스토탈 API 연동

바이러스토탈 API를 사용하여 악성 파일 분석을 자동화하는 방법을 소개합니다.

2017-01-15