소개
이 실습에서는 대중적이고 강력한 비밀번호 복구 도구인 John the Ripper 를 사용하여 비밀번호로 보호된 ZIP 파일을 크래킹하는 방법을 배웁니다. 이 과정을 통해 필요한 도구 설정부터 크래킹된 비밀번호 검증까지 비밀번호 크래킹 프로세스의 핵심 단계를 직접 경험해 볼 수 있습니다. 실습을 마칠 때쯤이면 비밀번호 해시가 어떻게 추출되고 사전 공격 (Dictionary Attack) 이나 무차별 대입 공격 (Brute-force Attack) 에 어떻게 활용되는지 이해하게 될 것이며, 이를 통해 파일 보호를 위한 강력한 비밀번호 설정의 중요성을 깨닫게 될 것입니다.
필수 도구 설치
비밀번호 크래킹을 시작하기 전에 필요한 소프트웨어를 설치해야 합니다. 이번 단계에서는 이 실습의 핵심 도구인 John the Ripper(JtR) 와 대상 파일을 생성하는 데 사용할 zip 유틸리티를 설치합니다. Ubuntu 와 같은 데비안 계열 시스템의 표준 패키지 관리자인 apt를 사용하겠습니다.
먼저, 터미널에서 다음 명령어를 실행하여 필수 의존성 패키지와 zip 유틸리티를 설치합니다. -y 플래그는 설치 확인 질문에 자동으로 동의함을 의미합니다.
sudo apt update
sudo apt install -y git build-essential libssl-dev zlib1g-dev zip
sudo apt install -y yasm pkg-config libgmp-dev libpcap-dev libbz2-dev
apt 저장소의 기본 john 패키지에는 이번 실습에 꼭 필요한 zip2john 유틸리티가 포함되어 있지 않은 경우가 많습니다. 따라서 공식 저장소에서 John the Ripper 소스 코드를 복제하고 직접 컴파일하여 전체 도구 세트를 확보하겠습니다.
cd ~/project
git clone --depth 1 https://github.com/openwall/john -b bleeding-jumbo john
cd john/src
./configure && make -s clean && make -sj4
주의: 컴파일 과정은 약 3~5 분 정도 소요될 수 있습니다. 잠시만 기다려 주세요.
컴파일이 완료되면 어디서나 John the Ripper 도구를 사용할 수 있도록 별칭 (alias) 을 설정합니다.
echo 'alias john="$HOME/project/john/run/john"' >> ~/.zshrc
echo 'alias zip2john="$HOME/project/john/run/zip2john"' >> ~/.zshrc
source ~/.zshrc
이제 어떤 디렉토리에서든 john과 zip2john이 정상적으로 작동하는지 확인합니다.
john
John the Ripper 가 성공적으로 설치되었다면 다음과 유사한 출력이 나타납니다.
John the Ripper 1.9.0-jumbo-1+bleeding-7a8c81abd9 2025-08-23 23:43:48 +0200 OMP [linux-gnu 64-bit x86_64 AVX-512 AC]
Copyright (c) 1996-2025 by Solar Designer and others
Homepage: https://www.openwall.com/john/
Usage: john [OPTIONS] [PASSWORD-FILES]
Use --help to list all available options.
zip2john 유틸리티도 사용 가능한지 확인합니다.
zip2john
이 명령어를 실행했을 때 zip2john의 사용법 안내가 표시되어야 합니다.
이제 나머지 실습을 진행하기 위해 프로젝트 디렉토리로 돌아갑니다.
cd ~/project
필요한 도구가 모두 준비되었습니다. 이제 크래킹 연습을 위한 비밀번호 보호 파일을 생성할 차례입니다.
비밀번호로 보호된 ZIP 파일 생성
비밀번호 크래킹을 연습하려면 공격 대상이 필요합니다. 이번 단계에서는 간단한 텍스트 파일을 만든 다음, 이를 비밀번호가 걸린 ZIP 파일로 압축하겠습니다. 이는 민감한 파일이 비밀번호로 보안 처리된 실제 상황을 가정한 것입니다.
먼저, 현재 위치가 프로젝트 디렉토리인지 확인합니다.
cd ~/project
그 다음, secret.txt라는 이름의 간단한 텍스트 파일을 생성합니다. 이 파일은 보호된 ZIP 압축 파일 안에 담길 내용입니다.
echo "my secret data" > secret.txt
이제 암호화 플래그인 -e 옵션을 사용하여 secret.txt를 포함하는 비밀번호 보호 압축 파일 secret.zip을 생성합니다.
zip -e secret.zip secret.txt
명령어를 실행하면 비밀번호를 입력하고 확인하는 절차가 진행됩니다. 이번 실습에서는 빠른 시연을 위해 취약한 비밀번호인 password123을 입력해 주세요.
참고: 비밀번호를 입력할 때 화면에 아무런 글자도 표시되지 않는데, 이는 시스템 오류가 아니라 보안을 위한 정상적인 동작입니다. 당황하지 말고 비밀번호를 입력한 뒤 Enter 키를 누르세요.
Enter password:
Verify password:
adding: secret.txt (stored 0%)
마지막으로 디렉토리의 파일 목록을 확인하여 secret.zip이 생성되었는지 확인합니다.
ls -l
출력 결과에 secret.txt와 secret.zip이 모두 보여야 합니다.
total 8
-rw-rw-r-- 1 labex labex 15 Aug 29 09:57 secret.txt
-rw-rw-r-- 1 labex labex 213 Aug 29 09:57 secret.zip
이제 다음 단계에서 공격 대상이 될 비밀번호 보호 ZIP 파일을 성공적으로 만들었습니다.
ZIP 파일에서 해시 추출
John the Ripper 는 ZIP 파일 자체를 직접 공격하지 않습니다. 대신 파일의 비밀번호 해시 (Hash) 를 대상으로 작업합니다. 해시는 비밀번호를 나타내는 고유한 문자열입니다. 이번 단계에서는 John the Ripper 에 포함된 zip2john 유틸리티를 사용하여 이 해시를 추출해 보겠습니다.
secret.zip 파일에 대해 zip2john 명령을 실행합니다. 출력 내용을 > 연산자를 사용하여 zip_hash.txt라는 새 파일에 저장하겠습니다.
zip2john secret.zip > zip_hash.txt
명령어를 실행하면 터미널에 ZIP 파일 구조에 대한 상세 정보가 출력됩니다.
ver 1.0 efh 5455 efh 7875 secret.zip/secret.txt PKZIP Encr: 2b chk, TS_chk, cmplen=27, decmplen=15, crc=AF1563E8 ts=4F26 cs=4f26 type=0
이 정보는 압축 및 암호화 매개변수를 포함하여 암호화된 파일의 세부 사항을 보여줍니다.
추출된 해시가 어떻게 생겼는지 확인하려면 cat 명령어로 zip_hash.txt의 내용을 출력해 봅니다.
cat zip_hash.txt
출력 결과는 다음과 유사한 한 줄의 텍스트 형태일 것입니다.
secret.zip/secret.txt:$pkzip$1*2*2*0*1b*f*af1563e8*0*44*0*1b*4f26*50dbe9bcf15eafdb00ef774e1eaffef116bf5e0597fa55bb8b364c*$/pkzip$:secret.txt:secret.zip::secret.zip
이 해시 문자열에는 원본 파일 이름, 암호화 유형 ($pkzip$), 그리고 암호화된 데이터가 포함되어 있습니다. 해시 파일이 준비되었으므로 이제 John the Ripper 를 사용하여 비밀번호를 크래킹할 준비가 끝났습니다.
비밀번호 크래킹
이제 확보한 비밀번호 해시를 사용하여 John the Ripper 로 크래킹을 시도합니다. JtR 은 기본 설정에 따라 일반적인 비밀번호 사전과 규칙을 사용하여 해시와 일치하는 값을 찾습니다.
크래킹을 시작하려면 john 명령어를 실행하고 입력값으로 해시 파일인 zip_hash.txt를 지정합니다.
john zip_hash.txt
우리가 매우 취약한 비밀번호를 사용했기 때문에 John the Ripper 는 이를 금방 찾아낼 것입니다. 출력 화면에는 진행 상황과 결과가 표시됩니다. John 은 먼저 "single" 모드를 시도한 다음 단어 목록 (wordlist) 모드로 전환하여 공격을 진행합니다.
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Note: Passwords longer than 21 [worst case UTF-8] to 63 [ASCII] rejected
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
0g 0:00:00:00 DONE 1/3 (2025-08-29 10:24) 0g/s 2619Kp/s 2619Kc/s 2619KC/s Txtsecret1900..Tzip1900
Proceeding with wordlist:/home/labex/project/john/run/password.lst
Enabling duplicate candidate password suppressor using 256 MiB
password123 (secret.zip/secret.txt)
1g 0:00:00:00 DONE 2/3 (2025-08-29 10:24) 8.333g/s 286541p/s 286541c/s 286541C/s 123456..nelly1
Use the "--show" option to display all of the cracked passwords reliably
Session completed
password123 (secret.zip/secret.txt)라는 줄이 보인다면 비밀번호 크래킹에 성공한 것입니다. John 이 처음에 시도한 "single" 모드에서는 찾지 못했지만, 이어서 진행한 단어 목록 모드에서 비밀번호를 성공적으로 찾아냈음을 알 수 있습니다.
비밀번호가 크래킹되면 John 은 이를 별도의 파일에 저장합니다. 특정 해시 파일에 대해 크래킹된 비밀번호를 확인하려면 --show 옵션을 사용합니다.
john --show zip_hash.txt
이 명령은 크래킹된 비밀번호를 원본 파일 정보와 함께 명확한 형식으로 보여줍니다.
secret.zip/secret.txt:password123:secret.txt:secret.zip::secret.zip
1 password hash cracked, 0 left
John the Ripper 를 사용하여 ZIP 파일의 해시로부터 비밀번호를 성공적으로 복구했습니다. 마지막 단계는 이 비밀번호가 실제로 작동하는지 확인하는 것입니다.
크래킹된 비밀번호로 액세스 확인
마지막 단계는 크래킹한 비밀번호가 정확한지 검증하는 것입니다. 복구한 비밀번호를 사용하여 secret.zip 압축 파일의 내용을 직접 풀어보겠습니다. 이 과정을 통해 비밀번호 크래킹 결과가 유효함을 최종적으로 확인합니다.
unzip 명령어를 사용하여 압축을 해제합니다.
unzip secret.zip
명령어를 실행하면 비밀번호를 묻는 메시지가 나타납니다. John the Ripper 가 찾아낸 비밀번호인 password123을 입력하세요.
Archive: secret.zip
[secret.zip] secret.txt password:
replace secret.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: yes
extracting: secret.txt
2 단계에서 생성했던 secret.txt 파일이 이미 존재하므로 덮어쓸 것인지 묻는 메시지가 나타날 수 있습니다. yes를 입력하여 진행합니다. 비밀번호가 맞다면 오류 없이 현재 디렉토리에 secret.txt가 추출됩니다.
검증을 마무리하기 위해 추출된 파일의 내용을 출력하여 데이터가 온전한지 확인합니다.
cat secret.txt
출력 내용은 2 단계에서 우리가 작성했던 원본 텍스트와 일치해야 합니다.
my secret data
파일을 성공적으로 추출하고 원본 내용을 확인함으로써 John the Ripper 가 복구한 비밀번호가 정확함을 입증했습니다. 이로써 보호된 파일 생성, 비밀번호 크래킹, 결과 검증에 이르는 전체 과정을 모두 마쳤습니다.
요약
이 실습을 통해 John the Ripper 를 사용한 비밀번호 크래킹을 직접 경험해 보았습니다. 필수 도구를 설치하고, 비밀번호로 보호된 ZIP 파일을 생성하며, zip2john을 사용하여 비밀번호 해시를 추출하는 방법을 배웠습니다. 또한 John the Ripper 를 실행하여 해시로부터 비밀번호를 성공적으로 찾아냈고, 마지막으로 해당 비밀번호를 사용하여 보호된 파일에 접근함으로써 결과를 검증했습니다. 이 실습은 보안 테스트의 기본 기술을 보여주는 동시에, 취약한 비밀번호가 보안에 얼마나 취약한지를 잘 보여줍니다.


