본문 바로가기
일반IT/IT보안

[실습] "AI야, 룰 짜줘!" 🤖 선별된 특징으로 YARA 룰 1초 만에 자동 생성하기

by gasbugs 2025. 12. 18.

안녕하세요, 스마트한 보안 분석가 여러분! 🕵️‍♂️💻

지난 시간, 우리는 악성코드 분석의 꽃인 '유니크 시그니처(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 룰 코드를 작성해 주세요.

[입력 데이터]

  1. 룰 이름: Win32_Ransomware_DarkV1
  2. 텍스트 문자열:

"C:\Project\Dark\bot.pdb" (타입: ascii, nocase)

    • "Don't kill my process!" (타입: wide, ascii)
  1. 헥사 스트링:
    • { E8 ?? ?? ?? ?? 85 C0 74 0F } (설명: Key Verification Logic)

[작성 가이드라인 - 중요!]

  1. Meta 섹션: 작성자(Me), 날짜(Today), 설명(Description), 위협 수준(High)을 포함하세요.
  2. Strings 섹션: 변수명은 $s_pdb, $s_msg, $h_logic 처럼 직관적으로 지어주세요.
  3. Condition 섹션:
    • 파일 헤더가 MZ (uint16(0) == 0x5A4D) 인지 먼저 확인하세요. (최적화)
    • 그리고(AND) 헥사 스트링은 반드시 포함되게 하고, 텍스트 문자열은 적어도 1개 이상 발견되면 탐지하도록 논리를 구성하세요.
  4. 주석: 각 섹션과 문자열에 대해 간략한 주석(//)을 달아주세요.

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가 잘 짰는지 분석가의 눈으로 확인해야 합니다.

  1. 이스케이프 문자: 경로에 역슬래시(\)가 두 번(\\) 잘 들어갔나요? (YARA에서는 \를 특수문자로 인식하므로 \\로 써야 함. AI가 이걸 기가 막히게 처리합니다! 👍)
  2. 변수명: $s_pdb, $h_logic 처럼 우리가 요청한 대로 예쁘게 지어졌나요?
  3. 조건(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 룰 파일을 가지고 "실제 악성코드 샘플들을 스캔하여 제대로 탐지하는지 테스트"하는 실습을 진행하겠습니다. 내가 만든 백신이 작동하는 짜릿한 순간을 기대해 주세요! 🛡️✨