Step 168. 악성코드 구조: 트로이목마와 랜섬웨어 — 만들지 않고 해부하기
Level 2 — 보안 입문과 공격 스킬 기초 | 난이도 ★★★☆☆ | 예상 소요 시간 3시간
전제: Step 167(사회공학)을 마쳤다. 피싱이 "침투 경로"라는 것을 안다.
- 준비물: 텍스트 에디터(분류표 작성용), 인터넷 검색(공개 분석 리포트 읽기용)
- 성격 안내: 오늘은 [개념] 챕터입니다. 악성코드를 만들거나 실행하는 실습은 없습니다. 구조 설명과 텍스트 다이어그램, 공개 분석 결과 읽기만 진행합니다.
- 윤리·법적 경계: 악성코드 작성·유포는 정보통신망법상 중대한 범죄이며, "공부용으로 만들었다"는 변명은 통하지 않습니다. 샘플 다운로드도 이 단계에서는 금지 — 오늘의 전부는 구조 이해와 방어자 관점의 분석입니다.
악성코드 뉴스는 매주 나오지만, 정작 "그것이 내부에서 어떻게 생겼는가"를 아는 사람은 드뭅니다. 트로이목마와 웜과 랜섬웨어는 뉴스에서는 비슷한 단어처럼 섞이지만, 구조는 완전히 다릅니다 — 번식 방식이 다르고, 숨는 방식이 다르고, 돈을 버는 방식이 다릅니다.
오늘은 악성코드를 네 종류로 해부하고, 모든 악성코드가 공유하는 생애주기(침투 → 실행 → 지속화 → 목적 수행)를 그립니다. 마지막엔 랜섬웨어의 암호화 흐름을 개념도로 뜯어봅니다. 코드는 한 줄도 쓰지 않지만, 끝나고 나면 악성코드 분석 리포트가 읽히기 시작할 것입니다 — 그것이 오늘의 목표입니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 바이러스/웜/트로이목마/랜섬웨어를 번식 방식 기준으로 구분한다
- 악성코드의 생애주기 4단계를 설명하고 각 단계의 탐지 포인트를 짚는다
- 다운로더·드로퍼·C2 통신이 왜 단계를 나누는 구조인지 설명한다
- 랜섬웨어의 암호화 흐름(하이브리드 암호화)을 개념도로 설명한다
- 공개 분석 리포트와 샌드박스 리포트를 읽는 법을 안다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 개념 중심 + 읽기 전용 실측 1건 (윈도우 레지스트리 조회) |
| 오늘의 명령 | reg query "HKCU\...\Run" (읽기 전용 — 지속화 위치 구경) |
| 필요한 개념 | 악성코드 4분류, 생애주기, 페이로드 단계화, 하이브리드 암호화, 샌드박스 |
| 오늘의 산출물 | 분류표 1장 + 생애주기 도식 + 랜섬웨어 암호화 개념도 |
2-1. 네 종류의 해부 — 기준은 "번식 방식"
| 종류 | 번식·침투 방식 | 위장 | 대표 사례 |
|---|---|---|---|
| 바이러스 | 숙주 파일에 기생 — 그 파일이 실행돼야 퍼짐 | 숙주 그 자체 | 초창기 부트/파일 감염형 |
| 웜 | 스스로 복제해 네트워크로 번식 — 숙주 불필요 | 없음 | WannaCry(전파 부분) |
| 트로이목마 | 번식 안 함 — 사용자가 "정상 프로그램"으로 직접 설치 | 정상 앱 위장 | 가짜 유틸, 크랙 프로그램 |
| 랜섬웨어 | 침투 후 파일을 암호화해 인질로 | 다양 | WannaCry(암호화 부분), LockBit |
읽는 법: 분류 기준은 "무슨 짓을 하느냐"가 아니라 "어떻게 퍼지느냐"입니다. WannaCry가 두 칸에 걸쳐 있는 이유가 여기 있습니다 — 네트워크로 스스로 번식한 부분은 웜이고, 파일을 암호화해 돈을 요구한 부분은 랜섬웨어입니다. 실제 악성코드는 이렇게 조합형이 많습니다.
2-2. 생애주기 4단계 — 모든 악성코드의 공통 뼈대
① 침투 → ② 실행 → ③ 지속화 → ④ 목적 수행
(피싱, 취약점) (사용자 클릭) (재부팅에도 생존) (암호화, 정보 탈취, C2)
- ① 침투: 대부분 Step 167의 피싱이거나, 패치 안 된 취약점입니다. 기술과 심리의 경계가 여기서 만납니다.
- ② 실행: 문서의 매크로, 첨부 실행 파일 등. "정상 프로그램이 이상한 자식 프로세스를 띄우는" 장면.
- ③ 지속화(persistence): 재부팅해도 살아남는 장치 — 윈도우 Run 키, 서비스 등록, 리눅스 cron. 방어자의 핵심 탐지 포인트.
- ④ 목적 수행: 파일 암호화(랜섬), 정보 탈취(스파이웨어), 원격 조종(C2 통신).
각 단계는 방어자의 기회입니다. 생애주기를 외우는 이유는 "어디서 끊을 수 있는가"를 아는 것이 방어이기 때문입니다. ①은 피싱 훈련과 패치가, ②는 실행 정책이, ③은 자동시작 위치 감시가, ④는 외부 통신 차단과 백업이 담당합니다. 네 단계 전부를 뚫려야 피해가 완성되므로, 어느 한 곳이라도 끊으면 됩니다 — 방어는 네 번의 기회를 갖습니다.
역으로 공격자는 네 단계를 전부 성공시켜야 합니다. 이 비대칭 — 공격은 전 단계 성공, 방어는 한 단계 차단 — 이 생애주기를 배우는 진짜 이유입니다.
2-3. 왜 단계를 나누는가 — 다운로더와 드로퍼
실제 악성코드는 처음 침투하는 조각이 작습니다. 다운로더(downloader)는 수십 KB의 1단계로, 침투 후 본체(2단계 페이로드)를 인터넷에서 내려받습니다. 드로퍼(dropper)는 본체를 자기 안에 품고 있다가 풀어놓습니다.
단계를 나누는 이유는 탐지 회피입니다. 작고 단순한 1단계는 백신의 시그니처에 잘 안 걸리고, 본체는 필요할 때 가져오므로 분석도 어렵습니다. 그리고 본체가 받는 명령의 출처가 C2(Command & Control) 서버 — 악성코드가 주기적으로 "다음 할 일"을 물어보는 지휘소입니다. 샌드박스 리포트의 네트워크 항목에 나오는 수상한 접속이 대부분 이것입니다.
2-4. 랜섬웨어의 암호화 흐름 — 왜 복구가 안 되는가
랜섬웨어의 강력함은 암호학의 정당한 활용에서 나옵니다. 개념도로 봅시다.
[피해자 PC] [공격자]
① 감염된 PC에서 대칭키(AES) 생성
② 파일들을 대칭키로 고속 암호화 ← 파일이 잠기는 지점
③ 대칭키를 공격자의 공개키(RSA)로 암호화 ← 열쇠의 열쇠
④ 원본 대칭키 삭제
⑤ 몸값 요구 화면 표시 개인키는 여기에만 있음
핵심은 ③~④입니다. 파일을 잠근 대칭키조차 공격자의 공개키로 잠겨 버리고, 여는 개인키는 공격자 서버에만 있습니다. 이것이 하이브리드 암호화 — 빠른 대칭키로 대량을, 안전한 공개키로 열쇠를. 웹의 TLS(Step 110~111)와 같은 원리가 반대 목적으로 쓰인 것입니다.
그래서 방어의 결론은 "풀기"가 아니라 "되돌리기"입니다 — 오프라인 백업. 암호를 푸는 것이 아니라 잠기기 전의 상태로 돌아가는 것이 유일한 확실한 대응입니다.
2-5. WannaCry — 교과서가 된 사건
2017년 WannaCry는 이 챕터의 거의 모든 개념을 한 사건에 담았습니다. SMB 취약점(EternalBlue)으로 스스로 번식한 웜 + 파일을 암호화한 랜섬웨어의 조합형이었고, 전 세계 병원·기업을 마비시켰습니다.
그리고 분석가 마커스 허친스가 발견한 명장면: 악성코드가 실행 시 특정 도메인에 접속을 시도하고, 응답이 오면 확산을 멈추도록 설계돼 있었습니다. 그는 그 미등록 도메인을 등록해 응답하게 만들었고, 전파가 멈췄습니다 — 이것이 유명한 킬 스위치입니다. 악성코드의 논리를 읽은 분석가가 그 논리로 되돌린 사건입니다. 오늘의 미션에서 관련 리포트를 직접 읽습니다.
3. 따라 하기
3-1. 분류표 완성하기
2-1의 표를 책을 보지 않고 다시 쓴 뒤, 각 칸에 사례를 하나씩 추가합니다. 기준 문장을 스스로에게 묻는 연습입니다.
- "이것은 스스로 퍼지는가?" → 예: 웜 / 아니오: 다음 질문
- "숙주 파일에 기생하는가?" → 예: 바이러스
- "사용자가 정상 프로그램인 줄 알고 설치하는가?" → 예: 트로이목마
- "목적 수행이 파일 암호화 + 몸값인가?" → 예: 랜섬웨어
읽는 법: 랜섬웨어는 번식 방식이 아니라 목적 기준의 분류라 다른 셋과 축이 다릅니다. 그래서 "웜+랜섬웨어" 같은 조합이 성립합니다 — 분류표의 축이 다르다는 것을 발견하면 오늘 절반은 이해한 것입니다.
뉴스에 등장하는 다른 이름들도 이 표에 걸 수 있습니다. 스파이웨어(정보를 몰래 빼돌림)와 키로거(입력을 도청)는 목적 칸의 변형이고, 백도어(몰래 열어 둔 뒷문)는 ④ 목적 수행의 한 형태입니다. 새 이름을 만날 때마다 "침투 방식은 무엇이고 목적은 무엇인가"라는 두 질문으로 분해하세요 — 대부분 이 표의 조합으로 설명됩니다.
3-2. 지속화 위치 구경 — Run 키 (읽기 전용 실측)
③ 지속화가 추상적이지 않음을 확인합니다. 윈도우에서 로그인할 때마다 자동 실행되는 프로그램 목록이 적힌 곳 — 악성코드가 가장 사랑하는 주소 중 하나입니다. 읽기만 합니다. 아무것도 추가·삭제하지 않습니다.
입력
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
출력 (2026-09-09 실측 — 개인 환경, 일부 항목은 다를 수 있습니다):
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
OneDrive REG_SZ "C:\...\OneDrive.exe" /background
KakaoTalk REG_SZ "C:\Program Files\Kakao\KakaoTalk\KakaoTalk.exe" -bystartup
MicrosoftEdgeAutoLaunch_... REG_SZ "...\msedge.exe" --no-startup-window --win-session-start
읽는 법: 보이는 것은 전부 정상 프로그램입니다 — 그것이 포인트입니다. 이 위치는 정상도 쓰고 악성도 쓰는 공용 출입구라서, 백신과 EDR이 이 키의 변경을 감시합니다. 여러분의 화면에서 모르는 항목이 있다면 그것이 지속화 탐지의 시작점입니다. 리눅스의 대응물은 crontab -l과 /etc/cron.d/입니다(Step 97~99의 cron이 권한 상승 재료로 나왔던 이유와 통합니다).
3-3. 공개 분석 리포트 읽기 — WannaCry
"WannaCry 분석" 또는 "WannaCry technical analysis"로 검색해 보안 기업(예: Kaspersky, Talos)의 리포트 1편을 골라 읽습니다. 읽으면서 찾을 것 세 가지:
- 침투/확산 경로: 어떤 취약점으로 번졌는가 (①의 실례)
- 킬 스위치: 도메인 체크 논리가 어떻게 묘사됐는가
- IoC(침해 지표): 리포트 끝의 해시·도메인·IP 목록 — 방어자가 "이것을 찾아라"고 공유하는 목록
읽는 법: 처음엔 절반만 이해돼도 정상입니다. 리포트 읽기의 목표는 전부 이해가 아니라, "분석가가 어떤 순서(생애주기)로 이야기하는가"를 보는 것입니다.
3-4. 샌드박스 리포트 구경하기
샌드박스(sandbox)는 의심 파일을 격리된 가상 머신에서 실행해 행동을 기록하는 시설입니다. any.run, Hybrid Analysis 같은 공개 서비스에는 다른 사람이 올린 샘플의 분석 결과가 공개돼 있습니다 — 우리는 실행 없이 결과만 읽습니다.
리포트에서 읽을 세 섹션:
- 파일 활동: 어떤 파일을 만들고 고쳤는가 (② 실행의 흔적)
- 레지스트리: Run 키를 건드렸는가 (③ 지속화의 흔적 — 3-2의 바로 그 주소)
- 네트워크: 어디에 접속했는가 (④ C2의 후보)
읽는 법: 세 섹션을 생애주기 번호와 연결해 읽으세요. 샌드박스 리포트는 사실 "생애주기 관찰 기록"입니다. 오늘 생애주기를 배운 당신은 벌써 이 리포트의 독해 틀을 갖고 있습니다.
한 가지 주의가 있습니다. 샌드박스 서비스에 파일을 "직접 업로드"하는 것과 공개된 결과를 "열람"하는 것은 다릅니다. 회사 내부 문서가 의심스럽다고 공개 샌드박스에 올리면 그 문서가 전 세계에 공개될 수 있습니다 — 이 단계에서는 열람만 하세요.
3-5. 랜섬웨어 방어 — 개념을 내 점검으로
구조에서 도출되는 방어를 내 환경에 적용해 봅니다.
- 백업 확인: 중요 파일의 사본이 이 컴퓨터 밖(외장 드라이브는 평소 분리, 또는 클라우드 버전 관리)에 있는가 — 랜섬웨어는 연결된 백업 디스크까지 암호화합니다
- 매크로 기본 차단: 내려받은 오피스 문서의 매크로가 기본 비활성인가 (② 실행을 끊는 설정)
- 의심 첨부 절차: Step 167의 채널 분리 원칙이 ① 침투를 끊는 절차임을 확인
하나 더 있습니다. 패치 관리 — WannaCry가 이용한 SMB 취약점은 사건 발생 두 달 전에 이미 보안 업데이트가 나와 있었습니다. 마비된 시스템은 대부분 "업데이트를 미룬" 시스템이었습니다. 백업이 사후 대응이라면 패치는 사전 차단입니다. 두 개는 대체 관계가 아니라 세트입니다.
4. 미션과 연습문제
미션 — 악성코드 구조 문서 완성
- 책을 덮고 네 종류 분류표를 재작성한다 — 각 행에 "분류 기준 문장"과 사례 1개 포함
- 생애주기 4단계 도식을 그리고, 각 단계 아래에 "방어자가 여기서 끊는 방법"을 한 줄씩 적는다
- 2-4의 랜섬웨어 개념도를 자기 말로 다시 그리고, "왜 백업만이 확실한 대응인가"를 도의 ③④에 근거해 쓴다
- WannaCry 분석 리포트 1편을 읽고 제목·출처와 함께 3-3의 세 항목 답을 기록한다
- 샌드박스 공개 리포트 1건을 열어 세 섹션(파일/레지스트리/네트워크)을 생애주기 번호로 주석 단다
연습문제
문제 1. 웜과 바이러스의 차이를 "숙주" 개념으로 설명해 보세요.
문제 2. 다운로더가 작게 유지되는 이유를 방어자의 시그니처 탐지 관점에서 설명해 보세요.
문제 3. 지속화(persistence)가 방어자에게 "탐지 포인트"인 이유를 설명해 보세요 — 악성코드 입장에서는 왜 필요한데, 그 필요가 왜 약점이 됩니까?
문제 4. 랜섬웨어가 대칭키와 공개키를 둘 다 쓰는 이유(하이브리드)를 각 키의 특성으로 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
생애주기 + 차단점 도식의 예:
① 침투 — 피싱 메일/취약점 → 끊기: 채널 분리 절차, 패치
② 실행 — 매크로/첨부 실행 → 끊기: 매크로 차단, 실행 정책
③ 지속화 — Run 키/서비스 등록 → 끊기: 자동시작 위치 감시 (오늘 본 그 주소)
④ 목적 수행 — 암호화/C2 통신 → 끊기: 외부 백업, 이상 외부통신 차단
검증하는 법: ① 분류표의 각 행이 "판별 질문"을 포함하는가. ② 도식의 모든 단계에 차단 방법이 붙어 있는가 — 빈 단계가 있으면 그 개념이 덜 이해된 것입니다. ③ 랜섬웨어 설명이 "공격자의 개인키가 없으면 못 연다"에 도달하는가. ④ 리포트 기록에 출처가 있고 킬 스위치를 언급하는가.
연습문제 해답
문제 1 해답. 바이러스는 숙주 파일에 기생해 그 파일이 실행·전달될 때만 퍼집니다. 웜은 숙주 없이 스스로 복제하며 네트워크로 번식합니다. 둘의 실무적 차이는 속도 — 웜은 사람의 행동을 기다리지 않으므로 WannaCry처럼 시간 단위로 전 세계에 퍼질 수 있습니다.
문제 2 해답. 시그니처 탐지는 알려진 코드의 지문을 찾습니다. 1단계가 작고 단순할수록 지문이 적고 변형도 쉬워 탐지를 피합니다. 본체는 침투 후에 가져오므로, 정적 분석 시점에는 존재하지 않는 것이나 마찬가지입니다.
문제 3 해답. 악성코드는 재부팅 후에도 살아야 하므로 자동 시작 장치(Run 키, 서비스, cron)에 자신을 등록해야 합니다. 그런데 그 위치는 뻔하고 감시 가능합니다 — "살아남으려면 등록해야 하고, 등록하면 보인다". 필수 행동이 곧 흔적이 되는 지점이라 방어자의 표적이 됩니다.
문제 4 해답. 대칭키(AES)는 빠르지만 키 배달이 문제이고, 공개키(RSA)는 느리지만 공개해도 안전합니다. 랜섬웨어는 빠른 대칭키로 대량의 파일을 잠그고, 그 열쇠 하나만 공개키로 잠급니다. TLS와 같은 조합 — 속도와 안전한 키 배달을 동시에 얻는 표준 해법이 악용된 것입니다.
완료 기준 체크리스트
- [ ] 네 종류 분류표를 책 없이 재작성할 수 있다
- [ ] 생애주기 4단계와 각 단계의 차단점을 말할 수 있다
- [ ] 다운로더/드로퍼/C2의 역할을 설명할 수 있다
- [ ] 랜섬웨어의 하이브리드 암호화 개념도를 그릴 수 있다
- [ ] Run 키(또는 cron)의 실제 모습을 눈으로 확인했다
- [ ] WannaCry 리포트 1편을 읽고 킬 스위치를 설명할 수 있다
- [ ] 샌드박스 리포트의 세 섹션을 생애주기와 연결할 수 있다
- [ ] 악성코드 제작·샘플 실행이 왜 이 단계의 범위 밖인지 말할 수 있다
6. 흔한 실수와 해결
벽 1. 분류 기준이 자꾸 섞인다
증상: "트로이 랜섬웨어" 같은 말이 혼란스럽습니다.
원인: 트로이목마(침투 방식)와 랜섬웨어(목적)는 분류 축이 다릅니다.
해결: 항상 두 질문을 분리하세요 — "어떻게 들어왔나"(침투)와 "들어와서 뭘 하나"(목적). 실제 사례는 거의 조합형이라, 축을 나눠야 뉴스가 정확히 읽힙니다.
벽 2. Run 키를 보다가 뭔가 지우고 싶어진다
증상: 모르는 항목이 보여 삭제 욕구.
원인: 3-2는 관찰 실습입니다. 모르는 것 = 악성은 아닙니다(정상 소프트웨어의 자동 업데이트 도우미 등).
해결: 지우지 마세요. 의심 항목은 이름으로 검색해 정체를 확인하는 것까지가 오늘 범위입니다. 잘못 지우면 정상 프로그램이 깨집니다.
벽 3. 리포트가 너무 어렵다
증상: 어셈블리, 해시, 프로토콜 분석이 쏟아집니다.
원인: 전문 리포트는 전문가용입니다. 정상적인 반응입니다.
해결: 3-3의 세 항목만 찾는 "표적 독해"를 하세요. 모르는 단락은 건너뛰어도 됩니다. 생애주기 뼈대에 걸리는 문장만 수확하는 것이 오늘의 독해법입니다.
벽 4. 샌드박스에 직접 샘플을 올려 보고 싶다
증상: 호기심 — 실제 악성코드를 구해 분석해 보고 싶습니다.
원인: 배움이 깊어지는 자연스러운 욕구지만, 이 단계의 경계를 넘습니다.
해결: 샘플의 다운로드·실행은 전용 격리 환경과 분석 훈련이 선행된 후의 일입니다. 지금은 타인이 올린 공개 결과를 읽는 것으로 충분하며, 그것이 실무 분석가의 일상 독해이기도 합니다.
벽 5. "구조를 알았으니 만들 수도 있겠다"는 생각
증상: 개념도를 그리고 나니 구현이 상상됩니다.
원인: 이해가 깊어졌다는 증거 — 하지만 이해도와 실행 허가는 무관합니다.
해결: 악성코드 작성은 목적과 무관하게 범죄입니다. 이 구조 지식의 정당한 출력은 제작이 아니라 방어 설계와 리포트 독해입니다 — 오늘 미션이 정확히 그 출력입니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 바이러스 | 숙주 파일에 기생 — 숙주가 실행돼야 번식 |
| 웜 | 숙주 없이 스스로 네트워크 번식 — 속도가 다르다 |
| 트로이목마 | 정상 프로그램 위장 — 사용자가 직접 설치 |
| 랜섬웨어 | 파일을 암호화해 인질로 — 목적 기준 분류 |
| 생애주기 | 침투 → 실행 → 지속화 → 목적 수행, 각 단계가 차단점 |
| 다운로더/드로퍼 | 작은 1단계가 본체를 불러오는 단계화 구조 |
| C2 | 악성코드의 지휘소 — 네트워크 흔적으로 잡힌다 |
| 하이브리드 암호화 | 대칭키로 파일을, 공개키로 그 열쇠를 — 백업이 유일한 답 |
| IoC | 침해 지표(해시·도메인·IP) — 방어자의 공유 목록 |
| 킬 스위치 | WannaCry의 확산 중단 논리 — 분석이 역공이 된 사례 |
오늘의 명령어
| 명령·도구 | 하는 일 |
|---|---|
reg query "HKCU\...\Run" |
윈도우 자동시작 위치 읽기 (읽기 전용) |
crontab -l |
리눅스의 대응 지속화 위치 |
| any.run / Hybrid Analysis | 샌드박스의 공개 분석 결과 열람 |
| 보안 기업 분석 리포트 | 생애주기 순서로 서술된 사건의 해부 기록 |
명령어보다 중요한 감각
오늘의 핵심 통찰은 "악성코드의 필요가 곧 약점"이라는 구조입니다. 번식해야 하면 네트워크에 보이고, 살아남아야 하면 등록 위치에 보이고, 목적을 수행하려면 파일과 외부 통신에 보입니다. 완벽한 은신은 불가능하고, 그래서 방어는 "행동을 보는" 쪽으로 진화합니다 — 다음 단계에서 배울 행위 기반 탐지의 씨앗이 바로 오늘의 생애주기입니다.
그리고 랜섬웨어가 남긴 교훈: 현대 암호학을 정면으로 푸는 사람은 없고, 우회하는 사람(백업으로 되돌리기)과 사전에 끊는 사람(침투·실행 단계 차단)만이 이깁니다. 구조를 아는 것은 공격하기 위함이 아니라, 어디서 끊어야 하는지를 알기 위함입니다.
전부 체크되면 Step 168 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.