John the Ripper 기본 모드 이해하기

Kali LinuxBeginner
지금 연습하기

소개

John the Ripper (JtR) 는 강력하고 널리 사용되는 오픈 소스 비밀번호 보안 감사 및 비밀번호 복구 도구입니다. 시스템 관리자는 이를 사용하여 시스템의 비밀번호 강도를 테스트할 수 있으며, 보안 전문가는 분실된 비밀번호를 복구하는 데 사용할 수 있습니다. 다양한 작동 모드를 이해하는 것이 효과적으로 사용하는 데 중요합니다.

이 실습에서는 John the Ripper 의 기본 크래킹 모드에 대한 실습 경험을 쌓게 됩니다. 도움말 옵션을 사용하는 방법과 기본 동작을 탐색하는 방법을 배우게 됩니다. 그런 다음, 네 가지 주요 모드인 Single Crack, Wordlist, Incremental 및 External 모드를 살펴보고 각 모드의 목적과 기본 사용법을 배우게 됩니다.

John the Ripper 도움말 옵션 탐색

이 단계에서는 John the Ripper 의 내장 도움말 문서를 탐색하는 것부터 시작합니다. 도움말 메뉴는 도구의 구문, 명령줄 옵션 및 사용 가능한 모드에 대한 빠른 참조를 제공하는 필수 리소스입니다.

기본 도움말 페이지를 보려면 --help 플래그와 함께 john 명령을 실행하기만 하면 됩니다. 그러면 가장 일반적인 옵션과 해당 설명에 대한 요약이 표시됩니다.

터미널에서 다음 명령을 실행합니다.

john --help

다양한 옵션을 나열하는 자세한 출력을 볼 수 있습니다. --single, --wordlist--incremental과 같이 다양한 크래킹 모드를 지정하는 플래그에 주의하십시오.

John the Ripper 1.9.0-jumbo-1 [linux-gnu 64-bit x86_64 AVX2 AC]
Copyright (c) 1996-2019 by Solar Designer and others
Homepage: http://www.openwall.com/john/

Usage: john [OPTIONS] [PASSWORD-FILES]

