
C로 작성된 Markov 모델 기반 비밀번호 추측기로, 확률에 따라 후보를 열거하여 Hashcat 또는 John을 통한 해시 크래킹을 위해 가장 가능성 높은 비밀번호를 먼저 생성합니다.
OMEN은 C로 작성된 Markov 모델 기반 비밀번호 추측기로, 발생 확률에 따라 비밀번호 후보를 생성합니다. 즉, 가장 가능성이 높은 비밀번호를 먼저 출력합니다. OMEN은 기존 제안들보다 추측 속도를 크게 향상시킵니다. OMEN이 기존 Markov 모델 기반 비밀번호 추측 접근법보다 어떻게 개선되었는지에 대한 자세한 내용은 OMEN: Faster Password Guessing Using an Ordered Markov Enumerator를 참조하세요.
OMEN은 두 개의 별도 프로그램 모듈로 구성됩니다: createNG와 enumNG. createNG는
주어진 비밀번호 목록을 기반으로 n-gram 확률을 계산하여 하드 디스크에 저장합니다. 이 확률을 기반으로 enumNG는 새로운
비밀번호를 올바른 순서(내림차순)로 열거합니다.
최신 Linux 버전을 사용하고 git(Git 버전 관리 시스템), gcc(GNU 컴파일러 컬렉션), make(GNU Make)가 설치되어 있는지 확인하세요. Ubuntu Linux에서는 다음을 통해 설치할 수 있습니다:
$ sudo apt-get install build-essential git
다음을 통해 소스 코드를 체크아웃하세요:
$ git clone https://github.com/RUB-SysSec/OMEN.git OMEN
새로 생성된 OMEN 디렉토리로 이동하여 다음을 실행하세요:
$ make
컴파일이 성공하면 현재 디렉토리에서 createNG와 enumNG를 찾을 수 있습니다.
.
├── alphabetCreator
├── createNG
├── docs
│ ├── CHANGELOG.md
│ ├── LICENSE
│ └── screenshots
├── enumNG
├── evalPW
├── makefile
├── README.md
└── src
├── alphabetCreator.c
...
원하시면 이제 src 폴더와 makefile 파일을 제거할 수 있습니다. 더 이상 사용되지 않습니다.
Windows 10에서 Cygwin을 사용한 간단한 설치 가이드는 여기에서 확인할 수 있습니다.
비밀번호를 생성하기 전에 createNG를 사용하여 n-gram 확률을 추정해야 합니다.
기본 설정을 사용하여 확률을 계산하려면 createNG를 호출할 때 훈련할 비밀번호 목록의 경로를 지정해야 합니다:
$ ./createNG --iPwdList password-training-list.txt
주어진 목록의 각 비밀번호는 새 줄에 있어야 합니다. 그런 다음 모듈은
목록을 읽고 평가하여 여러 파일을 생성합니다. 사용된 설정(이 경우 기본 설정)을 저장하는 구성 파일(createConfig) 외에도, gram과 비밀번호 길이에 대한 정보를 포함하는 여러 파일이 생성됩니다. 이 파일들은 '.level' 확장자를 가집니다:
각 n-gram과 길이의 확률은 0(가장 가능성 높음)에서 10(가장 가능성 낮음) 사이의 레벨로 매핑됩니다. 이 파일들이 생성되면 enumNG를 사용하여 확률 순으로 정렬된 비밀번호 목록을 생성할 수 있습니다. 현재 enumNG는 세 가지 작동 모드를 지원합니다: file, stdout, simulated plaintext attack. enumNG의 기본 모드에서는 이러한 레벨을 기반으로 비밀번호 추측 목록이 생성됩니다. 다음 명령을 사용하면
$ ./enumNG
10억 개의 비밀번호를 생성하고 이를 텍스트 파일에 저장하며, 이 파일은 'results' 폴더에서 찾을 수 있습니다. 이 파일의 비밀번호는 레벨(즉, 확률) 순으로 정렬됩니다. 일반적인 텍스트 편집기는 이러한 거대한 파일을 처리할 수 없으므로, 테스트를 위해 생성되는 비밀번호 수를 줄이는 것이 좋습니다. 이는 -m 인수를 사용하여 수행할 수 있습니다.
$ ./enumNG -m 10000
10,000개의 비밀번호만 포함된 정렬된 목록을 생성합니다. 비밀번호를 표준 출력(stdout) 스트림으로 출력하려면 -p 인수를 사용하세요.
$ ./enumNG -p -m 10000
평문 비밀번호 테스트 세트에 대한 추측 성능을 평가하려면 -s 인수를 사용하세요. 참고: 이 모드에서 OMEN은 실시간 피드백을 통합한 적응형 길이 스케줄링 알고리즘의 이점을 활용하는데, 이는 file 및 stdout 모드에서는 (피드백 채널이 없기 때문에) 사용할 수 없습니다.
$ ./enumNG -s=password-testing-list.txt -m 10000
이 평가의 결과는 'results' 폴더에서 찾을 수 있습니다.
두 모듈 모두 -h 또는 --help 인수를 사용하여 표시할 수 있는 도움말 대화상자를 제공합니다.
$2a$10$HNYF4KajSTqxIP/KoiB5tOCVeKUgvscTh32hhAmppFk4T/USmI2B.에서 "GoodOMEN!123"으로 어떻게 갈 수 있을까요?
OMEN은 확률적 비밀번호 모델링 개선, 추측 횟수 추정 또는 비밀번호 강도와 같은 학술적 사용 사례를 위해 개발되었으며, 일반적으로 비밀번호 보안을 개선하기 위한 것입니다. 이 소프트웨어를 악용하여 다른 사람의 개인정보를 침해하거나 법을 위반하지 마세요.
Hashcat 및 John the Ripper와 같은 인기 있는 해시 평가기는 수백 가지의 해시 및 암호 형식을 지원하며, 표준 입력(stdin) 스트림을 통해 비밀번호 후보를 읽을 수 있기 때문에 쉽게 통합할 수 있습니다.
$ ./enumNG -p -m 10000 | ./hashcat64.bin ...
또는
$ ./enumNG -p -m 10000 | ./john --stdin ...
최적의 추측 성능을 위해서는 크래킹하려는 비밀번호 분포와 유사한 비밀번호 분포로 createNG를 훈련하는 것을 고려하세요.
참고: 확률적 비밀번호 모델링을 사용하여 비밀번호를 크래킹하는 것은 일반적으로 실행 가능한 추측 횟수가 제한적인 느린 해시(예: bcrypt, PBKDF2, scrypt 또는 Argon2)에 대해서만 고려하거나 매우 표적화된 공격에서만 고려해야 합니다. 반대로, 매우 빠른 해시(MD5, SHA-1 또는 NTLM)의 경우 좋은 사전과 맹글링 규칙(예: best64.rule)을 사용하는 것이 좋습니다.
이 주제에 관심이 있다면 다음 논문과 관련 연구를 읽어보는 것을 고려하세요 (이 목록은 불완전하며, 확장하는 데 도움을 줄 수 있습니다):
확률적 문맥 자유 문법
Markov 모델
신경망
하이브리드
접근법 비교
두 모듈 모두 사용 가능한 다양한 모드를 선택하고 기본 설정을 변경할 수 있는 여러 명령줄 인수를 제공합니다. 예를 들어, createNG 프로세스 중에 생성된 확률 분포는 지원되는 평활화 함수, n-gram 크기 또는 사용된 알파벳 중 하나를 선택하여 조작할 수 있습니다. createNG에 사용 가능한 모든 매개변수, 간단한 설명 및 기본값은 -h 또는 --help로 프로그램을 호출하여 확인할 수 있습니다. enumNG도 마찬가지로 작동하며, 예를 들어 열거 모드, 사용된 길이 스케줄링 알고리즘(-s 모드에서만 사용됨, '기본 사용법' 섹션 참조) 및 최대 시도 횟수를 선택할 수 있습니다. 열거 모드가 지정되지 않으면
기본 모드가 실행되어 생성된 모든 비밀번호를 'results' 폴더의 텍스트 파일에 저장합니다.
OMEN+는 When Privacy Meets Security: Leveraging Personal Information for Password Cracking을 기반으로 하며 OMEN의 추가 기능입니다(동일한 바이너리에 구현됨). 사용자에 대한 추가 개인 정보(예: 비밀번호 힌트 또는 소셜 네트워크에서 스크랩한 개인 배경 정보)를 사용하면 비밀번호 추측 프로세스 속도를 높이는 데 도움이 될 수 있습니다(John the Ripper 'Single crack' 모드와 유사).
따라서 관련 힌트 또는 여러 힌트(탭으로 구분)를 별도 파일에 제공해야 합니다. 또한 해당 알파 값을 포함하는 알파 파일이 필요합니다(한 줄에 탭으로 구분). 알파 값은 제공된 힌트의 영향을 가중치로 부여하는 데 사용됩니다. 중요한 것은 줄의 각 힌트에 대해 알파 파일에 알파가 지정되어야 한다는 것입니다. 이러한 알파는 줄당 힌트와 동일한 순서여야 합니다.
예를 들어, 비밀번호 "Mary'sPW2305"를 추측하려고 합니다. 이름, 사용자 이름, 생년월일 및 이메일 주소를 포함하는 힌트 파일의 해당 줄은 다음과 같습니다:
mary mary1 19880523 [email protected]
알파 파일은 이름, 사용자 이름, 생년월일 및 이메일 주소에 대한 관련 알파 값을 힌트 파일과 동일한 순서로 정렬해야 합니다. 예를 들어:
1 2 1 2
OMEN+를 사용하려면 enumNG를 호출할 때 힌트 및 알파 파일의 경로를 지정해야 합니다:
$ ./enumNG -H hint-file.txt -a alpha-file.txt
