jwt-cracker를 이용한 secret key crack

JWT는 내용에 대한 서명을 내용 뒤에 붙여주어 위변조를 감지할 수 있습니다. 간혹 secret이 간단하게 설정된 경우에는 secret을 찾고 변조된 JWT를 만들 수 있는데, 이를 인증에 사용하거나 중요 로직에서 데이터를 읽어 사용하는 경우 큰 보안적인 리스크를 가지게됩니다.

보통은 Key Confusion이나 Signature Exclusion, 중요정보 포함, 시그니쳐 검증 체크를 중점적으로 보는데요, 뒤적뒤적하다가 cracking 툴 괜찮은걸 찾아서 포스팅합니다.

그냥 돌려놓으면 되서 점검 포인트 하나 늘리는거 치곤 리소스 안들어서 좋습니다.

Installation

node 패키지로 npm으로 설치 가능합니다.

npm install --global jwt-cracker

Usage

jwt-cracker version 1.0.5

  Usage:
    jwt-cracker <token> [<alphabet>] [<maxLength>]

    token       the full HS256 jwt token to crack
    alphabet    the alphabet to use for the brute force (default: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)
    maxLength   the max length of the string generated during the brute force (default: 12)

옵션이랄껀 없고 인자값으로 token만 넣어줘도 됩니다. 기본값은 알파벳 대소문자+숫자 조합으로 12글자까지 테스트를 진행하게 되고, 임의로 설정해서 조정해줄 수 있습니다.

e.g

jwt-cracker eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXQiOiIxMjM0IiwibmFtZSI6IkhBSFdVTCIsImlhdCI6MX0.1S20CQMgCwEaRjycItJgkDIvGtHjQQR_baynfi8cHQI

Test Case

secret is “hwul”

jwt-cracker eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXQiOiIxMjM0IiwibmFtZSI6IkhBSFdVTCIsImlhdCI6MX0.1S20CQMgCwEaRjycItJgkDIvGtHjQQR_baynfi8cHQI abcdefghijklmnopqrstuvwxyz 4
# Attempts: 100000
# Attempts: 200000
# SECRET FOUND: hwul
# Time taken (sec): 2.111
# Attempts: 225714