단일 크랙 모드로 비밀번호 크랙하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 강력한 비밀번호 크래킹 도구인 John the Ripper 의 "단일 크랙 모드 (single crack mode)"를 탐구합니다. 단일 크랙 모드는 사용자 이름 목록이 있고, 사용자 이름 자체에서 파생된 정보 (예: 순열 또는 일반적인 변형) 를 사용하여 해당 비밀번호를 크랙하려는 경우 특히 유용합니다. 이 모드에 적합한 해시 파일을 준비하는 방법, John the Ripper 실행 방법, 크래킹 프로세스 관찰 방법, 그리고 단일 크랙 모드가 가장 효과적인 특정 시나리오와 그 한계를 이해하게 될 것입니다. 이 실습 경험을 통해 비밀번호 보안 및 감사에 대한 실질적인 기술을 습득하게 될 것입니다.

사용자 이름으로 해시 파일 준비하기

이 단계에서는 John the Ripper 가 단일 크랙 모드에서 사용할 수 있는 해시 파일을 준비합니다. 단일 크랙 모드는 사용자 이름 자체의 정보를 활용하여 잠재적인 비밀번호를 생성합니다. 이를 효과적으로 수행하려면 해시 파일에 사용자 이름이 포함되어야 합니다.

먼저 프로젝트 디렉토리에 있는지 확인합니다.

cd ~/project

다음으로, 몇 가지 항목을 포함하는 my_hashes.txt라는 간단한 비밀번호 파일을 생성해 보겠습니다. 시연 목적으로 비밀번호 "password"에 대한 알려진 MD5 해시 (5f4dcc3b5aa765d61d8327deb882cf99) 를 사용하겠습니다.

echo "user1:5f4dcc3b5aa765d61d8327deb882cf99" > my_hashes.txt
echo "john:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "mary:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "testuser:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt
echo "admin:5f4dcc3b5aa765d61d8327deb882cf99" >> my_hashes.txt

cat 명령을 사용하여 파일 내용을 확인할 수 있습니다.

cat my_hashes.txt

예상 출력:

user1:5f4dcc3b5aa765d61d8327deb882cf99
john:5f4dcc3b5aa765d61d8327deb882cf99
mary:5f4dcc3b5aa765d61d8327deb882cf99
testuser:5f4dcc3b5aa765d61d8327deb882cf99
admin:5f4dcc3b5aa765d61d8327deb882cf99

이 파일에는 이제 사용자 이름과 해당 비밀번호 해시가 포함되어 있으며, John the Ripper 의 단일 크랙 모드에 사용할 준비가 되었습니다.

단일 크랙 모드로 John the Ripper 실행하기

이 단계에서는 준비한 해시 파일에 대해 단일 크랙 모드를 사용하여 John the Ripper 를 실행합니다. John 은 사용자 이름에서 잠재적인 비밀번호를 파생하여 비밀번호를 크랙하려고 시도할 것입니다.

단일 크랙 모드로 John the Ripper 를 실행하려면 --single 옵션 뒤에 해시 파일 경로를 지정합니다.

john --single my_hashes.txt

John the Ripper 가 해시 처리를 시작합니다. 비밀번호 "password"는 일반적인 단어이고 사용자 이름이 간단하기 때문에 John 은 일부를 빠르게 크랙할 수 있습니다. 출력에는 크랙된 비밀번호가 표시됩니다.

예시 출력:

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
password         (john)
password         (mary)
password         (testuser)
password         (admin)
5g 0:00:00:00 DONE (2023-10-27 08:30) 100% ...
Session completed.

John 이 완료된 후, John 의 pot 파일에 저장된 크랙된 비밀번호를 볼 수 있습니다.

john --show my_hashes.txt

예상 출력:

user1:password

john:password

mary:password

testuser:password

admin:password

5 password hashes cracked, 0 left

이 명령은 my_hashes.txt 파일에서 John 이 성공적으로 크랙한 모든 비밀번호를 표시합니다.

단일 크랙 모드 동작 관찰하기

이 단계에서는 John the Ripper 의 단일 크랙 모드가 어떻게 작동하고 어떤 종류의 비밀번호 후보를 생성하는지 관찰합니다. 단일 크랙 모드는 단어 목록이나 무차별 대입 공격을 직접 사용하지 않기 때문에 독특합니다. 대신 사용자 이름 (또는 사용 가능한 경우 GECOS 필드) 을 비밀번호 추측 생성의 기반으로 사용합니다.

