사전 공격 강화를 위한 규칙 사용

Kali LinuxBeginner
지금 연습하기

소개

사전 공격 (dictionary attack) 은 시스템에 저장된 단어 목록 (사전) 에 있는 모든 단어를 비밀번호로 체계적으로 입력하여 비밀번호로 보호된 시스템에 침입하는 방법입니다. 하지만 이러한 기본적인 접근 방식은 사용자들이 단순한 사전 단어를 비밀번호로 사용하는 경우가 드물기 때문에 종종 실패합니다. 사용자들은 복잡성 요구 사항을 충족하기 위해 숫자, 기호, 또는 대소문자 변경을 추가하는 경우가 많습니다.

이것이 바로 "매글링 규칙 (mangling rules)"이 매우 강력해지는 이유입니다. 매글링 규칙은 테스트하기 전에 사전의 단어를 변환하는 일련의 지침입니다. 예를 들어, 규칙은 숫자를 추가하거나, 첫 글자를 대문자로 만들거나, 문자를 기호로 대체할 수 있습니다 (예: 'a'를 '@'로).

이 실습에서는 인기 있는 비밀번호 크래킹 도구인 John the Ripper (JtR) 를 사용하여 이를 직접 확인할 것입니다. 먼저 표준 사전 공격을 시도하고 실패하는 것을 볼 것입니다. 그런 다음, 매글링 규칙 세트를 적용하여 공격을 강화하고 더 복잡한 비밀번호를 성공적으로 크랙할 것입니다.

매글링 규칙의 힘 이해하기

이 단계에서는 먼저 표준 사전 공격을 수행하여 그 한계를 살펴보겠습니다. 사용자 해시된 비밀번호가 포함된 shadow.txt 파일과 비밀번호의 잠재적인 기본 단어가 포함된 wordlist.txt 파일을 준비했습니다.

해시 파일에 대해 단어 목록을 사용하여 John the Ripper 를 실행해 보겠습니다. 이 명령은 john에게 wordlist.txt의 모든 단어를 비밀번호로 시도하도록 지시합니다.

john --wordlist=wordlist.txt shadow.txt

공격이 실행 중임을 나타내는 다음과 유사한 출력이 표시됩니다.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:00 DONE (2023-10-27 10:30) 0g/s 1845Kp/s 1845Kc/s 1845KC/s secdec..secret
Session completed

최종 메시지 "Session completed"에 주목하십시오. John the Ripper 는 "secret"이라는 단어와 그 일반적인 변형을 시도했지만 비밀번호를 크랙하는 데 실패했습니다. 이는 실제 비밀번호가 단순한 사전 단어보다 더 복잡하기 때문입니다. 이는 더 고급 기술의 필요성을 보여줍니다.

/rules/ 디렉토리에서 내장 규칙 파일 찾기

이 단계에서는 John the Ripper 가 강력한 매글링 규칙을 저장하는 위치를 살펴보겠습니다. 이 시스템을 포함한 대부분의 Linux 시스템에서는 규칙이 별도의 /rules/ 디렉토리에 있지 않고 메인 설정 파일인 john.conf 내에 정의되어 있습니다.

/etc/john/ 디렉토리의 내용을 나열하여 이 설정 파일을 찾아보겠습니다.

ls -l /etc/john/

출력에서 john.conf 파일을 볼 수 있어야 합니다.

total 148
-rw-r--r-- 1 root root 148233 Jan 20  2022 john.conf

john.conf 파일에는 KoreLogic, best64, all과 같은 수많은 사전 정의된 규칙 세트가 포함되어 있습니다. 이러한 규칙 세트는 사전 공격에 적용할 수 있는 개별 매글링 지침의 모음입니다. 다음 단계에서는 이러한 규칙 세트 중 하나를 더 자세히 살펴보겠습니다.

best64.rule 과 같은 일반 규칙 파일 선택

이 단계에서는 특정 규칙 세트를 검사합니다. 편의를 위해 john.conf에서 인기 있고 효과적인 규칙 세트인 best64를 추출하여 현재 프로젝트 디렉토리 (~/project) 에 best64.rule로 저장했습니다.

이 파일의 처음 10 줄을 검사하여 규칙이 어떻게 보이는지 파악해 보겠습니다. head 명령을 사용합니다.

