Step 128. ★ 프로젝트 — MS2 완전 공략 보고서

Step 128. ★ 프로젝트 — MS2 완전 공략 보고서

Level 2 — 보안 입문과 공격 스킬 기초 | 난이도 ★★★★☆ | 예상 소요 시간 4시간

전제: Step 118~127 — MS2 정찰·침투(vsftpd, distccd 등), john/hashcat, 권한 상승, linPEAS, 후속 침투 체크리스트까지의 여정을 마쳤다.

  • 준비물: 지금까지 MS2 랩에서 남긴 모든 기록(스캔 결과, 명령 출력, 스크린샷), Step 127의 체크리스트, 마크다운 에디터. MS2 랩이 없다면 이 챕터의 출력 예시 자료를 채우는 연습으로 진행합니다.
  • ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다.
  • 이 챕터는 테스트입니다 — 보고서의 뼈대(템플릿)는 드리지만, 내용은 여러분의 공격 기록에서 나와야 합니다.

실무 침투 테스트의 산출물은 쉘이 아닙니다 — 보고서입니다. 고객이 돈을 내고 사는 것은 "뚫었다는 사실"이 아니라 "무엇이, 왜 뚫렸고, 어떻게 고쳐야 하는가"가 담긴 문서입니다. 지금까지 MS2(Metasploitable2)를 상대로 쌓아 온 모든 것 — 정찰, 침투, 크래킹, 권한 상승, 열거 — 을 오늘 하나의 보고서로 엮습니다. 화려한 해킹 장면을 재생하는 시간이 아니라, 여러분의 흔적을 남이 읽고 조치할 수 있는 문서로 만드는 시간입니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • 침투 테스트 보고서의 표준 구조(요약~권고)를 설명할 수 있다
  • 공격 경로 하나를 "원인 → 방법 → 획득 권한 → 방어"의 네 칸으로 기술한다
  • 명령 출력을 증거로 배치하고, 증거 없는 주장을 쓰지 않는다
  • 경영진용 요약과 기술진용 본문의 톤을 구분한다
  • 자기 공격을 방어 권고로 번역한다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 마크다운 (Step 89의 문서화 기술), 지금까지의 랩 기록 전부
오늘의 재료 Step 118~127의 출력들: nmap, 쉘, john/hashcat, 정찰표, linPEAS
필요한 개념 보고서 6단 구조, 증거 중심 서술, 심각도 분류, 독자별 톤
오늘의 산출물 MS2-공략-보고서.md — 제출 가능한 수준의 침투 보고서 1부

2-1. 보고서의 표준 구조 — 여섯 개의 방

실무 침투 테스트 보고서는 대략 같은 뼈대를 가집니다.

① 요약 (Executive Summary)   — 경영진용. 기술 용어 없이 "무슨 일이 가능했는가"
② 범위와 정찰 (Recon)        — 대상, 방법, 스캔 결과
③ 침투 경로 (Attack Paths)   — 취약점별: 원인 → 방법 → 획득 권한
④ 권한 상승 (Privesc)        — 낮은 쉘에서 root까지의 경로
⑤ 증거 (Evidence)            — 각 주장을 뒷받침하는 출력·스크린샷
⑥ 권고 사항 (Remediation)    — 발견별 수정 방법과 우선순위

각 방의 독자가 다릅니다 — ①은 임원이, ③~⑤는 기술진이, ⑥은 담당자가 읽습니다. 하나의 문서, 세 종류의 독자. 이것이 보고서가 블로그 글과 다른 점입니다.

2-2. 증거 중심 서술 — "주장 뒤에 출력"

보고서 문장의 법칙은 하나입니다 — 증거 없는 주장은 쓰지 않는다. "root를 획득했다"는 주장 뒤에는 id 출력이 따라붙습니다. "서비스가 열려 있다" 뒤에는 nmap 출력이 옵니다. 스크린샷에는 항상 whoamiid의 결과가 포함되도록 찍는 습관 — 그래야 그 화면이 "누구의, 어느 권한의 화면인지"가 증명됩니다.

여러분이 Step 125~127에서 출력을 파일로 저장하라고 계속 들었던 이유가 오늘 드러납니다. 저장되지 않은 발견은 보고서에 쓸 수 없습니다.

2-3. 심각도 분류 — 모든 발견은 같지 않다

발견한 취약점에는 등급을 매깁니다. 입문 단계의 간단한 기준:

