운영체제 (LNX,WIN)

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

날으는물고기 2024. 8. 16. 00:13

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