소개
John the Ripper 는 Unix, macOS, Windows 및 DOS 의 다양한 운영체제에서 사용할 수 있는 빠른 비밀번호 크래커입니다. 주요 목적은 취약한 Unix 비밀번호를 탐지하는 것입니다. 다양한 Unix 시스템에서 가장 흔하게 발견되는 여러 crypt(3) 비밀번호 해시 유형 외에도, Kerberos AFS 및 Windows LM 해시가 기본적으로 지원되며, 커뮤니티 강화 버전에서는 수백 가지의 다른 해시 및 암호 유형도 지원합니다.
이 실습에서는 John the Ripper 의 고급 명령줄 옵션을 탐색하여 해당 기능에 대해 더 깊이 알아볼 것입니다. 이러한 옵션을 이해하면 비밀번호 크래킹 시도를 미세 조정하고, 장기 실행 세션을 관리하며, 추가 분석을 위해 출력을 리디렉션할 수 있습니다. 해시 형식을 지정하고, 사용자 정의 규칙을 적용하고, 크래킹 세션을 관리하고, 단어 목록 생성을 위해 --stdout 옵션을 사용하는 방법을 배우게 됩니다.
--format 옵션 상세 탐색
이 단계에서는 John the Ripper 에서 --format 옵션을 사용하는 방법을 배웁니다. 이 옵션은 다양한 유형의 비밀번호 해시를 다룰 때 중요하며, John 에게 어떤 해시 유형을 예상하고 처리해야 하는지를 알려줍니다. John the Ripper 는 전통적인 Unix crypt 해시부터 최신 애플리케이션별 해시까지 광범위한 해시 형식을 지원합니다.
먼저, John the Ripper 가 지원하는 사용 가능한 해시 형식 목록을 살펴보겠습니다. 이를 통해 이 도구의 다재다능함을 파악할 수 있습니다.
john --list=formats
긴 형식 목록이 표시될 것입니다. 예를 들어, 전통적인 Unix 해시의 경우 crypt, 일반 MD5 해시의 경우 raw-md5, Windows NT 해시의 경우 nt 등이 있습니다.
이제 passwords.txt 파일에서 특정 알려진 형식을 대상으로 비밀번호를 크래킹해 보겠습니다. SHA512 crypt 해시를 가진 user1 사용자가 있습니다. John 에게 sha512crypt 형식을 사용하도록 명시적으로 지시할 수 있습니다.
john --format=sha512crypt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt
설정에서 user1의 비밀번호 (password123) 가 단어 목록에 있다면 John 이 이를 크래킹할 것입니다.
다음으로, passwords.txt 파일에서 LM 해시 (user5) 와 NT 해시 (user6) 를 크래킹해 보겠습니다. John 은 종종 형식을 자동 감지할 수 있지만, --format으로 명시적으로 지정하면 특히 혼합 해시 유형이나 덜 일반적인 형식을 다룰 때 더 빠르고 안정적일 수 있습니다.
john --format=lm /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt
john --format=nt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt
크래킹 과정을 나타내는 다음과 유사한 출력을 볼 수 있습니다.
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100% (ETA: 10:00) 1.000g/s 1.000p/s 1.000c/s 1.000C/s password123
Session completed
이 단계는 효율적이고 정확한 비밀번호 크래킹을 위해 --format 옵션의 중요성을 보여줍니다.
--rules 옵션과 사용자 정의 규칙 활용
이 단계에서는 --rules 옵션을 탐색합니다. 이 옵션을 사용하면 John the Ripper 가 사전 정의되거나 사용자 정의된 규칙 세트를 단어 목록의 단어에 적용할 수 있습니다. 규칙은 숫자를 추가하거나, 대소문자를 변경하거나, 문자를 복제하는 등 단어에 적용할 수 있는 강력한 변환으로, 일반 단어의 변형인 비밀번호를 크래킹할 가능성을 크게 높입니다.
John 에는 Wordlist(기본값), Single, Jumbo와 같은 여러 내장 규칙 세트가 포함되어 있습니다. 다음을 사용하여 사용 가능한 규칙 세트를 나열할 수 있습니다.
john --list=rules
이 명령은 규칙 세트 목록을 출력합니다.
이제 사용자 정의 규칙 파일을 사용해 보겠습니다. 설정에서 custom_rules.txt라는 간단한 사용자 정의 규칙 파일을 생성했으며, 여기에는 :$[0-9](숫자 추가) 및 Az(첫 글자 대문자화) 와 같은 규칙이 포함되어 있습니다.
user1을 다시 크래킹해 보겠습니다. 이번에는 사용자 정의 규칙을 사용합니다. user1의 비밀번호가 Password123(대문자 P, 숫자 123) 이라고 가정해 보겠습니다. 단어 목록에는 password만 포함되어 있습니다. Az 규칙은 첫 글자를 대문자로 만들고, :$[0-9]는 숫자를 추가합니다.
john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt /home/labex/project/passwords.txt --format=sha512crypt
이 명령은 단어 목록의 각 단어에 custom_rules.txt의 규칙을 적용한 후 해시에 대해 시도합니다. 예를 들어, password는 Password, password0, password1 등으로 변환된 다음 Password0, Password1 등으로 변환될 수 있습니다.
다음 단계에서 다룰 --stdout 옵션과 규칙을 결합하여 규칙으로 생성되는 단어를 확인할 수도 있습니다.
john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout
이 명령은 wordlist.txt에 custom_rules.txt를 적용하여 생성된 모든 단어를 터미널에 출력합니다. 이는 규칙 세트를 디버깅하는 데 유용합니다.
--rules 옵션은 일반적인 비밀번호 변형을 생성하여 단어 목록 공격의 효과를 확장하는 강력한 기능입니다.
--session 및 --restore 옵션 이해하기
이 단계에서는 장시간 실행되는 비밀번호 크래킹 작업을 관리하는 데 필수적인 --session 및 --restore 옵션에 대해 배웁니다. 복잡한 비밀번호를 크래킹하는 데는 몇 시간, 며칠 또는 몇 주가 걸릴 수 있습니다. 이러한 옵션을 사용하면 크래킹 세션의 현재 상태를 저장하고 진행 상황을 잃지 않고 나중에 다시 시작할 수 있습니다.
John the Ripper 가 실행될 때 세션 상태를 저장하기 위해 자동으로 세션 파일 (일반적으로 실행 디렉터리의 john.rec) 을 생성합니다. 그러나 --session 옵션을 사용하면 이 세션 파일에 사용자 정의 이름을 지정할 수 있으며, 이는 여러 크래킹 작업을 동시에 실행하거나 특정 세션 로그를 유지하려는 경우 유용합니다.
user1에 대한 크래킹 세션을 시작하고 세션 이름을 지정해 보겠습니다.
john --session=my_cracking_session /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt
크래킹을 몇 초 동안 실행한 다음 Ctrl+C를 눌러 중단합니다. 세션이 저장되었음을 나타내는 메시지가 표시됩니다.
이제 현재 디렉터리의 파일을 나열하여 세션 파일을 확인합니다.
ls -l /home/labex/project/
my_cracking_session.rec(또는 John 의 버전 및 구성에 따라 유사한 이름) 이라는 파일을 볼 수 있습니다.
중단된 세션을 다시 시작하려면 세션 이름과 함께 --restore 옵션을 사용합니다.
john --restore=my_cracking_session
John 은 중단된 지점에서 정확히 다시 시작합니다. 이는 대규모 크래킹 작업을 관리하거나 시스템을 재부팅해야 할 때 매우 유용합니다.
--session으로 세션 이름을 지정하지 않으면 John 은 기본 세션 파일을 사용합니다. 세션 이름 없이 --restore를 사용하면 기본 세션을 복원하려고 시도합니다.
john --restore
이 단계는 진행 상황이 손실되지 않도록 비밀번호 크래킹 노력을 효과적으로 관리하고 다시 시작하는 방법을 강조합니다.
--stdout를 사용하여 출력 리디렉션 실험하기
이 단계에서는 실제 크래킹 시도를 수행하지 않고 단어 목록을 생성하거나 규칙 세트를 테스트하는 데 매우 유용한 --stdout 옵션에 대해 배웁니다. --stdout과 함께 사용하면 John the Ripper 는 생성된 후보 비밀번호를 표준 출력으로 출력하며, 이를 파일로 리디렉션하거나 다른 도구로 파이프할 수 있습니다.
이는 단어 목록 및 규칙과 결합될 때 특히 강력합니다. John 을 사용하여 기존 단어 목록과 특정 규칙을 기반으로 고도로 사용자 정의된 단어 목록을 만들 수 있습니다.
custom_rules.txt를 wordlist.txt에 적용하여 단어 목록을 생성하고 출력을 generated_wordlist.txt라는 새 파일로 리디렉션해 보겠습니다.
john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout > /home/labex/project/generated_wordlist.txt
명령을 실행한 후 새로 생성된 파일의 내용을 확인합니다.
cat /home/labex/project/generated_wordlist.txt
규칙에 의해 생성된 password, Password, password0, password1 등과 같은 단어를 볼 수 있습니다.
--stdout을 사용하여 단일 단어의 순열을 생성할 수도 있습니다. 예를 들어 "test"라는 단어의 변형을 생성하려면 다음과 같이 합니다.
echo "test" | john --pipe --rules=/home/labex/project/custom_rules.txt --stdout
여기서 echo "test" | john --pipe는 "test"라는 단어를 John 의 표준 입력으로 파이프하고, --pipe는 John 에게 표준 입력에서 읽도록 지시합니다. 그런 다음 --stdout은 규칙이 적용된 변형을 출력합니다.
--stdout 옵션은 단어 목록 사전 처리, 다른 크래킹 도구에 대한 사용자 정의 사전 생성 또는 단순히 규칙이 단어를 변환하는 방식을 이해하는 데 유용한 다목적 기능입니다.
기타 유용한 명령줄 플래그 살펴보기
이 마지막 단계에서는 John the Ripper 사용을 향상시킬 수 있는 몇 가지 다른 유용한 명령줄 플래그를 간략하게 살펴보겠습니다. 각 플래그에 대해 자세히 다루지는 않겠지만, 존재를 알고 있으면 다양한 시나리오에서 도움이 될 수 있습니다.
--show: 이 옵션은 이전 세션에서 크랙된 비밀번호를 표시합니다. 비밀번호를 크랙한 후 John 은 이를john.pot파일에 저장합니다. 다음을 사용하여 볼 수 있습니다.john --show /home/labex/project/passwords.txt이렇게 하면 John 이
passwords.txt파일에서 성공적으로 크랙한 비밀번호가 표시됩니다.--incremental: 이는 무차별 대입 공격을 위한 강력한 모드입니다. John 은 문자 세트와 길이를 기반으로 비밀번호를 생성합니다. 모드 (예:alnum,digits,all) 를 지정할 수 있습니다.## 이 명령은 오래 실행되므로 사용법만 시연합니다. ## 너무 오래 실행되지 않도록 하십시오. 몇 초 후 Ctrl+C 를 눌러 중지하십시오. john --incremental=digits /home/labex/project/passwords.txt --format=raw-md5이 명령은 숫자의 조합을 생성하여 비밀번호를 크랙하려고 시도합니다.
--fork=<N>: 이 옵션을 사용하면 John 이 크래킹을 위해 여러 CPU 코어 또는 스레드를 사용할 수 있으며, 여기서<N>은 사용할 포크 (프로세스) 수입니다. 이는 멀티코어 시스템에서 크래킹 속도를 크게 높일 수 있습니다.john --fork=2 /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt이렇게 하면 2 개의 CPU 코어를 사용하여 비밀번호를 크랙하려고 시도합니다.
--mask: 이 옵션을 사용하면 비밀번호에 대한 특정 패턴을 정의하는 마스크 공격을 수행할 수 있습니다. 예를 들어?l?l?l?d?d는 모든 3 글자, 2 자리 조합을 시도합니다.## 이 명령은 오래 실행되므로 사용법만 시연합니다. ## 너무 오래 실행되지 않도록 하십시오. 몇 초 후 Ctrl+C 를 눌러 중지하십시오. john --mask=?l?l?l?d?d /home/labex/project/passwords.txt --format=raw-md5이 명령은 지정된 마스크에 맞는 비밀번호를 크랙하려고 시도합니다.
이것들은 John the Ripper 에서 사용할 수 있는 많은 고급 옵션 중 일부일 뿐입니다. man john 페이지 또는 john --help를 탐색하면 전문적인 비밀번호 감사 및 크래킹 작업을 위한 더 많은 가능성을 발견할 수 있습니다.
요약
이 실습에서는 John the Ripper 의 여러 고급 명령줄 옵션에 대한 실습 경험을 쌓았습니다. --format을 사용하여 해시 형식을 정확하게 지정하는 방법, --rules 및 사용자 정의 규칙 파일을 사용하여 단어 목록에 강력한 변환을 적용하는 방법, --session 및 --restore를 사용하여 장기 실행 크래킹 세션을 관리하는 방법을 배웠습니다. 또한 사용자 정의 단어 목록 생성을 위한 --stdout의 다용성을 탐색했으며 --show, --incremental, --fork, --mask와 같은 다른 유용한 플래그에 대해서도 간략하게 살펴보았습니다.
이러한 옵션을 숙달하면 효과적인 비밀번호 감사 및 크래킹을 수행하는 능력이 크게 향상되어 다양한 보안 작업에 John the Ripper 를 더 능숙하게 사용할 수 있습니다. John 의 광범위한 문서를 계속 탐색하여 더 많은 고급 기능과 기술을 발견하십시오.


