본문 바로가기
분석 TIP/동적분석

Sysmon 통한 리눅스 동적 분석

by 두유노우컴퓨터 2025. 3. 27.

Sysmon for Linux는 Microsoft에서 만든 시스템 모니터링 도구로, 리눅스 환경에서도 보안 이벤트 및 시스템 동작을 상세하게 모니터링할 수 있다.

 

https://github.com/microsoft/SysmonForLinux

 

GitHub - microsoft/SysmonForLinux: Sysmon for Linux

Sysmon for Linux. Contribute to microsoft/SysmonForLinux development by creating an account on GitHub.

github.com

 

칼리 리눅스는 Debian 기반이므로 Ubuntu/Debian 패키지(sysmonforlinux_1.3.5_amd64.deb)를 설치하면 된다.

cd ~/Desktop
wget https://github.com/microsoft/SysmonForLinux/releases/download/1.3.5.0/sysmonforlinux_1.3.5_amd64.deb
sudo dpkg -i sysmonforlinux_1.3.5_amd64.deb   #설치
sudo apt-get install -f   #의존성 설치

sysmon -h   #설치 확인

 

해당 다운로드 경로나 파일 이름 매번 바뀔 수 있으므로 다운로드 사이트에서 직접 파일을 확인해보고 수정하자.

sysmon 설치 성공

 

기본적으로 설치시 sysmon_default.xml이 없기 때문에 직접 파일을 만들고 작성해 줘야 한다.

nano ~/sysmon_default.xml   #설정 파일 생성
더보기

<Sysmon schemaversion="4.81">
  <HashAlgorithms>SHA256</HashAlgorithms>

  <EventFiltering>

    <ProcessCreate onmatch="include" />
    <NetworkConnect onmatch="include" />
    <FileCreate onmatch="include" />
    <FileCreateTime onmatch="include" />
    <FileDelete onmatch="include" />

  </EventFiltering>
</Sysmon>

기존 설정이 있다면 제거 해주고, 변경된 설정을 다시 적용하여 sysmon을 동작한다.

sudo sysmon -u force   #기존 설정 제거
sudo sysmon -accepteula -i ~/sysmon_default.xml   #새로운 설정 적용 및 시작

systemctl status sysmon   #서비스 확인
ps aux | grep sysmon   #프로세스 확인

sudo systemctl start sysmon	  #시작
sudo systemctl stop sysmon   #중지
sudo systemctl enable sysmon   #자동 시작 설정
sudo systemctl disable sysmon   #자동 시작 해제

 

칼리 리눅스는 /var/log/syslog를 기본으로 사용하지 않기 때문에 journald를 통해 로그를 확인해야 한다.

sudo journalctl -f -u sysmon   #실시간 로그 보기
sudo journalctl -u sysmon > ~/sysmon_logs.txt   #전체 로그를 txt로 저장

 

전체 로그를 뽑아도 되지만, 특정 시점만 뽑고 싶다면 아래 스크립트를 사용해 보자. 실행을 위해 만든 2개의 파일은 실행 권한을 주며, 결과는 XML 형태로 저장된다.

 

chmod +x sysmon_start.sh sysmon_stop.sh

 

sysmon_start.sh

#!/bin/bash

echo "[*] Starting Sysmon log capture..."

# Save start time
START_TIME=$(date --iso-8601=seconds)
echo "$START_TIME" > /tmp/sysmon_start_time.txt
echo "[+] Start time recorded: $START_TIME"

# Rotate and vacuum old logs
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s

echo "[*] Ready. Run your malware sample now."

 

sysmon_stop.sh

#!/bin/bash

echo "[*] Stopping Sysmon log capture and saving full log as XML..."

# Check start time
if [ ! -f /tmp/sysmon_start_time.txt ]; then
  echo "[!] Start time not found. Please run sysmon_start.sh first."
  exit 1
fi

START_TIME=$(cat /tmp/sysmon_start_time.txt)
END_TIME=$(date --iso-8601=seconds)
NOW=$(date "+%Y%m%d_%H%M%S")

OUTPUT="syslog_${NOW}.xml"
echo "[+] Saving all logs to $OUTPUT"

{
  echo '<?xml version="1.0" encoding="UTF-8"?>'
  echo "<SysmonLogs>"

  journalctl -u sysmon --since "$START_TIME" --until "$END_TIME" --no-pager | \
    while read -r line; do
      if [ -n "$line" ]; then
        ESCAPED=$(echo "$line" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g')
        echo "  <Event>$ESCAPED</Event>"
      fi
    done

  echo "</SysmonLogs>"
} > "$OUTPUT"

echo "[✓] Full log saved to: $OUTPUT"
rm /tmp/sysmon_start_time.txt

 


 

특정 파일에 대한 로그를 쌓고 싶다면 sysmon_default.xml 필터 규칙을 변경하고 재시작 하면 된다. 

 

(/usr/bin/python3 파일과 연관된 모든 분석 필터 예시)

더보기

<Sysmon schemaversion="4.20">
  <EventFiltering>

    <ProcessCreate onmatch="include">
      <Image condition="is">/usr/bin/python3</Image>
      <ParentImage condition="is">/usr/bin/python3</ParentImage>
      <CommandLine condition="contains">python3</CommandLine>
    </ProcessCreate>

    <FileCreate onmatch="include">
      <Image condition="is">/usr/bin/python3</Image>
    </FileCreate>

    <NetworkConnect onmatch="include">
      <Image condition="is">/usr/bin/python3</Image>
    </NetworkConnect>

    <ProcessTerminate onmatch="exclude"/>
    <ImageLoad onmatch="exclude"/>
    <DriverLoad onmatch="exclude"/>
    <FileCreateTime onmatch="exclude"/>
    <FileDelete onmatch="exclude"/>
    <PipeEvent onmatch="exclude"/>
    <ClipboardChange onmatch="exclude"/>
    <CreateRemoteThread onmatch="exclude"/>
    <ProcessAccess onmatch="exclude"/>

  </EventFiltering>
</Sysmon>

필터 적용 확인은 'sudo sysmon -c' 명령을 주면 된다.

sysmon 필터 정책 확인

 

현재 지원하는 버전의 XML 스키마 필드를 확인하고 싶다면 아래와 같은 명령어를 치면 된다.

sudo sysmon -s > sysmon_schema.xml