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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
pcfg_cracker — 확률적 문맥 자유 문법 (PCFG) 비밀번호 추측 생성기 | Kitploit
도구/GitHubGitHub/lakiw/pcfg_cracker
Password CrackingPassword AttacksCryptographyMachine Learning
GitHublakiw/pcfg_cracker

pcfg_cracker

확률적 문맥 자유 문법 (PCFG) 비밀번호 추측 생성기

저장소 보기
37087141년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PCFG = 확률적 문맥 자유 문법 (Probabilistic Context Free Grammar)

PCFG = 꽤 멋진 퍼지 추측기 (Pretty Cool Fuzzy Guesser)

요약: 인간이 비밀번호를 생성하는 방식에 대한 연구를 수행하기 위한 도구 모음입니다. 이 도구들을 사용하여 비밀번호 해시를 크래킹할 수 있을 뿐만 아니라 합성 비밀번호(허니워드)를 생성하거나 더 나은 비밀번호 강도 알고리즘 개발을 도울 수 있습니다.

도구 버전

Trainer: 4.4

Guesser: 4.6

PRINCE_LING: 4.3

Password_Scorer: 4.4

문서

Sphinx는 코드의 독스트링을 기반으로 동적으로 개발자 가이드를 생성하는 데 사용됩니다. 개발자 가이드를 빌드하려면 /doc/INSTRUCTIONS.rst 파일의 지침을 참조하십시오.

미리 빌드된 개발자 가이드 PDF는 /doc/build/latex/pcfgdevelopersguide.pdf에서도 찾을 수 있습니다. 참고: git 히스토리를 깔끔하게 유지하기 위해 주요 릴리스 사이에 이 가이드를 다시 빌드하지 않을 예정입니다. 즉, PDF를 커밋하면 금방 지저분해집니다. 따라서 미리 빌드된 가이드는 약간 최신 버전이 아닐 수 있으므로 코드를 작성/수정하는 데 도움을 받기 위해 사용하는 경우 미리 빌드된 가이드 대신 직접 가이드를 빌드하는 것이 좋습니다.

개요

이 프로젝트는 기계 학습을 사용하여 사용자의 비밀번호 생성 습관을 식별합니다. 공개된 평문/크래킹된 비밀번호 목록을 훈련하여 PCFG 모델을 생성합니다. 이 프로젝트의 맥락에서 모델은 규칙 집합(ruleset)이라고 하며, 훈련 중에 식별된 비밀번호의 다양한 부분과 관련 확률을 포함합니다. 이러한 어간 추출은 PRINCE와 같은 다른 크래킹 도구에 유용할 수 있으며, 규칙 집합의 일부를 보다 전통적인 사전 기반 공격에 직접 통합할 수도 있습니다. 또한 이 프로젝트에는 이 규칙 집합을 사용하여 확률 순서로 비밀번호 추측을 생성하는 PCFG 추측 생성기가 포함되어 있습니다. 이는 표준 사전 공격보다 훨씬 강력하며, 테스트 결과 다른 공개적으로 사용 가능한 방법보다 평균적으로 훨씬 적은 추측으로 비밀번호를 크래킹할 수 있음이 입증되었습니다. 단점은 확률 순서로 추측을 생성하는 것이 느리다는 점입니다. 즉, 초당 평균 50-100k개의 추측을 생성하는 반면, GPU 기반 알고리즘은 빠른 해싱 알고리즘에 대해 초당 수백만에서 수십억(그 이상)의 추측을 생성할 수 있습니다. 따라서 PCFG 추측기는 대량의 솔티드 해시 또는 기타 느린 해싱 알고리즘에 가장 적합하며, 알고리즘의 성능 비용은 추측의 정확성으로 보완됩니다.

요구 사항 + 설치

  • Python3는 이 도구들의 유일한 필수 요구 사항입니다.
  • 훈련을 위해 chardet python3 라이브러리를 설치하는 것을 강력히 권장합니다. 필수는 아니지만 훈련 비밀번호의 문자 인코딩 자동 감지를 수행합니다. 설치하려면:
  • https://pypi.python.org/pypi/chardet에서 소스를 다운로드하십시오.
  • 또는 pip3 install chardet를 사용하여 설치하십시오.

빠른 시작 가이드

훈련

