hashcat 개요

  • 해시를 크래킹해주는 툴이다.
  • JWT의 서명용 시크릿 키를 찾아주는 용도로도 사용할 수 있다.
  • 알려진 시크릿 키 리스트를 사용해서 브루트포싱할 수 있다. 예를 들면, JWT 시크릿 키 리스트를 사용해서 브루트포싱할 수 있다.
  • 서명값이 일치하는 것이 있으면 출력해준다.

필요한 실행환경

  • hashcat을 돌리기 위해서는 GPU 프로그래밍 언어 실행환경이 필요하다. 따러서 GPU 하드웨어가 달린 서버나 PC위에서 돌려야 한다.
  • OpenCL, HIP, CUDA 중에서 적어도 하나를 실행할 수 있는 환경이 필요하다.
  • OpenCL을 위키피디아에서 찾아보면 OpenCL(Open Computing Language)은 개방형 범용 병렬 컴퓨팅 프레임워크라고 설명되어 있다.
  • 속도를 높이기 위해서 병렬처리를 사용해야 하는데 그 때 필요한 것으로 생각된다.
  • CUDA를 돌리기 위해서는 NVIDIA GPU가 필요하고, HIP은 CUDA와 같은 용도로 AMD에서 만든 것이다.
  • 만약 이런 실행환경 없이 hashcat을 실행하면 다음과 같은 에러 메세지가 출력된다.
ATTENTION! No OpenCL, HIP or CUDA installation found.

You are probably missing the CUDA, HIP or OpenCL runtime installation.

* AMD GPUs on Linux require this driver:
  "AMD ROCm" (4.5 or later)
* Intel CPUs require this runtime:
  "OpenCL Runtime for Intel Core and Intel Xeon Processors" (16.1.1 or later)
* NVIDIA GPUs require this runtime and/or driver (both):
  "NVIDIA Driver" (440.64 or later)
  "CUDA Toolkit" (9.0 or later)

Started: Thu Feb  9 01:51:23 2023
Stopped: Thu Feb  9 01:51:23 2023

설치

  • 깃 허브 페이지를 보면, 다운로드 가능한 바이너리 파일을 제공해주고 있다. 그 것을 바로 사용하면 된다.
  • 나는 Python의 pip을 사용해서 설치하였다.
pip install hashcat

기동 테스트

hashcat
Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

Try --help for more help.

간단한 사용법

  • 다음 명령으로 JWT의 시크릿 키를 얻을 수 있는지 테스트할 수 있다.
hashcat -a 0 -m 16500 <jwt> <wordlist>
  • -a 옵션은 --attack-mode를 가리킨다.
- [ Attack Modes ] -

  # | Mode
 ===+======
  0 | Straight
  1 | Combination
  3 | Brute-force
  6 | Hybrid Wordlist + Mask
  7 | Hybrid Mask + Wordlist
  9 | Association

  • -m 옵션은 --hash-type을 가리킨다.
  • 여러가지 선택가능한 해시 타입이 있는 가운데, 16500은 JWT를 의미한다.
 16500 | JWT (JSON Web Token)                                | Network Protocol

참고 링크

  • https://pypi.org/project/hashcat/
  • https://portswigger.net/web-security/jwt