- DNS 네트워크 현황 분석 항목
❶ Top 10 도메인 현황
- 사용자가 많이 접속한 도메인 10개 보여줌
- 많이 접속한다는 것은 많은 사용자가 접속한다는 뜻이지만 소수의 클라이언트가 많이 접속할 수도 있다는 뜻이기도 함
ex) 동일한 도메인을 10분 동안 60번씩 요청할 경우, 자동화된 프로그램으로 동작한다고 추측 가능
- 네트워크 접속 행위를 분석 시 해당 트래픽이 사용자가 발생시킨 것인지, 자동 프로그램이 일으킨 행위인지를 분석의 기준으로 삼으면 좋음
* 현황 분석은 숫자를 보여주지만, 해당 숫자에서 이상 징후 유추 가능

index=dnslog sourcetype=dnslog dpt=53 domain!="*.arpa" domain!="-"
| eval list="mozilla"
| `ut_parse_extended(domain,list)`
| top showperc=f limit=10 ut_netloc
→ top 명령어 이용해 10개 도메인 추출이며, showperc=f는 각 데이터가 점유하는 비율(%)을 숨기라는 의미

index=dnslog sourcetype=dnslog dpt=53 domain!="*.arpa" domain!="-"
| eval list="mozilla"
| `ut_parse(domain,list)`
| top showperc=f src, ut_netloc
- 내부망 DNS 서버
- 인터넷으로 향하는 도메인과 내부망으로 향하는 도메인을 구분해서 분석해야 함
- 내부망 도메인은 기업이나 조직에서 사용하는 도메인
- 내부용 DNS 서버는 내부 사용자가 인터넷 또는 내부 업무망을 접속 사용
※ 외부 도메인 명 : www.naver.com , www.daum.net , www.google.com
내부 도메인 명 : smtp.sks.com , pops.sks.com 등 회사
- 내부 도메인의 집중 질의
- 공격자가 내부는 탐색하는 lateral movement 공격일 수 있음
- 감염된 PC가 인터넷이 위치하는 C2서버 접속 위한 준비일 수 있음
- 보안 담당자는 인터넷으로 향하는 도메인과 내부망으로 향하는 도메인을 구분해 분석해서 네트워크 접속 유형 파악
※ Lateral movement
- 내부망 공격
- 조직 내부로 침투한 위협이 최종 타깃 시스템을 찾기 위해 내부망에서 이동하는 것
- 횡적 이동 : Client to Client 또는 Server to Server 이동
- 종적 이동 : Client to Server 또는 Server to Client
- 주위 시스템을 감염시키는 것이 목표
❷ Top 10 도메인 요청 IP 현황
- 여러 명이 조회해서 조회 숫자가 많은 도메인과 한 명이 집중해서 조회한 도메인 구분
- 도메인과 해당 도메인을 접속한 송신지 IP 주소를 동시에 검색
❸ 도메인 응답 코드 현황
- 도메인 응답 코드(reply code)는 사용자가 요청한 도메인을 DNS 서버가 응답한 결과 값
- Zeek의 응답 코드 필드는 rcode와 rcode_name
rcode | rcode_name | 설명 |
0 | NoError | 오류없음 |
1 | FormErr | Query 형식 오류 |
2 | SevFail | DNS 서버 자체 의 문제로 실패 |
3 | NXDomain | 사용자가 질의한 도메인명이 존재하지 않음 Non-existent Domain |
4 | Notlmp | DNS 서버가 해당 질의를 지원하지 않음 |
5 | Refused | 정책적인 이유로 질의 거절 |