이 저장소에 포함된 기본 규칙 집합은 RockYou 데이터셋의 100만 비밀번호 하위 집합을 훈련하여 생성되었습니다. RockYou의 전체 3200만 비밀번호 집합을 훈련하면 더 나은 성능을 얻을 수 있지만, 다운로드 크기를 작게 유지하기 위해 제외되었습니다. 기본 규칙 집합을 사용하여 새 목록을 훈련하지 않고 비밀번호 생성을 시작할 수 있지만, 대상으로 삼고자 하는 비밀번호에 더 가까운 목표 집합을 훈련하는 것이 좋습니다. 직접 규칙 집합을 만드는 경우 다음 빠른 가이드를 참조하십시오.

  1. 훈련할 평문 비밀번호 집합을 식별합니다.
  • 이 비밀번호 집합에는 중복 비밀번호가 포함되어야 합니다. 그래야 트레이너가 123456과 같은 일반적인 비밀번호를 식별할 수 있습니다.
  • 비밀번호는 평문이어야 하며 해시나 사용자 이름 같은 관련 정보는 제거되어야 합니다. 훈련 집합으로 원시 .pot 파일을 사용하지 마십시오. 해시가 훈련 프로그램에 의해 비밀번호의 일부로 간주되기 때문입니다.
  • 비밀번호는 생성하려는 비밀번호 추측과 동일한 방식으로 인코딩되어야 합니다. 즉, UTF-8 비밀번호 추측을 생성하려면 훈련 집합도 UTF-8로 인코딩되어야 합니다. 장기적으로 추측 생성 시 이를 수정하는 기능이 개발 계획에 있지만 현재는 지원되지 않습니다.
  • 훈련 비밀번호 목록은 10만 개에서 5000만 개 사이여야 합니다. 훈련 비밀번호 목록의 크기가 추측 생성에 미치는 영향에 대한 테스트가 계속 진행 중이며, 1만 개 정도의 작은 목록에서도 좋은 성과가 있었지만 이상적인 크기는 약 100만 개이며 그 이후로는 수확 체감이 있습니다.
  • 이 튜토리얼에서는 입력 비밀번호 목록을 INPUT_PASSWORD_LIST라고 하겠습니다.
  1. 생성된 규칙 집합의 이름을 선택합니다. 이 튜토리얼에서는 NEW_RULESET이라고 하겠습니다.
  2. 입력 비밀번호 목록에 대해 트레이너를 실행합니다.
  • python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET
  • 일반적인 선택적 플래그: a. coverage: 훈련 집합이 대상 비밀번호와 일치할 것으로 신뢰하는 정도입니다. 더 높은 커버리지는 Markov 모델링(현재 OMEN 알고리즘 사용)을 사용한 덜 지능적인 무차별 대입 생성을 의미합니다. 커버리지를 1로 설정하면 무차별 대입이 수행되지 않습니다. 커버리지를 0으로 설정하면 Markov 공격을 사용한 추측만 생성됩니다. 이 값은 부동 소수점이며 기본값은 0.6으로 대상 비밀번호의 기본 단어가 훈련 집합에서 발견될 확률이 60%라고 예상하는 것을 의미합니다. 예: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6 b. --save_sensitive: 이 옵션을 지정하면 훈련 중 발견된 이메일 주소 및 전체 웹사이트와 같은 민감한 데이터가 규칙 집합에 저장됩니다. PCFG 추측 생성기는 현재 이 데이터를 사용하지 않지만 실제 비밀번호 크래킹 공격에서 매우 가치 있습니다. 기본적으로 이 옵션은 꺼져 있어 학술 환경에서 이 도구를 더 쉽게 사용할 수 있습니다. 이 옵션이 꺼져 있어도 규칙 집합에 PII 데이터가 거의 확실히 저장되므로 생성된 규칙 집합을 적절히 보호하십시오. 예: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive c. --comments: 규칙 집합 설정 파일에 주석을 추가합니다. 나중에 규칙 집합을 다시 볼 때 규칙 집합을 생성한 이유와 방법을 알 수 있으므로 유용합니다. 추가하려는 주석을 따옴표로 묶어 포함시킵니다.

추측 생성

이전에 훈련된 PCFG 규칙 집합을 사용하여 추측을 stdout으로 생성합니다. 이러한 추측은 파이프를 통해 사용하려는 모든 프로그램으로 전달할 수 있습니다. 규칙 집합이 지정되지 않으면 기본 규칙 집합 DEFAULT가 사용됩니다. 이 가이드에서는 사용되는 규칙 집합이 NEW_RULESET이라고 가정합니다.

  1. 참고: 추측 생성 프로그램은 규칙 집합 이름을 지정할 때 대소문자를 구분합니다.
  • 세션 이름은 필수가 아니지만(기본적으로 default_run이라는 세션이 생성됨) 일시 중지/중지된 세션을 다시 시작하기 쉽게 만듭니다. 이 예제에서는 세션 이름 SESSION_NAME을 사용합니다. 동일한 이름으로 여러 세션을 동시에 실행할 때 내장된 무결성 검사는 없지만 피하는 것이 좋습니다.
  1. 새 추측 세션을 시작하려면 다음을 실행합니다.
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME
  1. 이전 추측 세션을 다시 시작하려면 다음을 실행합니다. (참고: 세션을 복원할 때 동일한 규칙 집합을 지정해야 합니다.)
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load

비밀번호 강도 점수 매기기