--single                   "single crack" mode
--wordlist=FILE --stdin    wordlist mode, read words from FILE or stdin
--rules                    enable word mangling rules for wordlist mode
--incremental[=MODE]       "incremental" mode [using section MODE]
--external=MODE            external mode or word filter
--stdout[=LENGTH]          just output candidate passwords [cut at LENGTH]
--restore[=NAME]           restore an interrupted session [called NAME]
--session=NAME             new session [called NAME]
--status[=NAME]            print status of a session [called NAME]
--show[=LEFT]              show cracked passwords [if =LEFT, then uncracked]
--test[=TIME]              run tests and benchmarks for TIME seconds each
--users=[-]LOGIN|UID[,..]  [don't] load this (these) user(s) only
--groups=[-]GID[,..]       load users of this (these) group(s) only
... (output truncated) ...

이 명령은 John the Ripper 가 수행할 수 있는 작업에 대한 확실한 개요를 제공합니다. 다음 단계에서는 이러한 모드 중 일부를 실제로 탐색합니다.

John the Ripper 기본 크래킹 모드 식별

이 단계에서는 John the Ripper 가 기본적으로 작동하는 방식을 배우게 됩니다. 모드를 지정하지 않고 비밀번호 파일에 john을 실행하면 단일 메서드를 선택하는 것이 아닙니다. 대신 가장 효과적인 모드를 기본 순서대로 지능적으로 순환합니다. 먼저 "single" 모드, 다음으로 "wordlist" 모드, 마지막으로 "incremental" 모드입니다. 이는 속도와 철저함 사이의 좋은 균형을 제공합니다.

설정 스크립트에서 현재 디렉토리 (~/project) 에 mypasswd.txt라는 파일이 이미 생성되었습니다. 이 파일에는 간단한 해시된 비밀번호가 포함된 사용자 항목이 있습니다.

기본 동작을 관찰하기 위해 모드 플래그 없이 이 파일에서 John the Ripper 를 실행해 보겠습니다.

john mypasswd.txt

John 이 크래킹 프로세스를 시작합니다. 작업이 진행됨에 따라 상태 업데이트가 표시됩니다. 비밀번호가 간단하므로 매우 빠르게 크랙될 것입니다.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 12000p/s 12000c/s 12000C/s rolez..pimpin
Use the "--show" option to display all of the cracked passwords reliably
Session completed

보시다시피 John 은 testuser 사용자에 대한 비밀번호 (password) 를 성공적으로 크랙했습니다. 또한 나중에 크랙된 비밀번호를 보려면 --show 옵션을 사용하라는 유용한 제안도 제공합니다.

크랙된 비밀번호를 확인하려면 --show 옵션을 사용할 수 있습니다.

john --show mypasswd.txt

이렇게 하면 지정된 파일에 대해 성공적으로 크랙된 모든 비밀번호가 표시됩니다.

testuser:password:1001:1001::/home/testuser:/bin/sh

1 password hash cracked, 0 left

이는 기본 모드 시퀀스가 성공했음을 확인합니다.

Single Crack 모드와 Wordlist 모드 구분

이 단계에서는 가장 기본적인 두 가지 크래킹 모드인 "single crack"과 "wordlist"에 대해 배우게 됩니다.

먼저, John the Ripper 는 크랙된 비밀번호를 ~/.john/ 디렉토리에 있는 john.pot라는 파일에 저장한다는 것을 아는 것이 중요합니다. 이미 크랙된 비밀번호에 대해 크래킹 세션을 다시 실행하려면 먼저 이 파일을 제거해야 합니다. 지금 바로 그렇게 하겠습니다.

rm ~/.john/john.pot

Single Crack 모드

Single crack 모드는 사용자 이름 또는 GECOS 필드 데이터와 같은 사용자 계정 자체에 대한 정보를 기반으로 비밀번호 후보를 생성하는 빠르고 효율적인 모드입니다. 이 후보에 일반적인 변형 (숫자 또는 기호 추가 등) 을 적용합니다.

--single 플래그를 사용하여 명시적으로 single crack 모드로 John 을 실행해 보겠습니다.

john --single mypasswd.txt

이것이 John 이 시도하는 첫 번째 모드이므로 출력은 기본 실행과 유사할 것입니다. 사용자 이름의 변형인 비밀번호에 매우 효과적입니다.

Wordlist 모드

Wordlist 모드는 가장 인기 있는 비밀번호 크래킹 기술 중 하나입니다. 미리 컴파일된 단어 목록 (사전 또는 단어 목록) 을 사용하고 각 단어를 비밀번호로 시도합니다. John 에는 기본 단어 목록이 함께 제공되며 일반적으로 /usr/share/john/password.lst에 있습니다.

세션을 재설정하기 위해 먼저 pot 파일을 다시 제거하겠습니다.

rm ~/.john/john.pot

이제 --wordlist 플래그를 사용하여 기본 단어 목록을 명시적으로 가리키는 wordlist 모드로 John 을 실행합니다.

john --wordlist=/usr/share/john/password.lst mypasswd.txt

John 이 단어 목록을 로드하고 해시를 크랙하려고 시도하는 것을 볼 수 있습니다. "password"는 매우 일반적인 비밀번호이므로 기본 목록에 포함되어 있으며 거의 즉시 발견됩니다.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Use the "--show" option to display all of the cracked passwords reliably
Session completed

이는 John 에게 공격에 특정 사전 파일을 사용하도록 지시하는 방법을 보여줍니다.

Incremental 모드 기본 이해

이 단계에서는 "incremental" 모드를 탐색합니다. 이 모드는 본질적으로 무차별 대입 공격입니다. 특정 길이까지 가능한 모든 문자 조합을 체계적으로 시도합니다. 가장 포괄적인 모드이지만 중간 정도의 복잡성을 가진 비밀번호에 대해서도 시간이 매우 오래 걸릴 수 있습니다.

Incremental 모드의 동작은 john.conf 파일에 정의되어 있으며, 이 파일은 문자 세트 (예: 영숫자에는 Alnum, 모든 문자에는 All) 및 길이 제약 조건을 지정합니다.

먼저 john.pot 파일을 다시 제거하여 크래킹 세션을 재설정하겠습니다.

rm ~/.john/john.pot

이제 incremental 모드로 John 을 실행해 보겠습니다. Digits 문자 세트를 지정하여 John 이 가능한 모든 숫자 조합을 시도하도록 합니다. 이를 위해 --incremental 플래그를 사용합니다.

john --incremental=Digits mypasswd.txt

John 이 "0", "1", "2", "00", "01" 등과 같은 조합을 시도하기 시작하는 것을 볼 수 있습니다. 우리 비밀번호는 "password"(모든 문자) 이므로 이 공격은 성공하지 못할 것입니다. 몇 초 후에 Ctrl+C를 눌러 중지할 수 있습니다.

이제 더 적절한 문자 세트를 시도해 보겠습니다. 기본 incremental 모드를 사용하며, 일반적으로 소문자와 같은 일반적인 문자 세트로 시작합니다.

세션을 다시 한 번 재설정합니다.

rm ~/.john/john.pot

문자 세트를 지정하지 않고 명령을 실행합니다.

john --incremental mypasswd.txt

이번에는 John 이 미리 정의된 문자 세트 시퀀스를 사용합니다. "password"는 소문자로 구성되어 있으므로 Lower 또는 Alpha 문자 세트가 결국 이를 찾을 것입니다.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:40) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed

