안녕하세요! 보안 연구원 여러분 🕵️♂️
지난 시간에는 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] 프롬프트 엔지니어링 적용
프롬프트: "역할: 당신은 사이버 보안 전문가입니다. 배경: 나는 의심스러운 실행 파일에서 아래 코드 조각을 추출했습니다. 이 코드는 사용자의 동의 없이 실행된 것으로 추정됩니다. 목표:
- 이 코드의 행위적 목적을 분석하세요. (예: 백도어, 다운로더 등)
- 공격자가 이 코드를 통해 얻고자 하는 것이 무엇인지 추론하세요.
- 분석가가 차단해야 할 네트워크 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의 답변을 바탕으로 더 깊게 파고들어야 합니다.
- 반박하기: "이게 정상적인 네트워크 관리 프로그램일 가능성은 없어? 오탐(False Positive) 가능성을 체크해줘."
- 대응 요구하기: "이 공격을 탐지하기 위한 YARA Rule을 작성해줘."
- 설명 요구하기: "초급 관제 요원에게 이 위협을 설명할 수 있도록 쉬운 말로 요약해줘."
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와 함께 풀어헤치는 실습을 진행하겠습니다. 기대해 주세요! 🔥
궁금한 점은 언제든 댓글로 남겨주세요! 👇
'일반IT > IT보안' 카테고리의 다른 글
| [실습] "AI야, 그 말 진짜야?" 🤨 AI 분석 결과와 어셈블리(Assembly) 코드 교차 검증하기 (0) | 2025.12.11 |
|---|---|
| [실습] 복잡한 함수도 3초 컷? ⏱️ 기드라(Ghidra)로 추출하고 AI로 요약하는 실전 분석 루틴! (0) | 2025.12.11 |
| [실습] 내 생애 첫 리버스 엔지니어링! 🧑💻 'Hello World'를 기드라(Ghidra)로 뜯어보고 AI에게 물어보자 (0) | 2025.12.11 |
| [보안 스터디] 악성코드 분석, 이제 AI랑 같이 하자! 🤖 (Ghidra + ChatGPT 환경 구축 가이드) (0) | 2025.12.11 |
| 🚨 [속보] 2025년 11월, 드디어 공개된 'OWASP Top 10 2025' 완벽 분석! (0) | 2025.12.11 |