CIDR 표기법으로 IP 주소를 찾는 방법

소개



Kibana에서 IP 주소를 CIDR 표기법을 사용하여 검색하는 방법을 작성합니다.

이용환경




제품
버전


키바나
6.5.4

Elasticsearch
6.5.4

Winlogbeat
6.5.4

시몬
8.04


전제



Sysmon에서 출력한 Sysmon EventID 3 의 Network connection 로그를 이용합니다.
Windows 이벤트 로그로 출력된 Sysmon 로그를 Winlogbeat에서 Elasticsearch로 가져와 Kibana에서 CIDR 표기법을 검색합니다.

키바나란?



Elasticsearch를 개발하고 오픈 소스로 제공하는 Elastic의 BI 도구입니다.
Elasticsearch에 저장된 데이터를 웹 브라우저에서 검색하거나 그래프로 시각화하는 도구입니다.

【참고 URL】
· 키바나란?

datatype을 ip로 설정



Elasticsearch는 사전에 스키마 정의가 필요하지 않은 스키마리스 아키텍처가 됩니다.
스키마를 정의하지 않고 Logstash 또는 Beats에서 로그를 캡처하면 많은 필드가 文字列データ(textやkeyword)로 캡처됩니다.

이번 검색에 이용하는 필드는 event_data.DestinationIp 가 됩니다.
값으로 IPv4 또는 IPv6이 포함되지만 Winlogbeat Index Template에서는 datatypestring(keyword)로 캡처되며 CIDR 표기법으로 검색 할 수 없습니다.


event_data.DestinationIp의 datatype (2018/12/29 분)
GET /winlogbeat-6.5.4-2018.12.29/_mapping/doc/field/event_data.DestinationIp

{
  "winlogbeat-6.5.4-2018.12.29" : {
    "mappings" : {
      "doc" : {
        "event_data.DestinationIp" : {
          "full_name" : "event_data.DestinationIp",
          "mapping" : {
            "DestinationIp" : {
              "type" : "keyword"      ←ここの値
            }
          }
        }
      }
    }
  }
}
event_data.DestinationIp 필드의 IP 주소 건수를 집계한 표 그래프에서"172.217.0.0/16" 라고 검색해도 No results found 가 되어 버립니다.


한 번 가져온 데이터의 datatype 는 변경할 수 없는 것 같습니다.
Index Template를 업데이트하여 새로 가져오는 데이터에서 datatypeip가 되도록 합니다.

IndexTemplate
PUT _template/winlogbeat-6.5.4
{
  "index_patterns" : [
    "winlogbeat-6.5.4-*"
  ],
  "settings" : {
    "index" : {
      "mapping" : {
        "total_fields" : {
          "limit" : "10000"
        }
      },
      "refresh_interval" : "5s",
      "number_of_routing_shards" : "30",
      "number_of_shards" : "1"
    }
  },
  "mappings" : {
    "doc" : {
      "_meta" : {
        "version" : "6.5.4"
      },
      "date_detection" : false,

   (中略・・・)

        "event_data" : {
          "type" : "object",
          "properties" : {            ←追記(179行目)
            "DestinationIp" : {       ←追記(180行目)
              "type" : "ip"           ←追記(181行目) 
            }
          }
        },

CIDR 표기법으로 검색



2019년 01월 13일(월)의 로그를 새로운 Index Template를 이용하여 수집합니다.
새로 생성된 Index인 winlogbeat-6.5.4-2019.01.13 에서 datatypeip 로 되어 있는지 확인합니다.


event_data.DestinationIp의 datatype (2019/01/13 분)
GET /winlogbeat-6.5.4-2019.01.13/_mapping/doc/field/event_data.DestinationIp
{
  "winlogbeat-6.5.4-2019.01.13" : {
    "mappings" : {
      "doc" : {
        "event_data.DestinationIp" : {
          "full_name" : "event_data.DestinationIp",
          "mapping" : {
            "DestinationIp" : {
              "type" : "ip"      ←ここの値
            }
          }
        }
      }
    }
  }
}

대상 기간을 2019/01/13으로 변경합니다.
이번에는 "172.217.0.0/16" 를 검색하면 해당 IP 주소만 표시됩니다.


검색바 아래에 있는 Add a filter 에서는 OR 조건을 검색할 수 없지만, "172.217.0.0/16" OR "13.107.0.0/16" 와 검색하면 여러 세그먼트를 대상으로 로그 검색할 수도 있습니다.
의외로 편리하네요.


요약



어땠습니까?
액세스 로그나 보안 로그의 분석에 있어서, 소스나 목적지의 IP 주소를 레인지로 검색하고 싶은 것은 아마에 있다고 생각합니다.
네트워크 엔지니어라면 CIDR 표기로 세그먼트 단위로 좁히는 경우도 있다고 생각하므로 꼭 활용해 보는 것은 어떻습니까.

불명한 점, 오식 등 있으면, 코멘트를 부탁드립니다! !

참고



· 필드 데이터 타입
· IP datatype
· 색인 템플릿

좋은 웹페이지 즐겨찾기