John the Ripper 를 사용하여 ZIP 아카이브 크랙하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 ZIP 아카이브를 대상으로 하는 비밀번호 크래킹 기법에 대한 실질적인 경험을 쌓게 됩니다. 강력한 오픈 소스 비밀번호 크래킹 도구인 John the Ripper와 ZIP 파일을 John the Ripper 가 이해할 수 있는 해시 형식으로 변환하는 유틸리티인 zip2john을 함께 사용합니다. 이 실습에서는 비밀번호로 보호된 ZIP 파일을 생성하고, 해당 해시를 추출한 다음, 이를 크래킹하는 과정을 안내합니다. 또한, 이전 ZIP 암호화 방식의 내재된 취약점에 대해 배우고 민감한 데이터를 보호하기 위한 더 안전한 대안을 발견하게 될 것입니다.

비밀번호로 보호된 ZIP 파일 생성

이 단계에서는 간단한 텍스트 파일을 생성한 다음, 이를 비밀번호로 보호된 ZIP 아카이브로 압축합니다. 이 ZIP 파일은 이후 크래킹 시도의 대상이 됩니다. 시연 목적으로 간단하고 추측하기 쉬운 비밀번호를 사용하겠습니다.

먼저 홈 디렉토리의 project 폴더에 있는지 확인합니다.

cd ~/project

이제 secret.txt라는 파일을 생성하고 내용을 입력합니다.

echo "This is a secret message." > secret.txt

다음으로, secret.txt를 포함하는 archive.zip이라는 비밀번호로 보호된 ZIP 아카이브를 생성합니다. 프롬프트가 나타나면 비밀번호로 password123을 입력합니다.

zip -e archive.zip secret.txt

비밀번호를 입력하라는 메시지가 표시됩니다.

Enter password:
Verify password:
  adding: secret.txt (deflated 29%)

현재 디렉토리의 내용을 나열하여 ZIP 파일 생성을 확인할 수 있습니다.

ls -l

archive.zipsecret.txt가 나열된 것을 볼 수 있습니다.

zip2john 을 사용하여 ZIP 파일에서 해시 추출

이 단계에서는 zip2john 유틸리티를 사용하여 archive.zip 파일에서 비밀번호 해시를 추출합니다. 이 해시는 John the Ripper 가 원래 비밀번호를 크래킹하는 데 사용할 수 있는 비밀번호의 표현입니다.

먼저 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

이제 archive.zip에 대해 zip2john을 실행하고 출력을 zip_hash.txt라는 파일로 리디렉션합니다.

zip2john archive.zip > zip_hash.txt

이 명령은 해시를 추출하여 zip_hash.txt에 저장합니다. zip2john의 출력은 일반적으로 다음과 같습니다 (실제 해시는 다를 수 있습니다):

archive.zip:$zip$*0*1*0*...*secret.txt*$/zip$

해시가 추출되었는지 확인하기 위해 zip_hash.txt 파일의 내용을 볼 수 있습니다.

cat zip_hash.txt

출력에는 추출된 해시 문자열이 표시되어야 합니다.

John the Ripper 로 ZIP 해시 크래킹

해시를 추출했으므로 이제 John the Ripper를 사용하여 비밀번호 크래킹을 시도합니다. 이 시연에서는 이전에 설정한 비밀번호를 포함하는 간단한 단어 목록 (wordlist) 을 사용하겠습니다.

먼저 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

John the Ripper 는 일반적인 비밀번호를 시도하기 위해 종종 단어 목록을 사용합니다. 이 실습에서는 대상 비밀번호를 포함하는 작은 사용자 정의 단어 목록을 생성하겠습니다.

echo -e "test\npassword\n123456\npassword123\nadmin" > wordlist.txt

이제 zip_hash.txt 파일과 wordlist.txt를 사용하여 John the Ripper 를 실행합니다.

john --wordlist=wordlist.txt zip_hash.txt

John the Ripper 는 해시와 단어 목록을 처리합니다. 성공하면 크래킹된 비밀번호를 표시합니다. 출력은 다음과 유사하게 표시됩니다.

Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (archive.zip)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123

다음 명령을 실행하여 John 이 찾은 크래킹된 비밀번호를 확인할 수도 있습니다.

john --show zip_hash.txt

이 명령은 John the Ripper 가 성공적으로 크래킹하여 내부 pot 파일에 저장한 모든 비밀번호를 표시합니다.

archive.zip:password123

1 password hash cracked, 0 left

ZIP 암호화의 취약점 이해

이 단계에서는 이전 단계에서 사용된 표준 ZIP 2.0 암호화 방식의 내재된 취약점에 대해 알아보겠습니다. 이러한 취약점을 이해하는 것은 더 강력한 암호화 방식이 왜 필요한지 이해하는 데 중요합니다.

zip 명령에서 사용되는 기본 암호화 (종종 "전통적인 PKZIP 암호화" 또는 "ZIP 2.0 암호화"라고 함) 는 취약한 것으로 알려져 있습니다. 이는 다양한 공격, 특히 현대 컴퓨팅 성능을 고려할 때 알려진 평문 공격 (known-plaintext attacks) 및 무차별 대입 공격 (brute-force attacks) 에 취약한 독점 알고리즘을 사용합니다.

