본문 바로가기
운영체제 (LNX,WIN)

Linux 시스템에서 Sysmon을 통한 지속성 탐지 모니터링

by 날으는물고기 2024. 8. 16.

Linux 시스템에서 Sysmon을 통한 지속성 탐지 모니터링

Lead Microsoft Engineer Kevin Sheldrake Brings Sysmon to Linux

Sysmon(System Monitor)은 Microsoft의 도구로, 시스템에서 실행된 프로세스, 네트워크 연결, 파일 생성 등 다양한 이벤트를 기록하는 데 사용됩니다. 원래 Windows용으로 개발되었으나, 최근에는 Linux 버전도 제공되고 있습니다. Sysmon for Linux는 eBPF를 사용하여 시스템 콜을 모니터링하고, 높은 유연성과 표현력을 가진 규칙 정의를 통해 다양한 보안 이벤트를 기록할 수 있습니다.

설치 및 기본 설정

  1. Sysmon for Linux 설치
    Sysmon for Linux는 소스 코드로 제공되므로, 컴파일하여 설치해야 합니다.
    git clone https://github.com/Sysinternals/SysmonForLinux.git
    cd SysmonForLinux
    make
    sudo make install
  2. 구성 파일 작성
    Sysmon은 XML 기반의 구성 파일을 사용합니다. 기본적으로 sysmon-config.xml 파일을 작성하여 필요한 이벤트 필터링 규칙을 정의합니다.
    <Sysmon schemaversion="4.20">
        <EventFiltering>
            <ProcessCreate onmatch="include"/>
            <FileCreate onmatch="include"/>
            <NetworkConnect onmatch="include"/>
        </EventFiltering>
    </Sysmon>
  3. Sysmon 서비스 시작
    이 명령어는 EULA를 수락하고, 구성 파일을 적용하여 Sysmon을 설치 및 시작합니다.
    sudo sysmon -accepteula -i sysmon-config.xml
  4. 로그 확인
    Sysmon 로그는 /var/log/syslog에 기록됩니다. 로그를 확인하려면 다음 명령어를 사용할 수 있습니다.
    sudo cat /var/log/syslog | grep Sysmon

Sysmon 규칙 정의

Sysmon의 규칙 정의는 매우 유연하며, 다양한 조건을 기반으로 이벤트를 필터링할 수 있습니다. 주요 이벤트 유형과 예제 규칙은 다음과 같습니다.

  1. 프로세스 생성 이벤트 (ProcessCreate)
    프로세스 생성 이벤트는 시스템에서 새로운 프로세스가 생성될 때 기록됩니다.
    <ProcessCreate onmatch="include">
        <Rule groupRelation="or">
            <Image condition="contains any">/bin/bash;/usr/bin/python</Image>
            <User condition="is">root</User>
        </Rule>
    </ProcessCreate>
  2. 파일 생성 이벤트 (FileCreate)
    파일 생성 이벤트는 시스템에서 새로운 파일이 생성될 때 기록됩니다.
    <FileCreate onmatch="include">
        <Rule groupRelation="or">
            <TargetFilename condition="begin with">/etc/cron.d</TargetFilename>
            <User condition="is">root</User>
        </Rule>
    </FileCreate>
  3. 네트워크 연결 이벤트 (NetworkConnect)
    네트워크 연결 이벤트는 시스템에서 네트워크 연결이 생성될 때 기록됩니다.
    <NetworkConnect onmatch="include">
        <Rule groupRelation="or">
            <DestinationPort condition="is">22</DestinationPort>
            <User condition="is">www-data</User>
        </Rule>
    </NetworkConnect>

Sysmon 이벤트 필드 설명

Sysmon 이벤트는 다양한 필드를 포함하며, 각각의 필드는 특정한 정보를 제공합니다. 주요 필드는 다음과 같습니다.

  1. ProcessCreate 이벤트 필드
    • UtcTime: 이벤트 발생 시간
    • ProcessGuid: 프로세스의 전역 고유 식별자
    • ProcessId: 프로세스 ID
    • Image: 실행 파일의 경로
    • CommandLine: 실행된 명령어
    • User: 프로세스를 실행한 사용자
    • LogonId: 로그온 ID
    • ParentProcessId: 부모 프로세스 ID
    • ParentCommandLine: 부모 프로세스의 명령어
  2. FileCreate 이벤트 필드
    • UtcTime: 이벤트 발생 시간
    • ProcessGuid: 이벤트를 트리거한 프로세스의 전역 고유 식별자
    • ProcessId: 이벤트를 트리거한 프로세스 ID
    • Image: 이벤트를 트리거한 실행 파일의 경로
    • TargetFilename: 생성된 파일의 경로
    • User: 파일을 생성한 사용자
  3. NetworkConnect 이벤트 필드
    • UtcTime: 이벤트 발생 시간
    • ProcessGuid: 이벤트를 트리거한 프로세스의 전역 고유 식별자
    • ProcessId: 이벤트를 트리거한 프로세스 ID
    • Image: 이벤트를 트리거한 실행 파일의 경로
    • User: 네트워크 연결을 생성한 사용자
    • SourceIp: 소스 IP 주소
    • SourcePort: 소스 포트
    • DestinationIp: 목적지 IP 주소
    • DestinationPort: 목적지 포트

