안녕하세요, 보안 분석가 여러분! 🛡️
범죄 현장에서 범인의 지문이 결정적인 단서가 되듯, 디지털 세계의 범죄인 '악성코드' 분석에서도 결정적인 단서가 존재합니다. 바로 '고유 문자열(Unique Strings)'과 '시그니처(Signature)'입니다.
특정 해커 그룹이나 악성코드 패밀리(Family)는 코드를 짤 때 그들만의 습관, 고유한 C&C 서버 주소, 특이한 뮤텍스(Mutex) 이름 등을 남기기 마련입니다. 이것을 찾아내는 것이 분석의 첫걸음이자, 탐지 룰(YARA 등)을 만드는 핵심입니다.
오늘은 복잡한 역공학 도구 없이, 바이너리 속에 숨겨진 텍스트 데이터만으로 악성코드의 정체를 밝히는 실습을 진행해 보겠습니다. 🔍

🛑 주의사항: 안전 제일!
절대로! 실제 호스트 PC에서 악성코드 샘플을 실행하거나 분석하지 마세요. 반드시 외부와 격리된 가상머신(VM, 샌드박스) 환경에서 실습을 진행해야 합니다.
1. '문자열(Strings)'이란 무엇인가요? 🤔
우리가 보는 실행 파일(.exe, .dll 등)은 0과 1로 이루어진 기계어 덩어리입니다. 하지만 이 안에는 사람(또는 프로그램)이 읽을 수 있는 정보들도 포함되어 있습니다.
- API 함수 이름: CreateFile, InternetOpenUrl (어떤 행위를 할지 힌트 제공)
- 네트워크 정보: C&C 서버 IP 주소, 도메인 URL
- 파일 경로 및 레지스트리 키: 자가 복제 경로, 부팅 시 자동 실행 등록 키
- 개발자 정보: PDB(프로그램 디버그 데이터베이스) 경로, 특이한 에러 메시지, 오타
우리의 목표는 수만 줄의 무의미한 데이터 속에서 위와 같은 '의미 있는 정보(알맹이)'를 골라내는 것입니다.
2. 실습 준비물 🛠️
가장 기초적이지만 강력한 도구를 사용합니다.
- 분석 대상 샘플: (안전한 실습용 샘플 또는 가상환경 내의 실제 샘플)
- Strings 도구:
- Linux/macOS: 기본 내장된 strings 명령어
- Windows: Sysinternals의 strings.exe (강추!) 또는 PEStudio 같은 GUI 도구
💡 팁: 이번 실습에서는 커맨드 라인 기반의 strings 명령어를 기준으로 설명합니다. 가장 빠르고 원시적인 데이터를 볼 수 있기 때문입니다.
3. [실습 Step 1] 노이즈 속으로: 문자열 추출 실행 📣
악성코드 샘플 파일이 준비되었다면, 터미널(또는 CMD)을 열고 아래 명령어를 입력해 봅시다.
Bash
# 리눅스/맥 기준 (최소 8글자 이상만 추출)
strings -n 8 malware_sample.exe > output_strings.txt
# 윈도우(Sysinternals) 기준 (최소 8글자, ASCII 및 유니코드 모두 추출)
strings.exe -n 8 -a -u malware_sample.exe > output_strings.txt
- -n 8 옵션: 너무 짧은 문자열(예: MZ, cmd)은 노이즈일 확률이 높습니다. 최소 8글자 이상만 추출하여 노이즈를 줄입니다.
- > output.txt: 화면에 쏟아지는 결과를 파일로 저장합니다.
결과 확인:
생성된 output_strings.txt 파일을 메모장으로 열어보세요. 수천 줄의 텍스트가 보일 겁니다. 대부분은 쓰레기 값이나 정상적인 라이브러리 이름입니다. 이제부터 '숨은그림찾기'가 시작됩니다. 👀
4. [실습 Step 2] 보물찾기: 고유 시그니처 식별 💎
저장된 텍스트 파일에서 아래 유형의 문자열들을 집중적으로 찾아보세요. 이것들이 바로 특정 패밀리를 식별하는 강력한 시그니처가 됩니다.
A. 네트워크 지표 (IOCs) 🌐
가장 중요합니다. 악성코드가 어디랑 통신하려는지 찾아야 합니다.
- 패턴: http://, https://, IP 주소 형식 (xxx.xxx.xxx.xxx)
- 발견 예시: http://bad-hacker-domain.xyz/gate.php, 192.168.100.50:8080
- 👉 분석 포인트: 이 도메인이 과거 어떤 악성코드 캠페인에 사용되었는지 위협 인텔리전스 서비스(VirusTotal 등)에 검색해 봅니다.
B. PDB 경로 (개발자의 흔적) 👣
정말 운이 좋으면 발견할 수 있는 최고의 정보입니다. 개발자가 코드를 빌드할 때 남는 디버깅 정보 파일 경로입니다.
- 패턴: .pdb로 끝나는 경로 문자열
- 발견 예시: C:\Users\DarkCoder\Projects\Ransomware_v2\Release\payload.pdb
- 👉 분석 포인트: 사용자 이름(DarkCoder)이나 프로젝트 이름(Ransomware_v2)은 그 자체로 매우 강력한 패밀리 시그니처가 됩니다. 구글링하면 동일범의 다른 악성코드가 나올 수도 있습니다!
C. 뮤텍스(Mutex) 및 고유 문자열 🔒
악성코드는 중복 실행을 방지하기 위해 '뮤텍스'라는 것을 만듭니다. 이 이름이 특이할수록 좋은 시그니처가 됩니다.
- 패턴: 특이하고 유니크한 영문+숫자 조합
- 발견 예시: Global\{A1B2C3D4-E5F6-7890-abcd-ef1234567890}, MyMalwareMutex_v1
- 👉 분석 포인트: 이 뮤텍스 이름을 탐지 룰에 넣으면 해당 패밀리를 정확하게 잡아낼 수 있습니다.
D. 특이한 오타나 메시지 📝
해커도 사람입니다. 오타를 내거나 그들만의 독특한 메시지를 남깁니다.
- 발견 예시: 랜섬노트의 특이한 문구 (All y0ur files are encrypted!), 코드 내부의 욕설이나 주석
- 👉 분석 포인트: 일반적인 프로그램에서는 절대 볼 수 없는 오타나 문장은 아주 훌륭한 시그니처입니다.
5. [심화] AI를 활용한 노이즈 필터링 🤖
추출된 문자열이 1만 줄이 넘어간다면 눈으로 다 보기 힘들겠죠? 이때 우리의 AI 조수(ChatGPT 등)를 활용할 수 있습니다.
💡 AI 프롬프트 예시:
"나는 악성코드에서 추출한 문자열 리스트를 가지고 있어. 아래 리스트에서 일반적인 윈도우 API 함수나 라이브러리 이름은 제외하고, 악성 행위와 관련 있을 법한 의심스러운 문자열(IP, URL, 레지스트리 키, 파일 경로, 특이한 메시지)만 필터링해서 보여줘."
(문자열 리스트 붙여넣기)
AI는 정상적인 시스템 문자열(노이즈)을 빠르게 걸러내고, 분석가가 집중해야 할 후보군을 좁혀주는 데 큰 도움을 줍니다.
🎉 마치며: 이것이 탐지 룰의 시작입니다!
오늘 실습을 통해 추출한 '고유 문자열'들은 단순한 텍스트가 아닙니다.
- http://bad-domain.xyz ➡️ 네트워크 차단 정책
- C:\Users\DarkCoder\...pdb ➡️ YARA 룰 작성의 핵심 조건
이처럼 분석가가 찾아낸 작은 문자열 하나가 조직 전체를 보호하는 강력한 방패가 될 수 있습니다.
처음엔 쓰레기 값만 보일 수도 있지만, 계속 보다 보면 악성코드만의 '냄새'를 맡을 수 있게 될 겁니다. 포기하지 말고 계속 파고들어 보세요! 화이팅! 💪
'일반IT > IT보안' 카테고리의 다른 글
| [실습] "이 코드 위험한가요?" 🤖 AI에게 악성코드 판별 맡기고 근거까지 완벽하게 받아내는 법 (0) | 2025.12.14 |
|---|---|
| [실습] "이거 아까 걔 아냐?" 👯♂️ 악성코드 원본 vs 변종, AI로 유전자 검사(유사도 분석) 하기 (0) | 2025.12.14 |
| [실습] "너, 행동이 좀 수상한데?" 🤨 정상 파일 vs 악성 파일, API 호출 비교로 잡아내기! (AI 활용법) (0) | 2025.12.12 |
| [이론] C언어 vs 어셈블리어, 완벽 매핑 가이드! 🧩 (리버싱의 기초 체력 다지기) (0) | 2025.12.12 |
| [심화] 실행 버튼 누르지 마세요! 🚫 AI로 악성코드의 미래를 예언하는 법 🔮 (정적 분석의 꽃, 동작 예측) (0) | 2025.12.12 |