등급 기준 MS2의 예
치명(Critical) 원격에서 바로 시스템 제어 가능 vsftpd 백도어, distccd RCE
높음(High) 인증 우회, 권한 상승 직결 취약 커널(Dirty COW), 느슨한 SUID
중간(Medium) 정보 노출, 약한 설정 백업 파일 노출, 약한 비밀번호 정책
낮음(Low) 모범 사례 위반 수준 불필요한 배너 정보 노출

등급은 "고치는 순서"이기도 합니다 — ⑥ 권고 사항이 이 등급 순으로 배열됩니다.

2-4. "왜 뚫렸는가"가 품격을 결정한다

명령어 나열은 로그이지 보고서가 아닙니다. 같은 발견이라도 이렇게 갈립니다.

✗ 나쁜 서술: "nc 192.168.56.101 6200을 치니 쉘이 나왔다."
○ 좋은 서술: "vsftpd 2.3.4에는 제작자 몰래 심어진 백도어가 있다.
  사용자명에 :)를 붙여 접속하면 6200번 포트에 root 쉘이 열린다.
  원인은 공식 배포 파일이 변조된 공급망 사고였고,
  이 버전을 업데이트하지 않은 것이 직접적 노출 원인이다."

차이는 인과입니다 — 무엇을 했는가(행위)에 왜 그것이 통했는가(원인)와 무엇이 문제인가(책임 지점)가 붙은 문장만이 고칠 수 있는 문장입니다.


3. 따라 하기

템플릿을 드립니다. 복사해 MS2-공략-보고서.md를 만들고, 여러분의 랩 기록으로 채우세요. 랩이 없는 분은 각 항목이 어떤 자료로 채워지는지 아래의 채우기 안내를 따라가면 됩니다 — 예시로 채워 둔 출력들은 출력 예시라고 표시돼 있으며, 여러분의 실측으로 교체하는 것이 미션입니다.

3-1. ① 요약 — 제일 나중에 쓰는 첫 장

요약은 문서 맨 앞에 있지만 가장 마지막에 씁니다 — 전체가 완성돼야 요약할 수 있으니까요. 뼈대:

# Metasploitable2 침투 테스트 보고서
작성일: ____ | 작성자: ____ | 대상: 192.168.56.101 (사내망 모의 환경)

### 1. 요약
본 테스트에서 대상 시스템에 대해 (N)개의 침투 경로를 확인했으며,
그중 (N)개는 인증 없이 원격에서 시스템 최고 권한(root)에 도달 가능했습니다.
주요 원인은 ① 알려진 취약 버전의 서비스 운영, ② 오래된 커널,
③ 기본·약한 인증 설정입니다.
즉시 조치가 필요한 치명 등급 발견이 (N)건입니다.

채우기 안내: 기술 용어를 쓰지 않는 것이 요약의 규칙입니다. "6200번 포트로 쉘"이 아니라 "외부에서 인증 없이 시스템 전체를 장악할 수 있음"처럼 — 경영진이 읽고 결정할 수 있는 문장으로 번역하는 연습입니다.

3-2. ② 범위와 정찰 — nmap 결과 배치

### 2. 범위와 정찰
- 대상: 192.168.56.101 / 기간: ____ / 방법: 블랙박스(사전 정보 없음)

#### 스캔 결과 (증거: evidence/01-nmap.txt)

여기에 Step 118의 nmap 출력을 붙입니다. 랩 기록이 없다면, 아래는 참고용 출력 예시입니다 — 이런 모양의 자료가 들어간다는 것만 확인하세요.

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1
23/tcp   open  telnet      Linux telnetd
80/tcp   open  http        Apache httpd 2.2.8
3632/tcp open  distccd     distccd v1
...

읽는 법: 스캔 결과는 "서술"이 아니라 "인용"입니다. 그리고 표 아래에 해석을 한두 줄 붙입니다 — "포트 23(telnet)은 평문 인증 프로토콜로, 그 존재 자체가 관리 부실의 신호"처럼.

3-3. ③ 침투 경로 — 네 칸 서식의 반복

경로 하나당 아래 서식을 그대로 반복합니다. 최소 3개(vsftpd, distccd, + 1개 — IRC 백도어나 rlogin)를 채우는 것이 미션입니다.

### 경로 1: vsftpd 2.3.4 백도어 [치명]
- 취약 원인: 변조된 배포판에 심어진 백도어 — 사용자명에 `:)` 포함 시 6200번에 쉘
- 공격 방법: (사용한 명령과 순서 — 여러분의 기록에서)
- 획득 권한: root 쉘 (아래 증거)
- 증거:
  (명령 출력 — 스크린샷에는 반드시 id/whoami 포함)
- 방어 방법: vsftpd 최신판으로 교체, 외부 저장소 패키지의 무결성 검증