index=dnslog sourcetype=dnslog domain!="-" rcode_name= "NXDomain"
→ 사용자가 질의한 도메인 명이 존재하지 않음
| top showperc=f src, domain
- NXDomain 또는 Refused는 사용자가 질의한 도메인이 없다는 것
- 도메인명을 잘못 입력한 경우 해당 도메인이 등록되지 않은 경우 오류 발생
- 지속적인 NXDomain 응답은 점검 대상
- NXDomain이 지속적으로 발생하는 경우
- 감염된 PC가 사라진 도메인의 접속 시도
- DGA로 생성된 도메인이 인터넷에 아직 등록되지 않은 경우
* DGA (Domain Generation Algorithms) : 도메인 이름을 주기적으로 동적으로 생성하는 알고리즘
- DNS 이상 징후 분석
❶ 비정상적인 서브 도메인 길이
- 도메인 응답 코드(reply code)는 사용자가 요청한 도메인을 DNS 서버가 응답한 결과 값
- Zeek의 응답 코드 필드는 rcode와 rcode_name

index=dnslog sourcetype=dnslog domain!="-"
| where NOT cidrmatch(domain, "0.0.0.0/0")
| eval list="mozilla"
| `ut_parse(domain,list)`
| where not match(ut_domain, "(microsoft.com|akamaized.net|amazonaws.com)$")
| eval sub_len =len(ut_subdomain)
| search sub_len > 20

index=dnslog sourcetype=dnslog domain!="-"
| where NOT cidrmatch(domain, "0.0.0.0/0")
| eval list="mozilla"
| `ut_parse(domain,list)`
| where not match(ut_domain, "(microsoft.com|akamaized.net|amazonaws.com)$")
| eval sub_len =len(ut_subdomain)
| search sub_len > 20 | table ut_domain, ut_subdomain, sub_len, ut_netloc
❷ 비허가 DNS 사용 / DNS 터널링
- 직접 공격보다는 비정상적인 네트워크 행위 탐지
- 호스트가 내부망에서 지정한 DNS 서버가 아닌 임의의 DNS 서버에 질의를 전송하는 증상
- 전제 조건
- 기업 내부망에 전용 DNS 서버 구축
- 내부 클라이언트나 서버가 반드시 내부망 DNS 서버를 사용하도록 강제
- 목적지가 DNS 서버가 아닌 것과 출발지가 DNS 서버가 아닌 것 추출
- 출발지가 내부 DNS 서버가 아니어도 도메인 질의 대상이 내부 지정 DNS 서버가 아닌
❸ 도메인 엔트로피 값 이용한 탐지
- 엔트로피는 정보의 양을 측정하는 방식
- 자주 발생하지 않은 사건은 정보량이 많다는 것 기반
- 확률 계산 결과 값이 크면 정보량이 많은 것이고 작으면 적은 것
- 자주 발생하지 않은 사건은 정보량이 많음
- 자주 발생하는 일은 정보량이 적음
- 익숙한 단어들로 만들어진 도메인은 정보량이 적음 (엔트로피 값이 작다)
- URL toolbox의 ut_Shannon() 매크로 이용해 엔트로피 계산

