Hashcat 사전 공격

LinuxBeginner
지금 연습하기

소개

Hashcat 은 강력하고 다재다능한 비밀번호 복구 도구로, 사이버 보안 분야에서 비밀번호 강도를 테스트하고 분실된 비밀번호를 복구하는 데 널리 사용됩니다. 이 도구는 수많은 해싱 알고리즘과 여러 공격 모드를 지원합니다.

본 실습에서는 가장 기본적인 비밀번호 크래킹 기술 중 하나인 사전 공격 (dictionary attack) 에 중점을 둘 것입니다. 사용자 지정 단어 목록 (wordlist) 을 사용하여 Hashcat 의 "Straight" 공격 모드 (-a 0) 를 사용하여 간단한 MD5 해시를 크래킹하는 방법을 배우게 됩니다. 이 실습 경험은 비밀번호 크래킹 작동 방식에 대한 견고한 기초를 제공할 것입니다.

사전 공격 (-a 0) 개념 이해하기

이 단계에서는 사전 공격 (dictionary attack) 과 Hashcat 에서 이 공격이 어떻게 구현되는지 알아봅니다.

사전 공격은 '사전 (dictionary)' 또는 '단어 목록 (wordlist)'이라고 불리는 목록에 있는 모든 단어를 비밀번호로 체계적으로 입력하여 비밀번호로 보호되는 시스템에 침투하는 방법입니다. 이는 특히 약하거나 흔한 비밀번호에 대해 간단하면서도 효과적인 기술입니다.

Hashcat 은 이 방법을 "Straight" 공격이라고 부르며, 공격 모드 번호 0이 할당됩니다. -a 옵션을 사용하여 공격 모드를 지정합니다.

hashcat --help 명령어를 사용하여 공격 모드 0의 예시를 살펴보겠습니다. 특정 줄을 찾기 위해 출력을 grep으로 파이프할 수 있습니다.

hashcat --help | grep -- "-a 0"

다음과 같은 출력을 보게 될 것이며, 이는 -a 0을 사용한 사전 공격의 예시를 보여줍니다:

  Wordlist         | $P$   | hashcat -a 0 -m 400 example400.hash example.dict
  Wordlist + Rules | MD5   | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule

이를 통해 사전 공격을 수행하려면 Hashcat 명령어에서 -a 0 옵션을 사용해야 하며, 여기서 -a 0은 Straight (사전) 공격 모드를 나타낸다는 것을 확인할 수 있습니다.

대상 해시 파일 및 간단한 단어 목록 준비

이 단계에서는 사전 공격에 필요한 두 가지 필수 파일, 즉 대상 해시가 포함된 파일과 단어 목록 파일을 준비합니다. 모든 작업은 ~/project 디렉토리에서 수행됩니다.

먼저, 대상 해시를 저장할 파일을 생성하겠습니다. 문자열 "password123"의 MD5 해시인 482c811da5d5b4bc6d497ffa98491e38을 사용하겠습니다.

echo 명령어를 사용하여 이 해시를 포함하는 my_hash.txt라는 파일을 생성합니다.

echo "482c811da5d5b4bc6d497ffa98491e38" > my_hash.txt

다음으로, my_wordlist.txt라는 간단한 단어 목록 파일을 생성합니다. 실제 단어 목록에는 수백만 개의 단어가 포함될 수 있지만, 이 실습을 위해 정답 비밀번호가 포함된 작은 목록을 생성하겠습니다.

echo "password" > my_wordlist.txt
echo "123456" >> my_wordlist.txt
echo "password123" >> my_wordlist.txt
echo "qwerty" >> my_wordlist.txt

이제 cat 명령어를 사용하여 두 파일의 내용을 확인합니다.

먼저 해시 파일을 확인합니다:

cat my_hash.txt

예상 출력:

482c811da5d5b4bc6d497ffa98491e38

그런 다음 단어 목록 파일을 확인합니다:

cat my_wordlist.txt

예상 출력:

password
123456
password123
qwerty

이제 공격을 수행할 준비가 된 대상 해시와 단어 목록을 갖추었습니다.

MD5 해시에 대한 사전 공격 실행

이 단계에서는 준비한 MD5 해시에 대해 사전 공격을 실행합니다.

이를 위해 공격 모드, 해시 유형, 해시 파일 및 단어 목록 파일을 지정하는 Hashcat 명령어를 구성해야 합니다.

명령어 구조는 다음과 같습니다: hashcat [옵션] [해시_파일] [단어_목록_파일]

사용할 옵션은 다음과 같습니다:

  • -a 0: Straight (사전) 공격 모드를 지정합니다.
  • -m 0: 해시 유형을 지정합니다. 0은 MD5 에 해당합니다. 해시 유형을 정확히 일치시키는 것이 중요합니다.
  • --force: 이 옵션은 가상화 환경이나 CPU 에서 실행할 때 특정 경고를 우회하고 Hashcat 실행을 강제하기 위해 종종 필요합니다.

이제 공격을 시작하기 위해 다음 명령어를 실행합니다:

hashcat -a 0 -m 0 my_hash.txt my_wordlist.txt --force

