John the Ripper 와 비밀번호 추측 전략

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 인기 있는 오픈 소스 비밀번호 크래킹 도구인 John the Ripper 를 사용하여 비밀번호 보안의 세계를 깊이 탐구합니다. 비밀번호를 추측하거나 크래킹하는 방법을 이해하는 것은 더 강력한 보안 관행을 개발하는 데 매우 중요합니다. 기본 무차별 대입 공격부터 더 발전된 조합 및 하이브리드 공격까지 다양한 비밀번호 추측 전략을 탐색합니다. 이 실습이 끝나면 이러한 기술에 대한 실질적인 이해를 얻고 John the Ripper 를 사용하여 적용하는 방법을 배우게 됩니다.

일반적인 비밀번호 추측 기법 이해하기

이 단계에서는 사전 공격 (dictionary attack) 과 단순 무차별 대입 공격 (brute-force) 에 초점을 맞춰 비밀번호 추측 기법의 기본 개념을 배우게 됩니다. John the Ripper 는 이러한 방법을 사용하여 비밀번호를 크래킹하려고 시도할 수 있습니다.

먼저, John the Ripper 를 사용하여 사전 공격으로 간단한 MD5 해시를 크래킹해 보겠습니다. 이미 해시된 비밀번호가 포함된 passwords.txt 파일과 일반적인 비밀번호가 포함된 wordlist.txt 파일을 준비했습니다.

터미널을 열고 ~/project 디렉토리로 이동합니다.

cd ~/project

이제 wordlist.txt 파일을 사용하여 John the Ripper 를 실행합니다.

john --format=raw-md5 --wordlist=wordlist.txt passwords.txt

John 이 비밀번호를 크래킹하려고 시도하는 것을 나타내는 출력이 표시될 것입니다. 성공하면 크래킹된 비밀번호가 표시됩니다.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password         (user1)
1g 0:00:00:00 DONE (2023-10-27 08:00) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password

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

john --show passwords.txt
user1:password

1 password hash cracked, 0 left

이는 기본적인 사전 공격을 보여줍니다. John the Ripper 는 제공된 단어 목록에서 "password"를 성공적으로 찾았습니다.

특정 패턴으로 무차별 대입 공격 구현하기

이 단계에서는 John the Ripper 의 증분 모드 (incremental mode) 를 사용하여 무차별 대입 공격을 탐색합니다. 증분 모드는 John 이 문자 집합 (예: 소문자, 대문자, 숫자, 기호) 과 길이를 기반으로 비밀번호를 생성하여 효과적으로 무차별 대입 공격을 수행할 수 있도록 합니다.

먼저, 간단한 단어 목록에 없는 새로운 비밀번호 해시를 생성해 보겠습니다. testuser:testpass를 사용하겠습니다 (testpass의 MD5 해시는 5d41402abc4b2a76b9719d911017c592입니다).

echo "testuser:5d41402abc4b2a76b9719d911017c592" > /home/labex/project/brute_passwords.txt

이제 John the Ripper 를 증분 모드로 사용하겠습니다. 단순성과 속도를 위해 문자 집합과 비밀번호 길이를 제한하겠습니다. 숫자로만 구성된 비밀번호를 크래킹하기 위해 digits 모드를 사용하겠습니다.

비밀번호가 4 자리 숫자라고 가정해 보겠습니다. 예를 들어 1234입니다. 1234의 MD5 해시는 81dc9bdb52d04dc20036dbd8313ed055입니다.

echo "digituser:81dc9bdb52d04dc20036dbd8313ed055" > /home/labex/project/digit_passwords.txt

이제 John the Ripper 를 증분 모드로 실행하고, 특히 숫자를 대상으로 합니다.

john --format=raw-md5 --incremental=digits digit_passwords.txt

이 명령은 비밀번호를 찾을 때까지 모든 숫자 조합을 시도합니다. 비밀번호 길이에 따라 시간이 다소 걸릴 수 있습니다.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
1234             (digituser)
1g 0:00:00:00 DONE (2023-10-27 08:05) 100.0g/s 100.0p/s 100.0c/s 100.0C/s 1234