채우기 안내: "공격 방법" 칸에는 여러분이 실제로 친 명령 순서를 그대로 적습니다 — 재현 가능성이 보고서의 생명이라, 읽는 사람이 같은 순서로 같은 결과를 얻을 수 있어야 합니다. Step 121의 distccd 쉘, Step 125의 상승 과정이 각각 경로 2, 권한 상승 절의 재료입니다.

3-4. ④ 권한 상승 — Step 125~126의 문서화

### 4. 권한 상승
- 상승 전: daemon (distccd 쉘)
- 정찰 요약: (Step 125 정찰표에서 발견한 것 — 커널 2.6.24, SUID 목록 등)
- 상승 경로: Dirty COW (CVE-2016-5195) / 또는 설정 실수 경로
- 증거: 상승 전후의 id 출력 대비

읽는 법: 전후 대비가 핵심 증거입니다 — uid=1(daemon)에서 uid=0(root)로의 변화가 두 줄로 나란히 있으면, 그것이 권한 상승의 완전한 증명입니다.

3-5. ⑤ 증거 — 보관소 규칙

증거는 본문에 인용하고, 원본은 따로 모읍니다.

evidence/
  01-nmap.txt          ← 정찰
  02-vsftpd-shell.txt  ← 경로 1
  03-distccd-shell.txt ← 경로 2
  04-privesc-id.txt    ← 상승 전후
  ...

채우기 안내: 파일명 규칙은 번호-내용.txt — 번호가 본문의 인용 순서와 일치하게. Step 126~127의 tee 저장 습관이 여기서 값을 합니다.

3-6. ⑥ 권고 사항 — 공격당한 만큼 고칠 줄 알아야

### 6. 권고 사항 (심각도 순)
1. [치명] vsftpd 2.3.4 → 최신판 교체. 배포 파일의 해시 검증 절차 도입.
2. [치명] distccd — 외부 접근 차단 또는 인증 적용. 개발 도구는 운영 서버에서 제거.
3. [높음] 커널 업데이트 — Dirty COW 패치 적용. 지원 종료 OS의 교체 계획 수립.
4. [높음] 불필요 서비스(telnet, rlogin 등) 비활성화.
5. [중간] 비밀번호 정책 강화 — Step 123~124의 크래킹 결과가 근거.

읽는 법: 권고의 근거는 전부 앞 절의 여러분 발견입니다. "비밀번호 정책 강화"라고 쓸 수 있는 것은 여러분이 실제로 john/hashcat으로 그 해시를 깨 봤기 때문입니다 — 공격의 기록이 방어의 논거가 되는 지점입니다.

3-7. 시간 배분 가이드

예상 4시간의 권장 배분: 기록 수집·정리 40분, 경로 서술 90분(3개 × 30분), 권한 상승·증거 정리 50분, 요약·권고 40분, 다듬기 20분. 기록이 부실한 경로에서 시간이 멈추는 것이 정상입니다 — 그 경로는 랩에서 다시 실행해 증거를 새로 따 오세요. 보고서 쓰다가 공격을 다시 하러 가는 것은 부끄러운 일이 아니라 실무의 일상입니다.


4. 미션과 연습문제

미션 — MS2 공략 보고서 1부 완성

  1. 3절의 템플릿으로 MS2-공략-보고서.md를 만들고 여섯 절을 모두 채웁니다
  2. 침투 경로 최소 3개를 네 칸 서식(원인→방법→권한→방어)으로 기술합니다
  3. 모든 주장에 증거(출력 인용 또는 evidence/ 파일 참조)가 붙어 있습니다
  4. 증거 스크린샷·출력에는 id 또는 whoami 결과가 포함돼 있습니다
  5. 권고 사항이 심각도 순으로, 각 항목의 근거가 본문 발견과 연결돼 있습니다
  6. (랩이 없는 경우) 예시 자료로 채운 칸마다 [랩 실행 후 실측으로 교체 예정] 표시를 달아, 어느 부분이 미검증인지 투명하게 남깁니다

연습문제

문제 1. 요약(Executive Summary)을 가장 마지막에 쓰는 이유와, 그 절에 기술 용어를 피하는 이유를 각각 말해 보세요.

문제 2. "증거 없는 주장은 쓰지 않는다"는 규칙이 보고서의 신뢰성과 어떻게 연결되는지 설명해 보세요.

문제 3. 심각도 [치명]과 [중간]을 가르는 기준을 여러분의 말로 정리해 보세요.

문제 4. 권고 사항의 각 항목이 반드시 본문의 발견과 연결돼야 하는 이유를, "근거 없는 권고"의 문제점으로 설명해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

