Hashcat 일반 오류 문제 해결

Kali LinuxBeginner
지금 연습하기

소개

Hashcat 은 강력하고 다재다능한 비밀번호 복구 도구이지만, 복잡한 소프트웨어이므로 사용자는 처음에는 혼란스러울 수 있는 오류를 겪을 수 있습니다. 이러한 일반적인 문제를 이해하는 것이 Hashcat 을 효과적으로 사용하는 데 중요합니다.

이 실습에서는 Hashcat 작업 중에 발생하는 가장 빈번한 오류 중 일부를 진단하고 수정하는 방법을 배우게 됩니다. 해시 형식, 파일 파싱 및 하드웨어 관리와 관련된 문제를 다룰 것입니다. 이 실습이 끝나면 자체 Hashcat 세션을 문제 해결하는 데 더 능숙해질 것입니다.

'Token length exception' 오류 조사

이 단계에서는 Token length exception 오류를 살펴보겠습니다. 이 오류는 입력 파일의 해시가 지정된 해시 모드 (-m) 에 대해 올바른 길이를 갖지 않을 때 발생합니다. 예를 들어, 표준 MD5 해시는 정확히 32 개의 16 진수 문자로 구성되어야 합니다. Hashcat 이 더 짧거나 긴 줄을 발견하면 이 오류를 보고하고 중지합니다.

먼저 잘못된 해시가 포함된 파일에서 Hashcat 을 실행해 보겠습니다. 이를 위해 hashes_token_length.txt라는 파일을 준비했습니다. 해시 모드 0(MD5 에 해당) 을 사용하겠습니다.

터미널에서 다음 명령을 실행하십시오.

hashcat -m 0 -a 0 hashes_token_length.txt wordlist.txt

다음과 유사한 오류 메시지가 표시됩니다.

hashcat (v6.2.x) starting

...

* Token length exception: 1/2 hashes
  This error happens if the hashes you are trying to crack do not meet the length requirements of the selected hash-mode.
  Please make sure you have specified the correct hash-mode and that all of your hashes are valid.
  ...
* Startup failed: Invalid hash-length

메시지는 명확하게 "Token length exception"을 나타냅니다. 이를 해결하려면 잘못된 해시를 식별하여 수정하거나 파일에서 제거해야 합니다. 잘못된 길이의 줄을 찾는 간단한 방법은 awk와 같은 도구를 사용하는 것입니다. MD5 해시 (32 자) 의 경우 길이가 32 가 아닌 모든 줄을 확인할 수 있습니다.

파일을 검사하려면 이 명령을 실행하십시오.

awk 'length != 32' hashes_token_length.txt

출력에는 문제가 되는 줄이 표시됩니다.

5d41402abc4b2a76b9719d911017c59

이제 잘못된 해시를 찾았으므로 수정된 파일을 만들 수 있습니다. 유효한 해시만 포함된 hashes_corrected.txt라는 새 파일을 만들어 보겠습니다.

awk 'length == 32' hashes_token_length.txt > hashes_corrected.txt

이제 수정된 파일로 Hashcat 을 성공적으로 실행할 수 있습니다.

hashcat -m 0 -a 0 hashes_corrected.txt wordlist.txt

이번에는 Hashcat 이 오류 없이 시작됩니다.

'No hashes loaded' 오류 해결

이 단계에서는 No hashes loaded 오류를 해결해 보겠습니다. 이것은 가장 흔한 문제 중 하나이며, 일반적으로 Hashcat 이 선택한 해시 모드에 대해 해시 파일의 어떤 줄도 유효한 해시로 파싱하지 못했음을 의미합니다. 이는 잘못된 해시 모드, 손상된 파일 또는 잘못된 파일 형식 때문일 수 있습니다.

hashes_no_load.txt라는 파일이 있습니다. 이 파일을 해시 모드 10 (md5(pass.salt)) 을 사용하여 크랙해 보겠습니다. 이 모드는 해시와 솔트가 콜론 (:) 으로 구분되어야 하지만, 우리 파일에는 일반 MD5 해시만 포함되어 있습니다.

다음 명령을 실행하십시오.

hashcat -m 10 -a 0 hashes_no_load.txt wordlist.txt

Hashcat 이 시작되지만 즉시 해시가 로드되지 않았음을 나타내는 상태 메시지와 함께 종료됩니다.

...
Hashes: 2 digests; 2 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Zero-Byte
* Precompute-Init
* Precompute-Merkle-Demgard
* Meet-In-The-Middle
* Early-Skip
* Not-Iterated
* Not-Salted
* Raw-Hash

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature monitoring is disabled.

