보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

Sysinternals System Monitor(Sysmon)을 이용한 System 탐지방안

2017.03.13

25,857

서비스사업본부 보안분석팀 김미희


1. 개요

ICMB(IoT, Cloud, Mobile, Big Data)의 증가로 인해 IT환경이 복잡해지면서 개인정보 및 기업의 정보유출 위험이 높아짐에 따라 내부보안의 필요성이 증가되고 있다. 기업에서는 정보유출 위험을 최소화하고 내부보안을 강화하기 위한 방안으로 EDR(Endpoint Detection and Response)등을 이용하여 사용자의 이상행위를 분석하고 있다.

EndUser의 보안성을 강화하기 위해서는 Anti-Virus, NAC등의 다양한 제품이 존재하지만, 최근에는 사용자의 행위분석 기반의 상관관계 분석이 중요해짐에 따라 EndUser에서 발생하는 이벤트 수집이 중요해 졌다. 이번 호에서는 시스템 데이터 수집도구인 Microsoft의 Sysinternals에서 제공하는 System Monitor(Sysmon)을 이용한 시스템 탐지방안에 대해서 알아보고자 한다.


2. Introduction of Sysmon

Sysmon은 기존의 윈도우 이벤트 로그를 보완하기 위한 도구로 Sysinternals에서 다운로드가 가능하다. 현재 최신버전은 Sysmon v5.02 (Published: November 23, 2016)으로 Clinet는 Windows 7이상, Server는 Windows Server 2012이상에서 사용이 가능하다.


[그림 1] Sysmon 실행 화면


Sysmon을 구동하기 위해서는 관리자 권한이 필요하며, 장치 드라이버 형태로 서비스가 실행되기 때문에 자동실행 된다. Sysmon은 다음과 같은 기능을 제공한다.

현재 프로세스와 상위 프로세스 전체에 대한 프로세스 생성여부를 기록

​프로세스 이미지 파일의 해쉬를 제공하며 동시에 여러 개의 해쉬 사용 가능 (기본적으로 SHA1을 적용되며, MD5, SHA256, IMPHASH도 사용 가능)
​네트워크 이벤트는 네트워크 연결을 시도하는 프로세스 정보, IP주소, PORT 정보, 호스트 이름 등을 기록
​파일 생성시간의 변화를 감지하여 파일이 실제 생성된 시기를 파악하여 기록

​특정 이벤트를 동적으로 포함시키거나 제외시키는 필터링 규칙 적용 가능​


[표 1] Sysmon 기능


3. Install of Sysmon

Sysmon에서는 3가지 옵션이 존재하며, 설치하기 위해서는 2가지 방법이 존재한다.

1) 기본 설정으로 설치

    Install:    Sysmon.exe -i []

                  [-h <[sha1|md5|sha256|imphash|*],...>] [-n []] [-l []
2) 옵션선택 및 사용자 정의 설정파일을 이용한 설치
    Configure:  Sysmon.exe -c []
                  [--|[-h <[sha1|md5|sha256|imphash|*],...>] [-n []] [-l []]]
3) 삭제

    Uninstall:  Sysmon.exe –u​


[표 2] 옵션에 따른 Sysmon 설치 및 삭제 방법


1) 기본 설정으로 설치

“Sysmon.exe –i [options]”명령어를 사용하면 기본 설정으로 설치되어 프로세스 생성 및 종료, 드라이버 로드, 파일 생성 시간, RawAccessRead, CreateRemoteThread, Sysmon 서비스 상태 변화 항목을 SHA1해쉬로 저장되게 된다. 

설치할 때 -accepteula옵션을 사용하면 소프트에어 사용자 동의인 EULA(End User License Agreement)를 자동 수락된 상태에서 설치가 가능하다.  Sysmon 설치 후에 옵션을 변경하기 위해서는 “Sysmon.exe -u”명령어를 이용하여 기존에 설치되어 있는 Sysmon 서비스 및 드라이버를 삭제 후 “Sysmon.exe –i [Configuration File]”명령어를 이용하여 재설치 하거나, “Sysmon.exe -c [Configuration File]”명령어를 이용하여 설정을 업데이트 해주면 된다.

