이번 글에서는 Sigma Rule의 Value Modifier를 집중적으로 다뤄보겠습니다.
Sigma 공식 문서에서도 value modifier는 필드명 뒤에 파이프 |를 붙여 값을 다른 방식으로 해석하게 만드는 기능으로 정의하며, contains, endswith, startswith, re, base64 같은 다양한 변형을 지원한다고 설명합니다.
즉, 단순 문자열 비교로는 부족한 탐지 로직을 더 읽기 쉽고 유지보수 가능한 형태로 표현할 수 있다는 뜻입니다.
◎ Value Modifier가 왜 필요한가
- 실무에서 탐지 규칙을 작성하시다 보면 *powershell.exe*, ^cmd\.exe$, .*\AppData\.* 같은 패턴이 자주 등장합니다.
- 이때 정규표현식만 남발하면 규칙이 금방 복잡해지고, 다른 담당자가 읽기 어려워집니다.
- Sigma의 Value Modifier는 이런 문제를 줄이기 위해 등장했으며, 평범한 문자열을 더 의도에 맞게 표현하게 해 줍니다.
- 예를 들어 “문자열 끝에 .exe가 오는지”만 보고 싶다면 정규식보다 endswith가 훨씬 직관적입니다.
- 반대로 “특정 문자열을 포함하는지”를 보고 싶다면 contains가 더 읽기 쉽습니다.
- 이런 방식은 탐지 의도를 그대로 보여 주기 때문에, 룰 리뷰와 협업에 유리합니다.
◎ 기본 문법부터 보시죠
- Value Modifier는 필드명 뒤에 붙입니다. 문법은 간단합니다.
| detection: selection: Image|endswith: '\powershell.exe' CommandLine|contains: 'Invoke-WebRequest' |
- 이 규칙은 Image 필드가 \powershell.exe로 끝나고, CommandLine에 Invoke-WebRequest가 포함된 경우를 탐지합니다.
- 같은 의미를 정규식으로 쓰면 더 길고 복잡해질 수 있지만, modifier를 쓰면 규칙이 짧아지고 읽기 쉬워집니다.
◎ 자주 쓰는 Modifier 정리
- SigmaHQ 문서와 Specification에 따르면 자주 쓰는 modifier는 다음과 같습니다.
- contains: 문자열 포함 여부를 확인합니다.
- endswith: 문자열 끝 일치를 확인합니다.
- startswith: 문자열 시작 일치를 확인합니다.
- re: 정규표현식 매칭을 수행합니다.
- base64: 값을 Base64로 변환합니다.
- cidr: IP 대역 매칭에 사용됩니다.
- exists: 필드 존재 여부를 확인합니다.
- 이 중 실무에서 가장 많이 쓰이는 것은 contains, endswith, startswith, re입니다. 나머지는 특수한 상황에서 강력한 힘을 발휘합니다.
◎ contains와 endswith의 실전 차이
- contains는 “어디에 있든 포함되면 됨”이라는 의미입니다. 예를 들어 다음처럼 쓸 수 있습니다.
| detection: selection: CommandLine|contains: - 'net user' - 'whoami' |
- 이 규칙은 명령줄 어딘가에 net user 또는 whoami가 들어가면 탐지합니다.
- Discovery 계열 탐지에서 자주 유용합니다.
- 반면 endswith는 문자열의 끝을 보므로 프로세스 이름 탐지에 자주 쓰입니다.
| detection: selection: Image|endswith: - '\cmd.exe' - '\powershell.exe' - '\wscript.exe' |
- 이 방식은 cmd.exe처럼 경로가 길게 붙는 필드를 다룰 때 특히 편합니다.
- 정규식으로 .*\\cmd\.exe$를 쓰는 것보다 훨씬 직관적입니다.
◎ startswith는 언제 좋을까
- startswith는 문자열이 특정 값으로 시작하는지 확인합니다. 예를 들어 다음과 같이 쓸 수 있습니다.
| detection: selection: CommandLine|startswith: - 'powershell -enc' - 'cmd /c' |
- 이 방식은 공격자가 흔히 사용하는 명령 프리픽스를 잡는 데 유용합니다.
- -enc처럼 인코딩 옵션이 앞부분에 붙는 경우, 시작 문자열만으로도 높은 신뢰도의 탐지가 가능합니다.
◎ 정규표현식이 필요한 순간
- 물론 모든 것을 modifier로만 해결할 수는 없습니다.
- 값의 구조가 복잡하거나 변형이 많을 때는 re가 필요합니다.
- Sigma 문서에서는 re가 regex 기반 검색을 의미하며, 대소문자 옵션이나 멀티라인 옵션 같은 하위 기능도 지원한다고 설명합니다.
- 예를 들어 다음처럼 쓸 수 있습니다.
| detection: selection: CommandLine|re: '.*\\AppData\\.*\.ps1' |
- 이 규칙은 사용자의 AppData 경로 아래에 있는 PowerShell 스크립트를 찾는 데 유용합니다.
- 다만 regex는 강력한 만큼 읽기 어렵고, SIEM 백엔드에 따라 번역 결과가 달라질 수 있으므로 정말 필요한 경우에만 쓰시는 편이 좋습니다.
- modifier를 섞어서 쓰는 방법
- Sigma의 장점 중 하나는 modifier를 체인처럼 연결할 수 있다는 점입니다.
- Specification은 fieldname|mod1|mod2: value 형태를 허용하며, modifier가 순서대로 적용된다고 설명합니다.
- 예를 들어 Base64 인코딩된 명령줄을 탐지할 때는 다음처럼 작성할 수 있습니다.
| detection: selection: CommandLine|base64|contains: 'powershell' |
- 이 방식은 인코딩된 값을 직접 쓰지 않고도 탐지 의도를 표현할 수 있어, 규칙 가독성이 좋아집니다.
- 또 다른 예로 utf16 계열과 base64를 조합하는 방식도 문서에 소개되어 있습니다.
◎ 오탐을 줄이는 modifier 활용
- modifier는 탐지 범위를 넓히는 데도 쓰이지만, 반대로 오탐을 줄이는 데도 중요합니다.
- 예를 들어 다음처럼 cased를 써서 대소문자를 엄격히 보거나, exists로 필드 존재 여부를 확인할 수 있습니다.
| detection: selection: ParentImage|endswith: '\cmd.exe' CommandLine|contains: 'Invoke-WebRequest' filter_legit: CommandLine|contains: - 'Windows Update' - 'SoftwareDistribution' condition: selection and not filter_legit |
- 이 구조는 modifier 자체보다 condition과 함께 쓸 때 더 강력해집니다.
- 즉, “정밀 패턴 매칭 + 오탐 필터” 조합이 Sigma 실전 운용의 핵심입니다.
◎ 실전 예제: LOLBin 탐지
- 아래 예제는 현업에서 자주 보는 LOLBin 계열 탐지입니다.
| title: Suspicious LOLBin via Cmd id: 11111111-2222-3333-4444-555555555555 logsource: category: process_creation product: windows detection: selection: Image|endswith: - '\cmd.exe' - '\powershell.exe' CommandLine|contains: - 'whoami' - 'net user' - 'Invoke-WebRequest' filter_admin: ParentImage|endswith: '\explorer.exe' condition: selection and not filter_admin level: medium |
- 이 규칙은 cmd, powershell 같은 실행 파일과 흔한 Discovery/Execution 문자열을 함께 보면서, 정상적인 사용자 시작 프로세스는 일부 제외합니다.
- 정규식을 몰라도 꽤 정밀한 탐지가 가능하다는 점이 핵심입니다.
◎ modifier를 고를 때 기준
- 실무에서는 아래 순서로 판단하시면 편합니다.
- 단순 포함이면 contains.
- 경로/파일명 끝이면 endswith.
- 명령 시작 패턴이면 startswith.
- 구조가 복잡하면 re.
- 인코딩 우회가 있으면 base64 또는 utf16 계열.
- 이 기준을 따르면 규칙이 불필요하게 무거워지지 않고, 리뷰하기도 쉬워집니다. Sigma는 “정확한 규칙을 빨리 쓰기” 위한 도구이기 때문에, 정규표현식보다 읽기 쉬운 modifier를 우선하는 것이 좋습니다.
◎ 마무리
- Value Modifier는 Sigma Rule에서 탐지의 정밀도를 높여 주는 핵심 도구입니다.
- contains, endswith, startswith만 잘 써도 상당수의 탐지는 충분히 커버할 수 있고, re는 정말 필요한 경우에만 보조적으로 쓰시는 편이 좋습니다.
- 결국 좋은 Sigma 규칙은 복잡한 정규식보다 의도를 분명하게 드러내는 규칙입니다.
'IT > Sigma Rule' 카테고리의 다른 글
| [Sigma Rule] 제8화: Splunk 사용자를 위한 Sigma 가이드: SPL 변환 실습 (0) | 2026.04.29 |
|---|---|
| [Sigma Rule] 제7화 Sigma CLI(Sigmac) 설치부터 첫 쿼리 변환까지 한 방에 끝내기 (0) | 2026.04.28 |
| [Sigma Rule] 제5화: "And? Or?" 탐지 로직의 뼈대, Selection과 Condition 완벽 가이드 (0) | 2026.04.26 |
| [Sigma Rule] 제4화: 로그 소스(Logsource) 정의하기: 윈도우 이벤트부터 클라우드 로그, 네트워크 장비까지 (0) | 2026.04.25 |
| [Sigma Rule] 제3화: 5분 만에 배우는 Sigma Rule 기본 구조 (YAML 기초 필드 해부) (0) | 2026.04.24 |