Sysmon을 활용한 지속성 탐지 예제

  1. 웹쉘 탐지
    웹쉘은 웹 서버에 업로드된 악성 스크립트로, 공격자가 원격에서 명령을 실행할 수 있게 합니다. 웹쉘 탐지를 위해 Sysmon을 사용할 수 있습니다.
    <ProcessCreate onmatch="include">
        <Rule groupRelation="or">
            <User condition="is">www-data</User>
            <Image condition="contains any">/bin/bash;/bin/dash;/bin/sh</Image>
        </Rule>
    </ProcessCreate>
  2. 크론 작업 모니터링
    공격자는 지속성을 위해 크론 작업을 사용할 수 있습니다. /etc/cron.d 디렉토리의 파일 생성을 모니터링하여 이를 탐지할 수 있습니다.
    <FileCreate onmatch="include">
        <Rule groupRelation="or">
            <TargetFilename condition="begin with">/etc/cron.d</TargetFilename>
            <User condition="is">root</User>
        </Rule>
    </FileCreate>
  3. 네트워크 연결 모니터링
    공격자는 원격으로 시스템에 접속하기 위해 네트워크 연결을 사용할 수 있습니다. 특정 포트로의 네트워크 연결을 모니터링하여 이를 탐지할 수 있습니다.
    <NetworkConnect onmatch="include">
        <Rule groupRelation="or">
            <DestinationPort condition="is">22</DestinationPort>
            <User condition="is">www-data</User>
        </Rule>
    </NetworkConnect>

Sysmon for Linux는 높은 유연성과 강력한 규칙 정의를 통해 다양한 보안 이벤트를 모니터링하고 기록할 수 있는 강력한 도구입니다. 이를 통해 시스템의 지속성을 탐지하고, 보안을 강화할 수 있습니다. 적절한 규칙을 정의하고 주기적으로 로그를 분석함으로써 잠재적인 보안 위협을 조기에 발견하고 대응할 수 있습니다.

Sysmon for Linux를 이용한 랜섬웨어 및 비정상 행위 탐지

Sysmon for Linux를 이용하여 랜섬웨어 및 비정상 행위를 탐지하는 방법입니다. Sysmon을 통해 프로세스 생성, 파일 생성 및 네트워크 연결 이벤트를 모니터링하고, 이를 통해 의심스러운 활동을 탐지할 수 있습니다.

1. Sysmon 설치 및 기본 설정

  1. Sysmon for Linux 설치
    git clone https://github.com/Sysinternals/SysmonForLinux.git
    cd SysmonForLinux
    make
    sudo make install
  2. 기본 구성 파일 작성
    sysmon-config.xml 파일을 작성하여 필요한 이벤트 필터링 규칙을 정의합니다.
    <Sysmon schemaversion="4.20">
        <EventFiltering>
            <ProcessCreate onmatch="include"/>
            <FileCreate onmatch="include"/>
            <FileDelete onmatch="include"/>
            <NetworkConnect onmatch="include"/>
        </EventFiltering>
    </Sysmon>
  3. Sysmon 서비스 시작
    sudo sysmon -accepteula -i sysmon-config.xml
  4. 로그 확인
    Sysmon 로그는 /var/log/syslog에 기록됩니다. 로그를 확인하려면 다음 명령어를 사용할 수 있습니다.
    sudo cat /var/log/syslog | grep Sysmon

2. 랜섬웨어 탐지 규칙 설정