Incremental 모드는 다른 더 빠른 모드가 실패했을 때 사용하는 마지막 수단입니다.

External 모드 기능 알아보기

이 단계에서는 "external" 모드를 소개합니다. 이것은 John 의 모드 중에서 가장 고급스럽고 유연한 모드입니다. john.conf 설정 파일 내에서 C 와 유사한 스크립팅 언어를 사용하여 사용자 정의 비밀번호 생성 로직을 정의할 수 있습니다. 이는 다른 모드로는 처리할 수 없는 고도로 타겟팅된 공격을 만드는 데 강력합니다.

External 스크립트 작성은 고급 주제이지만, John 과 함께 제공되는 미리 정의된 external 모드를 쉽게 사용할 수 있습니다. 먼저 /etc/john/john.conf에 정의된 사용 가능한 external 모드를 나열해 보겠습니다.

grep '^\[' /etc/john/john.conf | grep 'External:'

이 명령은 설정 파일을 필터링하여 external 모드 섹션의 이름을 보여줍니다.

[External:Compiler]
[External:Double]
[External:Hybrid]
[External:Keyboard]
[External:LanManager]
[External:Shift]
[External:Status]
[External:Wordlist]

여러 개의 내장 external 함수를 볼 수 있습니다. Wordlist external 모드를 사용해 보겠습니다. 이 모드는 본질적으로 표준 wordlist 모드를 모방하지만 external 스크립트로 구현되어 좋은 예시가 됩니다.

먼저 항상 그렇듯이 세션을 재설정합니다.

rm ~/.john/john.pot

이제 --external 플래그를 사용하여 Wordlist 모드를 지정하여 John 을 실행합니다.

john --external=Wordlist mypasswd.txt

출력은 표준 wordlist 모드를 실행했을 때와 매우 유사하게 보일 것입니다. 왜냐하면 기본 로직이 동일하기 때문입니다. 즉, 기본 단어 목록을 사용하여 비밀번호를 찾습니다.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:45) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed

External 모드는 비밀번호 후보 생성을 위한 거의 무한한 가능성을 열어주며, 사용자 정의 크래킹 로직을 구현해야 하는 전문가 사용자에게는 도구가 됩니다.

요약

이 실습에서는 John the Ripper 의 기본적인 크래킹 모드를 성공적으로 탐색했습니다. 도움말 옵션을 탐색하는 방법을 배우고 효율성을 위해 여러 모드를 지능적으로 결합하는 기본 동작을 관찰했습니다.

다음과 같은 실습 경험을 쌓았습니다.

  • Single Crack 모드: 사용자별 정보를 사용하여 비밀번호를 추측하는 빠른 모드입니다.
  • Wordlist 모드: 단어 사전 (dictionary) 을 사용하는 일반적인 기법입니다.
  • Incremental 모드: 모든 문자 조합을 시도하는 포괄적인 무차별 대입 (brute-force) 모드입니다.
  • External 모드: 사용자 정의 비밀번호 생성 규칙을 만들기 위한 고급 스크립트 가능 모드입니다.

이러한 핵심 모드를 이해하는 것은 비밀번호 보안 감사 및 복구 작업을 위해 John the Ripper 를 마스터하기 위한 첫 번째 단계입니다. 이제 다양한 시나리오에 맞는 올바른 모드를 선택하는 데 필요한 기초 지식을 갖추었습니다.