부록 B. 시스템·네트워크 해킹 — 주요 공격 기법 총정리
- 대상 독자: Level 3 이상을 마친 분 (포너블·권한 상승 실습 경험자)
- 용도: 시험 대비 요약본, 면접 대비 정리, 복습용 지도
⚠️ 이 부록의 모든 기법은 내 랩·합법 플랫폼에서만 사용해야 합니다. 허가 없는 시스템·네트워크에 적용하면 범죄입니다.
웹을 뚫고 서버에 발을 디딘 다음의 이야기, 그리고 네트워크 자체를 공격하는 이야기를 모았어요. 시스템 해킹 → 권한 상승 → 내부 확산 → 네트워크 공격 순서로, 실제 침투의 시간 흐름을 따라갑니다.
B-0. 한눈에 보는 시스템·네트워크 공격 지도
| # | 기법 | 단계 | 핵심 한 줄 |
|---|---|---|---|
| 1 | 버퍼 오버플로 | 초기 침투 | 경계 검사 없는 메모리에 덮어쓰기 |
| 2 | ROP | 익스플로잇 고도화 | 정상 코드 조각을 이어 붙여 악용 |
| 3 | 포맷 스트링 | 초기 침투 | printf가 메모리를 읽고 쓴다 |
| 4 | 리눅스 권한 상승 | 권한 상승 | SUID·sudo·커널의 틈 |
| 5 | 윈도우 권한 상승 | 권한 상승 | 토큰·서비스·설정 실수 |
| 6 | 크리덴셜 탈취 | 확산 준비 | 메모리와 파일에서 비밀번호 캐기 |
| 7 | 측면 이동 | 내부 확산 | 훔친 자격증명으로 옆 서버로 |
| 8 | 스니핑·스푸핑 | 네트워크 | 케이블 위의 대화 엿듣기·가로채기 |
| 9 | MITM | 네트워크 | 둘 사이에 끼어들어 중계 |
| 10 | DoS/DDoS | 가용성 파괴 | 처리 못 할 만큼 쏟아붓기 |
| 11 | 무선(Wi-Fi) 공격 | 물리 근접 | 전파는 벽을 넘는다 |
B-1. 버퍼 오버플로 (Buffer Overflow)
정의: 고정 크기 버퍼에 경계 검사 없이 데이터를 쓸 때, 넘친 데이터가 인접 메모리(리턴 주소 포함)를 덮어쓰는 취약점이에요.
원리: strcpy 같은 안전하지 않은 함수가 입력 길이를 확인하지 않으면, 스택의 저장된 리턴 주소까지 덮어씁니다. 공격자가 그 자리에 원하는 주소(쉘코드, 가젯)를 쓰면 프로그램의 실행 흐름을 낚아채요.
현대의 완화책과 우회: ASLR(주소 무작위화), NX(스택 실행 금지), 카나리(스택 보호값)가 기본 탑재돼 있어서, 실전 익스플로잇은 카나리 유출 → 주소 계산 → ROP 체인의 순서로 완화책을 하나씩 넘습니다. Level 3 포너블 파트에서 이 전 과정을 손으로 익혔어요.
방어: 안전한 함수 사용(strncpy 대신 snprintf 등), 컴파일러 보호 옵션(-fstack-protector, PIE), 메모리 안전 언어(Rust 등) 도입.
B-2. ROP (Return-Oriented Programming)
정의: NX 때문에 스택에 쉘코드를 심어도 실행이 안 될 때, 프로그램 안에 이미 존재하는 코드 조각(가젯, ret으로 끝나는 명령어 묶음)을 이어 붙여 원하는 동작을 만드는 기법이에요.
감각: 새 문장을 쓸 수 없으니, 책에 있는 글자들을 오려 붙여 협박 편지를 만드는 것과 같아요. ROPgadget으로 바이너리에서 가젯을 수집하고, pwntools의 ROP 객체로 체인을 조립합니다.
방어: NX·ASLR 강화, CFI(제어 흐름 무결성), 최신 컴파일러 보호 옵션.
B-3. 포맷 스트링 (Format String)
정의: printf(user_input)처럼 포맷 문자열을 사용자가 조종할 때 생기는 취약점이에요. %x로 스택 메모리를 읽고(정보 유출 → 카나리·주소 획득), %n으로 임의 주소에 쓰기까지 가능합니다.
방어: 포맷 문자열은 항상 고정(printf("%s", input)). 컴파일러 경고(-Wformat-security)를 에러로 승격하세요.
B-4. 리눅스 권한 상승
일반 사용자 쉘을 얻은 다음, root를 향한 세 갈래 길이에요.
| 경로 | 점검 포인트 | 대표 명령 |
|---|---|---|
| SUID 바이너리 | root 권한으로 실행되는 파일의 오용 (find / -perm -4000) |
GTFOBins 대조 |
| sudo 설정 | sudo -l — 비밀번호 없이 실행 가능한 명령 |
sudo -l |
| 설정 실수 | 쓰기 가능한 cron 스크립트, world-writable 파일, PATH 인젝션 | ls -la /etc/cron* |
| 커널 취약점 | 오래된 커널의 알려진 익스플로잇 (Dirty COW 등) | uname -a |
방어: SUID 최소화, sudo 허용 목록 최소화, cron·PATH 권한 점검, 커널 패치 주기 관리.
B-5. 윈도우 권한 상승
| 경로 | 점검 포인트 |
|---|---|
| 서비스 경로 | 따옴표 없는 서비스 경로(Unquoted Service Path), 쓰기 가능한 서비스 바이너리 |
| 토큰 남용 | SeImpersonatePrivilege를 가진 서비스 계정 → Potato 계열 기법으로 SYSTEM |
| 설정 실수 | AlwaysInstallElevated 레지스트리, 저장된 자격증명(cmdkey) |
| 패치 누락 | systeminfo로 핫픽스 확인 후 알려진 커널 익스플로잇 대조 |
방어: 최소 권한 원칙, 서비스 계정 특권 제거, 정기 패치, LAPS로 로컬 관리자 비밀번호 분리.
B-6. 크리덴셜 탈취 (Credential Dumping)
정의: 시스템 안에 저장된 비밀번호·해시·티켓을 꺼내는 단계예요.
- 리눅스:
/etc/shadow(root 필요),~/.bash_history, 설정 파일 속 하드코딩된 비밀번호 - 윈도우: LSASS 프로세스 메모리 덤프(Mimikatz), SAM 데이터베이스, 브라우저 저장 비밀번호
왜 하는가: 하나의 머신에서 얻은 자격증명은 대개 다른 머신에서도 통합니다(비밀번호 재사용). 다음 단계인 측면 이동의 연료예요.
방어: LSASS 보호(Credential Guard), 관리자 계정의 워크스테이션 로그온 금지, 비밀번호 재사용 금지, 메모리 덤프 탐지(EDR).
B-7. 측면 이동 (Lateral Movement)
정의: 한 대를 장악한 뒤 네트워크 안의 다른 시스템으로 퍼져 나가는 단계예요.
- Pass-the-Hash: 비밀번호를 몰라도 탈취한 NTLM 해시로 인증
- PsExec/WinRM/WMI: 탈취한 관리자 자격증명으로 원격 실행
- AD 환경: Kerberos 티켓 탈취(Pass-the-Ticket), BloodHound으로 최단 공격 경로 분석
방어: 계층형 관리 모델(Tier Model), 로컬 관리자 비밀번호 개별화, 측면 이동 경로 모니터링, 네트워크 세그멘테이션.
B-8. 스니핑과 스푸핑
- 스니핑(Sniffing): 같은 네트워크의 패킷을 엿듣기. 암호화 안 된 프로토콜(HTTP, Telnet, FTP)은 평문이 그대로 보여요.
tcpdump,tshark, Wireshark가 도구입니다. - ARP 스푸핑: 로컬 네트워크에서 "내가 게이트웨이야"라고 거짓 ARP 응답을 뿌려 트래픽을 자신에게 돌리는 기법.
- DNS 스푸핑: 가짜 DNS 응답으로 피해자를 위조 사이트로 유도.
방어: 전 구간 암호화(TLS, SSH), ARP 검사(Dynamic ARP Inspection), DNSSEC.
B-9. MITM (Man-in-the-Middle)
정의: 통신 양단 사이에 끼어들어 트래픽을 중계하며 엿보고 변조하는 공격이에요. ARP 스푸핑으로 위치를 잡은 뒤, SSL stripping(HTTPS→HTTP 강제 다운그레이드) 같은 기술로 암호화를 무력화하려 시도합니다.
방어: HSTS(HTTPS 강제), 인증서 피닝, 공용 Wi-Fi에서 VPN 사용. 사용자 입장에서는 주소창의 자물쇠와 인증서 경고를 무시하지 않는 것이 첫 번째 방패예요.
B-10. DoS / DDoS
정의: 시스템이 처리할 수 있는 양을 넘는 요청을 쏟아부어 서비스를 멈추는 공격이에요. SYN 플러드(연결 요청만 보내고 완료하지 않기), UDP 증폭 공격(작은 요청으로 큰 응답을 피해자에게 향하게 하기)이 대표적입니다.
방어: CDN·Anycast 분산, 레이트 리밋, SYN 쿠키, 클라우드 DDoS 완화 서비스. 참고로 이 공격은 랩에서조차 규모가 커지면 통신사 망에 영향을 줄 수 있으니, 이 책에서는 개념과 방어 위주로만 다룹니다.
B-11. 무선(Wi-Fi) 공격
- 핸드셰이크 캡처: WPA2의 4-way handshake를 도청해 오프라인에서 비밀번호 사전 공격
- PMKID 공격: 클라이언트 접속 없이 AP에서 직접 해시 재료를 얻는 기법
- 이블 트윈(Evil Twin): 같은 이름의 가짜 AP를 세워 접속을 유도하고 포털 페이지로 비밀번호를 낚는 공격
방어: WPA3 또는 강한 사전 키(길고 무작위), 기업 환경은 802.1X 인증, 공용 Wi-Fi의 수상한 동명 AP 주의.
정리
시스템 해킹의 시간 흐름을 다시 정리하면 이래요.
초기 침투(메모리 취약점) → 권한 상승(설정의 틈) → 크리덴셜 탈취(저장된 비밀) → 측면 이동(재사용된 신뢰)
방어자 입장에서는 각 단계마다 끊을 고리가 있습니다. 경계 검사와 패치로 침투를 막고, 최소 권한으로 상승을 막고, 자격증명 보호로 탈취를 막고, 세그멘테이션으로 확산을 막는 것이에요. 공격자가 전부 성공해야 목표에 닿지만, 방어자는 하나만 끊어도 됩니다 — 이 비대칭이 방어의 희망이에요.
각 기법의 실습은 본문 Level 3(Step 176~303)의 포너블·권한 상승·AD 파트와 Level 4(Step 304~348)의 OSCP 파트에서 다룹니다.