소개
이 실습에서는 강력한 비밀번호 크래킹 도구인 John the Ripper 를 사용하여 사전 공격 (dictionary attacks) 에 대한 실질적인 이해를 얻게 됩니다. 효과적인 사전 선택 및 조합 방법, 이 공격 방식의 내재된 한계점 이해, 그리고 크래킹 능력을 향상시키기 위한 사용자 정의 사전 생성 방법까지 배우게 됩니다. 이 실습을 통해 사전 공격의 성공률을 분석하고 사이버 보안에서의 역할을 이해할 수 있게 될 것입니다.
이 실습에서는 강력한 비밀번호 크래킹 도구인 John the Ripper 를 사용하여 사전 공격 (dictionary attacks) 에 대한 실질적인 이해를 얻게 됩니다. 효과적인 사전 선택 및 조합 방법, 이 공격 방식의 내재된 한계점 이해, 그리고 크래킹 능력을 향상시키기 위한 사용자 정의 사전 생성 방법까지 배우게 됩니다. 이 실습을 통해 사전 공격의 성공률을 분석하고 사이버 보안에서의 역할을 이해할 수 있게 될 것입니다.
이 단계에서는 John the Ripper 사전 공격에 적합한 사전 파일을 선택하고 사용하는 방법을 배우게 됩니다. 사전 공격은 미리 정의된 목록 (사전) 의 모든 단어를 시도하여 비밀번호를 크래킹하는 방식입니다. 이 공격의 효과는 사용되는 사전의 품질과 관련성에 크게 좌우됩니다.
먼저, John the Ripper 가 설치되어 있고 ~/project 디렉토리에 더미 비밀번호 파일 passwords.txt와 사전 파일 rockyou.txt가 있는지 확인해 보겠습니다.
john --version
ls -l ~/project/passwords.txt ~/project/rockyou.txt
파일이 존재함을 확인하는 다음과 유사한 출력을 볼 수 있습니다.
John the Ripper password cracker, version 1.9.0-jumbo-1 ...
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/passwords.txt
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/rockyou.txt
이제 passwords.txt 파일에 대해 rockyou.txt 사전을 사용하여 기본적인 사전 공격을 수행해 보겠습니다. --wordlist 옵션은 사용할 사전 파일을 지정합니다.
john --wordlist=/home/labex/project/rockyou.txt /home/labex/project/passwords.txt
John the Ripper 가 비밀번호를 크래킹하려고 시도합니다. 성공하면 크래킹된 비밀번호를 표시합니다. 다음과 유사한 출력을 볼 수 있습니다.
Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:30) 100.0% (ETA: 2023-03-15 10:30) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
언제든지 크래킹된 비밀번호를 보려면 --show 옵션을 사용할 수 있습니다.
john --show /home/labex/project/passwords.txt
이 명령은 크래킹된 비밀번호와 해당 사용자 이름을 표시합니다.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 0 left
이것은 기본적인 공격을 위해 사전을 선택하고 사용하는 방법을 보여줍니다. rockyou.txt 파일은 자주 사용되는 비밀번호를 포함하는 사전의 일반적인 예입니다.
이 단계에서는 여러 사전을 결합하여 John the Ripper 를 위한 보다 포괄적인 단어 목록을 만드는 방법을 배우게 됩니다. 사전을 결합하면 특히 대상 비밀번호가 단일 사전에 없는 경우 비밀번호 크래킹 성공 확률을 크게 높일 수 있습니다.
먼저, ~/project 디렉토리에 common_words.txt라는 또 다른 작은 사전 파일을 생성해 보겠습니다.
echo "welcome" > ~/project/common_words.txt
echo "security" >> ~/project/common_words.txt
echo "network" >> ~/project/common_words.txt
이제 rockyou.txt와 common_words.txt를 결합하여 combined_dictionary.txt라는 새 파일로 만들 것입니다. cat 명령을 사용하여 파일을 연결한 다음, sort 및 uniq를 사용하여 중복을 제거할 수 있습니다.
cat ~/project/rockyou.txt ~/project/common_words.txt | sort | uniq > ~/project/combined_dictionary.txt
새로운 combined_dictionary.txt 파일의 내용을 검사하여 두 원본 사전의 단어를 포함하고 중복이 없는지 확인해 보겠습니다.
cat ~/project/combined_dictionary.txt
rockyou.txt와 common_words.txt의 고유한 단어들이 정렬된 목록을 볼 수 있습니다.
123456
admin
labex
network
password
secret
security
test
welcome
이제 이 combined_dictionary.txt를 사용하여 사전 공격을 수행해 보겠습니다. 이 시연을 위해 먼저 이전 크래킹 세션을 지워 새로 시작하도록 하겠습니다.
john --session=clear
그런 다음, 결합된 사전을 사용하여 공격을 실행합니다.
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
John the Ripper 는 확장된 단어 목록을 사용하여 비밀번호를 크래킹하려고 시도합니다. passwords.txt에 common_words.txt에 있는 새 비밀번호가 추가되었다면 이제 크래킹될 것입니다. passwords.txt에는 rockyou.txt의 비밀번호만 포함되어 있으므로 출력은 이전 단계와 유사하지만, 결합된 사전을 사용하는 과정을 보여줍니다.
Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:35) 100.0% (ETA: 2023-03-15 10:35) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
이 과정은 효과적인 비밀번호 크래킹을 위해 다양하고 포괄적인 사전을 갖는 것의 중요성을 강조합니다.
이 단계에서는 사전 공격의 한계를 살펴보겠습니다. 사전 공격은 강력하지만 사전 내에 존재하는 비밀번호에 대해서만 효과적입니다. 단어 목록에 없는 복잡하거나 고유하거나 무작위로 생성된 비밀번호에는 효과가 없습니다.
이러한 한계를 시연하기 위해 passwords.txt 파일에 강력하고 무작위 비밀번호를 가진 새 사용자를 추가해 보겠습니다. 표준 사전에 존재할 가능성이 매우 낮은 비밀번호를 사용하겠습니다. 예를 들어, P@ssw0rd!23AbC입니다. 이 비밀번호의 MD5 해시를 생성하겠습니다.
echo "user5:$(echo -n 'P@ssw0rd!23AbC' | md5sum | awk '{print $1}')" >> /home/labex/project/passwords.txt
이제 John 의 이전 세션을 지우고 combined_dictionary.txt를 사용하여 다시 비밀번호를 크래킹해 보겠습니다.
john --session=clear
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
출력을 관찰하십시오. John the Ripper 는 처음 네 개의 비밀번호 (user1, user2, user3, user4) 를 크래킹할 가능성이 높지만, P@ssw0rd!23AbC가 사전에 없기 때문에 user5의 비밀번호는 크래킹하지 못할 것입니다.
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:40) 80.0% (ETA: 2023-03-15 10:40) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
확인하려면 --show 옵션을 사용하십시오.
john --show /home/labex/project/passwords.txt
user5의 비밀번호가 크래킹되지 않은 상태로 남아 있음을 알 수 있습니다.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 1 left
이는 사전 공격이 사전의 내용에 의해 제한된다는 것을 보여줍니다. 사전에 없는 비밀번호, 특히 강력하고 고유한 비밀번호는 이 방법으로 크래킹되지 않습니다. 이는 강력하고 예측 불가능한 비밀번호를 사용하는 것의 중요성을 강조합니다.
이 단계에서는 사용자 정의 사전을 생성하는 방법을 배우게 됩니다. rockyou.txt와 같은 대규모 사전도 유용하지만, 특정 대상이나 시나리오에 맞춰 사전을 생성해야 하는 경우도 있습니다. 여기에는 대상에 대한 알려진 정보 (예: 회사 이름, 일반적인 문구, 날짜) 를 사용하여 잠재적인 비밀번호를 생성하는 것이 포함될 수 있습니다.
지정된 문자 세트 및 패턴을 기반으로 단어 목록을 생성하는 데 탁월한 crunch 도구를 사용하겠습니다. crunch은 기본적으로 설치되어 있지 않으므로 먼저 설치하겠습니다.
sudo apt install -y crunch
이제 간단한 사용자 정의 사전을 생성해 보겠습니다. 예를 들어, 특정 길이의 모든 소문자 조합을 생성할 수 있습니다. 모든 4 자 소문자 단어 사전을 만들어 보겠습니다.
crunch 4 4 -o ~/project/custom_4char_dictionary.txt -t @@@@
4 4: 생성할 단어의 최소 및 최대 길이를 지정합니다 (여기서는 둘 다 4).-o ~/project/custom_4char_dictionary.txt: 출력 파일을 지정합니다.-t @@@@: 패턴을 지정합니다. @는 소문자를 나타냅니다.이 명령은 큰 파일을 생성합니다. 시연 목적으로 더 작고 관리하기 쉬운 사용자 정의 사전을 생성해 보겠습니다. 3~4 자 길이의 단어를 생성하고, 소문자만 사용하며, 'a'로 시작하도록 하겠습니다.
crunch 3 4 abcdefghijklmnopqrstuvwxyz -o ~/project/custom_small_dictionary.txt -t a%@
3 4: 최소 길이 3, 최대 길이 4.abcdefghijklmnopqrstuvwxyz: 사용할 문자 세트를 지정합니다.-o ~/project/custom_small_dictionary.txt: 출력 파일.-t a%@: 패턴. a는 리터럴 'a', %는 숫자를 나타내고, @는 소문자를 나타냅니다. 소문자만 생성하도록 수정하겠습니다.이제 사용자 정의 사전에 더 적합한 예제를 시도해 보겠습니다. "labex"와 같은 알려진 단어의 변형을 생성하고 숫자를 추가하는 것입니다. 이를 위해 John 의 내장 단어 목록 규칙을 사용할 것이며, 이는 일반적인 비밀번호 변형에 더 실용적입니다.
먼저 "labex"만 포함된 기본 단어 목록을 만들어 보겠습니다.
echo "labex" > ~/project/base_word.txt
이제 John 의 --rules 옵션을 일반적인 규칙 세트 (예: Wordlist) 와 함께 사용하여 변형을 생성할 것입니다. 이는 종종 기본 단어 목록과 함께 사용됩니다.
john --wordlist=/home/labex/project/base_word.txt --rules=Wordlist --stdout > ~/project/labex_variations.txt
--wordlist: 기본 단어 목록.--rules=Wordlist: 기본 단어 목록 규칙 (예: 숫자 추가, 대소문자 변경 등) 을 적용합니다.--stdout: 생성된 단어를 표준 출력으로 인쇄합니다.> ~/project/labex_variations.txt: 출력을 파일로 리디렉션합니다.생성된 변형을 검사해 보겠습니다.
head -n 10 ~/project/labex_variations.txt
labex1, Labex, labex! 등과 같은 변형을 볼 수 있습니다.
labex
Labex
LABEX
labex1
labex2
labex3
labex4
labex5
labex6
labex7
이는 대상에 대한 특정 패턴이나 알려진 정보가 있는 경우 중요한 사용자 정의 사전 또는 단어 변형을 생성하는 방법을 보여줍니다.
이 단계에서는 사용된 사전과 대상 비밀번호의 복잡성에 따라 사전 공격의 성공률을 분석합니다. 성공률을 이해하면 크래킹 노력의 효과와 시스템의 보안 상태를 평가하는 데 도움이 됩니다.
간단한 사전 단어는 쉽게 크래킹되지만 복잡한 비밀번호는 그렇지 않다는 것을 이미 확인했습니다. 크래킹된 비밀번호 수를 총 해시 수와 비교하여 이를 정량화해 보겠습니다.
먼저 John 의 세션이 비어 있는지 확인합니다.
john --session=clear
이제 passwords.txt(강력한 비밀번호를 가진 user5가 포함됨) 에 대해 combined_dictionary.txt를 사용하여 공격을 다시 실행해 보겠습니다.
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
공격이 완료된 후 --show 옵션을 사용하여 결과를 확인합니다.
john --show /home/labex/project/passwords.txt
출력에는 크래킹된 비밀번호와 크래킹된 해시 수 대 총 해시 수가 표시됩니다.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 1 left
이 출력에서 성공률을 계산할 수 있습니다: (크래킹된 해시 수 / 총 해시 수) _ 100%.
이 경우 (4 / 5) _ 100% = 80% 입니다.
이 80% 의 성공률은 많은 일반적인 비밀번호가 크래킹되었지만 user5의 강력한 비밀번호는 이 사전 공격에 대해 안전하게 유지되었음을 나타냅니다. 이는 사전 공격이 약하거나 일반적이거나 사전 기반 비밀번호에 매우 효과적이지만 강력하고 고유한 비밀번호에는 실패한다는 것을 강조합니다.
더 자세히 분석하려면 다른 사전 (예: 매우 작고 특정적인 사전 대 매우 크고 일반적인 사전) 으로 실험하고 성공률이 어떻게 변하는지 관찰할 수 있습니다. 사전이 크고 관련성이 높을수록 일반적인 비밀번호에 대한 잠재적 성공률이 높아집니다. 그러나 진정으로 무작위적이고 복잡한 비밀번호의 경우 사전 공격의 성공률은 항상 낮을 것이므로 다른 크래킹 기술 (예: 무차별 대입) 또는 더 중요하게는 강력한 비밀번호 정책의 필요성을 강조합니다.
이 분석은 이러한 공격으로부터 보호하기 위해 추측하기 쉽거나 일반적인 사전에 없는 강력하고 고유한 비밀번호를 사용하는 것의 중요성을 다시 한번 강조합니다.
이 실습에서는 John the Ripper 와 사전 공격에 대한 실습 경험을 쌓았습니다. 크래킹 노력을 강화하기 위해 사전을 선택하고 결합하는 방법을 배웠습니다. 또한 사전 공격의 내재된 한계, 특히 강력하고 고유한 비밀번호에 대한 한계를 이해했습니다. 또한 사용자 정의 사전을 생성하는 방법과 이러한 공격의 성공률을 분석했습니다. 이 실습을 통해 기본적인 비밀번호 크래킹 기술에 대한 실질적인 통찰력을 얻었으며 강력한 비밀번호 보안 관행의 중요성을 다시 한번 강조했습니다.