Hashcat 에서 무차별 대입 마스크 공격 실행하기

Kali LinuxBeginner
지금 연습하기

소개

Hashcat 을 이용한 마스크 공격 (mask attack) 실습에 오신 것을 환영합니다. Hashcat 은 강력하고 다재다능한 비밀번호 복구 도구로, 사이버 보안 분야에서 비밀번호 강도 테스트 및 분실된 비밀번호 복구에 널리 사용됩니다.

표준 무차별 대입 공격 (brute-force attack) 은 가능한 모든 문자 조합을 시도하여 비밀번호를 추측하려 하는데, 이는 엄청나게 느릴 수 있습니다. 마스크 공격은 더 지능적이고 효율적인 무차별 대입 공격의 한 유형입니다. 비밀번호의 길이 또는 특정 위치에 사용된 문자 유형 (예: "대문자로 시작하고 숫자로 끝나는") 과 같은 구조에 대한 정보가 있을 때 사용됩니다.

이 실습에서는 마스크를 사용하여 비밀번호 구조를 정의하는 방법과 샘플 SHA1 해시를 크랙하기 위해 Hashcat 을 사용하는 방법을 배우게 되며, 이 표적화된 접근 방식의 강력함과 효율성을 보여줄 것입니다.

마스크 공격 개념 이해하기

이 단계에서는 마스크 공격의 기본 개념을 배우게 됩니다. 소개에서 언급했듯이 이 공격은 무차별 대입 공격의 특화된 형태입니다.

비밀번호를 크랙해야 하지만 몇 가지 단서가 있다고 상상해 보세요.

  • 비밀번호가 정확히 6 자라는 것을 알고 있습니다.
  • 첫 번째 문자가 대문자라는 것을 알고 있습니다.
  • 마지막 두 문자가 숫자라는 것을 알고 있습니다.

표준 무차별 대입 공격은 "aaaaaa" 또는 "123456"과 같은 조합을 시도하며 시간을 낭비할 것입니다. 그러나 마스크 공격을 사용하면 크랙 도구에 알려진 패턴에 맞는 조합만 시도하도록 지시하는 "마스크" 또는 템플릿을 정의할 수 있습니다. 위의 예시의 경우 마스크는 [대문자][아무 문자][아무 문자][아무 문자][숫자][숫자]를 지정합니다.

이는 가능한 경우의 수를 극적으로 줄여 크랙 프로세스를 훨씬 더 빠르고 효율적으로 만듭니다. 다음 단계에서는 이러한 강력한 마스크를 만드는 데 Hashcat 이 사용하는 특정 구문을 배우게 됩니다. 이 단계는 순전히 개념적이며 명령은 필요하지 않습니다.

?l ?u ?d ?s 와 같은 내장 문자 세트 학습

이 단계에서는 마스크의 구성 요소인 Hashcat 의 내장 문자 세트에 대해 배우게 됩니다.