경로 하나가 완성된 모습의 예시입니다 (출력 부분은 출력 예시 — 여러분의 실측으로 교체할 자리):

### 경로 2: distccd 원격 명령 실행 [치명]
- 취약 원인: distccd(분산 컴파일 서비스)가 인증 없이 외부 명령을 받아들임.
  개발용 도구가 운영 서버에 인증·접근제한 없이 노출된 것이 직접 원인.
- 공격 방법:
  1. nmap 스캔에서 3632/tcp distccd 확인 (증거 01)
  2. NSE 스크립트로 임의 명령 실행 시도
  3. 리버스 연결을 열어 쉘 획득
- 획득 권한: daemon (제한된 서비스 계정) → 이후 ④절의 경로로 root
- 증거: evidence/03-distccd-shell.txt
  $ id
  uid=1(daemon) gid=1(daemon) groups=1(daemon)
- 방어 방법: distccd 서비스 제거 또는 허용 호스트 제한.
  개발 도구의 운영 환경 배치 금지 정책 수립.

검증하는 법: ① 여섯 절이 빠짐없이 있는가. ② 경로마다 네 칸(원인·방법·권한·방어)이 채워졌는가 — 한 칸이라도 비면 미완성입니다. ③ 모든 "했다"는 문장에 증거가 붙었는가. ④ 요약을 소리 내어 읽었을 때 기술을 모르는 사람도 위험의 크기를 이해할 수 있는가. ⑤ 스스로 채점 — 구조 완성도, 증거 충실도, 인과 서술, 권고 연결의 네 항목 각 0~2점, 총 6점 이상이면 통과입니다.

연습문제 해답

문제 1 해답. 요약은 전체 내용이 확정된 뒤에야 정확히 쓸 수 있으므로 마지막에 작성합니다 — 건수와 등급이 본문과 어긋나면 신뢰가 무너집니다. 기술 용어를 피하는 이유는 독자가 다르기 때문입니다 — 요약을 읽는 사람은 예산과 결정을 하는 사람이고, 그들에게 필요한 것은 "6200번 포트"가 아니라 "인증 없이 전체 장악 가능"이라는 사업 언어의 번역입니다.

문제 2 해답. 보고서의 독자는 작성자의 실력을 믿고 사는 것이 아니라, 인용된 출력을 보고 스스로 재현·검증할 수 있어야 합니다. 증거가 붙은 주장만이 재현 가능하고, 재현 가능한 보고서만이 "작성자가 떠난 뒤"에도 유효합니다. 증거 없는 주장은 확인할 길이 없어서, 독자 입장에서는 소설과 구분되지 않습니다.

문제 3 해답. 기준은 피해의 직접성과 선행 조건의 유무입니다. 인증 없이 원격에서 곧바로 시스템 제어에 이르면 치명, 로컬 접근이나 다른 조건이 선행돼야 하면 한 등급씩 내려가고, 정보 노출처럼 간접적인 위험은 중간 이하로 봅니다. "이 발견 하나만으로 최악의 사태가 바로 일어나는가"가 가름 질문입니다.

문제 4 해답. 근거 없는 권고는 두 가지 문제를 만듭니다. 첫째, 우선순위를 매길 수 없습니다 — 어떤 권고가 치명 발견을 막는 것인지 모르면 담당자는 어디부터 고칠지 결정할 수 없습니다. 둘째, 신뢰를 깎습니다 — 보고서에 없는 발견에서 나온 권고는 "일반론"으로 읽혀 무시됩니다. 권고가 본문 발견과 연결돼 있으면 "우리가 직접 이 구멍으로 들어갔습니다"라는 한 줄이 곧 권고의 추진력이 됩니다.

완료 기준 체크리스트

  • [ ] 보고서의 표준 6단 구조를 설명할 수 있다
  • [ ] 경로 서술의 네 칸(원인→방법→권한→방어)을 쓸 수 있다
  • [ ] 요약이 기술 용어 없이 사업 언어로 쓰여 있다
  • [ ] 모든 주장에 증거(출력 인용 또는 파일 참조)가 붙어 있다
  • [ ] 증거에 id/whoami가 포함돼 권한이 증명된다
  • [ ] 권고 사항이 심각도 순이고 본문 발견과 연결된다
  • [ ] 미션: 제출 가능한 수준의 보고서 1부를 완성했다

6. 흔한 실수와 해결

벽 1. 기록이 없어서 쓸 게 없다

증상: 공격은 했는데 보고서에 넣을 출력이 없습니다.

