암호로 보호된 ZIP 아카이브 크랙하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 암호로 보호된 ZIP 아카이브를 크랙하는 기본적인 프로세스를 배우게 됩니다. 이는 디지털 포렌식 및 침투 테스트에서 흔히 사용되는 작업입니다. 이를 위해 Linux 에서 사용 가능한 명령줄 도구들을 조합하여 사용할 것입니다. 이 과정은 샘플 보호 파일을 생성하고, 해당 파일의 암호 해시를 추출한 다음, 강력한 암호 복구 도구인 Hashcat 을 사용하여 해시를 크랙하고 원본 암호를 복구하는 과정을 포함합니다.

이 실습이 끝나면 다음 사항에 익숙해질 것입니다:

  • 암호화된 ZIP 파일 생성하기
  • zip2john을 사용하여 암호 해시 추출하기
  • Hashcat 에서 사용할 해시 준비하기
  • Hashcat 으로 사전 공격 (dictionary attack) 을 실행하여 암호 복구하기

암호로 보호된 ZIP 파일 생성하기

이 단계에서는 암호로 보호된 ZIP 파일을 생성합니다. 이 파일은 암호 크랙 실습의 대상이 될 것입니다. "암호화 (encrypt)"를 의미하는 -e 옵션과 함께 표준 zip 명령을 사용할 것입니다.

먼저, ~/project 디렉토리에 있는지 확인하십시오. 설정 과정에서 이미 secret.txt라는 파일을 생성해 두었습니다.

이제 secret.txt 파일로부터 secret.zip이라는 이름의 암호화된 ZIP 아카이브를 생성하기 위해 다음 명령을 실행하십시오.

zip -e secret.zip secret.txt

시스템에서 암호를 입력하고 확인하라는 메시지가 표시됩니다. 이 실습에서는 암호로 labex를 사용합니다. labex를 입력하고 Enter 키를 누른 다음, 다시 입력하여 확인하십시오.

Enter password:
Verify password:
  adding: secret.txt (stored 0%)

명령이 완료된 후, ls 명령을 사용하여 현재 디렉토리에 secret.zip 파일이 생성되었는지 확인할 수 있습니다.

ls -l

출력에서 secret.zip이 나열된 것을 볼 수 있어야 합니다.

-rw-r--r-- 1 labex labex  218 May 20 10:00 secret.zip
-rw-r--r-- 1 labex labex   23 May 20 10:00 secret.txt
-rw-r--r-- 1 labex labex   32 May 20 10:00 wordlist.txt

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

이 단계에서는 zip2john 유틸리티를 사용하여 secret.zip 파일에서 암호 해시를 추출합니다. Hashcat 과 같은 암호 크랙 도구는 암호화된 파일에서 직접 작동하지 않고, 해당 파일의 해시를 사용하여 작동합니다. zip2john은 John the Ripper 제품군에 속한 도구로, 이 목적을 위해 특별히 설계되었습니다.

secret.zip을 처리하고 결과 해시를 zip_hash.txt라는 새 파일에 저장하기 위해 다음 명령을 실행하십시오.

zip2john secret.zip > zip_hash.txt

이 명령은 출력을 zip_hash.txt 파일로 리디렉션했기 때문에 터미널에 직접적인 출력을 생성하지 않습니다. 추출된 해시를 보려면 cat 명령을 사용하여 새 파일의 내용을 표시할 수 있습니다.

cat zip_hash.txt

출력은 다음과 유사하게 표시됩니다. 이 문자열에는 암호를 크랙하는 데 필요한 모든 정보가 포함되어 있습니다.

secret.zip:$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$

Hashcat 호환성을 위한 해시 형식 지정

이 단계에서는 추출된 해시를 Hashcat 과 호환되도록 형식을 지정합니다. zip2john의 출력에는 해시 문자열 앞에 원본 파일 이름 (secret.zip:) 이 포함됩니다. Hashcat 은 순수한 해시 데이터만 필요로 합니다.

zip_hash.txt의 내용을 다시 살펴보겠습니다.
secret.zip:$pkzip2$1*1*2*0*8*24*...

secret.zip: 부분을 제거해야 합니다. 이를 수행하는 간단한 방법은 구분 기호를 기준으로 텍스트를 분할할 수 있는 cut 명령을 사용하는 것입니다. 콜론 (:) 을 구분 기호로 사용하고 두 번째 필드를 선택할 것입니다.

해시를 추출하여 hashcat_ready.txt라는 새 파일에 저장하려면 다음 명령을 실행하십시오.

cut -d':' -f2 zip_hash.txt > hashcat_ready.txt
  • cut: 줄의 일부를 잘라내는 명령입니다.
  • -d':': 구분 기호가 콜론임을 지정합니다.
  • -f2: 두 번째 필드를 원한다는 것을 지정합니다.

