검색에 와일드카드 문자 사용 가능
Splunk에서 데이터를 효과적으로 검색하려면 검색 연산자를 사용합니다.
만약 특정 서브넷으로 들어오는 트래픽 전체를 검색하고 싶으면 어떻게 해야할까요?
Splunk에서는 와일드카드 문자를 사용한 검색을 허용하고 있습니다.
-- 목적지 주소가 192.168로 시작하는 모든 ip주소에 대한 검색
dest_ip="192.168.*"
파이프라인 사용 가능
Splunk는 Linux의 파이프(`|`)와 유사한, 하나의 명령어의 출력을 다른 명령어의 입력으로 전달할 수 있는 파이프라인 기능을 지원합니다. 따라서 파이프라인을 사용하려면 추가적으로 실행할 명령어를 후에 반드시 입력해야합니다.
예를 들어, `stats` 명령어는 search 쿼리의 결과에 대해 집계 통계 연산을 수행합니다.
dest_ip="192.168.*" | stats dc(dest_ip)
집계 명령어
Splunk는 집계 연산을 위한 집계 명령어를 지원하고 있습니다. 집계 연산은 기본적으로 단일 행을 반환하는 합계(Sum), 개수(Count), 평균(Average)와 같은 연산을 말합니다.
Stats
stats 명령어는 앞서 언급한 집계 연산에 사용됩니다. 따라서 stats은 홀로 사용될 수 없고, 파이프를 통해 search 쿼리 결과와 함께 사용됩니다.
dest_ip="192.168.*" | stats dc(dest_ip)
stats명령어에 추가적인 집계 함수를 사용할 수 있는데 예를 들면 dc()가 있습니다.
dc는 distinct count의 줄임말로 중복을 제거한 결과값의 개수를 세어줍니다.
즉, 위의 예시의 경우 목적지 ip주소가 192.168로 시작하는 모든 트래픽에 대해 목적지 주소들의 중복을 제거한, 고유한 목적지 주소의 개수를 반환하는 검색입니다.
dc(dest_ip) |
7 |
검색에 대한 결과값은 Splunk 대시보드에 릴레이션의 형태로 출력되는데, 기본적으로 출력되는 컬럼의 이름을 변경하고 싶다면 SQL와 같이 AS절을 이용해서 컬럼의 이름을 변경할 수 있습니다.
dest_ip="192.168.*" | stats dc(dest_ip) AS Destination
Destination |
7 |
앞서 언급한 것처럼 기본적으로 집계 연산은 단일 행을 반환합니다.
하지만 BY절을 사용한다면 SQL의 GROUP BY와 같이 해당 열을 기준으로 집계를 진행할 수 있습니다.
dest_ip="192.168.*" | stats dc(dest_ip) AS Destination BY dest_ip, src_ip
dest_ip | src_ip | Destination |
192.168.213.3 | 192.168.200.133 | 1 |
192.168.213.4 | 192.168.200.133 | 1 |
192.168.213.5 | 192.168.200.133 | 1 |
192.168.214.13 | 192.168.200.133 | 1 |
192.168.214.4 | 192.168.200.133 | 1 |
192.168.214.5 | 192.168.200.133 | 1 |
192.168.214.6 | 192.168.200.133 | 1 |
eventStats
일회성으로 사용되는 stats명령어와 달리 eventstats은 이벤트의 필드에서 통계를 요약하고, 이 요약된 통계를 새 필드로 저장합니다. 이렇게 저장된 통계는 검색의 후속 명령어에서 계산에 사용될 수 있습니다.
dest_ip="192.168.*" | eventstats dc(dest_ip) AS "Destination Count" BY dest_ip
정렬 명령어
sort명령어는 특정 필드를 중심으로 결과값을 정렬해서 출력해주는 명령어입니다.
dest_ip="192.168.*" | stats dc(dest_ip) AS Destination BY dest_ip, src_ip | sort dest_ip
dest_ip | src_ip | Destination |
192.168.213.3 | 192.168.200.133 | 1 |
192.168.213.4 | 192.168.200.133 | 1 |
192.168.213.5 | 192.168.200.133 | 1 |
192.168.214.4 | 192.168.200.133 | 1 |
192.168.214.5 | 192.168.200.133 | 1 |
192.168.214.6 | 192.168.200.133 | 1 |
192.168.214.13 | 192.168.200.133 | 1 |
sort명령어의 기본값은 오름차순 정렬로 내림차순 정렬을 원할 경우에는 desc를 필드값 뒤에 붙여줍니다.
dest_ip="192.168.*" | stats dc(dest_ip) AS Destination BY dest_ip, src_ip | sort dest_ip desc
dest_ip | src_ip | Destination |
192.168.214.13 | 192.168.200.133 | 1 |
192.168.214.6 | 192.168.200.133 | 1 |
192.168.214.5 | 192.168.200.133 | 1 |
192.168.214.4 | 192.168.200.133 | 1 |
192.168.213.5 | 192.168.200.133 | 1 |
192.168.213.4 | 192.168.200.133 | 1 |
192.168.213.3 | 192.168.200.133 | 1 |
검색결과에 시간 필터 적용 가능
Splunk의 이벤트들에는 time 필드값이 존재하고, 이를 이용해 검색결과에 시간 필터를 적용할 수 있습니다.
검색바 옆의 드롭다운 선택
검색바의 옆의 드롭다운을 클릭해 원하는 필터링을 선택할 수 있습니다.
검색창에 시간 표현식 사용
Splunk에서는 time format과 time modifier를 사용해 시간을 지정할 수 있습니다.
기본적으로 시간은 절대적 시간과 상대적 시간으로 나눌 수 있습니다.
- 절대 시간 범위 (Absolute Time Range): 특정 날짜와 시간을 명시하여 사용합니다. 예를 들어, 2019년 7월 1일 자정부터 2019년 7월 13일 자정까지의 데이터를 검색할 때 사용합니다.
- 상대 시간 범위 (Relative Time Range): 검색이 실행되는 시점을 기준으로 시간을 설정합니다. 예를 들어, -60m은 현재 시간으로부터 60분 전의 데이터를 의미합니다. 현재 시간이 오후 3시라면, 오후 2시부터 3시까지의 데이터를 검색합니다.
Splunk에서는 시간 범위를 더 세밀하게 조정하기 위해 earliest와 latest 수정자를 사용할 수 있습니다. 상대적 또는 절대적 시간을 설정하여 검색 범위를 정의합니다.
- earliest: 이 시간 이후의 이벤트만을 포함하도록 설정합니다. 절대 시간 또는 상대 시간을 지정할 수 있습니다.
- earliest="26/5/2024:20:00:00", earliest=-h@h (현재 시간의 정시부터)
- latest: 이 시간 이전의 이벤트만을 포함하도록 설정합니다.
- 예: latest="27/5/2024:00:00:00", latest=now() (현재 시간까지), latest=+7d@w6 (현재로부터 7일 후의 주말까지), latest=@mon (다음 월요일까지)
dest_ip="192.168.*" | eventstats dc(dest_ip) AS "Destination Count" BY dest_ip earliest -1y latest -6m
즉, 위의 예시는 현재시간을 기준으로 1년 전 이벤트부터 6분 전 이벤트까지를 검색해 보여줍니다.
Top 명령어
top명령어는 지정된 필드의 가장 흔한 값들을 찾아내고, 각 값의 발생 횟수와 전체 이벤트에서 차지하는 비율을 계산해주는 명령어입니다. 출력하는 기본값은 상위 10개의 필드입니다.
dest_ip IN ("192.168.*", "172.16.*") | top dest_ip
즉, 위의 예시는 dest_ip를 기준으로 빈도수 상위 10개의 횟수와 비율을 계산해 보여줍니다.
dest_ip | count | percent |
172.16.100.23 | 260 | 15.072464 |
172.16.100.22 | 260 | 15.072464 |
172.16.100.21 | 260 | 15.072464 |
192.168.214.6 | 135 | 7.826087 |
192.168.214.5 | 135 | 7.826087 |
192.168.214.4 | 135 | 7.826087 |
192.168.214.13 | 135 | 7.826087 |
192.168.213.5 | 135 | 7.826087 |
192.168.213.4 | 135 | 7.826087 |
192.168.213.3 | 135 | 7.826087 |
Reference
https://docs.splunk.com/Documentation/SCS/current/Search/Timemodifiers
'기타 > Cyberbit' 카테고리의 다른 글
Phishing (0) | 2024.09.08 |
---|---|
AWS Security Basics - Introduction to Compute Resources Security (0) | 2024.07.30 |
AWS Fundamentals - External and Internal Users (0) | 2024.06.27 |