head -n 10 best64.rule

다음과 유사한 출력이 표시됩니다.

#
## best64.rule, a selection of the best 64 rules from the over 14,000
## rules in all.rule.
#
## Rule syntax:
## http://www.openwall.com/john/doc/RULES.shtml
#
## The following rules are commented out because they are slow.
#
:
l
u

#으로 시작하는 줄은 주석입니다. :, l, u와 같은 단일 문자 줄은 실제 규칙입니다.

  • :는 no-op 규칙으로, "단어를 그대로 시도"를 의미합니다.
  • l은 단어를 소문자로 변환합니다.
  • u는 단어를 대문자로 변환합니다.

파일을 더 내려가면 c (첫 글자 대문자화) 및 $1 (숫자 '1' 추가) 과 같은 더 복잡한 규칙을 찾을 수 있습니다. 이러한 간단한 변환은 비밀번호 후보의 수를 극적으로 증가시킵니다.

-r 플래그를 사용하여 사전 공격에 규칙 파일 적용

이제 매글링 규칙의 힘을 발휘할 차례입니다. 이 단계에서는 사전 공격을 다시 실행하지만, 이번에는 John the Ripper 에게 best64.rule 파일을 사용하도록 지시할 것입니다.

이 작업은 명령에 -r 플래그 ( --rules의 약어) 를 추가하여 수행할 수 있습니다. 이렇게 하면 john은 지정된 파일의 모든 규칙을 wordlist.txt의 모든 단어에 적용합니다.

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

john --wordlist=wordlist.txt -r=./best64.rule shadow.txt

이번에는 공격이 매우 빠르게 성공해야 합니다. 출력은 다르게 보일 것입니다.

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

성공! Secret123 (testuser) 줄은 비밀번호가 크랙되었음을 나타냅니다. John the Ripper 는 "secret"이라는 단어에 best64.rule의 규칙을 적용하여 올바른 비밀번호를 찾았습니다.

규칙 적용 전후 공격 결과 비교

마지막 단계에서는 크랙된 비밀번호를 공식적으로 확인하고 규칙이 어떤 차이를 만들었는지 생각해 볼 것입니다.

이전 단계의 출력에서 비밀번호가 표시되었지만, 주어진 해시 파일에 대한 모든 크랙된 비밀번호를 보는 표준 방법은 --show 플래그를 사용하는 것입니다.

다음 명령을 실행합니다.

john --show shadow.txt

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

testuser:Secret123:17119:0:99999:7:::

1 password hash cracked, 0 left

출력은 testuser:Secret123을 명확하게 보여줍니다. 이것이 크랙된 비밀번호임을 확인합니다.

결과를 비교하면 결론은 명확합니다.

  • 규칙 없음 (1 단계): "secret"이 비밀번호가 아니었기 때문에 공격이 실패했습니다.
  • 규칙 적용 (4 단계): 공격이 성공했습니다. John 은 "secret"이라는 단어를 가져와 대문자화 규칙을 적용하여 "Secret"을 얻었고, 숫자 추가 규칙을 적용하여 "Secret123"을 얻었으며, 이는 일치했습니다.

이는 매글링 규칙이 단순히 유용한 기능이 아니라 실제 비밀번호 습관에 대한 사전 공격을 효과적으로 만들기 위한 필수 요소임을 보여줍니다.

요약

이 실습에서는 단순한 사전 공격과 규칙이 강화된 공격 간의 실질적인 차이를 경험했습니다.

다음과 같은 방법을 배웠습니다.

  • John the Ripper 를 사용하여 기본적인 사전 공격을 실행하고 그 한계를 확인합니다.
  • 매글링 규칙의 개념을 이해하고 저장 위치를 찾습니다.
  • 규칙 파일의 구조를 살펴봅니다.
  • -r 플래그를 사용하여 사전 공격에 규칙 세트를 적용하여 효과를 크게 향상시킵니다.
  • 크랙된 비밀번호를 보고 규칙 기반 공격의 성공을 확인합니다.

단순한 사전 단어를 수천 가지의 잠재적인 변형으로 변환함으로써 매글링 규칙은 모든 비밀번호 감사자 또는 보안 전문가의 도구 상자에서 기본적인 도구입니다.