이제 새 파일의 내용을 확인하여 해시만 포함되어 있는지 확인하십시오.

cat hashcat_ready.txt

출력은 파일 이름 접두사 없이 해시 문자열이어야 합니다.

$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$

이 파일은 이제 Hashcat 과 함께 사용할 준비가 되었습니다.

PKZIP 에 대한 올바른 Hashcat 모드 선택

이 단계에서는 Hashcat 에 대한 올바른 해시 모드를 식별하는 방법을 배웁니다. Hashcat 은 수백 가지의 다양한 해시 유형을 크랙하는 것을 지원하며, 모드 번호를 사용하여 제공하는 유형을 지정해야 합니다.

추출한 해시는 $pkzip2$로 시작합니다. 이는 사용된 ZIP 암호화 유형을 나타냅니다. 올바른 번호를 찾기 위해 Hashcat 의 도움말 문서에서 "PKZIP"과 관련된 모드를 검색할 수 있습니다.

다음 명령을 사용하여 Hashcat 의 도움말 출력에서 "pkzip"을 검색하십시오.

hashcat --help | grep -i "pkzip"

출력에는 다양한 PKZIP 암호화 버전과 관련된 여러 해시 모드가 나열됩니다.

17200 | PKZIP (legacy)                                       | Archives
17210 | PKZIP (legacy) (Compressed)                            | Archives
17220 | PKZIP (legacy) (Mixed)                                 | Archives
17225 | PKZIP (legacy) (Mixed + Compressed)                    | Archives
20500 | PKZIP Master Key                                       | Archives
20510 | PKZIP Master Key (Compressed)                          | Archives

간단한 암호로 보호된 ZIP 에서 생성된 우리의 해시는 "PKZIP (legacy)" 유형에 해당합니다. 출력에서 볼 수 있듯이 이 유형의 모드 번호는 17200입니다. 다음 단계에서 이 모드를 사용하여 공격을 시작할 것입니다.

ZIP 암호 복구를 위한 공격 실행

이 단계에서는 Hashcat 을 사용하여 암호 크랙 공격을 실행합니다. 제공된 목록의 모든 암호를 시도하는 "straight" 또는 사전 공격을 수행할 것입니다. 이미 wordlist.txt라는 간단한 목록을 준비했습니다.

Hashcat 의 명령 구조는 다음과 같습니다.
hashcat [옵션] <해시 파일> <단어 목록 파일>

이전 단계를 기반으로 전체 명령은 다음과 같습니다.

hashcat -m 17200 -a 0 hashcat_ready.txt wordlist.txt

명령을 분석해 보겠습니다.

  • -m 17200: 이전 단계에서 식별한 PKZIP (legacy) 의 해시 모드를 지정합니다.
  • -a 0: 공격 모드를 지정합니다. 0은 Straight (사전) 공격을 의미합니다.
  • hashcat_ready.txt: 대상 해시가 포함된 파일입니다.
  • wordlist.txt: 잠재적 암호 목록이 포함된 파일입니다.

명령을 실행하십시오. Hashcat 이 시작되고 백엔드를 초기화한 다음 공격을 시작합니다.

hashcat (v6.2.6) starting

...

Session..........: hashcat
Status...........: Cracked
Hash.Name........: PKZIP (legacy)
Hash.Target......: $pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   248.2 kH/s (0.10ms) @ Accel:128 Loops:128 Thr:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex -> zzzzzzz
Hardware.Mon.#1..: Temp: 48c

$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$:labex

Started: ...
Stopped: ...

단어 목록이 작았기 때문에 Hashcat 은 암호를 매우 빠르게 찾았습니다. 출력의 마지막 줄은 해시와 복구된 암호 (labex) 를 보여줍니다.

축하합니다. ZIP 아카이브의 암호를 성공적으로 크랙했습니다!

요약

이 실습에서는 일반적인 명령줄 도구를 사용하여 암호로 보호된 ZIP 아카이브를 크랙하는 전체 워크플로를 성공적으로 완료했습니다.

다음과 같은 내용을 배웠습니다.

  1. zip 명령을 사용하여 암호화된 ZIP 파일을 생성하는 방법.
  2. zip2john을 사용하여 ZIP 파일에서 암호 해시를 추출하는 방법.
  3. 추출된 해시를 Hashcat과 호환되도록 형식화하는 방법.
  4. Hashcat 내에서 대상에 대한 올바른 해시 유형 모드를 식별하는 방법.
  5. Hashcat으로 사전 공격을 실행하여 암호를 성공적으로 복구하는 방법.

이러한 기술은 디지털 포렌식 및 윤리적 해킹과 같은 사이버 보안 분야에서 중요한 암호 복구 기술에 대한 기초적인 이해를 형성합니다. 교육 목적으로 간단한 암호와 작은 단어 목록을 사용했지만, 동일한 원칙이 더 복잡한 실제 시나리오에도 적용됩니다.