SK shieldus Rookies 9기/클라우드 기반 시스템 운영,구축 실무

시스템 운영/구축 실무 8일차 (22/11/02)

ksh_5 2022. 11. 2. 16:35
  • 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 

 

더보기
splunk 설치

$ 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 접속 가능