현황분석
- 현재 발생하는 상황을 파악하는 작업
- 우리 망에서 이런 일이 있었구나
- 무조건 문제가 있는 것은 아님
- 우리 직원들은 어느 사이트에 많이 접속하는구나를 파악
이상징후
- 평균적인 상황을 파악하다가 이상징후가 포착이 되면 관리자/침해대응팀에게 알림
- 현황분석을 해서 문제가 없을 수도 있고, 그중 이상징후를 탐지할 수도 있음
DNS Log 환경구성
=> ZeekIDS는 우리망에 떠돌아다니는 네트워크 로그들을 수집하여 저장, 이것을 중앙관제에 scp를 사용하여 넘겨줌
시나리오 : Zeek을 통해 DNS Log를 압축하여 중앙관제서버에게 넘겨줍니다. 중앙관제서버 입장에서는 sample_log/dns/dns.zip을 넘겨받은 것입니다. 중앙관제서버는 Splunk에 해당 로그를 로딩합니다.(splunk에 로그 저장소에 로그 저장) 네트워크 로그는 타입이 다 다른데, 그 로그들의 필드명을 메뉴얼하게 지정합니다. (당연히 자동도 가능, 실습에서는 수동) 마지막으로 URL Toolbox를 사용!
URL Toolbox : 도메인명을 쉽게 잘라낼 수 있도록 도와주는 도구
www.test.co.kr에서 www는 호스트명, test는 도메인명(회사, 학교 등 이름), co는 회사의 특성/성격, kr은 국가
0. splunk 접속 및 설정
1) splunk 접속 : http://127.0.0.1:8000 또는 http://localhost:8000
2) 설정-시스템-서버설정-일반설정으로 이동
=> Splunk 서버 이름 : 보통 컴퓨터 이름
=> ★설치경로 : C:\Program Files\Splunk
=> 관리포트 : splunk 웹서버 상에서 접속할 때 사용하는 포트
=> 웹포트 : 8000번 사용
=> Session timeout : 1시간으로 설정. 일정시간 동안 작업이 진행되지 않으면 자동 로그아웃
=> 인덱스 설정 : splunk에서 인덱스는 업로드 되는 로그들의 저장소
=> ★인덱스 저장소 : C:\Program Files\Splunk\var\lib\splunk
어떤 로그를 저장시키면 이 인덱스 저장소에 저장됨. 업로드된 로그들은 업로드 될 때 정규화 시키기 때문에 텍스트 형태가 아님
3) 설정-데이터-인덱스로 이동
여기서는 저장소 주소들을 확인 가능함
$SPLUNK_DB = C:\Program Files\Splunk\var\lib\splunk(인덱스저장소)
1. Index 만들기
1) 인덱스 만들기
=> 인덱스 이름 : dnslog
=> dnslog 폴더가 생성된 것을 확인할 수 있음
2) sample_logs.zip 압축해제
압축해제 후 dns폴더 내 dns.zip을 보면 3개의 파일이 있습니다.
=> zeek이 수집하여 보낸 dns 로그
=> ★데이터 추가시 dns.zip 상태로 업로드해야함
=> dns.zip 압축해제 안해도 됨(구성이 어떻게 생겼나 확인하려고 푼 것)
[dns_0701 파일 내에서 로그 확인]
1561939266.215684 CJhW1t4HAaCozpVxN5 172.16.138.48 60192 8.8.4.4 53 udp
21676 - teredo.ipv6.microsoft.com 1 C_INTERNET 1 A 3 NXDOMAIN F F T F 0 - - F
[로그 설명]
ts(시간,유닉스타임)
Uid(로그ID)
Id_orig_h, Id_orig_p, Id.resp_h, Id.resp_p, Protocol(송신지 IP/Port번호, 수신지 IP/Port번호, 사용 프로토콜)
=> 이 부분은 4계층 헤더 보고 확인 가능(ip, tcp, udp 헤더)
trans_id(질의에 대한 쿼리 번호)
rtt(응답시간) : 질의에서 응답까지 오는 시간! 응답이 안오는 경우 '-' 표시
query(도메인 질의 내용)
qclass, sclass_name(질의클래스, 이름) : 질의에 대한 분류번호
qtype, qtype_name(질의형식, 이름)
=> 이 부분은 DNS query header 보고 확인 가능
rcode, rcode_name(답변코드, 이름) => DNS 포스팅에 자세한 설명있음
AA, TC, RD, RA, Z, Answers, TTLs, Reject
(서버 답변여부, 응답이 잘렸는지 여부, 반복적 요청 및 가능 여부, 예약여부, 답변내역, 도메인 TTL 값, 거부판단)
=> 이 부분은 DNS response header 보고 확인 가능
[정상쿼리]
1561939409.236962 CY0D8z3sQ5NUH1Uh95 172.16.138.48 57679 8.8.4.4 53 udp 11391 0.038607 gms.ahnlab.com
1 C_INTERNET 1 A 0 NOERROR F F T T 0 gms.wip.ahnlab.com,211.115.106.75 167.000000,24.000000 F
=> rtt : rtt가 있다는 것은 질의에 대한 응답이 왔다는 의미
=> query : 도메인 질의 내용
=> rcode, rcode_name : 응답에 대해 문제가 없음
=> Answers : DNS 서버에서 반환한 응답내용
=> TTLs : 질의 답변을 저장하는 캐시보관기간
2. Source Type 지정
1) 설정-데이터-SourceType으로 이동하여 Source Type 만들기
# 쉼표로 구분된 필드이름
ts,uid,src,spt,dst,dpt,proto,trans_id,rtt,domain,qclass,qclass_name,qtype,qtype_name,rcode,rcode_name,AA,TC,RD,RA,Z,answers,TTLs,rejected
=> zeek에서 보낸 DNS 로그들의 필드명
3. 데이터 추가
1) 설정-데이터 추가로 이동
2) 원본 선택
3) 입력 설정
=> 위에서 만든 Source typle 선택
4) 검토 후 제출
=> 제출과 동시에 정규화작업이 진행됨
5) 검색 시작
=> 왼쪽에 실제 dns 필드명이 나타남
=> 그런데 위에서 정의한 dns 필드명보다 많음. 그것들은 splunk 자체에서 자동으로 인식한 필드들!
4. URL Toolbox 설치
=> DNS 도메인명 분석시 작업을 편하게 할 수 있음
1) splunk 메인에서 톱니바퀴 클릭
2) 파일에서 앱 설치 클릭
3) URL Toolbox 파일 업로드
4) 설치 확인
5) 표시 여부 Yes로 변경
6) 메인화면에서 설치 확인
[참고]