Hashcat 은 비밀번호 마스크의 각 위치에 있는 문자 유형을 정의하기 위해 "문자 세트 (charsets)"라고 하는 특수 자리 표시자를 사용합니다. 다음은 가장 일반적인 내장 문자 세트입니다.

  • ?l: 모든 소문자 (a부터 z까지) 를 나타냅니다.
  • ?u: 모든 대문자 (A부터 Z까지) 를 나타냅니다.
  • ?d: 모든 숫자 (0부터 9까지) 를 나타냅니다.
  • ?s: 모든 표준 특수 문자 (예: !@#$%^&*) 를 나타냅니다.
  • ?a: 위의 모든 문자 (?l?u?d?s) 를 나타냅니다.

예를 들어, 비밀번호가 4 자이고 대문자 하나, 소문자 두 개, 숫자 하나로 구성되어 있다는 것을 안다면 마스크는 ?u?l?l?d가 됩니다. 이는 Pass9, Word1, Test0 등과 같은 후보를 생성합니다.

이러한 정의는 Hashcat 의 도움말 메뉴에서 볼 수 있습니다. 마스크와 관련된 도움말 정보를 보려면 터미널에서 다음 명령을 실행하십시오.

hashcat --help | grep "?l"

내장 문자 세트를 나열하는 섹션이 표시되며, 이는 위의 정보를 확인시켜 줍니다.

?l | abcdefghijklmnopqrstuvwxyz              | Lowercase letters

알려진 패턴의 샘플 SHA1 해시 생성

이 단계에서는 다음 단계에서 크랙할 비밀번호에 대한 대상 SHA1 해시를 생성합니다. 비밀번호 공격을 수행하려면 먼저 공격할 해시가 필요합니다.

명확한 패턴에 맞는 비밀번호 LabX99!를 선택해 보겠습니다. 이 비밀번호는 다음과 같은 구조를 가집니다.

  • 첫 번째 문자: 대문자 (L)
  • 두 번째 문자: 소문자 (a)
  • 세 번째 문자: 소문자 (b)
  • 네 번째 문자: 대문자 (X)
  • 다섯 번째 문자: 숫자 (9)
  • 여섯 번째 문자: 숫자 (9)
  • 일곱 번째 문자: 특수 문자 (!)

먼저 이 비밀번호의 SHA1 해시를 생성해 보겠습니다. echo 명령의 -n 플래그는 매우 중요합니다. 이는 줄 바꿈 문자가 문자열에 추가되는 것을 방지하여 결과 해시가 변경되는 것을 막아줍니다.

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

echo -n "LabX99!" | sha1sum

출력은 해시 뒤에 대시가 붙은 SHA1 해시입니다.

0e6cc6531a1a5545942a38a9339571934219c5b0  -

이제 이 해시를 target_hash.txt라는 파일에 저장합니다. 이 파일은 Hashcat 의 입력이 됩니다.

echo "0e6cc6531a1a5545942a38a9339571934219c5b0" > target_hash.txt

cat target_hash.txt 명령으로 파일이 올바르게 생성되었는지 확인할 수 있습니다.

고정 길이 비밀번호에 대한 마스크 공격 명령 구성

이 단계에서는 우리가 가진 정보를 바탕으로 마스크 공격을 수행하기 위한 전체 Hashcat 명령을 구성합니다.

마스크 공격을 위한 Hashcat 명령에는 몇 가지 주요 구성 요소가 있습니다.

  • -m <mode>: 이 플래그는 해시 유형을 지정합니다. MD5, SHA1, bcrypt 와 같은 각 해시 알고리즘에는 고유한 모드 번호가 있습니다.
  • -a <attack_mode>: 이 플래그는 공격 모드를 설정합니다. 마스크 공격의 경우 모드는 항상 3입니다.
  • hash_file: 크랙할 해시가 포함된 파일의 경로입니다.
  • mask: 비밀번호 구조를 정의하는 마스크 패턴입니다.

먼저 SHA1 에 대한 올바른 모드를 찾아야 합니다. Hashcat 의 도움말 출력에서 검색하여 찾을 수 있습니다.

hashcat --help | grep "SHA1"

해시 유형 목록이 표시됩니다. 표준 SHA1 해시의 모드는 100입니다.

  100 | SHA1                                           | Raw Hash

다음으로, 비밀번호 LabX99!에 대한 마스크를 만들어 보겠습니다. 우리가 식별한 구조와 배운 문자 세트를 기반으로 합니다.

  • L -> ?u
  • ab -> ?l?l
  • X -> ?u
  • 99 -> ?d?d
  • ! -> ?s

이들을 결합하면 최종 마스크는 ?u?l?l?u?d?d?s가 됩니다.

이제 전체 명령을 조립할 수 있습니다. 또한 --force 플래그를 추가할 것입니다. 이 플래그는 Hashcat 이 최적이 아닌 환경 (예: VM 에서 CPU 실행) 을 감지하더라도 실행하도록 지시하며, 이 실험실에서는 필수적입니다.

최종 명령 구조는 hashcat -m 100 -a 3 target_hash.txt ?u?l?l?u?d?d?s --force입니다. 다음 단계에서 이 명령을 실행할 것입니다.

마스크 공격 실행 및 결과 확인

이 단계에서는 마스크 공격 명령을 실행하고 Hashcat 이 비밀번호를 성공적으로 크랙했는지 확인합니다.

이미 명령을 구성했습니다. 이제 터미널에서 실행하여 공격을 시작합니다.

hashcat -m 100 -a 3 target_hash.txt ?u?l?l?u?d?d?s --force

Hashcat 이 시작됩니다. 일부 경고가 표시될 수 있지만 --force를 사용했기 때문에 무시해도 안전합니다. 공격이 시작되고 마스크가 매우 구체적이므로 거의 즉시 완료될 것입니다. 출력에는 세션 상태가 표시되며 최종 상태는 Cracked로 표시되어야 합니다.

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: SHA1
Hash.Target......: 0e6cc6531a1a5545942a38a9339571934219c5b0
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Mask.......: ?u?l?l?u?d?d?s [7]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   192.9 kH/s (0.01ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 11881376/11881376 (100.00%)
Rejected.........: 0/11881376 (0.00%)
Restore.Point....: 456976/456976 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1
Candidates.#1....: LuvX98! -> LuvX99#
Hardware.Mon.#1..: Temp: 46c
...

비밀번호가 크랙되면 Hashcat 은 이를 "potfile" (hashcat.potfile) 이라는 파일에 저장합니다. 크랙된 비밀번호를 보려면 원래 명령 인수에 --show 플래그를 사용할 수 있습니다.

결과를 표시하려면 이 명령을 실행합니다.

hashcat -m 100 target_hash.txt --show

출력에는 해시와 크랙된 일반 텍스트 비밀번호가 콜론으로 구분되어 표시됩니다.

0e6cc6531a1a5545942a38a9339571934219c5b0:LabX99!

축하합니다. 마스크 공격을 성공적으로 실행했습니다!

요약

이 실습에서는 Hashcat 을 사용하여 무차별 대입 마스크 공격을 성공적으로 수행했습니다.

다음과 같은 내용을 배웠습니다.

  • 대상 무차별 대입 방식으로서 마스크 공격의 핵심 개념 이해하기.
  • Hashcat 의 내장 문자 세트 (?l, ?u, ?d, ?s) 를 사용하여 비밀번호 구조 정의하기.
  • 대상 비밀번호에 대한 SHA1 해시 생성하기.
  • 올바른 해시 모드, 공격 모드 및 마스크를 사용하여 완전한 Hashcat 명령 구성하기.
  • 공격 실행 및 --show 옵션을 사용하여 크랙된 비밀번호 보기.

마스크 공격은 비밀번호 크랙 및 보안 감사에서 기본적인 기술입니다. 이는 비밀번호 패턴에 대한 적은 정보만으로도 이를 깨는 데 필요한 시간과 노력을 극적으로 줄일 수 있음을 보여줍니다.