설치되어 있는 설정 정보를 확인하기 위해서는 “Sysmon.exe -c”명령어를 사용하면 설정된 정보를 확인이 가능하며 자세한 정보는 [표 4-5] Sysmon 옵션 목록을 참고하면 된다.


[그림 2] Sysmon 설치 화면 (-accepteula옵션 사용)


Sysmon을 기본설치 하게 되면 “HKEY_LOCAL_MACHINESYSTEMCurrentSetServices”경로에 Sysmon과 SysmonDrv가 설치되게 된다. User Mode에서는 구동하기 위해서 Sysmon이 설치되고 Kernel Mode에서 구동하기 위해서 SysmonDrv가 설치된다.


[그림 3] Sysmon설치 시 드라이버 구조

설치된 Sysmon은 [그림 4]처럼 Sysmon이라는 이름으로 서비스에 등록되어 자동실행 되게 된다.


[그림 4] 서비스에 Sysmon 서비스가 등록되어 자동실행된 화면

아무런 옵션 없이 기본설치를 하게 되면 [표 3]과 같은 정보가 이벤트화되어 기록되게 된다.

Process create (with SHA1)

Process terminate
Driver loaded
File creation time changed
RawAccessRead
CreateRemoteThread

Sysmon service state changed​


[표 3] Sysmon 기본설치 시 기록되는 이벤트 목록

Sysmon을 통해 생성된 이벤트 로그는 윈도우 비스타 이후부터 추가된 윈도우 로그가 저장되는 경로에 추가되며, Sysmon 이벤트 로그는 일반 윈도우 이벤트 로그와 마찬가지로 이벤트 뷰어를 통해서 확인이 가능하다.
Sysmon은 기본적으로 64 MB (65,536 KB)의 로그 사이즈와 로그 백업은 덮어쓰기 형태로 백업하게 된다.

%SystemRoot%System32WinevtLogsMicrosoft-Windows-Sysmon%4Operational.evtx​ 


[표 4] Sysmon Event 저장 경로

2) 옵션선택 및 사용자 정의 설정파일을 이용한 설치

Symon에서는 해쉬 설정 및 설치, 삭제 등을 포함하여 총 6가지의 옵션을 사용할 수가 있다.

옵션

내용

-c

설치된 Sysmon 드라이버의 구성을 업데이트 하거나 다른 인수가 제공되지 않은 경우 현재 구성을 폐기

필요한 경우 설정파일 호출

-h

이미지 식별에 필요한 해쉬 알고리즘을 설정 (MD5, SHA1, SHA256, IMPHASH제공, Default : SHA1)

전체 알고리즘 4개를 모두 사용하고자 하는 경우는 *으로 설정해서 사용

-i

서비스 및 드라이버 설치. 필요한 경우 설정파일 호출

-l

로딩된 모듈을 기록하고 필요한 경우 프로세스 목록을 추적

이벤트 매니페스트를 설치(서비스 설치 시에도 수행)

-m

이벤트 매니페스트를 설치(서비스 설치 시에도 수행)

-n

네트워크 연결 로그 기록 및 필요한 경우 프로세스 목록 추적 가능

-r

인증서 서명 해지여부를 확인

-u

서비스 및 드라이버 삭제

  

[표 5] Sysmon 옵션 목록


Sysmon의 옵션을 이용해서 프로세스 생성, 프로세스 이미지의 SHA256 해쉬 값, 네트워크 연결 정보를 이벤트로 저장하고 싶은 경우 다음과 같이 명령어를 설정하면 된다.

 Sysmon.exe -i -h sha256 -n ​


[표 6] Sysmon 명령어 실행 화면


[표 6]의 명령어를 이용하면 다음 [그림 4-5]와 같이 프로세스 생성에 대한 이벤트 로그를 확인할 수 있다.


[그림 5] Sysmon 이벤트로그 화면(프로세스 생성)


