안녕하세요, 스마트한 보안 분석가 여러분! 🕵️♂️💻
지난 시간, 우리는 악성코드 분석의 꽃인 '유니크 시그니처(Unique Signature)'를 선별해냈습니다. 해커가 실수로 남긴 오타, 프로젝트 경로, 그리고 절대 변하지 않는 핵심 기계어 코드(Hex)까지... 아주 훌륭한 재료들이 모였죠? 🥩🥦🥕
이제 이 재료들을 가지고 YARA 룰(YARA Rule)이라는 '요리'를 완성할 차례입니다. 하지만 YARA 문법(rule, meta, strings, $a = ...)을 일일이 타이핑하다 보면 오타도 나고, 괄호 짝이 안 맞아 에러가 나기도 합니다.
그래서 오늘은 AI(ChatGPT, Claude 등)에게 우리가 찾은 특징만 툭 던져주고, 완벽한 문법의 YARA 룰 코드를 짜달라고 시키는 프롬프트 엔지니어링 실습을 진행하겠습니다.
단 1분 만에 전문가 수준의 룰 파일을 만들어봅시다! ⏱️🚀

1. 📋 준비물: 지난 시간의 결과물
지난 실습에서 정리했던 '나만의 지문 리스트'를 준비해주세요. (예시 데이터는 아래와 같습니다.)
- 악성코드 명: Ransomware_DarkV1
- 텍스트 문자열 1: "C:\Project\Dark\bot.pdb" (PDB 경로)
- 텍스트 문자열 2: "Don't kill my process!" (특이한 메시지)
- 헥사 스트링: { E8 ?? ?? ?? ?? 85 C0 74 0F } (핵심 함수 호출 및 분기)
2. 🗣️ [실습 Step 1] AI에게 "너는 YARA 전문가야" 최면 걸기
AI가 대충 짜주는 것을 방지하기 위해, '시니어 분석가'의 페르소나를 부여하고 '엄격한 문법 준수'를 요구해야 합니다.
🏗️ YARA 생성 마스터 프롬프트
아래 내용을 복사해서 AI에게 입력하세요. (괄호 안의 내용은 여러분의 데이터로 채우세요!)
[역할 부여] 당신은 15년 경력의 악성코드 분석가이자 YARA 룰 작성 전문가입니다.
[작업 요청] 내가 제공하는 '선별된 특징(Features)'들을 바탕으로, 해당 악성코드를 탐지할 수 있는 유효한 YARA 룰 코드를 작성해 주세요.
[입력 데이터]
- 룰 이름: Win32_Ransomware_DarkV1
- 텍스트 문자열:
"C:\Project\Dark\bot.pdb" (타입: ascii, nocase)
- "Don't kill my process!" (타입: wide, ascii)
- 헥사 스트링:
- { E8 ?? ?? ?? ?? 85 C0 74 0F } (설명: Key Verification Logic)
[작성 가이드라인 - 중요!]
- Meta 섹션: 작성자(Me), 날짜(Today), 설명(Description), 위협 수준(High)을 포함하세요.
- Strings 섹션: 변수명은 $s_pdb, $s_msg, $h_logic 처럼 직관적으로 지어주세요.
- Condition 섹션:
- 파일 헤더가 MZ (uint16(0) == 0x5A4D) 인지 먼저 확인하세요. (최적화)
- 그리고(AND) 헥사 스트링은 반드시 포함되게 하고, 텍스트 문자열은 적어도 1개 이상 발견되면 탐지하도록 논리를 구성하세요.
- 주석: 각 섹션과 문자열에 대해 간략한 주석(//)을 달아주세요.
3. 📤 [실습 Step 2] AI가 작성한 코드 확인 및 검증
위 프롬프트를 입력하면, AI는 아래와 같이 깔끔하게 포맷팅 된 코드를 뱉어냅니다.
🤖 AI 생성 결과 (예시)
rule Win32_Ransomware_DarkV1 {
meta:
author = "Me"
date = "2025-12-16"
description = "Detects DarkV1 Ransomware based on PDB path and unique strings"
severity = "High"
version = "1.0"
strings:
// PDB Path found in the binary (Unique identifier)
$s_pdb = "C:\\Project\\Dark\\bot.pdb" ascii nocase
// Suspicious message displayed to user
$s_msg = "Don't kill my process!" wide ascii
// Key Verification Logic (Function Call + Test + JZ)
// Wildcards (??) used for variable address
$h_logic = { E8 ?? ?? ?? ?? 85 C0 74 0F }
condition:
// 1. Check for valid Windows PE Header (Magic Number MZ)
uint16(0) == 0x5A4D and
// 2. File size check to reduce false positives (Optional but recommended)
filesize < 5MB and
// 3. Main Detection Logic:
// Hex signature MUST exist AND at least one text string
$h_logic and ($s_pdb or $s_msg)
}
🔍 검증 포인트 (Human Verification) AI가 잘 짰는지 분석가의 눈으로 확인해야 합니다.
- 이스케이프 문자: 경로에 역슬래시(\)가 두 번(\\) 잘 들어갔나요? (YARA에서는 \를 특수문자로 인식하므로 \\로 써야 함. AI가 이걸 기가 막히게 처리합니다! 👍)
- 변수명: $s_pdb, $h_logic 처럼 우리가 요청한 대로 예쁘게 지어졌나요?
- 조건(Condition) 논리:
- uint16(0) == 0x5A4D (헤더 검사)가 맨 앞에 있나요? (속도 최적화 필수)
- $h_logic and ($s_pdb or $s_msg) 괄호 처리가 논리적으로 맞나요?
4. 💡 꿀팁: 조건(Condition)을 더 스마트하게!
만약 오탐(False Positive)이 걱정된다면, AI에게 "조건을 좀 더 엄격하게 수정해줘"라고 요청할 수 있습니다.
[추가 요청 프롬프트] "Condition 섹션을 수정해줘. 헥사 스트링은 무조건 있어야 하고, 텍스트 문자열은 2개가 모두(ALL) 있어야 탐지되도록 바꿔줘. 그리고 파일 크기가 2MB 미만일 때만 검사하도록 추가해줘."
이렇게 하면 AI가 and ($s_pdb and $s_msg)로 바꾸고 filesize < 2MB 조건을 추가해 줄 것입니다.
5. ⚠️ 주의할 점: AI의 '할루시네이션' 체크
가끔 AI가 YARA에 없는 문법을 창조할 때가 있습니다. (특히 정규표현식 부분에서)
- Tip: 생성된 코드를 VS Code (YARA 확장 프로그램 설치) 같은 에디터에 붙여넣어 보세요. 문법 오류가 있으면 빨간 줄이 뜹니다. 🖍️
🎉 마치며: 이제 '복붙'만 하면 끝!
축하합니다! 👏 이제 여러분은 복잡한 YARA 매뉴얼을 뒤적거리지 않고도, "특징 발견 -> AI에게 요청 -> 코드 생성"의 3단계로 순식간에 탐지 룰을 만들 수 있게 되었습니다.
이 방식은 특히 급박하게 돌아가는 보안 관제(SOC)나 침해 사고 대응(CERT) 현장에서 빛을 발합니다. 분석가는 '특징'을 찾는 데 집중하고, '코딩'은 AI에게 맡기는 효율적인 분업이죠.
다음 시간에는 이렇게 만들어진 YARA 룰 파일을 가지고 "실제 악성코드 샘플들을 스캔하여 제대로 탐지하는지 테스트"하는 실습을 진행하겠습니다. 내가 만든 백신이 작동하는 짜릿한 순간을 기대해 주세요! 🛡️✨
'일반IT > IT보안' 카테고리의 다른 글
| [실습] 악성코드의 '지문'을 채취하라! 🕵️♂️ 강력한 탐지를 위한 유니크 헥사(Hex) & 문자열 선별 기술 (0) | 2025.12.18 |
|---|---|
| [이론] 악성코드 사냥꾼의 필수 무기! 🏹 YARA 룰 문법 완전 정복 (Meta, Strings, Condition) (0) | 2025.12.18 |
| [심화] "분석 끝난 줄 알았지?" 🕵️♂️ AI가 알려주는 '놓친 증거' 찾는 법 (의도 기반 아티팩트 추천) (0) | 2025.12.18 |
| [실습] "해커와 무슨 얘기를 나눴니?" 📡 C&C 서버 통신 패킷 분석 및 킬체인(Kill Chain) 분류 (0) | 2025.12.18 |
| [실습] "범행 시각, 14시 30분!" ⏱️ 악성 행위 타임라인(Timeline) 재구성과 시나리오 완성하기 (0) | 2025.12.18 |