크래킹이 완료되면 결과를 표시할 수 있습니다.

john --show digit_passwords.txt
digituser:1234

1 password hash cracked, 0 left

이는 비밀번호 구조를 알거나 제한적일 때 무차별 대입 공격을 사용할 수 있는 방법을 보여줍니다.

조합기 공격 (Combinator Attacks) 활용하기

이 단계에서는 두 개의 다른 단어 목록 (wordlist) 에서 단어를 조합하는 조합기 공격에 대해 배우게 됩니다. 이는 비밀번호가 두 개의 일반적인 단어를 연결하여 생성될 때 유용합니다.

먼저, 조합기 공격을 위한 새로운 비밀번호 해시를 생성해 보겠습니다. 비밀번호로 john_doe를 사용하겠습니다 (john_doe의 MD5 해시는 112233445566778899aabbccddeeff00입니다).

echo "combo_user:112233445566778899aabbccddeeff00" > /home/labex/project/combo_passwords.txt

이미 "john"과 "doe"가 포함된 base_wordlist.txt를 준비했습니다. 이제 두 번째 단어 목록인 second_wordlist.txt를 생성하겠습니다.

echo "doe" > /home/labex/project/second_wordlist.txt
echo "smith" >> /home/labex/project/second_wordlist.txt

이제 John the Ripper 를 Combinator 모드로 사용합니다. 이 모드는 두 개의 단어 목록을 받아 첫 번째 목록의 각 단어와 두 번째 목록의 각 단어를 조합합니다.

john --format=raw-md5 --rules=Combinator --wordlist=base_wordlist.txt --stdout > /home/labex/project/combined_words.txt
john --format=raw-md5 --wordlist=combined_words.txt combo_passwords.txt

첫 번째 명령은 조합을 생성하여 combined_words.txt에 저장합니다. 두 번째 명령은 이 생성된 단어 목록을 사용하여 비밀번호를 크래킹합니다.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
john_doe         (combo_user)
1g 0:00:00:00 DONE (2023-10-27 08:10) 100.0g/s 100.0p/s 100.0c/s 100.0C/s john_doe

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

john --show combo_passwords.txt
combo_user:john_doe

1 password hash cracked, 0 left

이는 비밀번호가 알려진 단어들의 조합일 때 조합기 공격이 효과적일 수 있음을 보여줍니다.

John the Ripper 를 이용한 하이브리드 공격 탐색

이 단계에서는 사전 단어 (dictionary words) 와 무차별 대입 요소 (brute-force elements, 예: 숫자 또는 특수 문자) 를 결합하는 하이브리드 공격에 대해 배우게 됩니다. 이는 일반적인 단어의 변형으로 이루어진 비밀번호를 크래킹하는 데 매우 일반적이고 효과적인 전략입니다.

하이브리드 공격을 위한 새로운 비밀번호 해시를 생성해 보겠습니다. 비밀번호로 password123을 사용하겠습니다 (password123의 MD5 해시는 28a112233445566778899aabbccddeeff입니다).

echo "hybrid_user:28a112233445566778899aabbccddeeff" > /home/labex/project/hybrid_passwords.txt

기존의 wordlist.txt를 사용하고 각 단어에 네 개의 숫자를 추가하는 규칙을 적용할 것입니다. 설정 단계에서 이미 간단한 규칙 파일 rules.txt를 생성했습니다.

이제 wordlist.txt와 사용자 정의 규칙 파일 (rules.txt) 을 사용하여 John the Ripper 를 실행합니다.

john --format=raw-md5 --wordlist=wordlist.txt --rules=rules.txt hybrid_passwords.txt

이 명령은 wordlist.txt의 각 단어를 가져와 rules.txt에 정의된 규칙 (네 개의 숫자 추가) 을 적용합니다.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
password123      (hybrid_user)
1g 0:00:00:00 DONE (2023-10-27 08:15) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123

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

john --show hybrid_passwords.txt
hybrid_user:password123

1 password hash cracked, 0 left

이는 사전 단어와 예측 가능한 패턴을 결합한 비밀번호를 크래킹하는 데 있어 하이브리드 공격의 강력함을 보여줍니다.