네트워크 접속정보에 대한 기록은 [그림 6]과 같이 SourceIP, DestinationIP 등 상세한 네트워크 접속정보에 대해서 확인할 수 있다.


[그림 6] Sysmon 이벤트로그 화면(네트워크 접속정보)


4. Sysmon Events Filtering

Sysmon의 발생되는 이벤트는 이벤트 종류에 따라서 Event ID와 Event Name이 분류되어 있다. Sysmon v5.02에서는 프로세스 생성, 삭제 등을 포함하여 16개의 Event ID로 분류하고 있으며, 이 정보를 토대로 침해사고 분석이나 SIEM에 활용할 수 있다.

Event

ID

Event Name

설명

1

Process creation

프로세스 생성 정보 제공

2

A process changed a file creation time

프로세스에 의해 파일의 생성시간이 수정될 때 등록

공격자가 백도어의 파일 생성시간을 변경하여 운영체제에 의해 설치된 것으로 변조하는 것을 방지할 수 있음

3

Network connection

시스템에서 발생하는 TCP/UP 네트워크 접속정보 기록

ProcessId, PorcessGUID 필드를 통해서 프로세스에 연결되며 호스트명, IP주소, PORT 번호 등의 정보 제공

4

Sysmon service state changed

Sysmon 서비스의 상태 제공(시작 또는 중지)

5

Process terminated

프로세스 종료 정보 제공

6

Driver loaded

시스템에 로드되는 드라이브 정보 제공

7

Image loaded

특정 프로세스에서 모듈이 로드될 때 기록되며 기본적으로 사용되지 않기 때문에 –I 옵션으로 설정필요

8

CreateRemoteThread

프로세스가 다른 프로세스에서 스레드를 생성하는지 감시

9

RawAccessRead

드라이브에서 읽기 작업을 수행하는지 감시

10

ProcessAccess

프로세스에서 다른 프로세스에 접근 시 기록

11

FileCreate

파일 생성 및 덮어쓰기 시에 기록

12

RegistryEvent

(Object create and delete)

레지스트리 이벤트의 값 수정, 삭제, 설정, 이름변경 등을 기록

13

RegistryEvent (Value Set)

14

RegistryEvent

(Key and Value Rename)

15

FileCreateStreamHash

파일스트림 생성 시 스트림 내의 해쉬를 기록

255

Error

Sysmon에서 오류가 발생 시 생성



[표 7] Sysmon Event and Filtering


Sysmon의 이벤트는 XML이나 Powershell을 결합하면 좀더 손쉽게 다양한 기능을 수행할 수 있다. Sysmon에서 저장되는 이벤트 정보(프로세스나 네트워크 정보 등)을 토대로 악성코드 여부를 판단하거나 침해사고 분석용도로 사용하기 위해서는 이벤트를 필터링해서 사용하는 것이 좋다.

이벤트를 필터링 하는 방법 중 하나는 XML을 이용하여 필터링을 구현하는 방식이다. 필터링을 하기 위해서는 이벤트 별로 매칭되는 Filter Tag정보인 [표 4-8]과 [표 4-9]를 이용하여 XML파일을 구성하면 된다.

Event ID

Tag

Event

1

ProcessCreate

Process Create

2

FileCreateTime

File creation time

3

NetworkConnect

Network connection detected

5

ProcessTerminate

Process terminated

6

DriverLoad

Driver Loaded

7

ImageLoad

Image loaded

8

CreateRemoteThread

CreateRemoteThread detected

9

RawAccessRead

RawAccessRead detected

10

ProcessAccess

Process accessed

11

FileCreate

File created

12

RegistryEvent

Registry object added or deleted

13

RegistryEvent

Registry value set

14

RegistryEvent

Registry object renamed

15

FileCreateStreamHash

File stream created


[표 8] Sysmon Event filtering을 위한 Filter Tag

XML에서 Tag를 사용하기 위해서는 onmatch필터를 사용한다. 이벤트가 일치하게 되면 onmatch 필터가 적용되게 되며 “onmatch”의 속성인 “include”와 “exclude”를 이용하여 이벤트를 포함하거나 제외할 수 있다. 

