Sysmon(System Monitor)은 Microsoft의 도구로, 시스템에서 실행된 프로세스, 네트워크 연결, 파일 생성 등 다양한 이벤트를 기록하는 데 사용됩니다. 원래 Windows용으로 개발되었으나, 최근에는 Linux 버전도 제공되고 있습니다. Sysmon for Linux는 eBPF를 사용하여 시스템 콜을 모니터링하고, 높은 유연성과 표현력을 가진 규칙 정의를 통해 다양한 보안 이벤트를 기록할 수 있습니다.
설치 및 기본 설정
- Sysmon for Linux 설치
Sysmon for Linux는 소스 코드로 제공되므로, 컴파일하여 설치해야 합니다.git clone https://github.com/Sysinternals/SysmonForLinux.git cd SysmonForLinux make sudo make install
- 구성 파일 작성
Sysmon은 XML 기반의 구성 파일을 사용합니다. 기본적으로sysmon-config.xml
파일을 작성하여 필요한 이벤트 필터링 규칙을 정의합니다.<Sysmon schemaversion="4.20"> <EventFiltering> <ProcessCreate onmatch="include"/> <FileCreate onmatch="include"/> <NetworkConnect onmatch="include"/> </EventFiltering> </Sysmon>
- Sysmon 서비스 시작
이 명령어는 EULA를 수락하고, 구성 파일을 적용하여 Sysmon을 설치 및 시작합니다.sudo sysmon -accepteula -i sysmon-config.xml
- 로그 확인
Sysmon 로그는/var/log/syslog
에 기록됩니다. 로그를 확인하려면 다음 명령어를 사용할 수 있습니다.sudo cat /var/log/syslog | grep Sysmon
Sysmon 규칙 정의
Sysmon의 규칙 정의는 매우 유연하며, 다양한 조건을 기반으로 이벤트를 필터링할 수 있습니다. 주요 이벤트 유형과 예제 규칙은 다음과 같습니다.
- 프로세스 생성 이벤트 (ProcessCreate)
프로세스 생성 이벤트는 시스템에서 새로운 프로세스가 생성될 때 기록됩니다.<ProcessCreate onmatch="include"> <Rule groupRelation="or"> <Image condition="contains any">/bin/bash;/usr/bin/python</Image> <User condition="is">root</User> </Rule> </ProcessCreate>
- 파일 생성 이벤트 (FileCreate)
파일 생성 이벤트는 시스템에서 새로운 파일이 생성될 때 기록됩니다.<FileCreate onmatch="include"> <Rule groupRelation="or"> <TargetFilename condition="begin with">/etc/cron.d</TargetFilename> <User condition="is">root</User> </Rule> </FileCreate>
- 네트워크 연결 이벤트 (NetworkConnect)
네트워크 연결 이벤트는 시스템에서 네트워크 연결이 생성될 때 기록됩니다.<NetworkConnect onmatch="include"> <Rule groupRelation="or"> <DestinationPort condition="is">22</DestinationPort> <User condition="is">www-data</User> </Rule> </NetworkConnect>
Sysmon 이벤트 필드 설명
Sysmon 이벤트는 다양한 필드를 포함하며, 각각의 필드는 특정한 정보를 제공합니다. 주요 필드는 다음과 같습니다.
- ProcessCreate 이벤트 필드
- UtcTime: 이벤트 발생 시간
- ProcessGuid: 프로세스의 전역 고유 식별자
- ProcessId: 프로세스 ID
- Image: 실행 파일의 경로
- CommandLine: 실행된 명령어
- User: 프로세스를 실행한 사용자
- LogonId: 로그온 ID
- ParentProcessId: 부모 프로세스 ID
- ParentCommandLine: 부모 프로세스의 명령어
- FileCreate 이벤트 필드
- UtcTime: 이벤트 발생 시간
- ProcessGuid: 이벤트를 트리거한 프로세스의 전역 고유 식별자
- ProcessId: 이벤트를 트리거한 프로세스 ID
- Image: 이벤트를 트리거한 실행 파일의 경로
- TargetFilename: 생성된 파일의 경로
- User: 파일을 생성한 사용자
- NetworkConnect 이벤트 필드
- UtcTime: 이벤트 발생 시간
- ProcessGuid: 이벤트를 트리거한 프로세스의 전역 고유 식별자
- ProcessId: 이벤트를 트리거한 프로세스 ID
- Image: 이벤트를 트리거한 실행 파일의 경로
- User: 네트워크 연결을 생성한 사용자
- SourceIp: 소스 IP 주소
- SourcePort: 소스 포트
- DestinationIp: 목적지 IP 주소
- DestinationPort: 목적지 포트
Sysmon을 활용한 지속성 탐지 예제
- 웹쉘 탐지
웹쉘은 웹 서버에 업로드된 악성 스크립트로, 공격자가 원격에서 명령을 실행할 수 있게 합니다. 웹쉘 탐지를 위해 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>
- 크론 작업 모니터링
공격자는 지속성을 위해 크론 작업을 사용할 수 있습니다./etc/cron.d
디렉토리의 파일 생성을 모니터링하여 이를 탐지할 수 있습니다.<FileCreate onmatch="include"> <Rule groupRelation="or"> <TargetFilename condition="begin with">/etc/cron.d</TargetFilename> <User condition="is">root</User> </Rule> </FileCreate>
- 네트워크 연결 모니터링
공격자는 원격으로 시스템에 접속하기 위해 네트워크 연결을 사용할 수 있습니다. 특정 포트로의 네트워크 연결을 모니터링하여 이를 탐지할 수 있습니다.<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 설치 및 기본 설정
- Sysmon for Linux 설치
git clone https://github.com/Sysinternals/SysmonForLinux.git cd SysmonForLinux make sudo make install
- 기본 구성 파일 작성
sysmon-config.xml
파일을 작성하여 필요한 이벤트 필터링 규칙을 정의합니다.<Sysmon schemaversion="4.20"> <EventFiltering> <ProcessCreate onmatch="include"/> <FileCreate onmatch="include"/> <FileDelete onmatch="include"/> <NetworkConnect onmatch="include"/> </EventFiltering> </Sysmon>
- Sysmon 서비스 시작
sudo sysmon -accepteula -i sysmon-config.xml
- 로그 확인
Sysmon 로그는/var/log/syslog
에 기록됩니다. 로그를 확인하려면 다음 명령어를 사용할 수 있습니다.sudo cat /var/log/syslog | grep Sysmon
2. 랜섬웨어 탐지 규칙 설정
랜섬웨어는 일반적으로 대량의 파일 암호화 및 확장자 변경을 통해 시스템을 손상시킵니다. 이를 탐지하기 위해 파일 생성 및 파일 삭제 이벤트를 모니터링할 수 있습니다.
- 파일 생성 및 삭제 모니터링 규칙 추가
이 규칙은 파일 확장자가.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>
- 의심스러운 프로세스 생성 모니터링
랜섬웨어는 시스템에서 의심스러운 프로세스를 생성할 수 있습니다. 이를 탐지하기 위해 다음 규칙을 추가합니다.이 규칙은 이미지 이름이나 명령어에 "ransomware" 또는 "encrypt"라는 단어가 포함된 프로세스 생성 이벤트를 모니터링합니다.<ProcessCreate onmatch="include"> <Rule groupRelation="or"> <Image condition="contains any">ransomware</Image> <CommandLine condition="contains any">encrypt</CommandLine> </Rule> </ProcessCreate>
3. 비정상 행위 탐지 규칙 설정
비정상 행위는 시스템에서 비정상적으로 많은 파일을 생성하거나 삭제하는 행위, 비정상적인 네트워크 연결 등을 포함합니다.
- 비정상적인 파일 생성 및 삭제 모니터링
이 규칙은 파일 확장자가.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>
- 비정상적인 네트워크 연결 모니터링
비정상적인 네트워크 연결을 탐지하기 위해 다음 규칙을 추가합니다.이 규칙은 포트 4444 또는 1337로의 네트워크 연결 이벤트를 모니터링합니다. 이러한 포트는 일반적으로 공격자가 원격 접속을 위해 사용하는 포트입니다.<NetworkConnect onmatch="include"> <Rule groupRelation="or"> <DestinationPort condition="is">4444</DestinationPort> <DestinationPort condition="is">1337</DestinationPort> </Rule> </NetworkConnect>
4. 로그 분석 및 알림 설정
Sysmon 이벤트 로그를 주기적으로 분석하고, 의심스러운 이벤트를 탐지하면 알림을 설정하여 통보할 수 있습니다.
- 로그 분석 스크립트 작성
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()
- 크론 작업을 통해 주기적으로 로그 분석
크론 작업을 설정하여 주기적으로 로그를 분석하도록 합니다.
다음 라인을 추가하여 5분마다 로그를 분석하도록 설정합니다.crontab -e
*/5 * * * * /usr/bin/python3 /path/to/log_analysis_script.py
Sysmon for Linux는 랜섬웨어 및 비정상 행위를 탐지하는 데 매우 유용한 도구입니다. 이를 통해 시스템의 다양한 보안 이벤트를 모니터링하고, 의심스러운 활동을 조기에 발견하여 대응할 수 있습니다. 적절한 규칙을 정의하고 주기적으로 로그를 분석함으로써 잠재적인 보안 위협을 효과적으로 관리할 수 있습니다.
댓글