Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
pack — PACK (비밀번호 분석 및 크래킹 키트) | Kitploit
도구/GitHubGitHub/iphelix/pack
Password CrackingPassword AttacksHash AnalysisUtilities & Frameworks
GitHubiphelix/pack

pack

PACK (비밀번호 분석 및 크래킹 키트)

저장소 보기웹사이트
890174157년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Password Analysis and Cracking Kit (작성자: Peter Kacherginsky (iphelix))

PACK(Password Analysis and Cracking Toolkit)은 비밀번호 리스트 분석을 통해 마스크, 규칙, 문자 집합 및 기타 비밀번호 특성의 패턴 감지를 통해 비밀번호 크래킹을 향상시키기 위해 개발된 유틸리티 모음입니다. 이 툴킷은 Hashcat 계열 비밀번호 크래커에 대한 유효한 입력 파일을 생성합니다.

참고: 툴킷 자체는 비밀번호를 크랙할 수 없지만, 비밀번호 크래커의 작동을 더 효율적으로 만들기 위해 설계되었습니다.

분석을 위한 비밀번호 리스트 선택

툴킷을 사용하기 전에 비밀번호 리스트의 선택 기준을 설정해야 합니다. 사람들이 비밀번호를 만드는 방식을 분석하고자 하므로, 가능한 한 많은 유출된 비밀번호 샘플을 확보해야 합니다. 그러한 훌륭한 리스트 중 하나는 RockYou.com 침해 사건에 기반합니다. 이 리스트는 유사한 사이트(예: 소셜 네트워킹)에서 사용되는 일반적인 비밀번호에 대한 좋은 결과를 제공할 만큼 크고 다양한 컬렉션을 제공합니다. 이 리스트에서 얻은 분석은 특정 비밀번호 정책을 가진 조직에는 적용되지 않을 수 있습니다. 따라서 샘플 입력을 가능한 한 대상과 가깝게 선택해야 합니다. 또한, 이미 크랙된 비밀번호를 기반으로 한 리스트는 실제 사용자가 아닌 리스트를 크랙한 개인(들)이 사용한 규칙과 마스크의 통계적 편향을 생성하므로, 그러한 리스트는 피하도록 하세요.

StatsGen

수행할 수 있는 가장 기본적인 분석은 제공된 리스트에서 가장 일반적인 길이, 문자 집합 및 기타 비밀번호 특성을 얻는 것입니다. 아래 예에서는 약 1400만 개의 비밀번호를 포함하는 'rockyou.txt'를 사용합니다. 다음 명령줄로 statsgen.py를 실행합니다:

root@kitploit:~
$ python statsgen.py rockyou.txt

위 명령의 출력은 다음과 같습니다:

root@kitploit:~
                       _
     StatsGen #.#.#   | |
      _ __   __ _  ___| | _
     | '_ \ / _` |/ __| |/ /
     | |_) | (_| | (__|   < 
     | .__/ \__,_|\___|_|\_\
     | |                    
     |_| [email protected]


[*] Analyzing passwords in [rockyou.txt]
[+] Analyzing 100% (14344390/14344390) of passwords
    NOTE: Statistics below is relative to the number of analyzed passwords, not total number of passwords

[*] Length:
[+]                         8: 20% (2966037)
[+]                         7: 17% (2506271)
[+]                         9: 15% (2191039)
[+]                        10: 14% (2013695)
[+]                         6: 13% (1947798)
...

[*] Character-set:
[+]             loweralphanum: 42% (6074867)
[+]                loweralpha: 25% (3726129)
[+]                   numeric: 16% (2346744)
[+]      loweralphaspecialnum: 02% (426353)
[+]             upperalphanum: 02% (407431)
...

[*] Password complexity:
[+]                     digit: min(0) max(255)
[+]                     lower: min(0) max(255)
[+]                     upper: min(0) max(187)
[+]                   special: min(0) max(255)

[*] Simple Masks:
[+]               stringdigit: 37% (5339556)
[+]                    string: 28% (4115314)
[+]                     digit: 16% (2346744)
[+]               digitstring: 04% (663951)
[+]                 othermask: 04% (576324)
...

[*] Advanced Masks:
[+]          ?l?l?l?l?l?l?l?l: 04% (687991)
[+]              ?l?l?l?l?l?l: 04% (601152)
[+]            ?l?l?l?l?l?l?l: 04% (585013)
[+]        ?l?l?l?l?l?l?l?l?l: 03% (516830)
[+]            ?d?d?d?d?d?d?d: 03% (487429)
...

참고: 발생 빈도가 1% 미만인 항목을 표시하지 않는 --hiderare 플래그를 포함하여 이상값의 수를 줄일 수 있습니다.

위 리스트에서 즉시 알 수 있는 내용은 다음과 같습니다:

  • 대부분의 비밀번호 길이는 6~10자입니다.
  • 대부분의 비밀번호는 소문자+숫자 문자 집합을 사용합니다.
  • 명확한 최소 또는 최대 비밀번호 복잡도는 없습니다.
  • 분석된 비밀번호는 "문자열 뒤에 숫자"라는 간단한 마스크를 따르는 경향이 있습니다.

마지막 섹션인 "Advanced Masks"에는 Hashcat 형식을 사용하여 가장 자주 발생하는 마스크가 포함되어 있습니다. 개별 기호는 다음과 같이 해석됩니다:

root@kitploit:~
?l - 소문자 한 글자
?u - 대문자 한 글자
?d - 숫자 한 글자
?s - 특수 문자 한 글자

예를 들어, 첫 번째 마스크인 "?l?l?l?l?l?l?l?l"은 모든 소문자 알파 비밀번호와 일치합니다. 샘플 크기를 고려하면 약 4%의 비밀번호를 크랙할 수 있습니다. 그러나 초기 출력을 생성한 후 필터를 사용하여 비밀번호 데이터를 좁히는 데 관심이 있을 수 있습니다.

필터 사용하기

"stringdigit" 간단 마스크(문자열 뒤에 숫자)를 사용하여 RockYou 사용자가 비밀번호를 선택하는 경향을 살펴보겠습니다:

root@kitploit:~
$ python statsgen.py ../PACK-0.0.3/archive/rockyou.txt --simplemask stringdigit -q --hiderare

[*] Analyzing passwords in [rockyou.txt]
[+] Analyzing 37% (5339556/14344390) of passwords
    NOTE: Statistics below is relative to the number of analyzed passwords, not total number of passwords

[*] Length:
[+]                         8: 23% (1267260)
[+]                         7: 18% (981432)
[+]                         9: 17% (939971)
[+]                        10: 14% (750938)
[+]                         6: 11% (618983)
[+]                        11: 05% (294869)
[+]                        12: 03% (175875)
[+]                        13: 01% (103047)
[+]                        14: 01% (65958)

[*] Character-set:
[+]             loweralphanum: 88% (4720184)
[+]             upperalphanum: 06% (325941)
[+]             mixedalphanum: 05% (293431)

[*] Password complexity:
[+]                     digit: min(1) max(252)
[+]                     lower: min(0) max(46)
[+]                     upper: min(0) max(31)
[+]                   special: min(0) max(0)

[*] Simple Masks:
[+]               stringdigit: 100% (5339556)

[*] Advanced Masks:
[+]          ?l?l?l?l?l?l?d?d: 07% (420318)
[+]            ?l?l?l?l?l?d?d: 05% (292306)
[+]        ?l?l?l?l?l?l?l?d?d: 05% (273624)
[+]          ?l?l?l?l?d?d?d?d: 04% (235360)
[+]              ?l?l?l?l?d?d: 04% (215074)
...

출력 맨 위에는 분석된 전체 비밀번호의 백분율이 표시됩니다. 이 경우 "stringdigit" 마스크와 일치하는 비밀번호만 크랙하면 전체 세트의 약 37%만 복구할 수 있으며, 이는 원래 출력에 표시된 것과 동일합니다. 다음으로, 이 비밀번호 유형 중 소문자 이외의 문자를 사용하는 것은 11%에 불과합니다. 따라서 이 마스크와 일치하는 소문자 문자열에 집중하는 것이 현명합니다. 마지막으로 "Advanced Mask" 섹션에서 "stringdigit" 비밀번호의 대부분이 뒤에 두 자리 또는 네 자리 숫자가 있는 문자열로 구성되어 있음을 확인할 수 있습니다. 위 출력에서 얻은 정보를 바탕으로 대상 사용자의 비밀번호 생성 패턴에 대한 정신적 이미지를 만들기 시작할 수 있습니다.

비밀번호 길이, 마스크 및 문자 집합에 대한 몇 가지 다른 필터가 있습니다:

Length: --minlength 및/또는 --maxlength

Simple Mask: --simplemask [numeric, loweralpha, upperalpha, mixedalpha, loweralphanum 등]

Character sets: --charset [digit, string, stringdigit, digitstring, digitstringdigit 등]

참고: 동일한 클래스의 필터를 여러 개 쉼표로 구분된 목록으로 지정할 수 있습니다:

root@kitploit:~
--simplemask="stringdigit,digitstring"

고급 마스크 저장하기

"Advanced Mask" 섹션은 전체 비밀번호의 1% 이상과 일치하는 패턴만 표시하지만, 주어진 딕셔너리와 일치하는 전체 비밀번호 마스크 목록을 얻고 저장하려면 다음 명령을 사용할 수 있습니다:

root@kitploit:~
$ python statsgen.py rockyou.txt -o rockyou.masks

모든 비밀번호 마스크와 해당 빈도는 CSV 형식으로 지정된 파일에 저장됩니다. 당연히 지정된 매개변수와 일치하는 마스크 파일만 생성하도록 필터를 제공할 수 있습니다. 출력 파일은 다음 섹션에서 다룰 MaskGen 도구에 대한 입력으로 사용할 수 있습니다.

MaskGen

MaskGen은 Hashcat 계열 비밀번호 크래커에 대한 입력을 위해 패턴 기반 마스크 공격을 제작할 수 있게 해줍니다. 이 도구는 위에서 statsgen이 '-o' 플래그로 생성한 출력을 사용하여 마스크 복잡도, 마스크 발생 빈도 또는 이 둘의 비율(최적 지수)별로 정렬된 가장 최적의 마스크 공격을 생성합니다.

MaskGen을 StatGen의 출력만 인수로 실행해 보겠습니다:

root@kitploit:~
$ python maskgen.py rockyou.masks

                       _ 
     MaskGen #.#.#    | |
      _ __   __ _  ___| | _
     | '_ \ / _` |/ __| |/ /
     | |_) | (_| | (__|   < 
     | .__/ \__,_|\___|_|\_\
     | |                    
     |_| [email protected]


[*] Analyzing masks in [rockyou.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Sorting masks by their [optindex].
[*] Finished generating masks:
    Masks generated: 146578
    Masks coverage:  100% (14344390/14344390)
    Masks runtime:   >1 year

주목해야 할 몇 가지 정보가 있습니다:

  • 계산에 사용되는 기본 크래킹 속도는 1,000,000,000 keys/sec입니다.
  • 기본 정렬 모드는 --optindex 플래그와 동일한 [optindex]입니다.
  • 100% 적용 범위를 가진 146,578개의 고유 마스크가 생성되었습니다.
  • 생성된 모든 마스크의 총 실행 시간은 1년 이상입니다.

대상 시간 지정

공격을 수행하고 제작하는 데 시간이 일반적으로 제한되어 있기 때문에, maskgen은 공격을 수행할 수 있는 시간을 지정하고 정렬 모드에 따라 가장 최적의 마스크 컬렉션을 생성할 수 있습니다. 다양한 정렬 모드와 대상 시간을 실험해 보겠습니다:

root@kitploit:~
$ python maskgen.py rockyou.masks --targettime 600 --optindex -q
[*] Analyzing masks in [rockyou.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Sorting masks by their [optindex].
[!] Target time exceeded.
[*] Finished generating masks:
    Masks generated: 779
    Masks coverage:  56% (8116195/14344390)
    Masks runtime:   0:11:36


$ python maskgen.py rockyou.masks --targettime 600 --complexity -q
[*] Analyzing masks in [rockyou.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Sorting masks by their [complexity].
[!] Target time exceeded.
[*] Finished generating masks:
    Masks generated: 5163
    Masks coverage:  31% (4572346/14344390)
    Masks runtime:   0:10:01


$ python maskgen.py rockyou.masks --targettime 600 --occurrence -q
[*] Analyzing masks in [rockyou.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Sorting masks by their [occurrence].
[!] Target time exceeded.
[*] Finished generating masks:
    Masks generated: 4
    Masks coverage:  16% (2390986/14344390)
    Masks runtime:   1:34:05

위 실행은 모두 다른 정렬 모드로 600초(또는 10분)의 대상 시간을 가지고 있습니다. 실험에 따르면 OptIndex 정렬 모드를 사용하여 생성된 마스크는 약 10분 만에 RockYou 비밀번호의 56%를 크랙할 수 있습니다. 동시에 Occurrence 정렬 모드를 사용하여 생성된 마스크는 16%에 불과한 매우 약한 적용 범위를 가질 뿐만 아니라 지정된 대상 시간을 1시간 이상 초과했습니다.

참고: 복잡도별로 정렬된 마스크는 정책 기반 리스트를 공격할 때 매우 효과적일 수 있습니다.

maskgen이 optindex 모드로 생성한 일부 마스크를 --showmasks 플래그를 사용하여 살펴보겠습니다:

root@kitploit:~
$ python maskgen.py rockyou.masks --targettime 43200 --optindex -q --showmasks
[*] Analyzing masks in [rockyou.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Sorting masks by their [optindex].
[L:] Mask:                          [ Occ:  ] [ Time:  ]
...
[ 7] ?l?d?s?l?l?d?d                 [6      ] [ 0:00:00]  
[ 8] ?s?l?l?l?l?l?l?s               [3480   ] [ 0:05:36]  
[ 9] ?l?l?l?l?d?d?d?d?s             [1553   ] [ 0:02:30]  
[ 8] ?d?l?d?d?d?l?l?l               [47     ] [ 0:00:04]  
[ 8] ?d?l?l?d?l?d?d?l               [47     ] [ 0:00:04]  
[ 8] ?d?l?l?d?d?l?d?l               [47     ] [ 0:00:04]  
[ 8] ?d?l?d?l?d?d?l?l               [47     ] [ 0:00:04]  
[ 8] ?d?d?l?l?d?l?d?l               [47     ] [ 0:00:04]  
[ 8] ?d?l?d?d?l?l?l?l               [122    ] [ 0:00:11]  
[ 8] ?u?u?d?u?d?d?d?d               [18     ] [ 0:00:01]  
[ 6] ?d?s?s?s?s?s                   [4      ] [ 0:00:00]  
[10] ?l?l?l?l?l?l?l?l?d?d           [213109 ] [ 5:48:02]  
[!] Target time exceeded.
[*] Finished generating masks:
    Masks generated: 3970
    Masks coverage:  74% (10620959/14344390)
    Masks runtime:   16:10:38

표시된 마스크는 매우 직관적인 형식을 따릅니다:

[ 9] ?l?l?l?l?d?d?d?d?s [1553 ] [ 0:02:30] \ \ \
\ _ 생성된 마스크 \ _ 마스크 실행 시간 \
_ 마스크 길이 _ 마스크 발생 빈도

위 샘플에서 마스크 생성에 사용되는 논리의 일부를 볼 수 있습니다. 예를 들어, '?s?l?l?l?l?l?l?s' 마스크는 샘플에서 가장 긴 실행 시간(5분) 중 하나를 가지지만, '?l?l?l?l?d?d?d?d?s'보다 상대적으로 높은 발생 빈도 때문에 여전히 더 높은 우선순위를 가집니다. 동시에 '?l?d?s?l?l?d?d'는 적용 범위가 상당히 낮지만, 6자 마스크이므로 매우 빠르게 실행되기 때문에 다른 마스크보다 더 높은 우선순위를 얻습니다.

마스크 필터 지정

필터를 사용하여 생성된 마스크 공격을 더 최적화할 수 있습니다. 예를 들어, 충분히 강력한 하드웨어가 있어 8자까지의 모든 비밀번호를 간단히 무차별 대입할 수 있습니다. 이 경우 --minlength 플래그를 사용하여 8자보다 큰 마스크만 생성할 수 있습니다:

root@kitploit:~
$ python maskgen.py rockyou.masks --targettime 43200 --optindex -q --minlength 8
[*] Analyzing masks in [rockyou.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Sorting masks by their [optindex].
[!] Target time exceeded.
[*] Finished generating masks:
    Masks generated: 585
    Masks coverage:  41% (5905182/14344390)
    Masks runtime:   15:50:36

당연히 생성된 마스크 적용 범위는 줄어들었지만, 이러한 필터는 생성에 사용된 리스트와 다른 비밀번호 리스트를 공격할 때 마스크 컬렉션을 준비할 때 유용해집니다.

아래 목록은 사용할 수 있는 추가 필터를 보여줍니다:

root@kitploit:~
  개별 마스크 필터 옵션:
    --minlength=8       최소 비밀번호 길이
    --maxlength=8       최대 비밀번호 길이
    --mintime=3600      최소 마스크 실행 시간 (초)
    --maxtime=3600      최대 마스크 실행 시간 (초)
    --mincomplexity=1   최소 복잡도
    --maxcomplexity=100
                        최대 복잡도
    --minoccurrence=1   최소 발생 빈도
    --maxoccurrence=100
                        최대 발생 빈도

Occurrence 및 complexity 플래그는 다른 정렬 모드를 사용하여 생성된 마스크를 미세 조정하는 데 특히 강력할 수 있습니다.

생성된 마스크 저장하기

위에서 생성된 마스크가 만족스러우면 -o 플래그를 사용하여 저장할 수 있습니다:

root@kitploit:~
$ python maskgen.py rockyou.masks --targettime 43200 --optindex -q -o rockyou.hcmask
[*] Analyzing masks in [rockyou.masks]
[*] Saving generated masks to [rockyou.hcmask]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Sorting masks by their [optindex].
[!] Target time exceeded.
[*] Finished generating masks:
    Masks generated: 3970
    Masks coverage:  74% (10620959/14344390)
    Masks runtime:   16:10:38

이렇게 하면 'rockyou.hcmask' 파일이 생성되며, Hashcat 도구 모음에서 직접 사용하거나 이를 반복하는 사용자 정의 스크립트의 일부로 사용할 수 있습니다.

마스크 적용 범위 확인

생성된 마스크가 이미 크랙된 리스트에 대해 어떻게 작동하는지 확인하는 것이 유용할 때가 많습니다. Maskgen은 마스크 컬렉션을 다른 마스크와 비교하여 한 비밀번호 리스트의 마스크를 다른 리스트에 시도할 경우 얼마나 잘 작동하는지 확인할 수 있습니다. RockYou 리스트에서 생성된 마스크가 Gawker와 같은 다른 손상된 리스트에 대해 얼마나 잘 작동하는지 비교해 보겠습니다:

root@kitploit:~
$ python statsgen.py ../PACK-0.0.3/archive/gawker.dic -o gawker.masks

$ python maskgen.py gawker.masks --checkmasksfile rockyou.hcmask -q
[*] Analyzing masks in [gawker.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Checking coverage of masks in [rockyou.hcmask]
[*] Finished matching masks:
    Masks matched: 1775
    Masks coverage:  96% (1048889/1084394)
    Masks runtime:   16:25:44

'--checkmasksfile' 매개변수를 사용하여 이전에 생성된 'rockyou.hcmask' 파일 내의 마스크를 샘플 유출 리스트 'gawker.masks'의 마스크에 대해 실행했습니다. 그 결과 1775개의 마스크가 일치하여 좋은 96%의 적용 범위를 보였으며, 이는 생성된 총 3970개의 RockYou 기반 마스크 중 1775개가 Gawker 리스트의 마스크와 일치한다는 의미입니다.

또한 다음과 같이 명령줄에서 직접 하나 이상의 마스크를 지정하여 적용 범위를 확인할 수도 있습니다:

root@kitploit:~
$ python maskgen.py gawker.masks --checkmasks="?u?l?l?l?l?l?d,?l?l?l?l?l?d?d" -q
[*] Analyzing masks in [gawker.masks]
[*] Using 1,000,000,000 keys/sec for calculations.
[*] Checking coverage of the these masks [?u?l?l?l?l?l?d, ?l?l?l?l?l?d?d]
[*] Finished matching masks:
    Masks matched: 2
    Masks coverage:  1% (18144/1084394)
    Masks runtime:   0:00:04

지정된 두 마스크 모두 1%의 적용 범위로 일치했습니다.

속도 지정

정확한 하드웨어 사양과 대상 해시에 따라 '--pps' 매개변수를 사용하여 계산에 사용되는 keys/sec 속도를 높이거나 낮출 수 있습니다:

root@kitploit:~
$ python maskgen.py rockyou.masks --targettime 43200 --pps 50000000 -q
[*] Analyzing masks in [rockyou.masks]
[*] Using 50,000,000 keys/sec for calculations.
[*] Sorting masks by their [optindex].
[!] Target time exceeded.
[*] Finished generating masks:
    Masks generated: 1192
    Masks coverage:  61% (8754548/14344390)
    Masks runtime:   12:17:31

'--pps' 매개변수를 사용하여 실제 성능과 일치시키면 대상 시간이 더 의미 있게 됩니다.

PolicyGen

기업 환경에서는 최소 비밀번호 복잡도 요구 사항이 있는 경우 많은 마스크 및 딕셔너리 공격이 실패합니다. 순수 무차별 대입 공격에 의존하는 대신 알려졌거나 추정된 비밀번호 복잡도 규칙을 활용하여 정책을 준수하지 않는 비밀번호 후보를 피하거나 반대로 비준수 비밀번호만 감사할 수 있습니다. PolicyGen을 사용하면 비밀번호 복잡도를 따르는 유효한 마스크 컬렉션을 생성하여 크래킹 시간을 크게 줄일 수 있습니다.

다음은 최소 하나의 숫자, 하나의 대문자 및 하나의 특수 문자가 필요한 환경에 대한 모든 유효한 비밀번호 마스크를 생성하는 샘플 세션입니다.

root@kitploit:~
$ python policygen.py --minlength 8 --maxlength 8 --minlower 1 --minupper 1 --mindigit 1 --minspecial 1 -o complexity.hcmask
                       _ 
     PolicyGen #.#.#  | |
      _ __   __ _  ___| | _
     | '_ \ / _` |/ __| |/ /
     | |_) | (_| | (__|   < 
     | .__/ \__,_|\___|_|\_\
     | |                    
     |_| [email protected][*] 생성된 마스크를 [complexity.hcmask]에 저장 중

[] 1,000,000,000 keys/sec 속도 사용 중. [] 비밀번호 정책: 비밀번호 길이: 최소:8 최대:8 최소 강도: l:1 u:1 d:1 s:1 최대 강도: l:None u:None d:None s:None [] [준수] 마스크 생성 중. [] 8자 비밀번호 마스크 생성 중. [] 총 마스크: 65536 시간: 76일, 18:50:04 [] 정책 마스크: 40824 시간: 35일, 0:33:09

위 출력에서 볼 수 있듯이 지정된 복잡성과 일치하는 40824개의 마스크가 생성되었으며, 1,000,000,000 keys/sec 속도로 실행하는 데 약 35일이 소요됩니다.

비밀번호 감사를 수행하고 있고 규정을 준수하지 않는 비밀번호만 발견해야 하는 경우 '--noncompliant' 플래그를 지정하여 생성된 마스크를 반전시킬 수 있습니다:

root@kitploit:~
$ python policygen.py --minlength 8 --maxlength 8 --minlower 1 --minupper 1 --mindigit 1 --minspecial 1 -o noncompliant.hcmask -q --noncompliant
[*] 생성된 마스크를 [noncompliant.hcmask]에 저장 중
[*] 1,000,000,000 keys/sec 속도 사용 중.
[*] 비밀번호 정책:
    비밀번호 길이: 최소:8 최대:8
    최소 강도: l:1 u:1 d:1 s:1
    최대 강도: l:None u:None d:None s:None
[*] [비준수] 마스크 생성 중.
[*] 8자 비밀번호 마스크 생성 중.
[*] 총 마스크:  65536 시간: 76일, 18:50:04
[*] 정책 마스크: 24712 시간: 41일, 18:16:55

'--showmasks' 플래그를 사용하여 위에서 생성된 비준수 마스크 중 일부를 살펴보겠습니다:

root@kitploit:~
$ python policygen.py --minlength 8 --maxlength 8 --minlower 1 --minupper 1 --mindigit 1 --minspecial 1 -o noncompliant.hcmask -q --noncompliant --showmasks
[*] 생성된 마스크를 [noncompliant.hcmask]에 저장 중
[*] 1,000,000,000 keys/sec 속도 사용 중.
[*] 비밀번호 정책:
    비밀번호 길이: 최소:8 최대:8
    최소 강도: l:1 u:1 d:1 s:1
    최대 강도: l:None u:None d:None s:None
[*] [비준수] 마스크 생성 중.
[*] 8자 비밀번호 마스크 생성 중.
[ 8] ?d?d?d?d?d?d?d?d               [l: 0 u: 0 d: 8 s: 0] [ 0:00:00]  
[ 8] ?d?d?d?d?d?d?d?l               [l: 1 u: 0 d: 7 s: 0] [ 0:00:00]  
[ 8] ?d?d?d?d?d?d?d?u               [l: 0 u: 1 d: 7 s: 0] [ 0:00:00]  
[ 8] ?d?d?d?d?d?d?d?s               [l: 0 u: 0 d: 7 s: 1] [ 0:00:00]  
... 
[ 8] ?s?s?s?s?s?s?s?d               [l: 0 u: 0 d: 1 s: 7] [ 0:07:06]  
[ 8] ?s?s?s?s?s?s?s?l               [l: 1 u: 0 d: 0 s: 7] [ 0:18:28]  
[ 8] ?s?s?s?s?s?s?s?u               [l: 0 u: 1 d: 0 s: 7] [ 0:18:28]  
[ 8] ?s?s?s?s?s?s?s?s               [l: 0 u: 0 d: 0 s: 8] [ 0:23:26]  
[*] 총 마스크:  65536 시간: 76일, 18:50:04
[*] 정책 마스크: 24712 시간: 41일, 18:16:55

보시다시피 모든 마스크는 적어도 하나의 비밀번호 복잡성 요구 사항이 누락되어 있습니다. 흥미롭게도 생성된 마스크가 더 적지만 '?s?s?s?s?s?s?s?s'와 같은 오래 실행되는 마스크로 인해 공격하는 데 더 오래 걸립니다.

최대 복잡성 지정

--maxlower, --maxupper, --maxdigit 및 --maxspecial 플래그를 사용하여 최대 비밀번호 복잡성을 지정하여 공격을 미세 조정할 수도 있습니다. 예를 들어, 아래는 비밀번호 정책을 적용하지만 특수 문자를 허용하지 않는 샘플 사이트입니다:

root@kitploit:~
$ python policygen.py --minlength 8 --maxlength 8 --minlower 1 --minupper 1 --mindigit 1 --maxspecial 0 -o maxcomplexity.hcmask -q
[*] 생성된 마스크를 [maxcomplexity.hcmask]에 저장 중
[*] 1,000,000,000 keys/sec 속도 사용 중.
[*] 비밀번호 정책:
    비밀번호 길이: 최소:8 최대:8
    최소 강도: l:1 u:1 d:1 s:None
    최대 강도: l:None u:None d:None s:0
[*] [준수] 마스크 생성 중.
[*] 8자 비밀번호 마스크 생성 중.
[*] 총 마스크:  65536 시간: 76일, 18:50:04
[*] 정책 마스크: 5796 시간: 1일, 20:20:55

규칙 분석

rulegen.py는 Automatic Password Rule Analysis and Generation 논문에 설명된 대로 Hashcat 암호 크래커를 위한 비밀번호 분석 및 규칙 생성을 구현합니다. 규칙 분석 및 생성 이론에 대한 자세한 내용은 해당 문서를 참조하십시오.

이미 크래킹된 비밀번호에서 원본 단어와 단어 변형 규칙을 역추적하는 것은 아직 암호화된 해시에 대한 공격을 수행하는 데 매우 효과적일 수 있습니다. 생성된 규칙과 단어를 지속적으로 재활용/확장하면 더 많은 수의 비밀번호를 크래킹할 수 있습니다.

전제 조건

rulegen.py를 효과적으로 사용하려면 몇 가지 전제 조건이 있습니다. 이 도구는 Enchant 맞춤법 검사 라이브러리를 사용하여 Aspell, MySpell 등과 같은 여러 맞춤법 검사 엔진과 인터페이스합니다. 사용하기 전에 이러한 도구를 설치해야 합니다. 또한 사용하려는 맞춤법 검사 엔진에 대한 사전을 설치하는 것이 중요합니다 (또는 사용자 정의 단어 목록을 사용할 수도 있습니다). 마지막으로, 편의를 위해 PyEnchant를 번들로 제공했으며, 이는 Enchant의 공유 라이브러리와 직접 인터페이스해야 합니다. 그러나 문제가 발생하면 번들된 'enchant' 디렉토리를 제거하고 배포판에 맞는 PyEnchant를 설치하십시오.

특정 Hashcat 규칙 구문에 대한 자세한 내용은 Hashcat Rule Based Attack을 참조하십시오.

단일 비밀번호 분석

rulegen.py의 가장 기본적인 사용법은 단일 비밀번호를 분석하여 규칙을 자동으로 감지하는 것입니다. 샘플 비밀번호 P@55w0rd123을 생성하는 데 사용된 규칙과 잠재적 원본 단어를 감지해 보겠습니다:

root@kitploit:~
$ python rulegen.py --verbose --password P@55w0rd123
                       _ 
     RuleGen #.#.#    | |
      _ __   __ _  ___| | _
     | '_ \ / _` |/ __| |/ /
     | |_) | (_| | (__|   < 
     | .__/ \__,_|\___|_|\_\
     | |                    
     |_| [email protected]


[*] Enchant 'aspell' 모듈 사용 중. 최상의 결과를 얻으려면
    'aspell' 모듈 언어 사전을 설치하십시오.
[*] 비밀번호 분석 중: P@55w0rd123
[-] Pas sword => {edit distance suboptimal: 8 (7)} => P@55w0rd123
[+] Password => sa@ ss5 so0 $1 $2 $3 => P@55w0rd123
[+] Passwords => sa@ ss5 so0 o81 $2 $3 => P@55w0rd123
[+] Passwords => sa@ ss5 so0 o81 o92 $3 => P@55w0rd123
[+] Passwords => sa@ ss5 so0 i81 i92 oA3 => P@55w0rd123
[+] Password's => sa@ ss5 so0 o81 o92 $3 => P@55w0rd123
[+] Password's => sa@ ss5 so0 o81 i92 oA3 => P@55w0rd123
[+] Password's => sa@ ss5 so0 i81 o92 oA3 => P@55w0rd123

이 예제에서 사용한 몇 가지 플래그는 다음과 같습니다:

  • --password - 분석할 단일 비밀번호를 지정합니다.
  • --verbose - 생성된 규칙 및 성능 통계와 같은 상세 정보를 출력합니다.

비밀번호 파일 처리는 아래 섹션에서 다룹니다. 그러나 먼저 단일 비밀번호를 예로 들어 사용 가능한 미세 조정 옵션 중 일부를 논의해 보겠습니다.

맞춤법 검사 제공자

원본 단어 감지에 aspell Enchant 모듈을 사용하고 있습니다. 정확한 맞춤법 검사 엔진은 다음과 같이 --provider 플래그를 사용하여 변경할 수 있습니다:

root@kitploit:~
$ python rulegen.py --verbose --provider myspell --password P@55w0rd123 -q
[*] Enchant 'myspell' 모듈 사용 중. 최상의 결과를 얻으려면
    'myspell' 모듈 언어 사전을 설치하십시오.
...

참고: 제공자 엔진 우선 순위는 쉼표로 구분된 목록을 사용하여 지정할 수 있습니다 (예: --provider aspell,myspell).

소스 단어 강제 지정

--word 플래그로 원본 단어를 지정하면 원본 단어 감지 엔진 사용을 완전히 비활성화할 수 있습니다:

root@kitploit:~
$ python rulegen.py -q --verbose --word word --password P@55w0rd123
[*] 비밀번호 분석 중: P@55w0rd123
[+] word => ^5 ^5 ^@ ^P so0 $1 $2 $3 => P@55w0rd123

다른 원본 단어를 지정하면 규칙 생성 엔진을 실험하는 재미를 느낄 수 있습니다.

사용자 정의 사전 정의

표준 맞춤법 검사 엔진 단어 목록을 사용한 규칙 생성이 더 이상 충분하지 않은 시점이 반드시 옵니다. --wordlist 플래그를 사용하여 사용자 정의 단어 목록을 지정할 수 있습니다. 이는 이전 분석 세션의 원본 단어를 재사용할 때 특히 유용합니다:

root@kitploit:~
$ python rulegen.py -q --verbose --wordlist rockyou.txt --password 1pa55w0rd1
[*] Enchant 'Personal Wordlist' 모듈 사용 중. 최상의 결과를 얻으려면
    'Personal Wordlist' 모듈 언어 사전을 설치하십시오.
[*] 비밀번호 분석 중: 1pa55w0rd1
[+] password => ^1 ss5 so0 $1 => 1pa55w0rd1

사용자 정의 단어 목록은 속어와 같이 일반적으로 찾을 수 없는 단어를 사용하거나 이미 크래킹된 비밀번호를 사용할 때 특히 유용할 수 있습니다.

차선의 규칙 및 단어 생성

rulegen.py는 최상의 원본 단어와 비밀번호만 생성 및 기록하려고 시도하지만 더 많은 결과에 관심이 있을 수 있습니다. --morewords 및 --morerules 플래그를 사용하여 최적 편집 거리를 초과할 수 있는 단어와 규칙을 생성하십시오:

root@kitploit:~
$ python rulegen.py -q --verbose --password '$m0n3y$' --morerules --morewords
[*] Enchant 'aspell' 모듈 사용 중. 최상의 결과를 얻으려면
    'aspell' 모듈 언어 사전을 설치하십시오.
[*] 비밀번호 분석 중: $m0n3y$
[+] money => ^$ so0 se3 $$ => $m0n3y$
[+] moneys => ^$ so0 se3 o6$ => $m0n3y$
[+] mingy => ^$ si0 sg3 $$ => $m0n3y$
[+] many => ^$ sa0 i43 $$ => $m0n3y$
[+] Mooney => sM$ o1m so0 se3 $$ => $m0n3y$

--maxworddist 및 --maxwords 플래그를 사용하여 생성된 단어를 더 확장할 수 있습니다. 마찬가지로 --maxrulelen 및 --maxrules 플래그를 사용하여 더 많은 규칙을 생성할 수 있습니다.

고급 엔진 비활성화

rulegen.py는 더 나은 품질의 단어와 규칙을 생성하기 위해 여러 고급 엔진을 포함합니다. --simplewords 및 --simplerules 플래그를 사용하여 차이를 관찰하거나 문제를 일으키는 경우 비활성화할 수 있습니다. 이러한 플래그를 켰을 때 원본 단어와 규칙이 어떻게 변경되는지 살펴보겠습니다:

root@kitploit:~
$ python rulegen.py -q --verbose --password '$m0n3y$' --simplewords --simplerules
[*] Enchant 'aspell' 모듈 사용 중. 최상의 결과를 얻으려면
    'aspell' 모듈 언어 사전을 설치하십시오.
[*] 비밀번호 분석 중: $m0n3y$
[-] Meany => {edit distance suboptimal: 5 (4)} => $m0n3y$
[+] many => i0$ o20 i43 i6$ => $m0n3y$
[+] mingy => i0$ o20 o43 i6$ => $m0n3y$
[+] money => i0$ o20 o43 i6$ => $m0n3y$
[+] mangy => i0$ o20 o43 i6$ => $m0n3y$
[+] manky => i0$ o20 o43 i6$ => $m0n3y$

'manky'와 같은 단어가 실제 원본 단어 'money'와의 관계가 적어 생성된 단어와 규칙의 품질이 크게 저하되었습니다. 동시에 생성된 규칙은 단순한 삽입, 삭제 및 대체로 축소되었습니다.

비밀번호 목록 처리

이제 모든 다양한 플래그와 스위치를 마스터했으므로 비밀번호 모음에 대한 단어와 규칙을 생성해 보겠습니다. 다음과 같은 상당히 복잡한 테스트 비밀번호가 포함된 텍스트 파일 korelogic.txt를 생성해 보겠습니다:

root@kitploit:~
&~defcon
'#(4)\
August19681
'&a123456
10-D'Ann
~|Bailey
Krist0f3r
f@cebOOK
Nuclear$(
zxcvbn2010!
13Hark's
NjB3qqm
Sydney93?
antalya%]
Annl05de
;-Fluffy

이제 첫 번째 인수로 비밀번호 파일을 지정하여 rulegen.py 분석을 관찰해 보겠습니다:

root@kitploit:~
$ python rulegen.py korelogic.txt -q
[*] Enchant 'aspell' 모듈 사용 중. 최상의 결과를 얻으려면
    'aspell' 모듈 언어 사전을 설치하십시오.
[*] 비밀번호 파일 분석 중: korelogic.txt:
[*] Ctrl-C를 눌러 실행을 종료하고 통계 분석을 생성하십시오.
[*] 규칙을 analysis.rule에 저장 중
[*] 단어를 analysis.word에 저장 중
[*] 16개의 비밀번호를 1.00초 동안 처리 완료 (처리 속도: 15.94 p/sec)
[*] [analysis] 규칙 및 단어에 대한 통계 생성 중.
[-] 0개의 숫자 비밀번호 건너뜀 (0.00%)
[-] 알파 문자 비율이 25% 미만인 2개의 비밀번호 건너뜀 (12.50%)
[-] ASCII가 아닌 문자가 포함된 0개의 비밀번호 건너뜀 (0.00%)

[*] 상위 10개 규칙
[+] ^3 ^1 o4r - 3 (2.00%)
[+] i61 i79 i86 i98 oA1 - 2 (1.00%)
[+] ^- ^0 ^1 i4' o5A - 2 (1.00%)
[+] sS1 i13 T2 - 1 (0.00%)
[+] i61 se9 i86 i98 oA1 - 1 (0.00%)
[+] o61 i79 i86 i98 oA1 - 1 (0.00%)
[+] ^- ^0 ^1 so' i5A - 1 (0.00%)
[+] D3 si0 i55 $e - 1 (0.00%)
[+] i61 i79 se6 i98 oA1 - 1 (0.00%)
[+] i3a o5y o6a i7% o8] - 1 (0.00%)

[*] 상위 10개 단어
[+] Analyze - 1 (0.00%)
[+] defcon - 1 (0.00%)
[+] Kristen - 1 (0.00%)
[+] Bailey - 1 (0.00%)
[+] Augusts - 1 (0.00%)
[+] Annelid - 1 (0.00%)
[+] Hack's - 1 (0.00%)
[+] antlers - 1 (0.00%)
[+] antelope - 1 (0.00%)
[+] xxxv - 1 (0.00%)

모든 기본 설정을 사용하여 몇 가지 고품질 규칙을 생성할 수 있었습니다. 응용 프로그램은 기본적인 상위 10개 규칙 및 단어 통계를 표시합니다. 생성된 모든 규칙과 단어는 기본적으로 'analysis' 기본 이름을 사용하여 저장됩니다:

  • analysis.word - 정렬되지 않고 중복 제거되지 않은 원본 단어
  • analysis-sorted.word - 발생 빈도별로 정렬되고 고유한 원본 단어
  • analysis.rule - 정렬되지 않고 중복 제거되지 않은 규칙
  • analysis-sorted.rule - 발생 빈도별로 정렬되고 고유한 규칙

'#(4)\ and '&a123456과 같은 여러 비밀번호는 처리할 충분한 특성이 없어 건너뛰어졌습니다. 알파 문자 수 외에도 프로그램은 모든 숫자 비밀번호와 ASCII가 아닌 문자가 포함된 비밀번호를 건너뜁니다. 후자는 Enchant 엔진의 버그 때문이며, 향후 수정하여 여러 언어의 단어 처리를 가능하게 하기를 바랍니다.

출력 기본 이름 지정

앞서 언급했듯이 rulegen.py는 기본적으로 'analysis' 기본 이름을 사용하여 출력 파일을 저장합니다. 다음과 같이 --basename 또는 -b 플래그로 파일 기본 이름을 변경할 수 있습니다:

root@kitploit:~
$ python rulegen.py korelogic.txt -q -b korelogic
[*] Enchant 'aspell' 모듈 사용 중. 최상의 결과를 얻으려면
    'aspell' 모듈 언어 사전을 설치하십시오.
[*] 비밀번호 파일 분석 중: korelogic.txt:
[*] Ctrl-C를 눌러 실행을 종료하고 통계 분석을 생성하십시오.
[*] 규칙을 korelogic.rule에 저장 중
[*] 단어를 korelogic.word에 저장 중

규칙 디버깅

Hashcat 비밀번호 크래커에 대한 규칙 생성에 문제가 발생할 수 있습니다. rulegen.py에는 --hashcat 플래그가 포함되어 있어 hashcat 자체를 --stdout 모드로 실행하여 생성된 단어와 규칙을 검증합니다. 이 모드가 올바르게 작동하려면 최신 버전의 hashcat-cli를 다운로드하고 소스의 HASHCAT_PATH 변수를 편집해야 합니다. 예를 들어, 이 글을 쓰는 시점에서는 hashcat-0.## 폴더를 PACK 디렉토리에 넣고 HASHCAT_PATH를 'hashcat-0.##/'로 정의했습니다.

--debug 플래그를 사용하여 규칙 생성 엔진의 내부 작동을 관찰할 수도 있습니다. 특정 규칙 실패 메시지에 대해 걱정하지 마십시오. 이는 정지 문제 해결사가 최적의 유효한 솔루션을 찾으려고 시도한 결과입니다.

결론

이 가이드는 비밀번호 분석, 규칙 역추적 및 마스크 생성의 여러 방법을 소개하지만, 여러분이 발견하기를 기다리는 다른 많은 트릭이 있습니다. 다루어진 도구에 대한 특이한 사용법이나 제안을 알려주시면 기쁠 것입니다.

즐거운 크래킹 되세요!

-Peter

도구 다운로드