랜섬웨어는 일반적으로 대량의 파일 암호화 및 확장자 변경을 통해 시스템을 손상시킵니다. 이를 탐지하기 위해 파일 생성 및 파일 삭제 이벤트를 모니터링할 수 있습니다.

  1. 파일 생성 및 삭제 모니터링 규칙 추가
    이 규칙은 파일 확장자가 .encrypted로 끝나는 파일 생성 이벤트와 .txt, .docx, .pdf 파일 삭제 이벤트를 모니터링합니다. 랜섬웨어는 파일을 암호화하고 원본 파일을 삭제하는 경향이 있기 때문에 이러한 활동을 탐지하는 데 유용합니다.
    <FileCreate onmatch="include">
        <Rule groupRelation="or">
            <TargetFilename condition="end with">.encrypted</TargetFilename>
        </Rule>
    </FileCreate>
    
    <FileDelete onmatch="include">
        <Rule groupRelation="or">
            <TargetFilename condition="end with">.txt</TargetFilename>
            <TargetFilename condition="end with">.docx</TargetFilename>
            <TargetFilename condition="end with">.pdf</TargetFilename>
        </Rule>
    </FileDelete>
  2. 의심스러운 프로세스 생성 모니터링
    랜섬웨어는 시스템에서 의심스러운 프로세스를 생성할 수 있습니다. 이를 탐지하기 위해 다음 규칙을 추가합니다.이 규칙은 이미지 이름이나 명령어에 "ransomware" 또는 "encrypt"라는 단어가 포함된 프로세스 생성 이벤트를 모니터링합니다.
    <ProcessCreate onmatch="include">
        <Rule groupRelation="or">
            <Image condition="contains any">ransomware</Image>
            <CommandLine condition="contains any">encrypt</CommandLine>
        </Rule>
    </ProcessCreate>

3. 비정상 행위 탐지 규칙 설정

비정상 행위는 시스템에서 비정상적으로 많은 파일을 생성하거나 삭제하는 행위, 비정상적인 네트워크 연결 등을 포함합니다.

  1. 비정상적인 파일 생성 및 삭제 모니터링
    이 규칙은 파일 확장자가 .tmp, .bak로 끝나는 파일 생성 이벤트와 .log 파일 삭제 이벤트를 모니터링합니다. 비정상 행위는 임시 파일 생성이나 로그 파일 삭제와 관련이 있을 수 있습니다.
    <FileCreate onmatch="include">
        <Rule groupRelation="or">
            <TargetFilename condition="end with">.tmp</TargetFilename>
            <TargetFilename condition="end with">.bak</TargetFilename>
        </Rule>
    </FileCreate>
    
    <FileDelete onmatch="include">
        <Rule groupRelation="or">
            <TargetFilename condition="end with">.log</TargetFilename>
        </Rule>
    </FileDelete>
  2. 비정상적인 네트워크 연결 모니터링
    비정상적인 네트워크 연결을 탐지하기 위해 다음 규칙을 추가합니다.이 규칙은 포트 4444 또는 1337로의 네트워크 연결 이벤트를 모니터링합니다. 이러한 포트는 일반적으로 공격자가 원격 접속을 위해 사용하는 포트입니다.
    <NetworkConnect onmatch="include">
        <Rule groupRelation="or">
            <DestinationPort condition="is">4444</DestinationPort>
            <DestinationPort condition="is">1337</DestinationPort>
        </Rule>
    </NetworkConnect>

4. 로그 분석 및 알림 설정

Sysmon 이벤트 로그를 주기적으로 분석하고, 의심스러운 이벤트를 탐지하면 알림을 설정하여 통보할 수 있습니다.

  1. 로그 분석 스크립트 작성
    Python을 사용하여 Sysmon 로그를 분석하는 스크립트를 작성할 수 있습니다.
    import re
    import subprocess
    
    def check_sysmon_logs():
        with open('/var/log/syslog', 'r') as file:
            logs = file.readlines()
            for log in logs:
                if 'Sysmon' in log:
                    if re.search(r'\.encrypted', log) or re.search(r'ransomware', log):
                        print(f'Suspicious activity detected: {log}')
                        send_alert(log)
    
    def send_alert(message):
        # 이메일 또는 다른 알림 방법으로 보안 팀에 알림
        subprocess.run(['mail', '-s', 'Suspicious Activity Detected', 'security@example.com'], input=message.encode())
    
    if __name__ == '__main__':
        check_sysmon_logs()
  2. 크론 작업을 통해 주기적으로 로그 분석
    크론 작업을 설정하여 주기적으로 로그를 분석하도록 합니다.
    crontab -e
    다음 라인을 추가하여 5분마다 로그를 분석하도록 설정합니다.
    */5 * * * * /usr/bin/python3 /path/to/log_analysis_script.py

Sysmon for Linux는 랜섬웨어 및 비정상 행위를 탐지하는 데 매우 유용한 도구입니다. 이를 통해 시스템의 다양한 보안 이벤트를 모니터링하고, 의심스러운 활동을 조기에 발견하여 대응할 수 있습니다. 적절한 규칙을 정의하고 주기적으로 로그를 분석함으로써 잠재적인 보안 위협을 효과적으로 관리할 수 있습니다.

728x90

댓글