“include”속성을 사용하면 필터링을 설정한 값과 일치하는 이벤트만 저장되고, 반대로 “exclude”속성을 사용
하면 필터링을 설정한 값을 제외한 이벤트만 저장된다. 필터링 구문 작성시에는 “exclude”속성부터 적용 후에 “include”속성을 적용해야 한다. 


[그림 7] “include”와 “exclude”를 이용한 이벤트 필터링 예시


각 필터구문은 0개 이상의 규칙을 사용할 수가 있다. Filter Tag 아래에는 각 Tag들의 이벤트 필드 이름이 오게 된다. 동일 필드 이름에 대한 필터는 OR조건으로 동작하게 되고, 다른 필드 이름을 지정하는 경우에는 AND조건으로 동작되게 된다. 필드 규칙은 [표 4-9]를 이용하여 대소문자 구분 없이 조건을 설정할 수 있게 된다.

Condition

설명

사용예시

Is

기본값, 값이 동일

127.0.0.1

is not

값이 상이

not">127.0.0.1

Contains

필드에 값이 존재

windows

Excludes

입력란에 값이 미존재

<NetworkConnect default="exclude">

begin with

필드에 해당 값으로 시작

"C:Program FilesGoogle"

end with

필드에 해당 값으로 종료

<DestinationHostname condition="end with">jon.glassDestinationHostname>

less than

사전식으로 비교 시 0보다 작은 경우

<DestinationPort condition="less than">proxy portDestinationPort>

more than

사전식으로 비교 시 0보다 큰 경우

<DestinationPort condition="more than">proxy portDestinationPort>

Image

이미지 경로가 일치하는 경우

(이미지의 전체경로나 이미지 이름으로 가능,
예를들어 lsass.exe 또는 c:windowssystem32lsass.exe 사용 가능)

chrome.exe


[표 9] Sysmon 필드 조건


Sysmon에서는 XML과 같은 Configuration File을 별도로 사용이 가능하다. Configuration File은 Sysmon의 Tag에서 Schemaversion속성으로 사용된다. Sysmon의 현재 Schemaversion버전을 확인하기 위해서는 “Sysmon.exe -? config”명령어를 사용하면 확인할 수 있다.


[그림 8] Symon Schema Version 확인

Schemaversion버전은 Sysmon 바이너리 버전과는 독립적이며, 이전 버전의 Configuration File의 사용도 가능하다. 현재 적용된 Schemaversion버전보다 낮은 Schemaversion을 사용하는 경우에도 정상적으로 적용되는 것을 확인할 수 있다.


[그림 9] Schemaversion v3.20을 적용한 경우(상단) / Schemaversion v3.10을 적용한 경우(하단)


Sysmon은 XML과 같이 별도의 Configuration File을 이용하여 필터링을 수행하지 않는 경우 설정된 필터링에 대한 Export기능이 존재하지 않기 때문에 Sysmon을 이용하여 필터링을 수행하기 위해서는 되도록 별도의 Configuration File을 이용하여 설정하는 것을 추천한다.

다음으로 시스템 로그를 필터링 하기 위해 이벤트 필터 조건이 설정된 XML파일을 이용한 예시를 살펴보자.
[그림 10]은 microsoft와 Windows, system 로그는 제외하고 chrome.exe, iexplore.exe, firefox.exe에서 발생하는 8080포트에서 발생하는 FileCreateTime, RawAccessRead, ProcessTerminate 이벤트에 대해서 Sysmon에서 지원하는 알고리즘 4종으로 해쉬 값(*로 표기하는 경우 프로세스 이미지에 대한 MD5, SHA1, SHA256, IMPHAS 해쉬 생성)이 로깅되도록 하는 XML 설정파일이다.


[그림 10] XML을 이용한 Sysmon 필터링

