2021년 6월 24일 목요일

도메인 정규화 Processor: registered_domain

상태를 쪼개면 쪼갤수록 그 상태에 대해서 더 잘 알게 된다. 도메인 정보도 마찬가지. 그래서 엘라스틱은 서브 도메인과 상위 도메인을 쪼개주는 registered_domain processor를 제공한다. 다음은 beat processor 설정.
processors:
  - include_fields:
      fields: [ "winlog.event_data.QueryName", "winlog.event_id" ]
  - registered_domain:
      field: winlog.event_data.QueryName
      target_field: top_url
      target_etld_field: root_url
      target_subdomain_field: sub_url

실행 결과는 다음과 같다. microsoft.com은 상위, 최상위, 서브 도메인 단위별로 추출이 잘 됐는데, googleapis.com은 실패.
{
  "@timestamp": "2021-05-15T06:22:28.888Z",
  "@metadata": {
    "beat": "winlogbeat",
    "type": "_doc",
    "version": "7.12.1"
  },
  "winlog": {
    "event_data": {
      "QueryName": "checkappexec.microsoft.com"
    },
    "event_id": 22
  },
  "top_url": "microsoft.com",
  "root_url": "com",
  "sub_url": "checkappexec"
}
{
  "@timestamp": "2021-05-15T06:22:28.889Z",
  "@metadata": {
    "beat": "winlogbeat",
    "type": "_doc",
    "version": "7.12.1"
  },
  "winlog": {
    "event_data": {
      "QueryName": "clientservices.googleapis.com"
    },
    "event_id": 22
  },
  "top_url": "clientservices.googleapis.com",
  "root_url": "googleapis.com"
}

registered_domain은 Mozilla Public Suffix list를 기반으로 도메인 정보를 분류하는데, 테스트해보면 대부분 잘 동작한다. 그런데 몇몇 도메인은 도메인 리스트에 문제가 없어 보임에도 잘 안 되더라. 


엘라스틱측에 문의해봤는데 답이 없다. 내 영어가 엉망인가? 일단 script processor와 정규표현식으로 처리. 
processors:
  - include_fields:
      fields: [ "winlog.event_data.QueryName", "winlog.event_id" ]
  - script:
      lang: javascript
      source: >
        function process(evt) {
          if (evt.Get("winlog.event_id") == 22) {
            var str = evt.Get("winlog.event_data.QueryName").match(/(.*?)\.?([^.]+\.([^.]+$))/);
            evt.Put("sub_url", str[1]);
            evt.Put("top_url", str[2]);
            evt.Put("root_url", str[3]);
          }
        }
{
  "@timestamp": "2021-05-15T06:22:28.888Z",
  "@metadata": {
    "beat": "winlogbeat",
    "type": "_doc",
    "version": "7.12.1"
  },
  "winlog": {
    "event_data": {
      "QueryName": "checkappexec.microsoft.com"
    },
    "event_id": 22
  },
  "sub_url": "checkappexec",
  "top_url": "microsoft.com",
  "root_url": "com"
}
{
  "@timestamp": "2021-05-15T06:22:28.889Z",
  "@metadata": {
    "beat": "winlogbeat",
    "type": "_doc",
    "version": "7.12.1"
  },
  "winlog": {
    "event_data": {
      "QueryName": "clientservices.googleapis.com"
    },
    "event_id": 22
  },
  "sub_url": "clientservices",
  "top_url": "googleapis.com",
  "root_url": "com"
}

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스