John the Ripper 를 사용하여 NTLM 해시 크랙하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 강력한 비밀번호 크래킹 도구인 John the Ripper 를 사용하여 NTLM(NT LAN Manager) 해시를 크래킹하는 실질적인 경험을 쌓게 됩니다. NTLM 해시는 Windows 환경에서 사용자 비밀번호를 저장하는 데 일반적으로 사용됩니다. 이러한 해시가 어떻게 크래킹될 수 있는지 이해하는 것은 비밀번호 보안 취약점을 이해하고 더 강력한 보안 조치를 구현하는 데 중요합니다.

먼저 NTLM 해시 추출을 시뮬레이션한 다음, John the Ripper 에 맞게 올바르게 포맷하는 방법을 배웁니다. 이후에는 두 가지 주요 크래킹 방법, 즉 단어 목록을 사용한 사전 공격 (dictionary attacks) 과 증분 모드 (incremental mode) 를 사용한 무차별 대입 공격 (brute-force attacks) 을 사용합니다. 마지막으로 NTLM 해시의 보안 영향과 강력한 비밀번호 정책의 중요성에 대해 생각해 볼 것입니다. 이 실습은 사이버 보안의 기본적인 개념에 대한 실습 중심의 접근 방식을 제공합니다.

시스템에서 NTLM 해시 추출하기

이 단계에서는 NTLM 해시 추출을 시뮬레이션합니다. 실제 시나리오에서는 NTLM 해시를 Windows 시스템의 보안 계정 관리자 (SAM) 데이터베이스, Active Directory 또는 네트워크 트래픽과 같은 다양한 소스에서 추출할 수 있습니다. 이 실습에서는 ~/project 디렉토리에 hashes.txt라는 파일이 이미 제공되어 있으며, 이 파일에는 샘플 NTLM 해시가 포함되어 있습니다.

먼저 hashes.txt 파일의 존재 여부를 확인하고 내용을 살펴보겠습니다. 이 파일에는 여러 줄이 포함되어 있으며, 각 줄은 사용자 항목과 해당 NTLM 해시를 나타냅니다. 형식은 일반적으로 사용자 이름, 사용자 ID, LM 해시 (종종 비어 있거나 기본값), NTLM 해시 및 기타 필드를 포함합니다. 우리는 NTLM 해시 부분에 집중할 것입니다.

ls 명령을 사용하여 현재 디렉토리의 파일을 나열한 다음 cat 명령을 사용하여 hashes.txt의 내용을 표시합니다.

ls -l ~/project/hashes.txt
cat ~/project/hashes.txt

파일 세부 정보와 내용을 보여주는 다음과 유사한 출력이 표시되어야 합니다.

-rw-r--r-- 1 labex labex 300 Mar 10 10:00 /home/labex/project/hashes.txt
user1:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user2:501:aad3b435b51404eeaad3b435b51404ee:209c6174efb4b710:209c6174efb4b710:::
user3:502:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad065adec1000000:::
user4:503:aad3b435b51404eeaad3b435b51404ee:e52cac67419a9a224a30370a31323334:::
user5:504:aad3b435b51404eeaad3b435b51404ee:d41d8cd98f00b204e9800998ecf8427e:::

NTLM 해시는 각 줄에서 콜론으로 구분된 네 번째 필드입니다. 예를 들어, user1의 경우 NTLM 해시는 31d6cfe0d16ae931b73c59d7e0c089c0입니다.

John the Ripper 용 NTLM 해시 형식 지정

이 단계에서는 John the Ripper 용 NTLM 해시를 준비합니다. John the Ripper 는 종종 다양한 해시 형식을 자동으로 처리할 수 있지만, 예상되는 입력을 이해하는 것이 좋습니다. NTLM 해시의 경우 John the Ripper 는 일반적으로 username:NTLM_hash 형식을 예상합니다.

hashes.txt 파일에는 추가 필드가 포함되어 있습니다. 사용자 이름과 NTLM 해시만 추출해야 합니다. 이를 위해 cut 명령을 사용할 수 있습니다. cut 명령은 파일의 각 줄에서 섹션을 추출할 수 있습니다. 구분 기호로 :를 사용하고 첫 번째와 네 번째 필드를 선택합니다.

다음 명령을 실행하여 해시를 추출하고 형식화한 다음, 출력을 ~/project 디렉토리에 ntlm_hashes.txt라는 새 파일로 리디렉션합니다.

cut -d ':' -f 1,4 ~/project/hashes.txt > ~/project/ntlm_hashes.txt
cat ~/project/ntlm_hashes.txt

John the Ripper 에 사용할 준비가 된 형식화된 해시가 표시되어야 합니다.

