너무나 많은 악성코드가 쏟아지는 시점에 보안 전문가들은 효율적으로 의심스러운 파일이나 행위를 식별하고 분류할 방법이 필요합니다. 다양한 탐지 기법이 있지만, 그중에서도 특정 패턴을 기반으로 파일을 식별하는 데 강력한 도구가 바로 YARA입니다. YARA rule이 무엇인지, 어떻게 구성되어 있으며 왜 유용한지에 대해 쉽고 자세하게 설명해 드리겠습니다.
1. YARA rule 무엇이가
YARA rule은 파일의 내용을 검사하여 미리 정의된 특정 패턴(시그니처)이 존재하는지 확인하는 규칙들의 집합입니다. 마치 수사관이 특정 용의자를 찾기 위해 "파란색 모자, 꽃무늬 티셔츠, 초록색 바지, 뿔태 안경"과 같은 특징 목록을 작성하듯, YARA rule은 파일 내에서 발견될 것으로 예상되는 특징(바이트 시퀀스, 문자열, 파일 크기, PE 섹션 정보 등)을 정의하고, 이 특징들이 특정 조건을 만족하는지를 검사합니다. YARA는 특히 악성코드 연구 및 탐지에 널리 사용되지만, 특정 유형의 파일(예: 특정 설정 파일, 민감 정보 포함 파일)을 식별하거나 분류하는 데도 활용될 수 있습니다.
2. YARA rule의 구조
YARA Rule은 여러 섹션으로 구성됩니다. 가장 기본적인 Rule은 다음과 같은 구조를 가집니다.
rule rule_name
{
meta:
// 규칙에 대한 설명이나 정보
description = "This is an example YARA rule"
author = "Your Name"
date = "2023-10-27"
// 기타 메타데이터...
strings:
// 파일 내에서 찾을 문자열이나 바이트 패턴
$string1 = "MZ" // PE 파일 헤더
$string2 = "This is a suspicious string" ascii wide
$hex_pattern = { 4D 5A ?? 00 } // MZ 뒤에 임의의 바이트가 오고 00이 오는 패턴 (PE 헤더 초입)
condition:
// strings 섹션에서 정의된 패턴들이 어떤 조건을 만족해야 규칙에 탐지될지 정의
$string1 at 0 and $string2 // 파일 시작에 "$string1"이 있고 "$string2"가 존재하면 탐지
// 또는
$string1 at 0 and ($string2 or $hex_pattern) // MZ 헤더가 파일 시작에 있고 $string2나 $hex_pattern 중 하나가 있으면 탐지
// 또는
#string2 > 5 // $string2가 파일 내에 5번 이상 나타나면 탐지
// 또는
filesize > 1MB and $string2 // 파일 크기가 1MB보다 크고 $string2가 존재하면 탐지
}
각 섹션을 자세히 살펴보겠습니다.
- rule rule_name
- 모든 YARA Rule은 rule 키워드로 시작하며, 고유한 규칙 이름이 뒤따릅니다. 이 이름은 나중에 규칙이 탐지되었을 때 결과를 식별하는 데 사용됩니다.
- meta
- 이 섹션은 필수는 아니지만, 규칙에 대한 설명, 작성자, 생성 날짜, 참고 자료(해당 악성코드 샘플의 해시값 등)와 같은 메타데이터를 포함합니다. 이는 규칙 관리 및 이해에 큰 도움이 됩니다. 키-값 형태(key = value)로 작성합니다. 문자열 값은 큰따옴표(")로 묶습니다.
- strings
- 이 섹션은 파일 내에서 찾고자 하는 특정 바이트 시퀀스나 문자열 패턴을 정의합니다. 각 패턴은 $ 기호로 시작하는 변수 이름에 할당됩니다.
- $string1 = "MZ": 일반 문자열을 찾습니다.
- $string2 = "This is a suspicious string" ascii wide: ascii는 ASCII 문자열로, wide는 Unicode (UTF-16) 문자열로도 찾도록 지시합니다. 악성코드에서 문자열을 숨기거나 약간 변형하는 경우에 유용합니다.
- $hex_pattern = { 4D 5A ?? 00 }: 16진수 바이트 패턴을 찾습니다. ??는 어떤 하나의 바이트든 상관없음을 의미하는 와일드카드입니다. 복잡한 바이너리 패턴을 정의할 때 사용합니다.
- condition
- 이 섹션은 YARA Rule의 핵심 논리 부분입니다. strings 섹션에서 정의된 패턴들이 어떤 조건을 만족해야 이 규칙이 "매칭되었다(matched)"고 판단할지 정의합니다.
- 논리 연산자(and, or, not)를 사용하여 여러 조건을 결합할 수 있습니다.
- 변수 이름($string1)만 사용하면 해당 패턴이 파일 내에 존재하는지를 검사합니다.
- #string2: 특정 패턴이 파일 내에 나타난 횟수를 반환합니다. (#string2 > 5는 "$string2"가 5번 이상 나타나면 참)
- $string1 at 0: 특정 패턴이 파일의 특정 오프셋(위치)에 나타나는지를 검사합니다. at 0은 파일의 시작 부분을 의미합니다.
- filesize: 파일 크기를 검사합니다. (filesize > 1MB)
- 이 외에도 다양한 내장 함수나 임포트된 모듈(PE, ELF 등)을 통해 파일의 내부 구조나 속성을 조건으로 활용할 수 있습니다.
3. YARA Rule은 왜 유용할까요?
- 유연하고 정확한 탐지: 단순히 파일의 해시값만 비교하는 것이 아니라, 파일 내부의 다양한 특징들을 조합하여 패턴을 정의하므로 변종 악성코드나 특정 공격 기법을 더 유연하고 정확하게 탐지할 수 있습니다.
- 위협 인텔리전스 공유: YARA Rule은 텍스트 기반 형식이므로 보안 커뮤니티나 조직 간에 위협 정보를 빠르고 쉽게 공유하는 데 효과적입니다. 새로운 악성코드가 발견되면 해당 패턴을 Rule로 만들어 배포할 수 있습니다.
- 자동화와 통합: YARA는 다양한 스크립트나 보안 솔루션에 통합하여 파일 검사 작업을 자동화할 수 있습니다.
- 다양한 활용처: 악성코드 탐지 외에도 특정 유형의 파일 분류, 설정 파일 검사, 민감 정보 유출 탐지 등 다양한 목적으로 활용 가능합니다.
4. YARA 사용해보기
YARA를 사용하려면 먼저 시스템에 YARA를 설치해야 합니다. YARA는 오픈 소스 프로젝트이며, 소스 코드 컴파일 또는 각 운영체제별 패키지 관리자를 통해 설치할 수 있습니다.
설치 후에는 작성한 YARA Rule 파일(.yar 또는 .yara 확장자)을 가지고 특정 파일이나 디렉터리를 스캔할 수 있습니다.
# 특정 규칙 파일로 특정 파일 스캔
yara my_rules.yar /path/to/suspicious_file
# 특정 디렉터리 내의 모든 파일 스캔 (재귀적)
yara -r my_rules.yar /path/to/suspicious_directory
만약 my_rules.yar 파일에 정의된 규칙 중 하나라도 /path/to/suspicious_file에서 매칭되면, 어떤 규칙이 매칭되었는지 결과가 출력됩니다.
5. 추가정보
YARA Rule의 기본적인 구조와 개념에 대해 설명했는데, PE (실행 파일), ELF (리눅스 실행 파일), Cuckoo Sandbox 결과 등 특정 파일 형식이나 도구의 결과를 분석할 수 있는 모듈 임포트 기능, 복잡한 조건 검사를 위한 루프 구문, 규칙 적용 범위를 조절하는 글로벌/프라이빗 규칙 등 다양한 고급 기능들을 제공합니다. 이러한 고급 기능들을 활용하면 더욱 정교하고 효과적인 탐지 규칙을 작성할 수 있습니다.
6. 정리하면
약 5년 전부터 YARA Rule은 보안 업계에서 널리 사용하며 빠른 대응을 위해 공유하는 표준 포멧으로 필수적인 도구 중 하나입니다. 악성코드 여부를 빠르게 식별하기 위해 파일 내부를 들여다보고 특정 패턴을 기반으로 위협을 식별하는 능력은 날이 갈수록 중요해지고 있습니다. 이번 포스팅을 통해 YARA Rule의 기본적인 개념과 구조를 이해하는 데 도움이 되셨기를 바랍니다. 직접 YARA를 설치하고 간단한 Rule을 만들어 테스트 해보세요. 공식 문서(yara.readthedocs.io)는 YARA의 모든 기능을 상세히 설명하고 있으니, 본격적으로 YARA를 활용하고 싶다면 꼭 참고하시길 추천합니다.
설치: https://github.com/VirusTotal/yara/blob/master/docs/index.rst
'IT 관련 > 기초개념' 카테고리의 다른 글
정보보안 vs. 정보보호 헷갈리는 개념, 명확하게 알아보자 (6) | 2025.05.21 |
---|---|
정보보안, 나를 지키는 습관 (5) | 2025.05.20 |
비밀번호 변경, pw 이렇게 만들면 해커도 포기한다 (3) | 2025.05.16 |
SK 유심 해킹, 최악의 시나리오! (5) | 2025.05.15 |
ISMS 인증심사원 취득에 대해 (5) | 2025.05.14 |