Hashcat 이 시작되고 상태 화면이 표시됩니다. 단어 목록이 매우 작기 때문에 프로세스는 거의 즉시 완료됩니다. 출력은 다음과 유사할 것입니다 (시작 시간과 같은 일부 세부 정보는 다를 수 있습니다):

hashcat (v6.2.6) starting

... (일부 초기 경고 및 정보) ...

Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38
Time.Started.....: Sun Nov 19 10:30:00 2023 (0 secs)
Time.Estimated...: Sun Nov 19 10:30:00 2023 (0 secs)
Guess.Base.......: File (my_wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#*.........:   133.7 kH/s (0.02ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#*...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#*....: password123 -> qwerty
Hardware.Mon.#*..: Temp: 45c

Started: ...
Stopped: ...

Status...........: Cracked 줄은 비밀번호가 단어 목록에서 성공적으로 발견되었음을 나타냅니다.

출력 상태 및 키워드 분석

이 단계에서는 이전 단계의 출력을 자세히 살펴보고 그 의미를 이해합니다. Hashcat 이 해시를 성공적으로 크랙하면 결과를 "potfile"이라는 파일에 저장하고 화면에 성공을 보고합니다.

상태 출력에서 주요 줄들을 분석해 보겠습니다:

  • Status...........: Cracked: 이것이 가장 중요한 지표입니다. 하나 이상의 해시가 성공적으로 크랙되었음을 확인합니다. 만약 Exhausted라고 표시되었다면, Hashcat 이 단어 목록의 모든 단어를 시도했지만 성공하지 못했음을 의미합니다.
  • Hash.Type........: MD5: 대상이 된 해시 알고리즘을 확인합니다.
  • Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38: 공격 대상이 된 해시를 보여줍니다.
  • Guess.Base.......: File (my_wordlist.txt): 비밀번호 후보의 출처가 우리의 단어 목록 파일임을 나타냅니다.
  • Recovered........: 1/1 (100.00%) Digests: 제공된 총 1 개의 해시 중 1 개가 복구되었음을 보여줍니다.
  • Progress.........: 4/4 (100.00%): 단어 목록의 4 개 단어가 모두 테스트되었음을 나타냅니다.

성공적으로 크랙한 후, Hashcat 은 크랙된 해시와 그에 해당하는 평문 비밀번호를 자동으로 potfile 에 저장합니다. 이 파일의 기본 위치는 ~/.local/share/hashcat/hashcat.potfile입니다. 이는 향후 동일한 해시를 다시 크랙하는 데 시간을 낭비하는 것을 방지합니다.

다음 단계에서 더 직접적인 Hashcat 기능을 사용할 것이지만, 목록을 나열하여 potfile 이 생성되었는지 확인할 수 있습니다.

'--show' 옵션을 사용하여 크랙된 비밀번호 확인

이 단계에서는 편리한 Hashcat 옵션을 사용하여 크랙된 비밀번호를 보는 방법을 배웁니다.

potfile 을 직접 들여다볼 수도 있지만, Hashcat 은 주어진 파일 내 해시에 대해 크랙된 비밀번호를 표시하기 위해 --show 옵션을 제공합니다. 이 옵션은 해시 파일과 potfile 을 교차 참조하여 일치하는 항목을 출력합니다.

이 옵션을 사용하려면 공격 시와 마찬가지로 원본 해시 파일과 해시 유형을 지정해야 합니다.

다음 명령어를 실행합니다:

hashcat -m 0 my_hash.txt --show

Hashcat 은 즉시 해시:비밀번호 형식으로 결과를 출력합니다.

482c811da5d5b4bc6d497ffa98491e38:password123

이 출력은 원본 MD5 해시와 그에 해당하는 평문 비밀번호인 "password123"을 명확하게 보여줍니다.

비교를 위해 potfile 의 원시 내용도 볼 수 있습니다. 이 역시 동일한 정보를 보여주지만, 특정 해시를 확인하고 싶을 때는 --show가 더 깔끔한 경우가 많습니다.

cat ~/.local/share/hashcat/hashcat.potfile

예상 출력:

482c811da5d5b4bc6d497ffa98491e38:password123

--show를 사용하는 것은 Hashcat 데이터베이스에서 이미 크랙된 비밀번호를 확인하는 표준적인 방법입니다.

요약

본 실습에서는 Hashcat 을 사용한 사전 공격 (dictionary attack) 의 기본 사항을 배웠습니다. 작고 맞춤 제작된 단어 목록에서 후보들을 테스트하여 MD5 해시를 성공적으로 크랙했습니다.

다음과 같은 핵심 기술에 대한 실습 경험을 쌓았습니다:

  • 사전 공격의 개념과 Hashcat 의 스트레이트 공격 모드 (-a 0) 이해.
  • 대상 해시 파일과 단어 목록 파일 준비.
  • 올바른 공격 모드 (-a 0) 와 해시 유형 (-m 0) 을 지정하여 MD5 해시에 대한 공격 실행.
  • 상태 화면을 분석하여 성공적인 크랙 확인.
  • --show 옵션을 사용하여 크랙된 비밀번호 보기.

이 지식은 보다 진보된 비밀번호 크래킹 기술을 탐구하고 강력하고 고유한 비밀번호 사용의 중요성을 이해하는 데 중요한 기반이 됩니다.