Sysmon에서 XML 설정파일을 이용하기 위해서는 Sysmon이 설치되지 않고 처음 설치 시 “sysmon -accepteula -i config.xml”명령어를 이용하고, Sysmon이 구동 중인 상태에서 XML 설정파일을 적용하는 경우에는 “Sysmon.exe –c config.xml”명령어를 사용하여 설정을 업데이트하면 된다. XML 설정파일이 정상적으로 적용된 경우에는 [그림 11]과 같이 이벤트가 로깅되게 된다.


[그림 11] XML을 이용한 Sysmon 필터링 결과 화면


5. Sysmon을 이용한 활용방안

지금까지 Sysmon에 대한 기본적인 사용법에 대해서 알아보았다면 Sysmon을 이용한 필터링 적용 사례들에 대해서 몇 가지 설명하고자 한다.

1) 시스템정보를 통한 악성코드 탐지

Sysmon을 이용한 대표적인 이용 방법은 악성코드 탐지다. 탐지를 위해서 CQUREAcademy에서 제공하는 프로세스 해쉬 정보 저장 프로그램인 CQSysmonHash 도구와 VirusTotal API를 이용한 의심스러운 파일 검색도구인 Virustotalchecker 도구 2종을 사용하여 탐지하였다.

CQSysmonHash를 다운로드(https://4f2bcn3u2m2u2z7ghc17a5jm-wpengine.netdna-ssl.com/wp-content/uploads/2016/10/cqsysmonhashextract.zip)받으면 [그림 4-12]과 같이 3가지 옵션을 사용할 수 있다.
CQSysmonHash를 이용하여 Sysmon의 이벤트를 txt형식으로 저장하여 실행하면 쉼표(,)로 구분되어 프로세스 별 해쉬(SHA1) 결과물이 저장되게 된다.


[그림 12] CQSysmonHash 도구 실행 화면


[그림 13] CQSysmonHash 실행 및 결과화면


CQSysmonHash도구를 이용하여 프로세스별 해쉬 값을 저장한 파일이 생성되면, VirusTotal API를 이용하여 악성여부를 조회하는 Virustotalchecker도구를 통해 악성여부를 진단할 수 있다.


[그림 14] virustotalchecker 실행 화면

Virustotalchecker를 사용하기 위해서는 VirusTotal사이트에서 제공하는 “API Key”가 필요하다. VirusTotal에 무료 회원가입을 하게 되면 1분당 4개의 파일 조회가 가능한 “API Key”를 제공받을 수 있으며, 더 많은 정보를 질의 하기 위해서는 별도의 구매가 필요하다. Virustotalchecker를 다운로드 받은 후 Settings.xml파일에서 에 제공받은 “API Key”를 삽입하면 된다.


[그림 15] virustotalchecker의 Settings.xml 파일 화면


[그림 16] virustotalchecker 실행 결과화면


2) IOC(Indicator Of Compromise)

Sysmon을 이용한 가장 좋은 사례는 이벤트를 침해사고의 지표로 사용하는 것이다. 공격자가 공격대상의 시스템에 침투하여 공격 목표인 시스템으로 이동하는 Lateral Movement과정에서 윈도우 계정의 암호를 획득하는 도구인 Mimikatz를 이용하여 공격흔적을 분석하고자 한다.

첫 번째로는 Mimikatz도구를 시스템에서 실행하여 Sysmon의 이벤트를 확인하는 경우다. 이런 경우 Mimikatz의 실행경로, 프로세스명, 프로세스의 해쉬값 등을 이용하여 Mimikatz가 실행된 것을 확인할 수 있다.


[그림 17] Mimikatz 실행화면


[그림 18] Mimikatz 실행 시 Sysmon 결과 화면