주요 취약점:

  • 독점 알고리즘 (Proprietary Algorithm): 이 알고리즘은 현대 암호화 표준 (예: AES) 과 같이 공개적으로 검증되지 않았습니다.
  • 취약한 키 파생 (Weak Key Derivation): 키 파생 함수가 단순하여 공격자가 비밀번호를 추측하거나 무차별 대입하기 더 쉽습니다.
  • 알려진 평문 공격 (Known-Plaintext Attacks): 공격자가 암호화된 ZIP 파일과 그 안의 파일 중 적어도 하나의 암호화되지 않은 버전에 접근할 수 있다면 (작은 파일이라도), 암호화 키를 매우 빠르게 복구할 수 있습니다. 이는 상당한 취약점입니다.
  • 제한된 키 공간 (Limited Key Space): 짧은 비밀번호의 경우 유효 키 공간이 작아 무차별 대입 공격이 가능합니다.

이러한 취약점 때문에 민감한 데이터에 표준 ZIP 2.0 암호화를 사용하는 것은 강력히 권장되지 않습니다. 공격자가 충분한 리소스나 알려진 평문을 가지고 있다면, 중간 정도의 복잡성을 가진 비밀번호조차 비교적 빠르게 크래킹될 수 있습니다.

이 단계에서는 명령 실행이 필요하지 않지만, 안전한 데이터 처리를 위해 이러한 개념을 이해하는 것이 중요합니다.

ZIP 아카이브를 효과적으로 보호하기

기존 ZIP 암호화의 취약점을 고려할 때, 민감한 데이터를 보호할 때는 더 강력한 방법을 사용하는 것이 필수적입니다. 이 단계에서는 더 강력한 암호화 표준인 AES-256 에 대해 배우고 사용해 보겠습니다.

LabEx VM 에 설치된 것을 포함하여 많은 최신 zip 구현은 AES 암호화를 지원합니다. ZIP 아카이브를 생성할 때 암호화 방법을 지정할 수 있습니다.

AES-256 암호화로 ZIP 아카이브를 생성하려면 일반적으로 비밀번호에는 -P 플래그를, 방식에는 -m 플래그를 사용하거나, 사용 가능한 경우 기본 강력 암호화를 사용합니다. 그러나 zip 명령의 -e 플래그는 종종 더 약한 PKZIP 2.0 암호화로 기본 설정됩니다. AES-256 과 같은 더 강력한 암호화를 위해서는 명시적으로 지원하는 7z (7-Zip) 또는 WinRAR를 사용하는 것이 좋습니다.

7z는 강력한 아카이빙에 널리 사용되는 도구이므로, 7z를 사용하여 AES-256 암호화 아카이브를 생성하는 방법을 시연해 보겠습니다. 먼저 p7zip-full을 설치합니다.

sudo apt-get install -y p7zip-full

이제 이 시연을 위한 새 파일을 생성합니다.

echo "This is a highly secret message." > super_secret.txt

다음으로, AES-256 암호화를 사용하여 secure_archive.7z라는 7z 아카이브를 생성합니다. 프롬프트가 나타나면 강력한 비밀번호 (예: StrongPassword!23) 를 입력합니다.

7z a -p secure_archive.7z super_secret.txt

비밀번호를 입력하라는 메시지가 표시됩니다.

Enter password (will not be echoed):
Verify password (will not be echoed):

이 명령은 기본적으로 AES-256 암호화를 사용하여 7z 아카이브를 생성하며, 이는 전통적인 ZIP 2.0 암호화보다 훨씬 안전합니다. 7z 아카이브는 강력한 암호화 알고리즘과 키 파생 함수 덕분에 크래킹하기가 훨씬 어렵습니다.

7z 아카이브 생성을 확인할 수 있습니다.

ls -l

secure_archive.7z가 나열된 것을 볼 수 있어야 합니다.

안전한 아카이브를 위한 모범 사례:

  • 강력한 암호화 사용: 항상 AES-256 암호화 (예: 7z 또는 AES 를 명시적으로 지원하는 최신 zip 도구 사용) 를 선호하십시오.
  • 강력한 비밀번호 사용: 대문자 및 소문자, 숫자, 기호를 조합하십시오. 최소 12-16 자 이상을 목표로 하십시오.
  • 알려진 평문 피하기: 추측하기 쉽거나 공개적으로 사용 가능한 파일을 암호화된 아카이브에 포함하지 마십시오.
  • 도구 정기 업데이트: 최신 보안 패치 및 개선 사항을 활용하기 위해 아카이빙 소프트웨어가 최신 상태인지 확인하십시오.

이러한 모범 사례를 따르면 아카이브된 데이터의 보안을 크게 향상시킬 수 있습니다.

요약

이 실습에서는 비밀번호로 보호된 ZIP 아카이브를 생성하고, zip2john을 사용하여 해당 해시를 추출한 다음, John the Ripper로 해당 해시를 크래킹하는 방법을 성공적으로 배웠습니다. 이 실습 경험을 통해 비밀번호 크래킹 과정을 시연하고 구형 암호화 방식의 취약점을 강조했습니다. 결정적으로, 전통적인 ZIP 2.0 암호화에 내재된 취약점에 대한 이해를 얻었고, 7z와 같은 도구를 사용하여 AES-256 암호화와 같은 더 안전한 대안에 대해 배웠습니다. 논의된 모범 사례를 적용함으로써 민감한 데이터를 강력한 암호화 표준으로 보호할 수 있습니다.