Yara는 악성코드 분석 및 탐지에 널리 사용되는 오픈 소스 도구로, 악성코드 샘플 내의 패턴(시그니처)을 기반으로 파일을 분류하고 식별하는 데 사용됩니다. 간단한 문법의 Yara 규칙을 작성하여 특정 문자열이나 바이너리 패턴을 정의하고, 이를 통해 파일이나 프로세스가 해당 패턴을 포함하는지 여부를 확인할 수 있습니다.
Yara의 주요 특징
- 패턴 매칭: 텍스트 문자열, 헥사 값, 정규 표현식 등을 사용하여 복잡한 패턴 매칭이 가능합니다.
- 조건 설정: 논리 연산자를 활용하여 다양한 조건을 설정할 수 있습니다.
- 태그 기능: 규칙에 태그를 부여하여 분류 및 관리가 용이합니다.
Yara 규칙의 기본 구조
rule 룰_이름 {
strings:
$str1 = "악성코드_패턴1"
$str2 = { E2 34 ?? C8 A? FB }
$str3 = /md5: [0-9a-fA-F]{32}/
condition:
$str1 or $str2 or $str3
}
위의 예시에서 strings
섹션에는 탐지하고자 하는 문자열이나 패턴을 정의하며, condition
섹션에서는 해당 패턴 중 하나라도 발견되면 규칙이 만족되도록 설정합니다.
활용 사례
- 악성코드 탐지: 보안 연구자들이 새로운 악성코드 패턴을 정의하여 신속하게 탐지하고 대응할 수 있습니다.
- 파일 분류: 대량의 파일을 분석하여 악성 여부를 분류하는 데 사용됩니다.
- 실시간 모니터링: 시스템 내 실행 중인 프로세스를 감시하여 의심스러운 활동을 즉시 탐지합니다.
점검 포인트
- 규칙 관리: 정기적으로 Yara 규칙을 업데이트하여 최신 위협에 대응할 수 있도록 합니다.
- 성능 최적화: 과도한 패턴 매칭은 시스템 성능에 영향을 줄 수 있으므로, 효율적인 규칙 작성과 적용이 필요합니다.
- 오탐 방지: 정확한 패턴 정의를 통해 정상 파일이 오탐지되지 않도록 주의해야 합니다.
- 통합 운영: Yara를 다른 보안 솔루션과 연계하여 다층 방어 체계를 구축합니다.
Yara는 그 유용성과 효율성으로 인해 보안 분야에서 필수적인 도구로 자리매김하고 있습니다. Yara를 활용하여 악성코드 탐지 역량을 강화하고, 지속적인 규칙 업데이트와 최적화를 통해 보안 수준을 높여야 합니다. Wazuh를 활용하여 Yara 룰을 적용한 악성코드 탐지 및 모니터링을 수행하는 방법입니다.
1. Wazuh에서 Yara 활용 개요
Wazuh는 Yara와 통합하여 파일 무결성 모니터링(FIM, File Integrity Monitoring)과 악성코드 탐지를 수행할 수 있습니다. 이를 통해 특정 패턴을 가진 악성 파일을 탐지하고, 이를 이벤트로 기록 및 대응할 수 있습니다.
활용 가능한 기능
- 파일 무결성 모니터링(FIM)과 Yara 룰을 결합하여 악성코드 탐지
- 의심스러운 바이너리 및 문서 파일 스캔
- 악성코드가 포함된 파일이 탐지될 경우 경고(Alert) 및 자동 대응
- 실행 중인 프로세스에 대해 Yara 스캔 수행
2. Wazuh에 Yara 설치 및 설정
Yara 설치
Wazuh가 실행 중인 에이전트 또는 서버에 Yara를 설치해야 합니다.
Ubuntu/Debian
sudo apt update
sudo apt install yara
CentOS/RHEL
sudo yum install yara
macOS (Homebrew)
brew install yara
3. Yara 룰 추가
Yara 룰을 사용하여 특정 악성코드 패턴을 탐지할 수 있습니다. 기본적인 Yara 룰을 /var/ossec/ruleset/yara/malware.yar
파일에 추가합니다.
예제 Yara 룰
rule SuspiciousExecutable {
meta:
description = "Suspicious executable detection"
author = "Security Team"
version = "1.0"
date = "2025-02-17"
strings:
$a = "malicious_string"
$b = { E2 34 ?? C8 A? FB }
condition:
any of them
}
"malicious_string"
을 포함하는 파일을 탐지- 특정 바이너리 패턴
{ E2 34 ?? C8 A? FB }
을 포함하는 파일을 탐지
4. Wazuh의 FIM(File Integrity Monitoring)과 Yara 결합
FIM을 활용하면 특정 디렉토리를 감시하고, 변경된 파일에 대해 Yara 검사를 수행할 수 있습니다.
FIM 설정 파일 수정
FIM 설정을 /var/ossec/etc/ossec.conf
파일에서 편집합니다.
<ossec_config>
<syscheck>
<directories check_all="yes">/home/user/downloads</directories>
<directories check_all="yes">/tmp</directories>
<yara>
<enabled>yes</enabled>
<rules>/var/ossec/ruleset/yara/malware.yar</rules>
</yara>
</syscheck>
</ossec_config>
/home/user/downloads
및/tmp
디렉토리를 모니터링- 파일이 변경될 경우 Yara 룰
/var/ossec/ruleset/yara/malware.yar
을 적용하여 검사
5. Wazuh의 Yara 스캔 실행
즉시 Yara 스캔 실행
다음 명령을 실행하여 특정 파일이나 디렉토리를 대상으로 Yara 룰을 적용할 수 있습니다.
/var/ossec/bin/agent_control -f /path/to/scan
또는 특정 파일을 직접 검사하려면 다음과 같이 실행합니다.
yara -r /var/ossec/ruleset/yara/malware.yar /path/to/suspicious/file
실행 중인 프로세스 스캔
Wazuh를 통해 실행 중인 프로세스에 대한 Yara 검사를 수행할 수도 있습니다.
yara -p /var/ossec/ruleset/yara/malware.yar
6. 탐지 이벤트 확인 및 대응
Yara 룰을 통해 악성 파일이 감지되면, Wazuh에서 경고(Alert)를 생성합니다.
탐지된 이벤트 확인
로그를 확인하려면 다음 명령을 실행합니다.
cat /var/ossec/logs/alerts/alerts.log | grep "yara"
또는 Kibana에서 Wazuh의 SIEM 대시보드를 통해 확인할 수 있습니다.
탐지 시 자동 대응 (Active Response)
악성코드가 탐지될 경우 자동으로 대응할 수 있도록 설정할 수 있습니다. /var/ossec/etc/ossec.conf
파일에서 다음을 추가합니다.
<ossec_config>
<active-response>
<command>disable-user</command>
<location>local</location>
<rules_id>100101</rules_id>
</active-response>
</ossec_config>
이 설정을 적용하면 특정 조건(rules_id=100101
)이 충족될 때 시스템에서 해당 파일을 자동 삭제하거나, 실행을 차단하는 등의 조치를 수행할 수 있습니다.
7. 실전 운영 사례
Wazuh와 Yara를 연계하여 다음과 같은 실전 보안 모니터링을 수행할 수 있습니다.
- 랜섬웨어 감지
- 다운로드 폴더를 지속적으로 감시하고, Yara 룰을 적용하여 알려진 랜섬웨어를 탐지
- 악성코드 실행 탐지
- 실행 중인 프로세스에 대해 Yara 스캔을 수행하여 의심스러운 바이너리 탐지
- 웹 서버 파일 변조 탐지
/var/www/html
디렉토리를 모니터링하고, 악성 PHP 및 웹쉘 탐지
- Wazuh의 FIM과 Yara를 결합하여 실시간 파일 및 프로세스 검사를 수행
- 악성코드 룰셋을 정기적으로 업데이트하여 최신 위협에 대응
- Kibana 및 Wazuh 대시보드와 연계하여 경고 모니터링 강화
- Active Response를 활용한 자동 대응으로 보안 침해 가능성을 줄임
이를 통해 Wazuh 환경에서 강력한 Yara 기반 탐지 및 보안 모니터링 체계를 구축할 수 있습니다.
예제 - Wazuh와 Yara를 활용한 웹쉘(WebShell) 탐지 및 대응 방법
웹 서버에서 웹쉘(WebShell) 탐지는 보안 운영에서 중요한 요소 중 하나입니다. 웹쉘은 공격자가 원격에서 명령을 실행할 수 있도록 하는 악성 스크립트로, PHP, JSP, ASP 등의 웹 기술을 악용하여 배포됩니다. Wazuh와 Yara를 활용하여 웹쉘을 효과적으로 탐지하고 대응하는 방법입니다.
1. 웹쉘 탐지의 주요 원리
웹쉘을 탐지하는 방법에는 여러 가지가 있습니다.
- 파일 무결성 모니터링(FIM): 웹 디렉터리에서 새로운 파일이 생성되거나 수정될 때 감지
- Yara 룰 적용: 특정 웹쉘 패턴을 감지하여 악성 파일 탐지
- Active Response 적용: 웹쉘이 탐지되었을 때 자동으로 파일 삭제 또는 관리자에게 알림 전송
2. Wazuh 설정: 웹 디렉터리 모니터링
웹쉘이 자주 업로드되는 디렉터리를 모니터링하기 위해 File Integrity Monitoring (FIM)을 설정합니다.
/var/ossec/etc/ossec.conf 수정
<ossec_config>
<syscheck>
<directories check_all="yes">/var/www/html</directories>
<directories check_all="yes">/usr/share/nginx/html</directories>
<directories check_all="yes">/opt/webapp/uploads</directories>
<yara>
<enabled>yes</enabled>
<rules>/var/ossec/ruleset/yara/webshell.yar</rules>
</yara>
</syscheck>
</ossec_config>
/var/www/html
,/usr/share/nginx/html
,/opt/webapp/uploads
등의 웹 서버 디렉터리를 감시- 파일 변경이 감지되면 Yara 룰을 사용하여 악성 웹쉘 검사
3. Yara 룰 작성: 웹쉘 탐지
웹쉘을 탐지하는 Yara 룰을 생성하여 /var/ossec/ruleset/yara/webshell.yar
에 저장합니다.
웹쉘 탐지 Yara 룰 예제
rule Suspicious_WebShell {
meta:
description = "Detect common WebShell patterns"
author = "Security Team"
version = "1.0"
date = "2025-02-18"
strings:
$php1 = "<?php eval($_POST['"
$php2 = "<?php system($_GET['"
$php3 = "<?php exec($_POST['"
$php4 = "<?php passthru($_REQUEST['"
$php5 = "base64_decode("
$php6 = "shell_exec("
$php7 = "eval(gzinflate(base64_decode("
$php8 = "<?php @preg_replace(\"/.*/e\","
condition:
any of ($php1, $php2, $php3, $php4, $php5, $php6, $php7, $php8)
}
- PHP 웹쉘에서 자주 사용되는 함수(
eval
,system
,exec
,passthru
,shell_exec
,base64_decode
)가 포함된 경우 탐지 - 압축 및 인코딩 기법을 사용하는 웹쉘 패턴(
gzinflate(base64_decode(
) 탐지
4. Yara 룰 테스트
위에서 작성한 룰이 정상적으로 동작하는지 테스트합니다.
정상적인 파일 테스트
echo "<?php echo 'Hello, World!'; ?>" > /tmp/test.php
yara -r /var/ossec/ruleset/yara/webshell.yar /tmp/test.php
출력 예시
(No output) → 정상 파일
웹쉘 파일 테스트
echo "<?php system(\$_GET['cmd']); ?>" > /tmp/suspicious.php
yara -r /var/ossec/ruleset/yara/webshell.yar /tmp/suspicious.php
출력 예시
Suspicious_WebShell /tmp/suspicious.php
→ 탐지 성공!
5. 웹쉘 탐지 이벤트 확인
Wazuh 경고(Alert) 로그 확인
웹쉘이 탐지되었을 경우, Wazuh의 alerts.log
에서 확인할 수 있습니다.
cat /var/ossec/logs/alerts/alerts.log | grep "yara"
예제 로그 출력
2025 Feb 18 14:10:23 wazuh-agent->syscheck
Rule: 100101 (level 10) -> 'Yara Rule - Suspicious WebShell Detected'
File: /var/www/html/suspicious.php
Kibana에서 탐지 이벤트 확인
- Wazuh가 연동된 Kibana → Security Events 대시보드에서 탐지된 웹쉘 파일 확인 가능
6. 웹쉘 탐지 시 자동 대응
웹쉘이 탐지되었을 때 자동으로 파일을 삭제하거나, 관리자로부터 알림을 받을 수 있도록 Active Response를 설정합니다.
/var/ossec/etc/ossec.conf 수정
<ossec_config>
<active-response>
<command>delete-webshell</command>
<location>local</location>
<rules_id>100101</rules_id>
</active-response>
</ossec_config>
→ 탐지된 웹쉘 파일을 자동 삭제하는 명령을 실행
Active Response 스크립트 작성
파일을 삭제하는 스크립트를 /var/ossec/active-response/bin/delete-webshell.sh
로 작성합니다.
#!/bin/bash
FILE=$1
if [[ -f "$FILE" ]]; then
echo "[INFO] WebShell detected and removed: $FILE" >> /var/log/webshell_removal.log
rm -f "$FILE"
fi
스크립트에 실행 권한을 부여합니다.
chmod +x /var/ossec/active-response/bin/delete-webshell.sh
Active Response 등록
Wazuh의 Active Response 시스템에 등록합니다.
echo "delete-webshell" >> /var/ossec/etc/shared/ar.conf
Wazuh 서비스 재시작
systemctl restart wazuh-manager
7. 웹쉘 탐지 및 대응 운영 전략
탐지 대상 디렉터리 정기 점검
/var/www/html
과 같은 업로드 디렉터리를 집중 모니터링- 신뢰할 수 없는 사용자 업로드 폴더 감시 강화
Yara 룰 업데이트
- 웹쉘이 계속 변형되므로 주기적으로 새로운 웹쉘 패턴 추가
- 최신 공개된 Yara 웹쉘 룰셋과 병행하여 사용
보안 정책 및 권한 강화
- 업로드 폴더 실행 금지 설정 (
chmod -R 750 /var/www/uploads
) .php
파일 업로드 제한 적용 (웹서버 설정 수정)- WAF(Web Application Firewall) 적용하여 웹쉘 요청 차단
실시간 알림 연동
- Slack, 이메일, Telegram 등을 통해 실시간 경고 전송 가능
- 예제: Wazuh → n8n → Slack 알림 설정
8. 결론
- Wazuh의 FIM과 Yara를 결합하여 웹쉘 탐지 및 대응
- 탐지 시 자동 파일 삭제 및 경고 알림 전송
- 주기적인 Yara 룰 업데이트 및 업로드 폴더 보안 강화
이 구성을 통해 웹 서버 환경에서 웹쉘을 보다 효과적으로 탐지하고 차단할 수 있습니다.
댓글