John the Ripper를 활용한 다양한 해시 크래킹 기법

소개

John the Ripper는 고성능이며 다양한 해시 유형을 지원하는 오픈소스 암호 분석 도구입니다. 주로 사전 공격(dictionary attack)과 무차별 대입(brute-force) 방식을 통해 암호화된 해시 값을 복원하는 데 사용됩니다. 이 도구는 보안 전문가와 리버스 엔지니어링 연구자들 사이에서 널리 쓰이며, 특히 CTF(캡처 더 플래그) 대회나 침투 테스트 환경에서 중요한 역할을 합니다. 본 문서에서는 John the Ripper의 기본적인 사용법부터 실제 시나리오 기반의 응용까지 단계별로 다룹니다. 필요한 경우 Kali Linux 또는 TryHackMe의 AttackBox 환경을 기준으로 설명합니다.

사전 준비

John the Ripper를 효과적으로 사용하기 위해 다음 요소들이 필요합니다:
  • 도구 설치: 대부분의 리버스 엔지니어링 배포판(Kali, Parrot OS 등)은 기본적으로 Jumbo 버전의 John이 포함되어 있습니다. 만약 직접 설치해야 한다면, 아래 명령어를 사용하세요:
    sudo apt install john
  • 워드리스트(wordlist): 가장 널리 쓰이는 워드리스트인 rockyou.txt는 다음과 같은 경로에서 찾을 수 있습니다:
    /usr/share/wordlists/rockyou.txt
    해당 파일은 압축 상태이므로, 다음과 같이 압축을 해제해야 합니다:
    gzip -d /usr/share/wordlists/rockyou.txt.gz

기초 해시 크래킹

간단한 MD5, SHA1 등의 해시 값을 사전 공격으로 분석해봅시다. 예를 들어, 다음과 같은 해시 값이 주어졌다고 가정하겠습니다:
b53759f3ce692de7aff1b5779d3964da
이 값이 MD5인지 확인하려면, 다음과 같은 방법을 사용할 수 있습니다:
  • 온라인 도구: Hashes.com
  • 로컬 도구: hash-identifier 또는 Python 스크립트 활용
John 명령어 구조는 다음과 같습니다:
john --format=[해시형식] --wordlist=[워드리스트경로] [해시파일]
예시:
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash1.txt
여기서 --format 옵션은 정확한 해시 형식을 지정해야 하며, 이를 확인하려면 다음 명령어를 실행하세요:
john --list=formats | grep -i md5

Windows 인증 해시 (NTLM) 분석

Windows 시스템은 사용자 암호를 NTLM 해시 형태로 저장합니다. 이 값은 일반적으로 SAM 데이터베이스 또는 Active Directory의 NTDS.dit 파일에서 추출됩니다. 예시 해시 값:
5460C85BD858A11475115D2DD3A82333
이 값을 식별하면 NT 형식임을 알 수 있으며, John에서는 간단히 NT로 표기됩니다. 따라서 명령어는 다음과 같습니다:
john --format=NT --wordlist=/usr/share/wordlists/rockyou.txt ntlm_hash.txt
이 방식은 약한 암호 정책을 사용하는 환경에서 매우 효과적입니다.

/etc/shadow 해시 크래킹

Linux 시스템의 /etc/shadow 파일은 사용자 암호의 해시 값을 저장하지만, John은 이를 바로 처리할 수 없습니다. 반드시 /etc/passwd와 결합된 형식으로 변환해야 합니다. 이를 위해 unshadow 유틸리티를 사용합니다:
unshadow passwd_file shadow_file > combined.txt
생성된 combined.txt 파일은 각 줄에 username:$hashed_value$... 형태로 되어 있으며, John이 인식 가능한 형식입니다. 이후 다음 명령어로 크래킹을 수행합니다:
john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt combined.txt
SHA-512 기반 crypt 해시는 오랜 시간이 걸릴 수 있으므로, 강력한 워드리스트나 규칙 기반 공격을 병행하는 것이 좋습니다.

싱글 크래킹 모드 (Single Crack Mode)

이 모드는 사용자 이름이나 GECOS 정보를 기반으로 암호 후보를 생성합니다. 예를 들어, 사용자명이 "Joker"라면, John은 Joker1, Jok3r! 등의 변형을 자동 생성합니다. 이를 사용하려면 해시 파일 앞에 사용자명을 추가해야 합니다:
Joker:7bf6d9bb82bed1302f331fc6b816aada
명령어 예시:
john --single --format=Raw-MD5 joker_hash.txt
이 모드는 사용자명 기반의 패턴 암호를 타겟팅할 때 매우 효율적입니다.

사용자 정의 규칙 만들기

John은 john.conf 파일 내에 정의된 규칙을 통해 암호 재구성을 자동화할 수 있습니다. 예를 들어, 모든 단어의 끝에 숫자와 특수문자를 추가하는 규칙을 정의할 수 있습니다. /etc/john/john.conf 또는 /opt/john/john.conf 파일에 다음 항목을 추가하세요:
[List.Rules:CustomAppend]
c Az"[0-9]" Az"[!@#$%]"
여기서 의미는:
  • c: 첫 글자를 대문자로
  • Az"[0-9]": 끝에 0~9 사이 숫자 추가
  • Az"[!@#$%]": 그 다음 특수문자 추가
이후 다음 명령어로 적용:
john --wordlist=basic_passwords.txt --rule=CustomAppend target_hash.txt
이러한 규칙은 조직의 암호 정책이 예측 가능할 때 큰 효과를 발휘합니다.

ZIP 및 RAR 파일 암호 분석

압축 파일의 암호도 John을 통해 분석할 수 있습니다. 먼저 ZIP 파일을 처리하는 방법입니다:
zip2john secure.zip > zip_hash.txt
생성된 해시 파일을 바탕으로 크래킹:
john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt
RAR 파일의 경우:
/opt/john/rar2john secure.rar > rar_hash.txt
크래킹 명령어는 동일합니다:
john --wordlist=/usr/share/wordlists/rockyou.txt rar_hash.txt
RAR 파일을 추출하려면 unrar 도구가 필요하며, 설치는 다음과 같습니다:
sudo apt install unrar

SSH 개인키 암호 분석

OpenSSH 키(id_rsa)는 암호로 보호될 수 있으며, 이를 우회하기 위해 John을 사용할 수 있습니다. 먼저 키 파일을 해시 형식으로 변환:
python3 /opt/john/ssh2john.py id_rsa > ssh_hash.txt
그 후 크래킹:
john --wordlist=/usr/share/wordlists/rockyou.txt ssh_hash.txt
성공 시 출력되는 암호는 SSH 클라이언트에서 직접 사용할 수 있습니다:
ssh user@target -i id_rsa
입력 프롬프트에서 복구된 암호를 입력하면 인증이 완료됩니다.

결론

John the Ripper는 단순한 사전 공격 이상의 기능을 제공하며, 다양한 포렌식 및 보안 평가 상황에서 핵심 도구로 자리 잡고 있습니다. 특히 Jumbo 버전은 거의 모든 일반적인 해시 및 암호화 컨테이너를 지원하여 실무에서 매우 유용합니다.

태그: John the Ripper 해시 크래킹 사전 공격 NTLM /etc/shadow

7월 18일 23:40에 게시됨