John the Ripper 를 사용하여 MD5 해시 크래킹하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 널리 사용되는 오픈 소스 비밀번호 크래킹 도구인 John the Ripper 의 기능을 탐색합니다. 비밀번호 표현을 저장하는 데 일반적으로 사용되는 MD5 해시 크래킹에 중점을 둘 것입니다. 해시를 크래킹하는 방법을 이해하는 것은 보안 전문가가 비밀번호의 강도를 평가하고 취약점을 식별하는 데 중요합니다. MD5 해시를 생성하고, John the Ripper 에 맞게 준비한 다음, 단어 목록 공격 (wordlist attacks) 및 증분 모드 (incremental mode) 를 포함한 다양한 크래킹 기법을 사용하는 방법을 배우게 됩니다.

비밀번호로부터 MD5 해시 생성하기

이 단계에서는 몇 가지 샘플 비밀번호에 대한 MD5 해시를 생성합니다. 이는 해시된 비밀번호에 접근하여 이를 크래킹해야 하는 시나리오를 시뮬레이션합니다. echo 명령을 md5sum으로 파이프하여 이러한 해시를 생성할 것입니다.

먼저, 비밀번호 password123에 대한 MD5 해시를 생성해 보겠습니다.

echo -n "password123" | md5sum

다음과 유사한 출력을 볼 수 있습니다.

202cb962ac59075b964b07152d234b70  -

다음으로, 몇 가지 더 많은 비밀번호인 labexsecret에 대한 MD5 해시를 생성합니다.

echo -n "labex" | md5sum
echo -n "secret" | md5sum

출력은 다음과 같습니다.

202cb962ac59075b964b07152d234b70  -
a0b923820dcc509a86619210ed1572e4  -
5ebe2294ecd0e0f08eab7690d2a6ee69  -

이렇게 생성된 해시는 후속 단계에서 크래킹에 사용될 것입니다.

MD5 용 해시 파일 생성하기

이 단계에서는 생성한 MD5 해시가 포함된 파일을 생성합니다. John the Ripper 는 일반적으로 각 줄에 크래킹할 해시가 포함된 파일을 입력으로 받습니다. ~/project 디렉토리에 hashes.txt라는 파일을 생성하고 MD5 해시로 채울 것입니다.

먼저, hashes.txt 파일을 생성하고 MD5 해시를 추가해 보겠습니다. 해시 부분만 추가하고 - 또는 파일 이름은 포함하지 않습니다.

echo "202cb962ac59075b964b07152d234b70" > ~/project/hashes.txt
echo "a0b923820dcc509a86619210ed1572e4" >> ~/project/hashes.txt
echo "5ebe2294ecd0e0f08eab7690d2a6ee69" >> ~/project/hashes.txt

이제 cat 명령을 사용하여 hashes.txt 파일의 내용을 확인합니다.

cat ~/project/hashes.txt

출력은 다음과 같아야 합니다.

202cb962ac59075b964b07152d234b70
a0b923820dcc509a86619210ed1572e4
5ebe2294ecd0e0f08eab7690d2a6ee69

이 파일은 John the Ripper 의 입력으로 사용될 것입니다.

John the Ripper 에 해시 타입 지정하기

이 단계에서는 John the Ripper 에게 어떤 해시 타입을 다루고 있는지 알려주는 방법을 배웁니다. John the Ripper 는 다양한 해시 타입을 지원하며, 성공적인 크래킹을 위해서는 올바른 타입을 지정하는 것이 중요합니다. MD5 해시의 경우, raw-md5 형식을 사용할 것입니다.

John the Ripper 가 raw-md5를 인식하는지 확인하고 다른 지원 형식들을 보려면 --list=formats 옵션을 사용할 수 있습니다. 하지만 이 실습에서는 직접 raw-md5 형식을 사용할 것입니다.

단일 해시로 John the Ripper 를 테스트하고 --format 옵션을 사용하여 형식을 지정할 수 있습니다. 아직 크래킹되지는 않지만, John 이 형식을 처리할 수 있음을 확인합니다.

john --format=raw-md5 ~/project/hashes.txt --stdout

이 명령은 hashes.txt의 해시를 raw-md5로 처리하려고 시도하고 표준 출력으로 인쇄합니다. 아직 크래킹된 비밀번호는 보이지 않지만, 형식이 인식되었음을 확인합니다. John 이 단순히 처리하는 것이므로 출력은 해시 자체입니다.

202cb962ac59075b964b07152d234b70
a0b923820dcc509a86619210ed1572e4
5ebe2294ecd0e0f08eab7690d2a6ee69

이 단계는 John the Ripper 가 MD5 해시를 올바르게 처리하도록 구성되었는지 확인합니다.

워드리스트로 MD5 해시 크래킹하기

이 단계에서는 워드리스트를 사용하여 MD5 해시를 크래킹합니다. 워드리스트 공격은 미리 정의된 목록의 모든 단어를 시도하여 비밀번호를 크래킹하려고 합니다. 이는 일반적이면서도 약한 비밀번호를 크래킹하는 데 효과적인 방법입니다.

먼저 워드리스트가 필요합니다. 이 실습에서는 ~/project 디렉토리에 wordlist.txt라는 간단한 워드리스트 파일을 생성하고, 이전에 해싱했던 비밀번호를 포함하여 일반적인 비밀번호들을 담을 것입니다.

echo "password123" > ~/project/wordlist.txt
echo "labex" >> ~/project/wordlist.txt
echo "secret" >> ~/project/wordlist.txt
echo "test" >> ~/project/wordlist.txt
echo "admin" >> ~/project/wordlist.txt