index=dnslog sourcetype=dnslog domain!="-"
|where NOT match(domain, "(microsoft.com|akamaized.net|amazonaws.com|addr.|qoo19.jp)$")
| eval list="mozilla"
| `ut_parse(domain,list)`
| `ut_shannon(ut_netloc)`
| eval shannon =round (ut_shannon,2)
| where shannon > 3.9
| eval shannon_str = ut_netloc."/".shannon
| stats count by ut_domain, shannon_str
|stats list(shannon_str) by ut_domain
※ cidrmatch
where NOT cidrmatch(domain, 0.0.0.0/0)
where NOT cidrmatch(0.0.0.0/0, domain)
→ 둘 다 IP 주소인지 아닌지를 찾지 않는다는 걸로 문법상 같다
- Sysmon
자세한 이야기 → 6일차 ( https://shy-109x.tistory.com/35 )

- sysmon 로그 추가

경로 → C:\Program Files\Splunk\var\lib\splunk\httplog

sysmon 디렉터리 생성 후 sysmon.tgz 압축 붙여넣기 한 후 압축 풀기

경로 → C:\Program Files\Splunk\etc\apps\search\local

splunk에서 만들어 두었던 log들 확인 가능
* 유닉스에서도 동일하게 적용

sysmon으로 바꾼 후 저장

splunk을 셧다운하고 켜야 만든 sysmon이 나온다
설정 > 서버 컨트롤 > splunk 다시 시작

설정 > 인덱스
sysmon에 데이터 수가 있어 뜨는 걸 확인 가능
- 엔드포인트 로그
PC | Server |
- 네트워크 출발지로 동작 - 많은 네트워크 접속 행위 발생 - 프로그램 설치/삭제 빈번 발생 - 프로세스 생성/삭제 빈번 발생 - 파일 생성/수정/소멸 많이 발생 |
- 도착지의 임무 수행 - 프로그램의 설치/삭제 등 많이 발생하지 않음 |
- 엔드포인트 로그는 엔드포인트에서 발생하는 이벤트를 보여줌
- 호스트의 동작만 보여주는 것이 아니고, 악성코드에 감염된 호스트 검색 가능
- 위협사냥의 기본 자료 사용
* 위협사냥 : 숨어있는 위협 탐지해 공격 기법과 공격자를 식별하고 제거하는 행위
- 엔드포인트 로그의 관리 어려움
- 엔드포인트 수량이 많아서 대용량 로그 생성
- PC 호스트별, 사용별 로그 수집하고 분류
- PC 이상 징후 분석
❶ 비정상 폴더에서 exe 파일 실행
- 윈도우 실행 파일(시스템 폴더) 위치
- C:\Program Files, C:\Program Files(x86)
- C:\Windows, C:\Window\system32
- 악성코드는 단일 실행 파일로 윈도우 실행파일 폴더에서 설치되지 않음
* 프로그램의 실행 경로를 판단한다면 이상 징후를 판별 가능
- 백도어 프로그램은 윈도우 정상 파일의 대체로 C:\Windows\System32에 설치되기도 함
- 실행 파일의 최초 실행 폴더를 기반으로 탐지
- 인터넷으로 다운로드한 악성코드가 처음부터 시스템 폴더에 복사되지는 않기 때문
- 실행된 프로세스 로그를 기반으로 탐지
- ParentImage="c:\\windows\\explorer.exe“ 지정 ( 검색 위치를 윈도우 탐색기로 지정, 변수정의)
index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational” EventCode=1
→ EventCode =1 : 프로세스 생성/삭제 관련 로그
(CurrentDirectory!="*Program Files*" AND CurrentDirectory!="*system32*") (Image!="system32*" AND Image!="*Program Files*" AND Image!="*SysWOW64*")
→ CurrentDirectory : 실행 파일이 들어있는 디렉터리/ Image 필드 : 실행 경로와 파일명
Program Files, System32, SYsWOW64 등은 검색에서 제외
[ search index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1 | rare CurrentDirectory limit=10 showperc=f showcount=f ]
→ - [ search ] 하위 검색을 나타냄, 2차 검색으로 들어감 (하위 검색을 사용하는 이유? 검색 범위 줄이기)
- 시스템 폴더 외에서 실행되고 있는 파일들을 검색
- 악성코드는 소수만이 감염되므로 rare를 이용 (rare 빈도가 낮은 것들을 최상위에 배치(top반대))
- showperc(점유율)과 showcount(점유 개수)는 보지 않음(false)

index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational"
EventCode=1
(CurrentDirectory!="*Program Files*" AND CurrentDirectory!="*system32*")
(Image!="system32*" AND Image!="*Program Files*" AND Image!="*SysWOW64*")
[ search index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational"
EventCode=1 | rare CurrentDirectory limit=10 showperc=f showcount=f]
| table Image
→ 휴지통에서 파일을 실행 백신과 같은 보안 제품을 우회하기 위해 공격자들이 자주 사용
❷ 파일 실행 후 원본 파일 삭제
- 하드 디스크에 저장된 악성코드는 실행이 되어 메모리에 적재되면 프로세스 상태가 되어 PC들 감염
- 악성코드 파일 실행 후 원본 파일을 삭제
- 파일 본체의 획득이나 분석을 회피하기 위함
* 프로그램을 실행 후 원본 파일을 디스크에서 삭제하는 행위는 정상 행위 아님

- EventCode =1 : 프로세스 생성/삭제 관련 로그
- ParentImage="c:\\windows\\explorer.exe“ 지정 ( 검색 위치를 윈도우 탐색기로 지정, 변수정의)

[ search index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational"
| where NOT isnull(Image) AND NOT isnull(ParentImage) | search CommandLine="* del *"
- 실행 경로상 또는 윈도우 탐색기에서 실행된 파일들만 검색
- NOT isnull(Image) : 실행 경로상의 실행파일이 실행시킨 것 아님
- NOT isnull(ParentImage) : 윈도우 탐색기에서 실행시킨 것이 아님
→ 프로그램이 프로그램을 실행시킨 것 (다른 프로그램에 의해 실행)

index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
ParentImage="c:\\windows\\explorer.exe"
[ search index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational"
| where NOT isnull(Image) AND NOT isnull(ParentImage)
| search CommandLine="* del *"
| table ParentImage
| rename ParentImage AS Image ]
| table Image
❸ 실행 후 네트워크 접속 다수 발생
| stats count(DestinationIp) AS total_count dc(DestinationIp) AS uniq_count by Image
- 다른 과다 접속들을 유발하는 트래픽 프로그램 검색
[ search index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational“ EventCode=3 (DestinationIp!="10.0.0.0/8" AND DestinationIp!="172.16.0.0/12" AND DestinationIp!="192.168.0.0/16")
- 실행 경로가 아닌 곳에서 실행되는 프로세스들을 검색
| stats count(DestinationIp) AS total_count dc(DestinationIp) AS uniq_count by Image
- EventCode=3에서 (네트워크 정보를 가진로그) 인터넷 접속만을 대상으로 검색한다면 목적지 주소가 사설 주소가 아닌 결과

index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
(Image!="C:\\windows*" AND Image!="*Program Files*")
[ search index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=3
(DestinationIp!="10.0.0.0/8" AND DestinationIp!="172.16.0.0/12" AND DestinationIp!="192.168.0.0/16")
| stats count(DestinationIp) AS total_count dc(DestinationIp) AS uniq_count by Image
| where total_count > 50 OR uniq_count > 20
| table Image]
|table Image
❹ 네트워크 Shell 실행
- netsh.exe
- 현재 실행 중인 컴퓨터의 네트워크 구성을 표시하거나 수정할 수 있는 명령줄 스크립팅 유틸리티
- 관리자는 netsh을 이용하여 자동 스크립트를 구성하고 배포

index=sysmon sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| where match(Image, "netsh.exe$")
| where NOT isnull(ParentImage)
| table ParentImage, Image, CommandLine
- splunk server

$ wget -O splunk-9.0.1-82c987350fde-linux-2.6-amd64.deb // 다운 명령어
$ ls

# apt -y install curl
# cd /opt/splunk/bin
# ./splunk enable boot-start

username : splunkadmin
password : 12345678

# ./splunk start

# ./splunk status // splunk 상태 확인

127.0.0.1:8000으로 접속 시 splunk 로그인 창 접속

127.0.0.1:8000으로 접속 시 splunk 접속 가능
'SK shieldus Rookies 9기 > 클라우드 기반 시스템 운영,구축 실무' 카테고리의 다른 글
시스템 운영/구축 실무 7일차 (22/11/01) (0) | 2022.11.01 |
---|---|
시스템 운영/구축 실무 6일차 (22/10/31) (0) | 2022.10.31 |
시스템 운영/구축 실무 5일차 (22/10/28) (0) | 2022.10.28 |
시스템 운영/구축 실무 4일차 (22/10/27) (0) | 2022.10.27 |
시스템 운영/구축 실무 3일차 (22/10/26) (0) | 2022.10.26 |