관찰을 위해 새로 실행되도록 John 의 pot 파일을 지우겠습니다. 이는 실제 시나리오에서는 일반적으로 수행되지 않지만 시연에는 도움이 됩니다.

john --session=clear --format=Raw-MD5 --pot=/home/labex/.john/john.pot

이제 단일 모드로 John 을 다시 실행하되, 이번에는 출력과 각 항목을 처리하는 방식에 더 주의를 기울여 보겠습니다.

john --single my_hashes.txt

John 이 실행됨에 따라 사용자 이름의 변형을 시도하는 것을 알 수 있습니다. 예를 들어, john의 경우 john, John, JOHN, john1, john123, johnny, j0hn 등을 시도할 수 있습니다. 정확한 변형은 John 의 내부 규칙과 john.conf 구성 파일에 따라 달라집니다.

핵심은 단일 크랙 모드가 사용자 이름의 간단한 변형인 비밀번호를 크랙하는 데 매우 효율적이라는 것입니다. 이는 사전 공격이나 무차별 대입과 같은 더 많은 리소스 집약적인 방법을 사용하기 전에 빠른 확인 단계입니다.

John 의 구성 파일을 검사하여 단일 모드에 사용하는 규칙을 이해할 수도 있습니다. 수정하지는 않겠지만 해당 파일의 위치를 아는 것은 유용합니다.

ls -l /etc/john/john.conf

예상 출력:

-rw-r--r-- 1 root root 12345 Oct 27 08:00 /etc/john/john.conf

(파일 크기와 날짜는 다를 수 있습니다)

이 파일에는 다른 규칙 외에도 단일 크랙 모드에 대한 규칙 세트가 포함되어 있습니다.

단일 크랙 모드의 한계 이해하기

이 단계에서는 John the Ripper 의 단일 크랙 모드의 한계를 이해합니다. 특정 시나리오에서는 강력하지만 모든 비밀번호 크랙 요구 사항에 대한 보편적인 해결책은 아닙니다.

단일 크랙 모드는 주로 사용자 이름 (및 때로는 /etc/passwd의 GECOS 필드) 의 순열 및 변형에 의존합니다. 이는 다음을 의미합니다.

  1. 제한된 범위: 사용자 이름에서 직접 파생될 수 있는 비밀번호만 시도합니다. 비밀번호가 "apple"이고 사용자 이름이 "user1"인 경우, "apple"은 "user1"과 직접적인 관련이 없으므로 단일 크랙 모드는 실패할 가능성이 높습니다.
  2. 외부 단어 목록 없음: 사전 공격 모드와 달리 단일 크랙 모드는 외부 단어 목록을 사용하지 않습니다. 이로 인해 속도는 빠르지만 사용자 이름과 관련 없는 일반적인 단어인 비밀번호를 크랙하는 능력은 제한됩니다.
  3. 무차별 대입 없음: 모든 가능한 문자 조합을 시도하는 전체 무차별 대입 공격을 수행하지 않습니다. 이는 복잡하고 무작위적인 비밀번호가 이 모드로 크랙될 가능성이 매우 낮다는 것을 의미합니다.
  4. 사용자 이름에 대한 의존성: 효과는 사용자 이름의 품질과 관련성에 직접적으로 연결됩니다. 사용자 이름이 일반적 (예: user, admin) 이면 생성된 비밀번호 후보가 덜 효과적일 수 있습니다.

이러한 한계를 시연하기 위해 사용자 이름과 관련 없는 비밀번호에 대한 해시를 추가해 보겠습니다. e10adc3949ba59abbe56e057f20f883e123456의 MD5 해시이므로 randomuser:e10adc3949ba59abbe56e057f20f883e를 추가합니다.

echo "randomuser:e10adc3949ba59abbe56e057f20f883e" >> my_hashes.txt
cat my_hashes.txt

이제 단일 모드로 John 을 다시 실행합니다.

john --single my_hashes.txt

randomuser의 비밀번호 (123456) 는 123456randomuser의 파생이 아니기 때문에 크랙되지 않는 것을 관찰할 수 있습니다.

