YARA 규칙 구문
문자열, 조건, 메타데이터
YARA 규칙 구문은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
세 가지 섹션
YARA 규칙에는 이름과 최대 세 개의 섹션인 meta, strings, condition이 있습니다. condition이 유일한 필수 섹션이지만 실제 규칙은 세 섹션을 모두 사용합니다.
rule Example_Malware
{
meta:
author = "analyst"
description = "Detects Example family"
strings:
$a = "EvilConfig"
$b = { 6A 40 68 00 30 00 00 }
condition:
$a and $b
}meta 섹션
meta에는 일치에 영향을 주지는 않지만 초기 분류와 유지 관리에 필수적인 설명용 메타데이터가 들어 있습니다.
author,date,descriptionreference— 보고서 또는 권고문 링크hash— 규칙을 작성할 때 사용한 샘플tlp— 공유 분류
값은 문자열, 정수 또는 불리언입니다. meta를 문서로 취급해야 합니다. 다음 대응 담당자가 이 정보에 의존하기 때문입니다.
텍스트 문자열
strings 섹션은 패턴에 연결된 식별자($로 시작)를 정의합니다. 가장 단순한 형태는 따옴표로 묶은 텍스트 문자열입니다.
수정자를 사용하면 일치 방식을 세밀하게 조정할 수 있습니다.
nocase— 대소문자를 구분하지 않음wide— UTF-16(문자당 2바이트이며 Windows에서 흔히 사용됨)ascii— ASCII(기본값이며, wide와 함께 사용하면 두 형식 모두와 일치)fullword— 완전한 단어로 나타날 때만 일치
strings:
$s1 = "cmd.exe /c" nocase
$s2 = "InjectDll" wide ascii
$s3 = "admin" fullword16진수 문자열
바이너리 패턴에는 중괄호로 묶은 16진수 문자열을 사용합니다. 이는 원시 바이트와 일치하므로 연산 코드, 매직 넘버, 구조에 적합합니다.
16진수 문자열은 다음과 같은 유연한 기능을 지원합니다.
??— 임의의 니블/바이트[n-m]— n개에서 m개의 임의 바이트를 건너뜀( A | B )— 대안
strings:
$h1 = { 4D 5A 90 00 }
$h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
$h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
$h4 = { ( B8 | B9 ) 00 00 00 00 }정규 표현식
YARA는 슬래시로 구분된 정규식 패턴을 지원하며, 텍스트 문자열과 동일한 수정자를 사용합니다. 패턴이 달라지지만 구성 표시자나 생성된 뮤텍스 이름처럼 일정한 구조를 따를 때 정규식을 사용합니다.
정규식은 강력하지만 비용이 큽니다. 가능하면 고정 문자열이나 16진수를 우선 사용하고, 전체 파일을 검사하지 않도록 정규식의 범위를 엄격하게 제한하십시오.
strings:
$re1 = /mutex_[a-f0-9]{8}/ nocase
$re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// asciicondition 섹션
condition은 일치 여부를 결정하는 불리언 표현식입니다. 문자열 식별자를 직접 참조하십시오. 단독으로 사용한 $a는 해당 문자열이 발견되면 참입니다.
and, or, not 및 괄호와 결합하십시오. 실제 패밀리 탐지를 우연한 일치와 구분하는 논리를 작성하는 곳입니다.
condition:
$a and ($b or $c) and not $benign개수 세기와 집합
YARA는 문자열 집합에 적용할 수 있는 다양한 수량자를 제공합니다.
any of them/all of them2 of ($s*)— 그룹 중 최소 두 개#a > 3— $a의 일치 횟수가 3보다 큼
이를 사용하면 다섯 개의 패밀리 표지 중 세 개처럼 일정 수의 표지를 요구하여 민감도와 오탐 사이의 균형을 맞출 수 있습니다.
condition:
3 of ($str*) and #marker >= 2오프셋과 파일 크기
조건에서는 일치가 어디에서 발생하는지와 파일 크기를 참조할 수 있습니다.
$a at 0— 일치가 오프셋 0에서 발생해야 함$a in (0..1024)— 바이트 범위 내filesize— 전체 크기, 예:filesize < 200KBuint16(0) == 0x5A4D— 오프셋에서 정수를 읽음(여기서는 MZ 헤더)
일치 위치를 고정하면 오탐을 크게 줄이고 검사 속도를 높일 수 있습니다.
condition:
uint16(0) == 0x5A4D and filesize < 500KB and $payload모듈
YARA 모듈은 구조화되고 형식을 인식하는 데이터를 제공하므로, 조건에서 원시 바이트 대신 분석된 필드를 기준으로 판단할 수 있습니다.
pe— PE imports, 섹션, 진입점, 서명, imphashhash— 영역의 md5/sha256 계산math— entropy 및 통계elf,dotnet,magic
예를 들어 pe를 가져오면 문자열 리터럴보다 훨씬 견고하게 가져온 함수나 특정 imphash를 기준으로 일치시킬 수 있습니다.
import "pe"
condition:
pe.imphash() == "a1b2c3d4e5f6..." and
pe.imports("kernel32.dll", "VirtualAllocEx")집합 순회
더 복잡한 논리를 위해 YARA는 for를 사용한 컬렉션 순회를 지원합니다. 예를 들어 특정 속성을 만족하는 오프셋이 최소 두 개이거나, 어느 섹션 이름이 패턴과 일치한다는 조건을 표현할 수 있습니다.
단일 값이 아니라 길이가 가변적인 목록을 검사해야 하는 PE 섹션이나 imports 같은 모듈 데이터를 다룰 때 특히 중요합니다.
import "pe"
condition:
for any i in (0..pe.number_of_sections - 1) : (
pe.sections[i].name == ".evil"
)전역, 비공개, 태그
규칙 수준 키워드는 규칙 집합을 구성합니다.
global rule— 해당 조건이 파일의 다른 모든 규칙을 제어함(예: PE 파일만 검사)private rule— 재사용 가능한 구성 요소이며, 자체적으로는 보고되지 않지만 다른 규칙에서 참조할 수 있음- 규칙 이름 뒤의 태그는 탐지를 분류함(예: 결과 필터링용)
global private rule IsPE { condition: uint16(0) == 0x5A4D }
rule Dropper : trojan dropper {
strings: $a = "drop_payload"
condition: $a
}빠른 확인
조건이 얼마나 견고한지 판단하십시오.
복습
YARA 규칙 구문 한눈에 보기:
- 규칙 =
meta+strings+condition - 텍스트 문자열과 대소문자 무시, 와이드, ASCII, 완전한 단어 수정자
- 16진수 문자열과 와일드카드
??, 점프[n-m], 대안 - 구조화된 가변 패턴을 위한 정규식(신중하게 사용)
condition은 문자열을 논리곱, 논리합, 부정으로 결합함- 수량자: 일부/전체/N개 및 개수
#a - 위치 고정: 위치 지정, 범위 지정, 파일 크기, 정수 읽기
- 모듈(PE, 해시, 수학)은 구조화된 데이터와 imphash를 기준으로 일치시킴
global,private, 태그로 규칙 집합을 구성함
다음: 문자열과 16진수를 활용한 실전 탐색입니다.
자주 묻는 질문
“YARA 규칙 구문” 강의는 무료인가요?
네 — “YARA 규칙 구문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“YARA 규칙 구문”에서 뭘 배우나요?
문자열, 조건, 메타데이터 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“YARA 규칙 구문” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- YARA의 용도
- YARA 규칙 구문
- 문자열과 16진수로 헌팅하기
- 검색 확장 및 자동화