사용자 정의 추측 전략 개발하기

이 단계에서는 John the Ripper 와 함께 사용자 정의 규칙 파일 (rule file) 을 생성하고 사용하여 사용자 정의 추측 전략을 개발하는 방법을 배우게 됩니다. 이를 통해 알려진 비밀번호 패턴이나 사용자 습관에 기반한 고도로 타겟팅된 공격이 가능해집니다.

사용자 정의 전략을 위한 새로운 비밀번호 해시를 생성해 보겠습니다. 비밀번호로 LabEx@2023을 사용하겠습니다 (LabEx@2023의 MD5 해시는 e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5입니다).

echo "custom_user:e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5" > /home/labex/project/custom_passwords.txt

이제 첫 글자를 대문자로 만들고, @를 추가한 다음, 네 개의 숫자를 추가하는 사용자 정의 규칙 파일인 custom_rules.txt를 생성해 보겠습니다.

nano /home/labex/project/custom_rules.txt

custom_rules.txt 파일에 다음 내용을 추가합니다.

:
c
$@
$[0-9]$[0-9]$[0-9]$[0-9]
  • : (빈 규칙) - 규칙 세트를 시작하는 데 자주 사용되는 자리 표시자입니다.
  • c - 단어의 첫 글자를 대문자로 만듭니다.
  • $@ - @ 기호를 추가합니다.
  • $[0-9]$[0-9]$[0-9]$[0-9] - 네 개의 숫자를 추가합니다.

nano 를 저장하고 종료합니다 (Ctrl+X, Y, Enter).

이제 "labex"가 포함된 기본 단어 목록을 사용해 보겠습니다.

echo "labex" > /home/labex/project/base_custom_wordlist.txt

사용자 정의 규칙 파일을 사용하여 John the Ripper 를 실행합니다.

john --format=raw-md5 --wordlist=base_custom_wordlist.txt --rules=custom_rules.txt custom_passwords.txt
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (MD5 [MD5]) is not supported.
Will run John the Ripper in single-threaded mode.
Press 'q' or Ctrl-C to abort, almost any other key for status.
LabEx@2023       (custom_user)
1g 0:00:00:00 DONE (2023-10-27 08:20) 100.0g/s 100.0p/s 100.0c/s 100.0C/s LabEx@2023

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

john --show custom_passwords.txt
custom_user:LabEx@2023

1 password hash cracked, 0 left

이는 John the Ripper 의 규칙 엔진이 제공하는 유연성을 보여주며, 이를 통해 매우 구체적이고 효과적인 비밀번호 추측 전략을 만들 수 있습니다.

요약

이 실습에서는 강력한 비밀번호 크래킹 도구인 John the Ripper 를 직접 사용해 보았습니다. 다음과 같은 다양한 비밀번호 추측 전략에 대해 배우고 구현했습니다.

  • 사전 공격 (Dictionary Attacks): 미리 컴파일된 일반적인 비밀번호 목록을 사용합니다.
  • 무차별 대입 공격 (Brute-Force Attacks): 정의된 집합 내에서 가능한 모든 문자 조합을 체계적으로 시도합니다.
  • 조합 공격 (Combinator Attacks): 여러 단어 목록의 단어를 결합하여 새로운 비밀번호 후보를 생성합니다.
  • 하이브리드 공격 (Hybrid Attacks): 규칙을 사용하여 사전 단어와 무차별 대입 요소를 혼합합니다.
  • 사용자 정의 추측 전략 (Custom Guessing Strategies): 특정 비밀번호 패턴을 타겟팅하기 위한 자체 규칙을 개발합니다.

이러한 기술을 이해하는 것은 공격적 보안 (침투 테스트) 과 방어적 보안 (강력한 비밀번호 정책 수립 및 사용자 교육) 모두에 매우 중요합니다. 일반적인 비밀번호 패턴이 얼마나 쉽게 크래킹될 수 있는지 확인함으로써 복잡하고 고유한 비밀번호 및 다단계 인증 (multi-factor authentication) 의 중요성을 더 잘 이해할 수 있습니다.