본문 바로가기

교육 및 자격증/빅데이터 기반 보안로그분석[splunk]

SPL(Splunk Procedure Language)

728x90
SPL?
 : 검색 처리 언어로 데이터 세트에서 원하는 결과를 얻기 위해 작성된 많은 함수, 명령, 인수 등을 포함하는 언어다.

즉, 구체적으로 검색하고 싶을 때 사용하는 필터링 언어.

 

ex)

host="mailsecure_log" | head 3

=> head 명령으로 상위 3개 결과만 검색

 

 파이프라인["|"] : 리눅스와 동일한 개념

 

 

명령어

  • top <ㅡ> rare

 : 필드명 기준으로 가장 데이터가 많은 값 10개 표시

index="sales_system" sourcetype="access_combined_wcookie" | top clientip

 

  • stats

필드명과 function을 기준으로 통계 작성. [함수 종류 : count, sum, avg...] 등..

index="sales_system" sourcetype="access_combined_wcookie" | stats count by clientip

index="sales_system" sourcetype="access_combined_wcookie" | stats dc(status)
=> 중복을 제거한 status 개수

index="sales_system" sourcetype="access_combined_wcookie" | stats sum(bytes) by clientip | sort - sum(bytes)
 => clientip별 bytes를 더해서 통신량을 확인

index="sales_system" sourcetype="access_combined_wcookie" | stats count, list(uri), list(status) by clientip | sort - count limit=10
 => 에러코드가 400번대인 데이터의 개수, 파일(사용자가 접속한 uri) 등을 clienip기준 상위 10개 출력

 

 

 

  • table명령

필드명을 기준으로 데이터를 테이블 형태로 출력

index=test_01 sourcetype="access_combined_wcookie" | table status, uri

  • rename

필드명을 사용자가 이해하기 쉬운 형태로 변환(변경 전 필드명 재사용x)

index=test_01 sourcetype="access_combined_wcookie" | table clientip | rename clientip as "user ip"
=> 필드명을 clientip에서 user ip로 변경

  • fields

특정 필드를 빼거나 넣는 명령

Fields + 필드식별이 되기 전 동작하며 검색성능에 영향있음

Fields - 필드 식별 이후 동작하며 검색 성능에 영향없음

  • dedup

필드명을 기준으로 중복 제거

  • sort

필드명을 기준으로 정렬(+는 오름차순, -는 내림차순)

index=test_01 sourcetype="access_combined_wcookie" | table clientip | dedup clientip | sort clientip

 

실습

f1data[access.log, linux_secure, db_audit]

  • 3개 로그 각각의 필드 확인
index="sales_system"

  • 에러없이 정상 통신된 웹 서버 로그 조회
index="sales_system" sourcetype="access_combined_wcookie" status=200

  • 상기 조회 결과에 대해 호출된 파일명 및 파일별 호출 빈도 확인

file필드

 

  • 웹서버 로그 중 물품 구매 기록만 조회
index="sales_system" sourcetype="access_combined_wcookie" status=200 file="success.do"

  • 상기 구매기록 중, aciton, JSESSIONID, status 필드만 표시
index="sales_system" sourcetype="access_combined_wcookie" | table action, JSESSIONID, status

 

  • JSESSIONID가 가장 먼저 표시되도록 변경
index="sales_system" sourcetype="access_combined_wcookie" | table JSESSIONID, action, status

  • JSESSIONID 필드명을 UserSessions으로 변경
index="sales_system" sourcetype="access_combined_wcookie" | table  JSESSIONID, action, status | rename JESSIONID as UserSessions

  • UserSession을 기준으로 정렬 - sort
index="sales_system" sourcetype="access_combined_wcookie" | table JSESSIONID, action, status | rename JSESSIONID as UserSessions | sort = UserSessions

  • UserSessions 값의 중복을 제거하여 출력 - dedup
index="sales_system" sourcetype="access_combined_wcookie" | table JSESSIONID, action, status | rename JSESSIONID as UserSessions | sort = UserSessions | dedup UserSessions

  • 화면에  action, status를 제거하고 UserSessions만 출력 - fields
index="sales_system" sourcetype="access_combined_wcookie" | table JSESSIONID, action, status | rename JSESSIONID as UserSessions | sort = UserSessions | dedup UserSessions | fields - action, status

 

  • 사용자들이 가장 많이 구매한 제품 목록 상위 5개 출력
index="sales_system" sourcetype="access_combined_wcookie" status=200 | stats count by clientip | sort - count limit=5

  • 정상적으로 통신된 모든 웹 로그 조회
index="sales_system" sourcetype="access_combined_wcookie" status=200 | stats count by file

  • 호출 빈도가 가장 낮았던 파일 출력
index="sales_system" sourcetype="access_combined_wcookie" status=200 | stats count by file | sort count

  • 검색 결과를 월별로 분할하여 출력
index="sales_system" sourcetype="access_combined_wcookie" status=200 | stats count by file, date_month | sort count
=> 월에 해당하는 필드 찾아 넣기

  • 구매되었거나 장바구니에 물건을 넣은 웹 로그를 추출
index="sales_system" sourcetype="access_combined_wcookie" status=200 (file=sucess.do OR file=cart.do) | stats count by file

 

 

참고

https://www.tutorialspoint.com/splunk/splunk_search_language.htm