
확률적 문맥 자유 문법 (PCFG) 비밀번호 추측 생성기
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 추측기는 대량의 솔티드 해시 또는 기타 느린 해싱 알고리즘에 가장 적합하며, 알고리즘의 성능 비용은 추측의 정확성으로 보완됩니다.
pip3 install chardet를 사용하여 설치하십시오.이 저장소에 포함된 기본 규칙 집합은 RockYou 데이터셋의 100만 비밀번호 하위 집합을 훈련하여 생성되었습니다. RockYou의 전체 3200만 비밀번호 집합을 훈련하면 더 나은 성능을 얻을 수 있지만, 다운로드 크기를 작게 유지하기 위해 제외되었습니다. 기본 규칙 집합을 사용하여 새 목록을 훈련하지 않고 비밀번호 생성을 시작할 수 있지만, 대상으로 삼고자 하는 비밀번호에 더 가까운 목표 집합을 훈련하는 것이 좋습니다. 직접 규칙 집합을 만드는 경우 다음 빠른 가이드를 참조하십시오.
python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESETpython3 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이라고 가정합니다.
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load이전에 훈련된 규칙 집합에 의해 비밀번호가 생성될 확률을 추정하려는 경우가 많습니다. 예를 들어 비밀번호 강도 측정의 일부이거나 다른 연구 목적으로 사용될 수 있습니다. 이를 수행하는 샘플 프로그램이 포함되어 있습니다.
python3 password_scorer -r NEW_RULESET -i INPUT_LIST이름: PRINCE Language Idexed N-Grams (Prince-Ling)
개요: 이미 훈련된 PCFG 규칙 집합/문법을 기반으로 사용자 지정 단어 목록을 구성하여 PRINCE 스타일 조합 공격에 사용합니다. 이 아이디어의 배경은 PCFG 트레이너가 이미 훈련 집합 비밀번호를 개별 구문 분석으로 분해하고 있으므로 이 정보를 활용하여 다른 공격에 맞춤화된 단어 목록을 만들 수 있다는 것입니다.
기본 메커니즘: 내부적으로 Prince-Ling 도구는 기본적으로 미니 PCFG 추측 생성기입니다. Markov 추측 생성을 제거하고 일반 PCFG 공격에 사용되는 기본 구조를 PRINCE 단어 목록 생성에 맞게 크게 축소된 기본 구조로 대체합니다. 이를 통해 해당 단어가 PRINCE 공격에서 얼마나 유용할지에 중점을 두고 확률 순서로 사전 단어를 생성할 수 있습니다.
Prince-Ling 사용법
python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAMEpython3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt
버그를 발견하거나 추가되었으면 하는 기능이 있으면 이 GitHub 페이지에 이슈를 열어 주십시오. Pull 요청도 받지만, 가능하면 Pull 요청을 이슈에 연결하여 더 쉽게 검토하고 질문하며 변경 사항을 더 잘 이해할 수 있도록 해 주십시오.
PCFG를 사용한 비밀번호 생성 전략 모델링에는 많은 개선 사항이 있습니다. 새로운 아이디어, 변경 및 제안에 매우 열려 있습니다. 코드가 현재 특정 방식으로 동작한다고 해서 그것이 최선의 선택이라는 의미는 아닙니다. 예를 들어, 현재 접근 방식의 기본 base_structure는 알파 문자열, 숫자, 기타 등에 대한 마스크를 생성하는 방식으로, "가장 쉬운" 구현 옵션이기 때문에 선택되었습니다. 저희 팀은 더 나은 옵션은 기본 단어로 시작한 다음 PCFG에서 전환으로 적용되는 보다 전통적인 맹글링 규칙을 모델링하는 것일 수 있다고 많은 논의를 했습니다. 그러니 이 코드를 자유롭게 활용하십시오!