user1:31d6cfe0d16ae931b73c59d7e0c089c0
user2:209c6174efb4b710
user3:8846f7eaee8fb117ad065adec1000000
user4:e52cac67419a9a224a30370a31323334
user5:d41d8cd98f00b204e9800998ecf8427e

ntlm_hashes.txt 파일에는 이제 사용자 이름과 해당 NTLM 해시만 포함되어 있으며, 이는 John the Ripper 에 이상적인 형식입니다.

단어 목록을 사용하여 NTLM 해시 크랙하기

이 단계에서는 단어 목록 (사전 공격이라고도 함) 을 사용하여 John the Ripper 로 NTLM 해시를 크랙합니다. 단어 목록은 일반적인 비밀번호, 사전 단어 또는 이전에 유출된 비밀번호 목록이 포함된 파일입니다. 이는 약한 비밀번호를 크랙하는 데 가장 효과적인 방법인 경우가 많습니다.

~/project 디렉토리에 wordlist.txt라는 간단한 단어 목록 파일이 제공되었습니다. 먼저 내용을 살펴보겠습니다.

cat ~/project/wordlist.txt

다음과 같은 내용이 표시되어야 합니다.

password
123456
qwerty
admin
test

이제 wordlist.txt를 사용하여 ntlm_hashes.txt의 해시를 크랙하기 위해 John the Ripper 를 사용합니다. john --format=NT --wordlist=wordlist.txt ntlm_hashes.txt 명령은 해시 형식을 NTLM(NT) 으로 지정하고, 사용할 단어 목록 및 해시가 포함된 파일을 지정합니다.

john --format=NT --wordlist=~/project/wordlist.txt ~/project/ntlm_hashes.txt

John the Ripper 가 해시를 크랙하려고 시도합니다. 크랙된 해시를 나타내는 다음과 유사한 출력이 표시될 수 있습니다.

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (user4)
test             (user2)
password         (user1)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% (ETA: 08:00) 3.750g/s 11.25p/s 11.25c/s 11.25C/s 123456...test
Session completed.

크랙 프로세스 후에는 john --show 명령을 사용하여 크랙된 비밀번호를 볼 수 있습니다.

john --show ~/project/ntlm_hashes.txt

출력에는 크랙된 해시와 해당 일반 텍스트 비밀번호가 나열됩니다.

user1:password
user2:test
user4:123456

3 password hashes cracked, 2 left

이는 user1의 비밀번호가 password이고, user2의 비밀번호가 test이며, user4의 비밀번호가 123456임을 보여줍니다. 나머지 두 해시 (user3user5) 는 이 단어 목록으로 크랙되지 않았으며, 이는 해당 비밀번호가 더 강력하거나 간단한 단어 목록에 없음을 나타냅니다.

증분 모드를 사용하여 NTLM 해시 크랙하기

이 단계에서는 무차별 대입 공격을 수행하는 John the Ripper 의 증분 모드를 살펴봅니다. 단어 목록 공격과 달리 증분 모드는 짧고 간단한 조합부터 시작하여 점차 복잡성을 증가시키면서 체계적으로 문자 조합을 시도합니다. 이 방법은 단어 목록에 없는 비밀번호를 크랙하는 데 효과적이지만, 길거나 복잡한 비밀번호의 경우 시간이 매우 오래 걸릴 수 있습니다.

John the Ripper 의 증분 모드는 문자 세트와 규칙을 사용하여 비밀번호를 생성합니다. NTLM 해시의 경우 NT 형식을 지정하고 --incremental 옵션을 사용할 수 있습니다. John the Ripper 에는 내장된 증분 모드 (예: alnum, digits, all) 가 있습니다. 다양한 문자 세트를 시도하는 기본 증분 모드를 사용하겠습니다.

증분 모드를 실행하기 전에 이전 크랙된 해시와의 충돌을 피하기 위해 John the Ripper 세션을 재설정하는 것이 좋습니다.

john --session=reset

이제 ntlm_hashes.txt 파일에 대해 증분 모드로 John the Ripper 를 실행합니다. 이 프로세스는 남아 있는 크랙되지 않은 해시의 복잡성에 따라 몇 분이 걸릴 수 있습니다.

john --format=NT --incremental ~/project/ntlm_hashes.txt

John the Ripper 가 남아 있는 해시를 크랙하려고 시도함에 따라 다음과 유사한 출력이 표시될 수 있습니다.

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Remaining 2 password hashes to crack
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
(user5)
(user3)
2g 0:00:00:00 DONE (2023-10-27 08:05) 100.0% (ETA: 08:05) 2.500g/s 7.500p/s 7.500c/s 7.500C/s
Session completed.