원인: 그때 저장을 안 했기 때문입니다 — Step 126~127에서 "저장되지 않은 발견은 없던 발견"이라고 배운 그 상황입니다.

해결: 랩이 살아 있다면 다시 실행해 증거를 새로 땁니다 — 재실행은 실무에서도 흔한 일입니다. 그리고 이번에는 tee로 저장하세요. 이 벽의 불편함이 평생 가는 저장 습관을 만듭니다.

벽 2. 명령어 나열로 끝나는 보고서가 된다

증상: 본문이 "쳤다, 나왔다"의 반복입니다.

원인: 2-4절의 "왜 뚫렸는가"가 빠진 것입니다.

해결: 각 경로의 "취약 원인" 칸부터 먼저 쓰세요. 원인 문장이 서면 명령 나열은 그 뒤의 "방법" 칸으로 자연스럽게 들어갑니다. 순서를 바꾸는 것만으로 문서의 격이 올라갑니다.

벽 3. 증거 스크린샷이 "누구 화면인지" 알 수 없다

증상: 쉘 화면 캡처만 덩그러니 있습니다.

원인: 권한 증명이 빠진 캡처입니다.

해결: 캡처 전에 항상 idwhoami를 치고 그 결과가 보이는 상태로 찍으세요. "root 쉘을 얻었다"의 증거는 프롬프트 색이 아니라 uid=0(root) 한 줄입니다.

벽 4. 요약이 본문의 복사 붙이기가 된다

증상: 요약에 포트 번호와 도구 이름이 가득합니다.

원인: 독자를 잊은 것입니다.

해결: 테스트 — 요약만 떼서 기술을 모르는 사람에게 읽어 보세요. "그래서 뭐가 위험한데?"라는 반응이 나오면 다시 씁니다. 요약의 문장 하나하나는 "무슨 일이 가능했는가, 얼마나 많이, 어디서부터 고치면 되는가" 셋 중 하나에 답해야 합니다.

벽 5. 랩이 없어서 못 한다고 멈춘다

증상: MS2가 없어 보고서가 비어 있습니다.

원인: 이 챕터의 목적을 오해한 것입니다 — 목적은 "MS2를 뚫는 것"이 아니라 "기록을 문서로 엮는 능력"입니다.

해결: 미션 6번의 방식으로 진행하세요 — 예시 자료로 틀을 완성하고, 미검증 칸에 [랩 실행 후 실측으로 교체 예정] 표시를 답니다. 구조를 먼저 완성해 두면, 랩을 만났을 때 증거만 꽂으면 됩니다. 빈칸을 투명하게 표시하는 것도 보고서의 정직함입니다.


7. 정리

오늘의 개념

개념 한 줄 설명
보고서 6단 구조 요약·정찰·침투 경로·권한 상승·증거·권고 — 독자가 다른 여섯 개의 방
증거 중심 서술 주장 뒤에 출력. 저장되지 않은 발견은 없던 발견
네 칸 서식 원인 → 방법 → 획득 권한 → 방어 — 경로 서술의 뼈대
심각도 분류 피해의 직접성과 선행 조건으로 등급 매기기 — 권고의 순서
요약의 번역 기술 용어를 사업 언어로 — 마지막에 쓰는 첫 장
정직한 빈칸 미검증 항목은 표시하고 남긴다 — 빈칸도 정확한 정보면 문서가 된다

오늘의 명령어·도구

도구 하는 일
MS2-공략-보고서.md 오늘의 산출물 — 6단 구조의 템플릿
evidence/번호-내용.txt 증거 보관소 — 본문 인용 순서와 번호 일치
tee (Step 126) 증거를 만드는 습관의 도구
Step 125 정찰표 ④ 권한 상승 절의 재료
Step 127 체크리스트 ⑥ 권고 사항의 원료 (방어용 사본)

명령어보다 중요한 감각

오늘로 여러분은 Level 2의 긴 여정 — 정찰, 침투, 크래킹, 상승, 열거 — 을 한 권의 문서로 묶었습니다. 쉘은 세션이 끊기면 사라지지만, 보고서는 남습니다. 공격자의 손은 잊히고 문서는 고쳐지는 시스템으로 이어집니다. "뚫을 수 있다"와 "뚫렸음을 증명하고 고치게 할 수 있다"는 다른 단계의 실력이고, 후자가 프로의 정의입니다. 그리고 마지막으로 — 이 보고서의 권고 사항 절이 곧 수비자의 작업 목록이라는 것을 기억하세요. 여러분은 오늘, 공격으로 방어를 썼습니다.


전부 체크되면 Step 128 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.