Hashcat 사용법

대부분의 정상적으로 작성된 시스템, 애플리케이션은 기밀성을 필요로 하는 데이터를 암호화 알고리즘, 또는 Hashing 을 이용하여 저장한다. 이렇게 함으로써 정보를 평문으로 저장하지 않고, man-in-the-middle(MITM) 과 같은 공격에 의해 도중에 데이터를 탈취당해도 원본 데이터를 숨길 수 있다.
패스워드 크래킹은 브루트 포싱, 사전 공격 방식을 통해 암호화, 해싱된 데이터의 원본 데이터를 복호화하는 기법이다. 이 글에서는 잘 알려진 패스워드 크래킹 툴 중 하나인 Hashcat 의 사용법에 대해 알아보자.
설치
Windows
윈도우 환경에서는 Hashcat 공식 사이트에서 실행 파일을 다운로드하여 이용할 수 있다.
공식 사이트 웹페이지 최상단의 hascht binaries 의 Download 버튼을 클릭하여 최신 버전을 다운로드하거나, 페이지 하단의 Download older versions 에서 원하는 버전의 바이너리를 다운로드할 수 있다.

다운로드한 zip 파일 내 hashcat.exe
을 실행하면 Hashcat 기능을 이용할 수 있다.

Linux
리눅스 환경에서 다음과 같은 명령어로 Hashcat 을 설치할 수 있다.
$ sudo apt install hashcat
설치에 성공하면 --help
옵션으로 설치 여부를 확인할 수 있다.
$ hashcat --help
hashcat (v6.2.6) starting in help mode
Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...
- [ Options ] -
...
Hashcat 사용법
해시 모드
Hashcat 을 사용하기 위해서는 -m
옵션을 통해 크래킹할 입력 값의 해시, 암호화 타입을 지정해야 한다.
대부분의 해시 알고리즘은 각각 고정된 크기의 결과 값을 가진다. 생성된 데이터의 길이를 이용하여 어떤 알고리즘에 의해 생성된 데이터인지 유추할 수 있다. 예를 들어 MD5, NTLM 알고리즘에 의해 생성된 값은 32 개의 문자로 이루어진다.
아래 표는 Hashcat 에서 지원하는 해시 모드의 일부를 보여준다. 상세한 테이블은 --help
명령어로 확인하거나 웹사이트 를 참고하자.
# | Name | Category |
---|---|---|
900 | MD4 | Raw Hash |
0 | MD5 | Raw Hash |
100 | SHA1 | Raw Hash |
1300 | SHA2-224 | Raw Hash |
1400 | SHA2-256 | Raw Hash |
10800 | SHA2-384 | Raw Hash |
1700 | SHA2-512 | Raw Hash |
17300 | SHA3-224 | Raw Hash |
17400 | SHA3-256 | Raw Hash |
17500 | SHA3-384 | Raw Hash |
17600 | SHA3-512 | Raw Hash |
수집한 해시 값이 어떤 타입인지 모를 때는 hashid
를 이용하면 편하게 알 수 있다.
$ ./hashid.py '$P$8ohUJ.1sdFw09/bMaAQPTGDNi2BIUt1'
Analyzing '$P$8ohUJ.1sdFw09/bMaAQPTGDNi2BIUt1'
[+] Wordpress ≥ v2.6.2
[+] Joomla ≥ v2.5.18
[+] PHPass' Portable Hash
공격 모드
-a
옵션으로 지정하는 공격 모드는 크래킹하는 방식을 지정한다. 예를 들어 가장 일반적인 -a 0
은 지정된 wordlist 파일을 이용하여 dictionary attack 을 시도하며, -a 3
은 무차별 대입 공격을 시도한다.
# | Mode | |
---|---|---|
0 | Straight | dictionary attack, wordlist attack |
1 | Combination | 여러 개의 wordlist 파일의 단어들을 조합하여 생성된 단어로 wordlist 공격 수행 |
3 | Brute-force | 무차별 대입 공격 |
6 | Hybrid Wordlist + Mask | wordlist 와 mask 를 혼합한 사전 공격. |
7 | Hybrid Mask + Wordlist | wordlist 와 mask 를 혼합한 사전 공격. |
9 | Association | 하나의 word 에 대해 하나의 hash 를 시도. |
✔ Tips
dictionary 공격에 사용할 wordlist는 구글링하면 많이 찾을 수 있다. 유명한 wordlist 에는 SecLists 의 rockyou.txt 파일이 있다.
Mask Attack
mask 는 공격 모드에서 6, 또는 7을 선택할 경우 사용할 mask 를 지정할 수 있다. 예를 들어 mask 값으로 ?l?l?l?l?l?l
을 사용하면 원본 데이터가 6글자의 ASCII 소문자로 가정하여 복호화를 시도한다.
Placeholder | Meaning |
---|---|
?l | ASCII 소문자 (a-z) |
?u | ASCII 대문자 (A-Z) |
?d | 숫자 (0-9) |
?h | 0123456789abcdef |
?H | 0123456789ABCDEF |
?s | 특수문자 («스페이스»!"#$%&'()*+,-./:;<=>?@[]^_`{ |
?a | ?l?u?d?s |
?b | 바이너리 값. 0x00 - 0xff |
예제
아래 명령어는 iloveyou
문자열을 sha256 알고리즘으로 계산하여 sha256_hash
라는 파일에 저장 후, hashcat
으로 크래킹하는 예제 명령어이다. wordlist 로는 Seclists 의 rockyou.txt
파일을 사용했다.
$ echo -n 'iloveyou' | sha256sum | cut -f1 -d' ' > sha256_hash
$ hashcat -a 0 -m 1400 sha256_hash '/home/kali/Desktop/SecLists-master/Passwords/Leaked-Databases/rockyou.txt'
hashcat (v6.2.6) starting
OpenCL API (OpenCL 3.0 PoCL 3.1+debian Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==================================================================================================================================================
* Device #1: pthread-sandybridge-Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz, 2910/5885 MB (1024 MB allocatable), 4MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Optimizers applied:
* Zero-Byte
* Early-Skip
* Not-Salted
* Not-Iterated
* Single-Hash
* Single-Salt
* Raw-Hash
ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.
Watchdog: Temperature abort trigger set to 90c
Host memory required for this attack: 1 MB
Dictionary cache hit:
* Filename..: /home/kali/Desktop/SecLists-master/Passwords/Leaked-Databases/rockyou.txt
* Passwords.: 14344384
* Bytes.....: 139921497
* Keyspace..: 14344384
e4ad93ca07acb8d908a3aa41e920ea4f4ef4f26e7f86cf8291c5db289780a5ae:iloveyou
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 1400 (SHA2-256)
Hash.Target......: e4ad93ca07acb8d908a3aa41e920ea4f4ef4f26e7f86cf8291c...80a5ae
Time.Started.....: Sun Jun 9 11:39:59 2024 (0 secs)
Time.Estimated...: Sun Jun 9 11:39:59 2024 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/home/kali/Desktop/SecLists-master/Passwords/Leaked-Databases/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 2241.6 kH/s (0.47ms) @ Accel:512 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 2048/14344384 (0.01%)
Rejected.........: 0/2048 (0.00%)
Restore.Point....: 0/14344384 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: 123456 -> lovers1
Hardware.Mon.#1..: Util: 25%
Started: Sun Jun 9 11:39:43 2024
Stopped: Sun Jun 9 11:40:01 2024
e4ad93ca07acb8d908a3aa41e920ea4f4ef4f26e7f86cf8291c5db289780a5ae
sha256 해시 값의 본래 값인 iloveyou
로 크래킹되는 것을 확인할 수 있다.