프로세스가 완료된 후 john --show를 사용하여 크랙된 비밀번호를 다시 확인합니다.

john --show ~/project/ntlm_hashes.txt

이제 user3user5를 포함한 모든 해시가 크랙된 것을 볼 수 있습니다. user3의 비밀번호는 admin이고 user5의 비밀번호는 빈 문자열입니다 (콜론 뒤에 "" 또는 아무것도 표시되지 않음).

user1:password
user2:test
user4:123456
user3:admin
user5:

5 password hashes cracked, 0 left

이는 단어 목록에 없을 수 있는 비밀번호, 특히 짧거나 간단한 비밀번호를 크랙하는 데 증분 모드의 효과를 보여줍니다.

NTLM 해시 보안 이해하기

이 단계에서는 NTLM 해시의 보안 영향과 강력한 비밀번호 사용의 중요성에 대해 생각해 보겠습니다. 단어 목록을 사용하여 비교적 간단한 비밀번호를 빠르게 크랙할 수 있고, 증분 모드와 같은 무차별 대입 방법을 사용하면 사전에도 없는 짧은 비밀번호조차 찾을 수 있다는 것을 확인했습니다.

NTLM 해시는 여러 요인으로 인해 취약한 것으로 알려져 있습니다.

  • 솔트 (Salting) 부족: 최신 해싱 알고리즘 (예: bcrypt, scrypt) 과 달리 NTLM 해시는 "솔트"를 사용하지 않습니다. 솔트는 해싱 전에 비밀번호에 추가되는 무작위 데이터로, 동일한 비밀번호라도 각 해시를 고유하게 만듭니다. 솔트가 없으면 공격자는 미리 계산된 테이블 (레인보우 테이블) 을 사용하여 해시를 빠르게 크랙할 수 있습니다.
  • 취약한 해싱 알고리즘: NTLM 은 비교적 오래되고 암호학적으로 약한 해싱 알고리즘인 MD4 를 사용합니다.
  • 대소문자 구분 없음 (LM 해시의 경우, NTLM 은 대소문자 구분): NTLM 자체는 대소문자를 구분하지만, 이전 버전인 LM 해시는 구분하지 않아 혼란을 야기하고 때로는 더 약한 비밀번호 사용 관행으로 이어졌습니다.

NTLM 해시 크랙과 관련된 위험을 완화하기 위해 조직 및 사용자는 다음을 수행해야 합니다.

  • 강력한 비밀번호 정책 시행: 대문자 및 소문자, 숫자, 특수 문자를 조합한 길고 복잡한 비밀번호를 요구합니다. 이는 단어 목록 공격과 무차별 대입 공격을 모두 상당히 어렵게 만듭니다.
  • 다단계 인증 (MFA) 구현: MFA 는 비밀번호 외에 추가적인 보안 계층을 제공하여 공격자가 비밀번호를 크랙하더라도 무단 액세스를 얻기 훨씬 어렵게 만듭니다.
  • 최신 해싱 알고리즘 사용: 새로운 시스템이나 마이그레이션 시에는 bcrypt, scrypt 또는 Argon2 와 같은 최신 솔트 처리 및 적응형 해싱 알고리즘을 선호하십시오.
  • 정기적인 감사 및 모니터링: 의심스러운 로그인 시도를 지속적으로 모니터링하고 비밀번호 강도를 감사하십시오.

NTLM 해시의 취약점을 이해하고 강력한 보안 조치를 구현함으로써 시스템 및 사용자 계정의 보안 태세를 크게 향상시킬 수 있습니다.

요약

이 실습에서는 John the Ripper 를 사용하여 NTLM 해시를 크랙하는 방법을 성공적으로 배웠습니다. NTLM 해시의 구조를 이해하고 John the Ripper 에서 최적으로 사용하기 위해 형식을 지정하는 것부터 시작했습니다. 그런 다음 두 가지 일반적인 비밀번호 크랙 기법인 단어 목록 공격과 증분 (무차별 대입) 공격을 적용하여 약하고 간단한 비밀번호에 대한 효과를 입증했습니다.

또한 솔트 (salting) 부족 및 약한 해싱 알고리즘 사용과 같은 NTLM 해시의 보안 취약점에 대한 통찰력을 얻었습니다. 이러한 이해는 강력한 비밀번호 정책, 다단계 인증 및 민감한 정보를 보호하기 위한 최신 강력한 해싱 알고리즘 채택의 중요성을 이해하는 데 중요합니다. 이러한 실습 경험은 비밀번호 보안 및 일반적인 크랙 방법론에 대한 기초적인 이해를 제공합니다.