이전에 훈련된 규칙 집합에 의해 비밀번호가 생성될 확률을 추정하려는 경우가 많습니다. 예를 들어 비밀번호 강도 측정의 일부이거나 다른 연구 목적으로 사용될 수 있습니다. 이를 수행하는 샘플 프로그램이 포함되어 있습니다.

  • INPUT_LIST는 점수를 매길 비밀번호 목록을 나타냅니다. 이러한 비밀번호는 평문이어야 하며 한 줄에 하나의 비밀번호로 줄바꿈으로 구분되어야 합니다.
  1. 점수 매기기 세션을 실행하려면: python3 password_scorer -r NEW_RULESET -i INPUT_LIST
  2. 기본적으로 각 줄에 점수가 매겨진 비밀번호와 함께 결과가 stdout으로 출력됩니다.
  • 첫 번째 값은 원시 비밀번호입니다.
  • 두 번째 값은 입력 값이 'password', 'website', 'e-mail address' 또는 'other'로 점수 매겨졌는지 나타냅니다. 비밀번호인지 다른 것인지 결정은 OMEN 추측 한계와 PCFG와 관련된 확률 모두에 대해 설정한 한계에 따라 달라집니다.
  • 세 번째 값은 규칙 집합에 따른 비밀번호의 확률입니다. 0.0으로 할당되면 규칙 집합에 의해 비밀번호가 생성되지 않음을 의미하지만 Markov 기반 공격에 의해 생성될 수 있습니다.
  • 네 번째 값은 비밀번호를 생성할 OMEN 레벨입니다. -1 값은 OMEN에 의해 비밀번호가 생성되지 않음을 의미합니다.

Prince-Ling 단어 목록 생성기

이름: PRINCE Language Idexed N-Grams (Prince-Ling)

개요: 이미 훈련된 PCFG 규칙 집합/문법을 기반으로 사용자 지정 단어 목록을 구성하여 PRINCE 스타일 조합 공격에 사용합니다. 이 아이디어의 배경은 PCFG 트레이너가 이미 훈련 집합 비밀번호를 개별 구문 분석으로 분해하고 있으므로 이 정보를 활용하여 다른 공격에 맞춤화된 단어 목록을 만들 수 있다는 것입니다.

기본 메커니즘: 내부적으로 Prince-Ling 도구는 기본적으로 미니 PCFG 추측 생성기입니다. Markov 추측 생성을 제거하고 일반 PCFG 공격에 사용되는 기본 구조를 PRINCE 단어 목록 생성에 맞게 크게 축소된 기본 구조로 대체합니다. 이를 통해 해당 단어가 PRINCE 공격에서 얼마나 유용할지에 중점을 두고 확률 순서로 사전 단어를 생성할 수 있습니다.

Prince-Ling 사용법

  1. trainer.py를 사용하여 PCFG 규칙 집합을 훈련합니다. 이전 버전은 Prince-Ling이 사용하는 모든 데이터 구조를 학습하지 않았으므로 PCFG 도구 세트 버전 4.1 이상을 사용하여 규칙 집합을 만들어야 합니다.
  2. Prince-Ling 실행: python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAME
  • --rule: PRINCE 단어 목록을 생성할 PCFG 규칙 집합의 이름입니다.
  • --size: PRINCE 단어 목록에 생성할 단어 수입니다. 지정하지 않으면 Prince-Ling은 가능한 모든 단어를 생성하며, case_mangling이 활성화된 경우 매우 커질 수 있습니다. (Case mangling은 키스페이스를 엄청나게 증가시킵니다.)
  • --output: 항목을 쓸 출력 파일 이름입니다. 지정하지 않으면 Prince-Ling은 단어를 stdout으로 출력하며, ASCII가 아닌 문자를 출력할 때 사용하는 셸에 따라 문제가 발생할 수 있습니다.
  • --all_lower: PRINCE 사전에 소문자 단어만 생성합니다. 대소문자를 구분하지 않는 해시를 공격하거나 다른 방식으로 대상 case mangling을 적용할 계획인 경우 유용합니다.

John the Ripper를 사용한 비밀번호 크래킹 예제

python3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt

기여하기

버그를 발견하거나 추가되었으면 하는 기능이 있으면 이 GitHub 페이지에 이슈를 열어 주십시오. Pull 요청도 받지만, 가능하면 Pull 요청을 이슈에 연결하여 더 쉽게 검토하고 질문하며 변경 사항을 더 잘 이해할 수 있도록 해 주십시오.

PCFG를 사용한 비밀번호 생성 전략 모델링에는 많은 개선 사항이 있습니다. 새로운 아이디어, 변경 및 제안에 매우 열려 있습니다. 코드가 현재 특정 방식으로 동작한다고 해서 그것이 최선의 선택이라는 의미는 아닙니다. 예를 들어, 현재 접근 방식의 기본 base_structure는 알파 문자열, 숫자, 기타 등에 대한 마스크를 생성하는 방식으로, "가장 쉬운" 구현 옵션이기 때문에 선택되었습니다. 저희 팀은 더 나은 옵션은 기본 단어로 시작한 다음 PCFG에서 전환으로 적용되는 보다 전통적인 맹글링 규칙을 모델링하는 것일 수 있다고 많은 논의를 했습니다. 그러니 이 코드를 자유롭게 활용하십시오!

도구 다운로드