이제 wordlist 옵션을 사용하여 John the Ripper 로 해시를 크래킹합니다.

john --format=raw-md5 --wordlist=~/project/wordlist.txt ~/project/hashes.txt

John the Ripper 는 hashes.txt 파일을 처리하고, wordlist.txt의 각 단어를 MD5 해시에 대입하여 시도합니다. 일치하는 항목을 찾으면 크래킹된 비밀번호를 표시합니다.

출력은 크래킹된 비밀번호를 보여줍니다.

Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (raw-md5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (202cb962ac59075b964b07152d234b70)
labex            (a0b923820dcc509a86619210ed1572e4)
secret           (5ebe2294ecd0e0f08eab7690d2a6ee69)
3g 0:00:00:00 DONE (2023-10-27 10:30) 100.0% (ETA: 00:00:00) 3.000g/s 15.00p/s 15.00c/s 15.00C/s password123 labex secret
Session completed.

john --show를 사용하여 John the Ripper 의 pot 파일에서 크래킹된 비밀번호를 표시할 수도 있습니다.

john --show ~/project/hashes.txt

출력:

202cb962ac59075b964b07152d234b70:password123
a0b923820dcc509a86619210ed1572e4:labex
5ebe2294ecd0e0f08eab7690d2a6ee69:secret

3 password hashes cracked, 0 left

이는 일반적이거나 추측하기 쉬운 비밀번호에 대한 워드리스트 공격의 효과를 보여줍니다.

증분 모드로 MD5 해시 크래킹하기

이 단계에서는 John the Ripper 의 증분 모드를 사용하여 MD5 해시를 크래킹합니다. 증분 모드는 문자 집합 (예: 소문자, 숫자, 기호) 을 기반으로 문자 조합을 시도하는 강력한 무차별 대입 공격입니다. 워드리스트 공격이 실패했을 때 유용하며, 기존 단어에 의존하지 않습니다.

먼저, 이 크래킹 시도를 위해 새로 시작하도록 John 의 pot 파일을 지우겠습니다. John 은 크래킹된 비밀번호를 저장하므로, 크래킹 과정을 다시 보기 위해 이 작업이 중요합니다.

john --session=my_session --restore=NONE

이제 증분 모드를 사용하여 해시를 크래킹해 보겠습니다. 시연 목적으로, 크래킹 시간을 관리하기 위해 매우 작은 문자 집합과 짧은 최대 길이를 사용할 것입니다. 실제 시나리오에서는 증분 모드가 비밀번호의 복잡성과 길이에 따라 매우 오랜 시간이 걸릴 수 있습니다.

john --format=raw-md5 --incremental=alnum --max-len=8 ~/project/hashes.txt

여기서:

  • --incremental=alnum: John 에게 영숫자 문자 (a-z, A-Z, 0-9) 를 사용하도록 지시합니다. John 은 alnum, alpha, digits 등과 같은 미리 정의된 증분 모드를 가지고 있습니다.
  • --max-len=8: 최대 비밀번호 길이를 8 자로 제한합니다. 이 실습에서 크래킹 시간을 짧게 유지하는 데 중요합니다.

John the Ripper 는 조합을 생성하고 테스트하기 시작할 것입니다. 우리의 비밀번호 (password123, labex, secret) 는 alnum 문자 집합과 max-len=8 ( labexsecret의 경우) 내에 있으므로, John 은 결국 이를 크래킹할 것입니다. password123은 11 자이므로 max-len=8로는 크래킹되지 않습니다.

출력은 John 이 발견하는 대로 크래킹된 비밀번호를 보여줍니다.

Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (raw-md5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
labex            (a0b923820dcc509a86619210ed1572e4)
secret           (5ebe2294ecd0e0f08eab7690d2a6ee69)
2g 0:00:00:00 DONE (2023-10-27 10:35) 100.0% (ETA: 00:00:00) 2.000g/s 10.00p/s 10.00c/s 10.00C/s labex secret
Session completed.

다시 john --show를 사용하여 크래킹된 비밀번호를 표시할 수 있습니다.

john --show ~/project/hashes.txt

출력:

a0b923820dcc509a86619210ed1572e4:labex
5ebe2294ecd0e0f08eab7690d2a6ee69:secret

2 password hashes cracked, 1 left

이번에는 password123--max-len=8 제한을 초과하는 길이 (11 자) 때문에 크래킹되지 않았음을 알 수 있습니다. 이는 증분 공격에 적절한 매개변수를 설정하는 것의 중요성을 강조합니다.

요약

이 실습에서는 John the Ripper 를 사용하여 MD5 해시를 성공적으로 크래킹했습니다. 샘플 비밀번호에서 MD5 해시를 생성하는 것으로 시작하여, John the Ripper 가 처리할 해시 파일을 만들었습니다. 해시 유형 (raw-md5) 을 지정하는 방법을 배웠고, 두 가지 다른 크래킹 기법인 워드리스트 공격과 증분 모드를 적용했습니다.

워드리스트 공격은 사전에서 발견되는 일반적인 비밀번호에 효과적이며, 증분 모드는 잠재적으로 훨씬 긴 크래킹 시간을 감수해야 하지만 더 복잡하거나 알 수 없는 비밀번호에 대한 무차별 대입 접근 방식을 제공한다는 것을 관찰했습니다. 이 실습은 사이버 보안 전문가에게 유용한 기술인 John the Ripper 를 사용한 비밀번호 크래킹 기법에 대한 기초적인 이해를 제공합니다.