No hashes loaded.

Started: ...
Stopped: ...

핵심 줄은 No hashes loaded입니다. 이는 해시 파일의 내용과 지정한 해시 모드 간에 불일치가 있음을 알려줍니다. hashes_no_load.txt 파일에는 모드 0에 해당하는 일반 MD5 해시가 포함되어 있습니다.

이를 해결하려면 올바른 해시 모드를 제공해야 합니다. -m 0으로 명령을 다시 실행해 보겠습니다.

hashcat -m 0 -a 0 hashes_no_load.txt wordlist.txt

이번에는 Hashcat 이 파일에서 유효한 해시를 올바르게 로드하고 크랙 세션을 시작합니다. "not_a_hash" 줄은 모드 0 에 대한 유효한 해시처럼 보이지 않기 때문에 무시됩니다.

...
Hashes: 1 digests; 1 unique digests, 1 unique salts
...
Session..........: hashcat
Status...........: Running
...

'Device temperature abort' 경고 처리

이 단계에서는 온도 관련 문제를 처리하는 방법을 논의하겠습니다. GPU 와 같은 강력한 하드웨어에서 실행할 때 Hashcat 은 많은 열을 발생시킬 수 있습니다. 하드웨어 손상을 방지하기 위해 Hashcat 은 장치 온도를 모니터링하며 온도가 너무 높아지면 세션을 자동으로 일시 중지하거나 중단합니다.

LabEx 가상 환경에서는 물리적 GPU 에 액세스할 수 없으므로 이 오류를 직접 트리거할 수 없습니다. 그러나 실제 사용 시 이해해야 할 중요한 기능입니다. 오류 메시지는 Device #1 temperature abort trigger reached와 유사하게 표시됩니다.

Hashcat 은 이 동작을 관리하기 위한 명령줄 옵션을 제공합니다.

  • --gpu-temp-abort=X: GPU 가 온도 X(섭씨) 에 도달하면 세션을 중단합니다.
  • --gpu-temp-retain=Y: GPU 가 온도 Y(섭씨) 에 도달하면 세션을 일시 중지하고 냉각되면 다시 시작합니다.

이러한 플래그를 사용하여 하드웨어 및 냉각 설정에 맞는 사용자 지정 온도 제한을 설정할 수 있습니다. 예를 들어, 온도가 90°C 를 초과하면 Hashcat 이 중지하도록 하려면 명령에 --gpu-temp-abort=90을 추가합니다.

이 플래그를 사용하여 명령을 실행하여 사용 방법을 살펴보겠습니다. 설정 중에 생성된 valid_hash.txt 파일을 사용하겠습니다.

hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --gpu-temp-abort=90

명령은 평소와 같이 실행되지만 Hashcat 은 이제 사용자 지정 온도 제한으로 구성됩니다.

경우에 따라 하드웨어 모니터링이 잘못되었거나 지원되지 않아 잘못된 온도 판독값과 불필요한 종료가 발생할 수 있습니다. 냉각이 적절하고 온도 판독값이 잘못되었다고 확신하는 경우 --hwmon-disable 플래그를 사용하여 하드웨어 모니터링 기능을 완전히 비활성화할 수 있습니다.

hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --hwmon-disable

이 옵션은 중요한 안전 기능을 비활성화하므로 주의해서 사용하십시오.

단어 목록 또는 규칙에서 'Line-length exception' 수정

이 단계에서는 Line-length exception 오류를 해결해 보겠습니다. 이 오류는 1 단계의 토큰 길이 예외와 유사하지만, 해시 파일이 아닌 단어 목록 또는 규칙 파일과 같은 입력 파일에 적용됩니다. Hashcat 에는 이러한 파일에서 읽는 줄에 대한 내부 버퍼가 있으며, 줄이 이 제한 (일반적으로 256 바이트) 을 초과하면 이 오류가 발생합니다.

이는 손상된 단어 목록이나 잘못 생성된 규칙 파일에서 발생할 수 있습니다. wordlist_long_line.txt라는 파일에 매우 긴 줄이 하나 포함되어 있습니다.

valid_hash.txt에 대한 크랙 세션에서 이 파일을 사용해 보겠습니다.

hashcat -m 0 -a 0 valid_hash.txt wordlist_long_line.txt

단어 목록 파일을 가리키는 오류 메시지가 표시됩니다.

...
ATTENTION!
The wordlist 'wordlist_long_line.txt' contains a line that is larger than 256 bytes.
The line is ignored.
To fix this, remove the line from the wordlist.
...

