증분 모드로 비밀번호 크래킹하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 인기 있는 오픈 소스 비밀번호 크래킹 도구인 John the Ripper 의 강력한 기능, 특히 "증분 모드 (incremental mode)"에 대해 자세히 알아봅니다. 증분 모드는 미리 정의된 문자 세트를 기반으로 문자 조합을 체계적으로 시도하여 비밀번호를 크래킹하는 매우 효율적인 방법입니다. 실습을 위해 간단한 비밀번호 해시를 생성하고, 다양한 문자 세트 (모든 문자, 숫자만, 문자만) 를 사용하여 증분 모드를 적용하여 효과와 성능을 관찰하는 방법을 배우게 됩니다. 이 실습 경험을 통해 비밀번호 크래킹이 어떻게 작동하는지, 그리고 속도에 영향을 미치는 요인에 대한 실질적인 이해를 얻을 수 있습니다.

테스트용 간단한 해시 생성

이 단계에서는 John the Ripper 가 크래킹을 시도할 수 있는 간단한 비밀번호 해시를 생성합니다. mkpasswd 명령을 사용하여 알려진 비밀번호에 대한 해시를 생성할 것입니다. 이를 통해 나중에 John the Ripper 의 성공 여부를 확인할 수 있습니다.

먼저 whois가 설치되어 있는지 확인하십시오. mkpasswdwhois 패키지에 포함되어 있습니다.

sudo apt update
sudo apt install -y whois

다음으로 비밀번호 12345에 대한 해시를 생성합니다. 단순화를 위해 MD5 알고리즘을 사용합니다.

mkpasswd -m md5 12345

출력으로 '$1$xxxxxxx$yyyyyyyyyyyyyyy'와 유사한 문자열을 보게 될 것입니다. 이 해시를 복사하십시오.

이제 이 해시를 ~/project 디렉터리에 hash.txt라는 파일로 저장합니다. YOUR_GENERATED_HASH를 복사한 실제 해시로 바꾸십시오.

echo "YOUR_GENERATED_HASH" > ~/project/hash.txt

예를 들어, 해시가 $1$abcdefgh$ijklmnopqrstuvwxyz였다면 명령은 다음과 같습니다.

echo "$1$abcdefgh$ijklmnopqrstuvwxyz" > ~/project/hash.txt

마지막으로 hash.txt 파일의 내용을 확인합니다.

cat ~/project/hash.txt

생성한 해시가 표시되는 것을 볼 수 있습니다.

증분 모드 (모든 문자) 로 John the Ripper 실행

이 단계에서는 생성한 비밀번호 해시를 크래킹하기 위해 증분 모드에서 John the Ripper 를 사용합니다. 증분 모드는 정의된 문자 세트를 기반으로 문자 조합을 체계적으로 시도합니다. 기본적으로 John 의 증분 모드 (--incremental) 는 모든 출력 가능한 ASCII 문자를 시도합니다.

먼저 John the Ripper 가 설치되어 있는지 확인하십시오.

sudo apt update
sudo apt install -y john

이제 증분 모드를 사용하여 hash.txt 파일에 대해 John the Ripper 를 실행합니다.

john --incremental ~/project/hash.txt

John 은 비밀번호 크래킹을 시도하기 시작합니다. 12345와 같은 간단한 비밀번호를 사용했기 때문에 비교적 빠르게 크래킹될 것입니다. 크래킹이 완료되면 John 은 크래킹된 비밀번호를 표시합니다.

