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

[실습] AI에게 "제대로" 질문하는 법! 🗣️ 악성코드 분석을 위한 프롬프트 엔지니어링 A to Z

by gasbugs 2025. 12. 11.

안녕하세요! 보안 연구원 여러분 🕵️‍♂️

 

지난 시간에는 Hello World 프로그램을 기드라(Ghidra)로 열어보고 AI에게 간단히 질문하는 법을 배웠습니다. 그런데 말이죠, AI라고 해서 항상 찰떡같이 알아듣는 건 아닙니다. "이 코드 설명해줘" 라고 대충 물어보면, AI도 "그냥 C언어 코드네요" 하고 대충 대답합니다. 이걸 우리는 GIGO(Garbage In, Garbage Out) 라고 하죠. 🗑️

 

오늘은 똑같은 AI를 쓰더라도 남들보다 10배 더 정확하고 깊이 있는 분석 결과를 얻어내는 비결, '보안 특화 프롬프트 엔지니어링'에 대해 배워보겠습니다. 우리는 이제 단순한 질문자가 아니라, AI를 지휘하는 '프롬프트 엔지니어'가 되는 겁니다! 🚀

 

 


1. 프롬프트 엔지니어링이 뭐죠? 🤷

프롬프트(Prompt)는 AI에게 건네는 '명령어'나 '질문'을 뜻합니다. 프롬프트 엔지니어링은 "AI가 내가 원하는 최상의 답변을 내놓도록 질문을 정교하게 디자인하는 기술"입니다.

악성코드 분석에서 좋은 프롬프트는 다음과 같은 구조를 가집니다.

✨ 마법의 공식: [페르소나(역할)] + [컨텍스트(배경)] + [데이터(코드)] + [지시사항(목표)] + [출력 형식]

이 공식을 하나씩 뜯어볼까요?


2. STEP 1: 페르소나 설정 (너의 정체는?) 🎭

AI에게 역할을 부여하면 답변의 품질이 확 달라집니다. 그냥 물어보면 '일반인' 수준에서 답하지만, 전문가 역할을 주면 전문 용어를 사용해 깊이 있게 분석합니다.

  • ❌ 나쁜 예: "이 코드 뭐야?"
  • ✅ 좋은 예: "당신은 10년 차 경력의 악성코드 분석 전문가(Senior Malware Analyst)입니다. 보안 관제 및 침해 사고 대응(CERT) 관점에서 답변해주세요."

이렇게 역할을 주면 AI는 갑자기 태도를 바꾸고 '공격자의 의도', 'IoC(침해 지표)' 같은 보안 핵심 정보를 찾으려 노력합니다.


3. STEP 2: 질문 최적화 실습 (Before & After) 🧪

실제 악성코드에서 흔히 볼 수 있는 '소켓 연결(네트워크 통신)' 코드를 예시로 비교해 보겠습니다.

📝 분석 대상 코드 (C언어)

// 분석할 코드 조각
WSADATA wsa;
WSAStartup(MAKEWORD(2,2), &wsa);
s = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(4444);
addr.sin_addr.s_addr = inet_addr("192.168.0.10");
connect(s, (struct sockaddr*)&addr, sizeof(addr));

😱 [Before] 초보자의 질문

프롬프트: "아래 코드 설명해줘."

AI의 답변(예시): "이 코드는 윈도우 소켓을 초기화하고, 192.168.0.10 IP의 4444 포트로 TCP 연결을 시도하는 코드입니다. socket 함수와 connect 함수를 사용했습니다."

 

👉 문제점: 틀린 말은 아니지만, 이게 왜 위험한지, 분석가가 뭘 해야 하는지 정보가 없습니다. 그냥 '번역'만 해준 셈이죠.


🤩 [After] 프롬프트 엔지니어링 적용

프롬프트: "역할: 당신은 사이버 보안 전문가입니다. 배경: 나는 의심스러운 실행 파일에서 아래 코드 조각을 추출했습니다. 이 코드는 사용자의 동의 없이 실행된 것으로 추정됩니다. 목표:

  1. 이 코드의 행위적 목적을 분석하세요. (예: 백도어, 다운로더 등)
  2. 공격자가 이 코드를 통해 얻고자 하는 것이 무엇인지 추론하세요.
  3. 분석가가 차단해야 할 네트워크 IoC(침해 지표) 정보를 추출하세요. 형식: 핵심 내용을 불릿 포인트로 요약해서 작성하세요.

코드: [코드 붙여넣기]"

AI의 답변(예시): 🔍 보안 분석 보고서

  • 행위 분석: 이 코드는 전형적인 리버스 쉘(Reverse Shell) 또는 C2(Command & Control) 서버 연결 시도입니다. 특정 IP로 연결을 능동적으로 맺고 있습니다.
  • 공격 의도:
    • 외부 공격자 서버(C2)와 통신 채널 수립
    • 추가 악성 페이로드 다운로드 또는 원격 제어 명령 수신 대기
  • 주요 IoC (차단 필요):
    • Target IP: 192.168.0.10 (내부망 IP처럼 보이지만, 실제 공격에선 공인 IP일 것임)
    • Target Port: 4444 (메타스플로잇 등 해킹 툴의 기본 포트로 자주 사용됨 🚩)

 

👉 차이점: 보이시나요? 단순한 '연결'이 아니라 '리버스 쉘', 'C2', '메타스플로잇 기본 포트' 같은 인사이트를 제공합니다! 이게 바로 우리가 원하는 분석입니다.


4. 꿀팁: 꼬리에 꼬리를 무는 질문 (Chain of Thought) 🔗

한 번의 질문으로 끝내지 마세요. AI의 답변을 바탕으로 더 깊게 파고들어야 합니다.

  1. 반박하기: "이게 정상적인 네트워크 관리 프로그램일 가능성은 없어? 오탐(False Positive) 가능성을 체크해줘."
  2. 대응 요구하기: "이 공격을 탐지하기 위한 YARA Rule을 작성해줘."
  3. 설명 요구하기: "초급 관제 요원에게 이 위협을 설명할 수 있도록 쉬운 말로 요약해줘."

5. 나만의 '치트키' 프롬프트 저장하기 💾

매번 길게 치기 힘들죠? 메모장이나 노션(Notion)에 나만의 프롬프트 템플릿을 저장해두고 쓰세요.

 

[Template: 악성코드 분석용]

Role: Senior Malware Researcher
Task: Analyze the following assembly/C code snippet.
Details:
1. Identify the malicious functionality (Keylogging, Ransomware, RAT, etc.).
2. Explain the logic step-by-step.
3. Highlight crucial API calls and their parameters.
Format: Markdown Table
Code:
[Insert Code Here]

🎉 마무리

오늘 우리는 AI에게 "누구(전문가)"가 되어 "어떻게(보안 관점)" 대답해야 하는지 알려주는 방법을 배웠습니다. 이 기술은 악성코드 분석뿐만 아니라 보고서 작성, 이메일 대응 등 모든 업무에 적용할 수 있는 핵심 역량입니다.

다음 시간에는 이 기술을 활용해서, 사람이 읽기 힘들게 꼬아놓은 '난독화(Obfuscation)된 스크립트'를 AI와 함께 풀어헤치는 실습을 진행하겠습니다. 기대해 주세요! 🔥

궁금한 점은 언제든 댓글로 남겨주세요! 👇