두 번째는 Powershell기반의 Mimikatz를 시스템에서 실행하여 Sysmon의 이벤트를 확인하는 경우다. 이런 경우 기존 Mimikatz 도구(SHA256 : f3e0179687b1f9f40a73abc6b1126141542ad1e3e5c999ea69ce79ee7f90a2f2)를 사용하면 [그림 19]와 같이Virustotal에서 탐지율을 확인해본 결과 상당수의 백신에서 탐지되는 것을 확인할 수 있다. 
그러나 Powershell로 제작된 Mimikatz 도구(SHA56 : 608662a5f94380aea362eafac46fc6324aa95795148a41664187969499341976)를 사용하면 [그림 20]과 VirusTotal에서 탐지율을 확인해보면 일반 Mimikatz와 동일 기능을 제공함에도 불구하고 Powershell기반을 사용하면서 상대적으로 탐지율이 낮아지게 된다.

따라서 공격자들은 기존에 Mimikatz도구를 사용하는 것이 아니라 Powershell기반의 도구로 사용해서 공격하는 형태가 증가되었다. 이와 같은 공격을 Sysmon을 이용하여 탐지하기 위해서는 다음과 같이 수행하면 된다.



[그림 19] Mimikatz의 VirusTotal 조회 결과



[그림 20] Powershell기반의 Mimikatz의 VirusTotal 조회 결과


홈페이지(http://is.gd/oeoFuI, https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1)에 존재하는 Powershell기반의 공격코드를 다운로드 받아서 실행시키는 Powershell 명령어를 사용하면 [그림 21]과 같이 Powershell기반의 Mimikatz파일 다운로드 받아 실행시키는 것을 확인할 수 있다.



[그림 21] Powershell을 이용한 Mimikatz 실행 화면


[그림 21]과 같이 공격명령어를 사용하면 Sysmon에서는 [그림 4-22]와 같이 “CommandLine”에서 실행한 명령어 구문을 확인 가능하게 되고 이를 토대로 Mimikatz도구를 실행여부를 인지할 수 있게 된다.



[그림 22] Powershell을 이용한 Mimikatz 실행 후 Sysmon 결과 화면


6. 결론

지금까지 Sysmon의 사용법과 간단한 활용방안에 대해서 살펴보았다. Sysmon을 활용하면 기존의 이벤트로그에서 제공하던 로그의 범위를 확장하여 사용함으로써 악성코드 탐지 등의 EDR(Endpoint Detection and Response)용도나 IOC(Indicator Of Compromise, 침해지표)로 사용할 수 가 있다.

Sysmon이 제공하는 이벤트 로깅 범위가 상당히 넓고 다양하기 때문에 Powershell이나 SIEM등을 연동하여 사용하면 보다 다양하게 활용할 수 있을 것이다.


7. 참고자료

[1] Windows Sysinternals Sysmon : https://technet.microsoft.com/en-us/sysinternals/dn798348.aspx
[2] Spotting the Adversary with Windows Event Log Monitoring : http://www.redblue.team/2015/09/spotting-adversary-with-windows-event.html
[3] Sysmon – 이벤트 로그 강화  http://forensic-proof.com/archives/6398
[4] Sysinternals Sysmon unleashed : https://blogs.technet.microsoft.com/motiba/2016/10/18/sysinternals-sysmon-unleashed/
[5] Adversarial Tactics, Techniques & Common Knowledge : https://attack.mitre.org/wiki/Main_Page
[6] Sysmon: how to set up, update and use? : https://cqureacademy.com/blog/server-monitoring/sysmon
[7] .NET Framework 설치 : https://msdn.microsoft.com/ko-kr/library/5a4x27ek(v=vs.110).aspx
[8] virustotalchecker : https://github.com/woanware/virustotalchecker
[9] Tracking hackers on Your Network with Sysinternals Sysmon – RSA2016 : https://www.rsaconference.com/writable/presentations/file_upload/hta-w05-tracking_hackers_on_your_network_with_sysinternals_sysmon.pdf
[10] A Threat Hunter Himself : https://2016.zeronights.ru/wp-content/uploads/2016/12/ZN16-KHS-Th_Soldatov.pdf
[11] Sysmon - The Best Free Windows Monitoring Tool You Aren't Using : http://909research.com/sysmon-the-best-free-windows-monitoring-tool-you-arent-using/
[12] Invoke-Mimikatz : https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1