비밀번호가 크래킹되었음을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
12345            (hash.txt)
1g 0:00:00:00 DONE (2023-10-26 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 12345
Session completed.

John 이 찾은 크래킹된 비밀번호를 보려면 --show 옵션을 사용할 수 있습니다.

john --show ~/project/hash.txt

이 명령은 해시와 관련된 크래킹된 비밀번호를 표시합니다.

12345            (hash.txt)

1 password hash cracked, 0 left

증분 모드 (숫자만) 로 John the Ripper 실행

이 단계에서는 John the Ripper 의 증분 모드를 구성하여 숫자 (0-9) 만 사용하여 크래킹하도록 합니다. 이는 비밀번호가 숫자만으로 구성되어 있다고 의심될 때 유용합니다.

먼저, John 의 세션을 재설정하여 처음부터 비밀번호를 다시 크래킹하도록 해야 합니다.

john --session=john --restore=none

이제 숫자를 포함하도록 구성된 사용자 지정 증분 모드로 John the Ripper 를 실행해 보겠습니다. John 은 증분 모드에 "규칙" 또는 "문자 세트"를 사용합니다. 특정 모드 이름을 가진 --incremental 옵션을 사용하거나 사용자 지정 .chr 파일을 정의하여 사용자 지정 문자 세트를 지정할 수 있습니다. 단순화를 위해 사용 가능한 경우 내장 모드를 사용하거나 시뮬레이션할 것입니다.

문자 세트를 제한하는 일반적인 방법은 사용자 지정 .conf 파일을 사용하거나 미리 정의된 모드를 지정하는 것입니다. John 의 기본 john.conf 파일은 종종 다양한 증분 모드를 정의합니다. 숫자에 초점을 맞춘 모드를 사용해 보겠습니다. 특정 "숫자" 모드를 직접 사용할 수 없는 경우 사용자 지정 모드를 만들 수 있습니다.

이 실습에서는 숫자를 우선시하는 기본 증분 모드를 가정합니다. John 의 기본 증분 모드는 상당히 포괄적입니다. 숫자를 구체적으로 대상으로 하려면 일반적으로 John 의 구성을 수정하거나 사용자 지정 문자 세트를 사용해야 합니다.

이 데모를 위해 비밀번호를 다시 크래킹해 보겠습니다. 이번에는 문자 세트를 숫자로 제한한다고 가정해 보겠습니다. --incremental 옵션은 기본적으로 광범위한 문자 세트를 사용하지만, 시연 목적으로 다시 실행할 것이며, 숫자로만 구성된 사용자 지정 모드가 있었다면 숫자 전용 비밀번호에 대해 훨씬 더 빠를 것이라는 점을 개념적으로 이해할 것입니다.

"숫자만" 공격의 효과를 시뮬레이션하기 위해 먼저 John 의 pot 파일 (크래킹된 비밀번호를 저장하는 곳) 을 지워 비밀번호를 다시 크래킹하도록 합니다.

rm -f ~/.john/john.pot

이제 John 을 다시 실행합니다. --incremental에는 직접적인 "숫자만" 플래그가 없지만, 내부 로직은 12345를 빠르게 찾을 것입니다. 여기서 핵심은 비밀번호가 실제로 숫자만으로 구성되어 있었다면, 특정 "숫자만"으로 구성된 증분 모드가 일반 모드보다 훨씬 빠르다는 것입니다.

john --incremental ~/project/hash.txt

John 이 비밀번호 12345를 다시 크래킹하는 것을 볼 수 있습니다. 비밀번호가 훨씬 길고 실제로 숫자만으로 구성되어 있으며 John 이 특정 "숫자만" 문자 세트로 구성되었다면 성능 차이가 눈에 띄었을 것입니다.

증분 모드 (문자만) 로 John the Ripper 실행

이 단계에서는 알파벳 문자 (문자) 만 사용하여 비밀번호를 크래킹하도록 구성했을 때 John the Ripper 가 어떻게 작동하는지 살펴보겠습니다. 이 시나리오는 비밀번호가 문자만으로 구성되어 있다고 의심될 때 관련이 있습니다.

먼저, 새로운 크래킹 시도를 보장하기 위해 John 의 pot 파일을 다시 지우겠습니다.

rm -f ~/.john/john.pot

이제 알파벳 문자만으로 구성된 비밀번호 (예: hello) 에 대한 새 해시를 생성해 보겠습니다.

mkpasswd -m md5 hello > ~/project/hash_letters.txt

새 해시 파일의 내용을 확인합니다.

cat ~/project/hash_letters.txt

이제 hash_letters.txt에 대해 John the Ripper 를 실행합니다. 숫자만 사용하는 시나리오와 유사하게, John 의 기본 증분 모드는 광범위합니다. 진정으로 문자로만 제한하려면 일반적으로 사용자 지정 .chr 파일이나 john.conf에 정의된 특정 증분 모드를 사용해야 합니다. 이 실습에서는 일반 증분 모드를 실행하고 "문자만" 모드가 이러한 비밀번호에 대해 더 빠를 것이라고 개념적으로 이해할 것입니다.

john --incremental ~/project/hash_letters.txt

John 은 hello 비밀번호를 크래킹하기 시작할 것입니다. 크래킹되는 것을 볼 수 있습니다.

Using default input encoding: UTF-8
Loaded 1 password hash (MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
hello            (hash_letters.txt)
1g 0:00:00:00 DONE (2023-10-26 10:35) 100.0g/s 100.0p/s 100.0c/s 100.0C/s hello
Session completed.

크래킹된 비밀번호를 확인하려면 다음을 수행합니다.

john --show ~/project/hash_letters.txt

hello가 크래킹된 비밀번호로 표시되는 것을 볼 수 있습니다.

증분 모드 성능 이해

이 단계에서는 John the Ripper 의 증분 모드에서 다양한 문자 세트를 사용할 때의 성능 영향을 고려해 보겠습니다. 우리의 예시에서는 짧고 간단한 비밀번호를 사용했지만, 이러한 원칙은 더 복잡한 시나리오에도 적용됩니다.

증분 모드의 핵심 아이디어는 정의된 문자 세트와 길이 범위 내에서 가능한 모든 조합을 체계적으로 시도하는 것입니다. 문자 세트의 크기는 가능한 조합의 수에 직접적인 영향을 미치며, 따라서 비밀번호를 크래킹하는 데 걸리는 시간에도 영향을 미칩니다.

다음 사항을 고려해 보세요.

  • 모든 문자 (예: 영숫자, 기호): 이것이 가장 큰 문자 세트입니다. 어떤 비밀번호든 크래킹할 수 있지만, John 이 엄청나게 많은 조합을 시도해야 하므로 가장 느립니다. 이것이 2 단계에서 경험한 것입니다.
  • 숫자만 (0-9): 이것은 훨씬 작은 문자 세트 (10 개 문자) 입니다. 비밀번호가 숫자만으로 구성되어 있다는 것을 안다면, 숫자만 사용하는 증분 모드를 사용하는 것이 "모든 문자" 모드를 사용하는 것보다 훨씬 빠를 것입니다. 특히 긴 비밀번호의 경우 더욱 그렇습니다.
  • 문자만 (a-z, A-Z): 이 문자 세트 (52 개 문자) 는 숫자만 사용하는 것보다 크지만 모든 문자를 사용하는 것보다는 작습니다. 비밀번호가 문자만으로 구성되어 있다고 의심된다면, 문자만 사용하는 모드를 사용하는 것이 "모든 문자" 모드를 사용하는 것보다 더 효율적일 것입니다.

핵심 요점: 대상 비밀번호의 문자 세트를 더 정확하게 정의할수록 John the Ripper(또는 다른 크래킹 도구) 는 증분 모드를 사용하여 더 빠르게 크래킹할 수 있습니다. 이것이 실제 비밀번호 크래킹 시나리오에서 잠재적인 비밀번호 특성 (예: "전화번호입니다", "이름입니다") 에 대한 정보 수집이 중요한 이유입니다.

마지막으로, 생성된 해시 파일을 정리하겠습니다.

rm -f ~/project/hash.txt ~/project/hash_letters.txt

이 명령은 실습 중에 생성된 임시 해시 파일을 제거합니다.

요약

이 실습에서는 John the Ripper 의 증분 모드를 사용하여 비밀번호를 크래킹하는 방법을 성공적으로 배웠습니다. 테스트를 위해 간단한 비밀번호 해시를 생성하는 것으로 시작했습니다. 그런 다음 John the Ripper 를 사용하여 이러한 해시를 크래킹했으며, 처음에는 기본 "모든 문자" 증분 모드를 사용했고, 그런 다음 문자 세트를 "숫자만" 또는 "문자만"으로 제한하는 것이 크래킹 성능을 크게 향상시킬 수 있다는 점을 개념적으로 탐구했습니다. 증분 모드의 작동 방식과 효율적인 비밀번호 크래킹을 위해 문자 공간을 좁히는 것의 중요성에 대한 실질적인 이해를 얻었습니다. 이 지식은 비밀번호 보안과 이를 테스트하는 데 사용되는 기술을 이해하는 데 기본이 됩니다.