예상 출력 (randomuser가 크랙되지 않았음에 유의):

Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
password         (john)
password         (mary)
password         (testuser)
password         (admin)
5g 0:00:00:00 DONE (2023-10-27 08:35) 100% ...
Session completed.

이는 단일 크랙 모드가 비밀번호가 사용자 이름의 간단한 변형일 때만 효과적임을 명확하게 보여줍니다.

단일 크랙 모드와 다른 모드 비교하기

마지막 단계에서는 John the Ripper 의 다른 일반적인 크랙 모드 (단어 목록 모드, 무차별 대입 모드 등) 와 단일 크랙 모드를 간략하게 비교합니다. 이러한 차이점을 이해하는 것은 작업에 적합한 도구를 선택하는 데 중요합니다.

  1. 단일 크랙 모드 (--single):

    • 방법: 사용자 이름 (및 GECOS 필드) 을 기반으로 비밀번호 후보를 생성합니다.
    • 사용 사례: 사용자 이름의 간단한 변형인 비밀번호에 대한 빠른 확인에 이상적입니다. 매우 빠릅니다.
    • 한계: 범위가 제한적입니다. 사용자 이름과 관련 없는 비밀번호는 크랙하지 않습니다.
  2. 단어 목록 모드 (--wordlist=FILE):

    • 방법: 제공된 사전 또는 단어 목록 파일의 비밀번호를 시도합니다. 규칙 (--rules) 과 함께 사용하여 순열을 만들 수 있습니다.
    • 사용 사례: 사전에서 발견되는 일반적인 단어, 구문 또는 조합인 비밀번호를 크랙하는 데 가장 일반적이고 효과적입니다.
    • 한계: 단어 목록만큼만 효과적입니다. 목록이나 해당 순열에 없는 비밀번호는 크랙하지 않습니다.
  3. 증분 (무차별 대입) 모드 (--incremental):

    • 방법: 정의된 문자 집합 및 길이 내에서 가능한 모든 문자 조합을 체계적으로 시도합니다.
    • 사용 사례: 다른 방법으로 찾을 수 없는 복잡한 비밀번호를 크랙하기 위한 최후의 수단입니다. 충분한 시간이 주어지면 비밀번호를 찾는 것을 보장합니다.
    • 한계: 특히 긴 비밀번호나 더 큰 문자 집합의 경우 시간이 매우 오래 걸립니다. 며칠, 몇 달 또는 몇 년이 걸릴 수 있습니다.

단어 목록 모드를 사용하여 randomuser 비밀번호 (123456) 를 크랙하는 것을 시연해 보겠습니다. 먼저 "123456"이 포함된 간단한 단어 목록을 만듭니다.

echo "123456" > my_wordlist.txt

이제 단어 목록 모드로 John 을 실행합니다.

john --wordlist=my_wordlist.txt my_hashes.txt

예상 출력:

Using default input encoding: UTF-8
Loaded 6 password hashes with no different salts (Raw-MD5 [MD5])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (randomuser)
1g 0:00:00:00 DONE (2023-10-27 08:40) 100% ...
Session completed.

보시다시피 randomuser의 비밀번호는 단어 목록을 사용하여 크랙되었습니다. 이는 다른 크랙 모드가 다른 유형의 비밀번호에 적합하다는 것을 강조합니다. 단일 크랙 모드는 좋은 첫 단계이지만, 더 포괄적인 크랙을 위해 단어 목록 또는 증분 모드를 따르는 경우가 많습니다.

마지막으로 생성된 파일을 정리합니다.

rm my_hashes.txt my_wordlist.txt

요약

이 실습에서는 John the Ripper 의 단일 크랙 모드 사용법을 성공적으로 배웠습니다. 사용자 이름이 포함된 해시 파일을 준비하고, 단일 크랙 모드로 John 을 실행했으며, 사용자 이름에서 파생된 비밀번호를 크랙하는 동작을 관찰했습니다. 또한 단일 크랙 모드의 한계를 이해하고, 특정 비밀번호 패턴에 가장 효과적이며 만능 해결책이 아님을 깨달았습니다. 마지막으로 단일 크랙 모드를 단어 목록 및 증분 모드와 같은 다른 일반적인 John the Ripper 모드와 비교하여 각 모드가 가장 적합한 시기를 강조했습니다. 이러한 실질적인 경험은 비밀번호 보안 감사 기술에 대한 이해를 향상시킵니다.