Hashcat 이 이 경고 후에 계속 진행될 수 있지만, 입력 파일을 정리하는 것이 가장 좋습니다. awk와 같은 도구를 사용하여 과도한 줄을 찾고 제거할 수 있습니다. 다음 명령은 파일에서 256 바이트보다 긴 모든 줄을 출력합니다.

awk 'length > 256' wordlist_long_line.txt

그러면 문제가 되는 긴 줄이 표시됩니다. 문제를 해결하려면 256 바이트보다 긴 줄을 제외한 새롭고 깨끗한 단어 목록을 만들 수 있습니다.

awk 'length <= 256' wordlist_long_line.txt > wordlist_corrected.txt

이제 wordlist_corrected.txt 파일을 오류 없이 사용할 수 있습니다.

hashcat -m 0 -a 0 valid_hash.txt wordlist_corrected.txt

세션이 이제 줄 길이 경고 없이 깔끔하게 시작됩니다.

'Separator not found' 오류 이해 및 해결

마지막 단계에서는 Separator not found 오류를 다루겠습니다. 이 오류는 콜론 (:) 과 같은 특정 구분 기호가 있는 형식을 예상하는 해시 모드를 사용하지만 해시 파일의 줄에 해당 구분 기호가 포함되지 않은 경우 발생합니다. user:password 또는 hash:salt와 같은 많은 해시 형식은 이 구조에 의존합니다.

이 예시에서는 NetNTLMv1 에 사용되는 해시 모드 5500을 사용하겠습니다. 이 형식은 일반적으로 USER::DOMAIN:LM_HASH:NT_HASH:CHALLENGE와 같습니다. 콜론은 필수 구분 기호입니다. hashes_no_separator.txt라는 파일에는 해시 문자열이 포함되어 있지만 필요한 구분 기호가 누락되었습니다.

이 파일로 Hashcat 을 실행해 보겠습니다.

hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt

Hashcat 이 실패하고 Separator not found 오류가 표시됩니다. 또한 올바른 형식의 예시도 보여줍니다.

...
* Separator unmatched: 1/1 hashes
  This error happens if the hashes you are trying to crack are not in the correct format.
  Please read https://hashcat.net/wiki/doku.php?id=example_hashes to learn more about the correct format.
  ...
* Startup failed: Invalid hash-format

오류 메시지는 해시에 필요한 구분 기호가 누락되었음을 나타냅니다. 이 문제를 해결하려면 예상 형식과 일치하도록 해시 파일을 편집해야 합니다. 사용자 이름이 labex이고 도메인이 corp이며 챌린지가 1122334455667788이라고 가정해 보겠습니다. 올바른 형식은 labex::corp:<the_hash>:1122334455667788이 됩니다.

nano 편집기로 파일을 열어 수정해 보겠습니다.

nano hashes_no_separator.txt

파일 내용을 다음에서 변경합니다.
U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935

<the_hash>를 원래 해시 문자열로 바꾸고 다음으로 변경합니다.
labex::corp:U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935:1122334455667788

Ctrl+X를 누른 다음 Y를 누르고 Enter를 눌러 파일을 저장하고 nano를 종료합니다.

이제 Hashcat 명령을 다시 실행합니다.

hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt

올바른 형식으로 Hashcat 이 이제 해시를 수락하고 크랙 세션을 올바르게 시작합니다. 이는 사용 중인 특정 해시 모드에 대해 해시 파일이 올바르게 형식화되었는지 확인하는 것의 중요성을 보여줍니다.

요약

이 실습에서는 Hashcat 사용 시 가장 흔하게 발생하는 다섯 가지 오류를 진단하고 해결하는 방법을 배웠습니다.

다음 내용을 다루었습니다.

  • Token length exception: 지정된 모드에 대해 해시 길이가 잘못된 경우 발생합니다.
  • No hashes loaded: 해시 파일 형식과 선택한 해시 모드 간의 불일치로 인해 발생합니다.
  • Device temperature abort: 온도 제어 플래그로 관리할 수 있는 하드웨어 안전 기능입니다.
  • Line-length exception: 단어 목록 또는 규칙 파일의 과도한 줄로 인해 트리거됩니다.
  • Separator not found: 해시 파일에 누락된 구분 기호를 해시 형식이 요구하는 경우 발생합니다.

이러한 오류의 원인을 이해하고 수정 방법을 알면 Hashcat 을 더 효율적으로 사용하고 일반적인 함정을 피할 수 있습니다. 핵심은 항상 입력 파일을 검증하고 특정 작업에 올바른 옵션을 사용하고 있는지 확인하는 것입니다.