Hashcat 사용법

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 로는 Seclistsrockyou.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 로 크래킹되는 것을 확인할 수 있다.