Hashcat 해싱 기초

LinuxBeginner
지금 연습하기

소개

해싱 (Hashing) 과 비밀번호 크래킹 (Password Cracking) 의 세계에 오신 것을 환영합니다! 해싱은 데이터 무결성을 검증하고 비밀번호를 안전하게 저장하는 데 사용되는 사이버 보안의 기본 개념입니다. 해시 함수는 입력 (예: 비밀번호) 을 받아 고정된 크기의 바이트 문자열인 해시를 반환합니다. 이 과정은 단방향 (one-way) 으로 설계되어 있어, 원래의 입력을 쉽게 역추적할 수 없습니다.

Hashcat 은 세계적으로 유명하고 강력한 비밀번호 복구 도구입니다. 이를 효과적으로 사용하기 전에, 해시가 무엇인지 그리고 이를 어떻게 다루어야 하는지에 대한 기본 사항을 이해해야 합니다.

본 실습에서는 해싱의 기초 개념을 학습합니다. 일반적인 해시 유형을 탐색하고, 자신만의 해시를 생성하며, Hashcat 사용을 위해 이를 준비하고, 비밀번호와 해당 해시 간의 중요한 차이점을 이해하게 될 것입니다. 이 지식은 Hashcat 을 마스터하기 위한 여정의 첫 번째 필수 단계입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 94%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

일반적인 해시 유형 이해하기 - MD5, SHA1 및 NTLM

이 단계에서는 사이버 보안 분야에서 자주 접하게 될 세 가지 일반적인 해시 유형인 MD5, SHA1, NTLM 에 대해 학습합니다. 이 단계에서는 실행할 명령이 없으며, 목표는 이러한 핵심 개념을 이해하는 것입니다.

  • 해시란 무엇인가?
    해시는 특정 데이터 조각으로부터 생성되는 고유하고 고정된 크기의 문자열입니다. 해싱 알고리즘은 단방향 함수 (one-way function) 로 설계되었는데, 이는 해시만으로는 원래의 입력 데이터를 찾아내는 것이 계산적으로 불가능하다는 것을 의미합니다.

  • MD5 (Message Digest 5)
    MD5 는 가장 오래되고 널리 알려진 해싱 알고리즘 중 하나입니다. 이는 128 비트 (32 자리 16 진수) 해시 값을 생성합니다. 한때 비밀번호 저장에 널리 사용되었지만, 현재는 "충돌 (collision)"에 취약한 취약점 (서로 다른 두 입력이 동일한 해시를 생성하는 경우) 때문에 해당 목적으로는 안전하지 않은 것으로 간주됩니다. 오늘날에는 주로 파일 전송 중 파일이 변조되지 않았는지 확인하기 위해 파일 무결성을 검증하는 데 사용됩니다.

  • SHA-1 (Secure Hash Algorithm 1)
    SHA-1 은 MD5 의 후속으로 개발되었습니다. 이는 160 비트 (40 자리 16 진수) 해시를 생성합니다. MD5 와 마찬가지로 SHA-1 역시 발견된 약점들로 인해 암호화 목적으로는 더 이상 안전하다고 간주되지 않습니다. 하지만 여전히 구형 시스템 및 레거시 애플리케이션에서 이를 발견할 수 있습니다.

  • NTLM (NT LAN Manager)
    NTLM 은 Microsoft Windows 가 사용자 비밀번호를 저장하는 데 사용하는 해싱 알고리즘입니다. Windows 시스템에서 비밀번호를 설정하면, 해당 비밀번호는 NTLM 해시로 변환되어 저장됩니다. 이는 Windows 환경과 관련된 침투 테스트 (penetration testing) 작업에서 흔히 목표가 됩니다.

이러한 유형을 이해하는 것은 해시를 식별하고 이를 크래킹하기 위한 올바른 방법을 선택하는 첫 번째 단계입니다.

'echo'와 'md5sum'을 사용하여 문자열로부터 MD5 해시 생성하기

이 단계에서는 간단한 텍스트 문자열로부터 MD5 해시를 생성해 볼 것입니다. 이는 명령줄에서 데이터를 빠르게 해시하는 일반적인 작업입니다. 우리는 두 가지 표준 Linux 유틸리티인 echomd5sum을 사용할 것입니다.

먼저, 도구들을 이해해 봅시다:

  • echo: 이 명령어는 텍스트 한 줄을 출력하는 데 사용됩니다.
  • md5sum: 이 명령어는 MD5 메시지 다이제스트를 계산하고 확인합니다.
  • | (파이프, Pipe): 이 연산자는 왼쪽에 있는 명령어의 출력을 오른쪽에 있는 명령어의 입력으로 보냅니다.

우리는 문자열 password123을 해시할 것입니다. echo와 함께 -n 플래그를 사용하는 것이 중요합니다. 이는 echo에게 후행 줄 바꿈 문자 (trailing newline character) 를 출력하지 않도록 지시합니다. 이 문자가 없으면 해시 계산에 포함되어 다른 결과가 나오게 됩니다.

터미널에서 다음 명령을 실행하십시오:

echo -n "password123" | md5sum

다음과 같은 출력을 보게 될 것입니다. 긴 문자열은 "password123"의 MD5 해시이며, - 표시는 md5sum이 파일이 아닌 표준 입력 (파이프) 으로부터 입력을 읽었음을 나타냅니다.

482c811da5d5b4bc6d497ffa98491e38  -

이제 성공적으로 첫 번째 해시를 생성했습니다!

단일 대상 해시를 포함하는 텍스트 파일 준비

이 단계에서는 생성한 해시를 저장할 파일을 만들 것입니다. Hashcat 및 기타 비밀번호 크래킹 도구는 일반적으로 직접 문자열 입력을 사용하는 대신 하나 이상의 해시를 포함하는 파일로 작업합니다. 이를 통해 여러 해시를 한 번에 대상으로 지정할 수 있습니다.

이전 단계에서 생성한 password123의 MD5 해시 (482c811da5d5b4bc6d497ffa98491e38) 를 사용할 것입니다.

다시 echo 명령어를 사용할 수 있지만, 이번에는 출력 리디렉션 연산자 (>) 를 사용하여 문자열을 target_hash.txt라는 새 파일에 쓸 것입니다. 이 명령어는 현재 디렉토리 (~/project) 에 파일을 생성합니다.

파일을 생성하려면 다음 명령을 실행하십시오:

echo "482c811da5d5b4bc6d497ffa98491e38" > target_hash.txt

이제 파일이 올바르게 생성되었고 해시를 포함하고 있는지 확인해 봅시다. cat 명령어를 사용하여 파일 내용을 표시합니다:

cat target_hash.txt

출력은 해시 자체여야 합니다:

482c811da5d5b4bc6d497ffa98491e38

이제 Hashcat 과 같은 크래킹 도구에 적합하게 형식이 지정된 대상 파일을 갖게 되었습니다.

Hashcat 도움말에서 MD5 에 대한 올바른 해시 모드 식별

이 단계에서는 Hashcat 에서 특정 해시 유형에 대한 올바른 모드를 찾는 방법을 배웁니다. Hashcat 은 수백 가지의 다른 해싱 알고리즘을 지원하며, 어떤 유형의 해시를 크래킹하려는지 정확하게 알려주어야 합니다. 이는 숫자 "해시 모드 (hash mode)"를 사용하여 수행됩니다.

올바른 모드를 찾으려면 Hashcat 의 내장 도움말 메뉴를 사용할 수 있습니다. hashcat --help를 실행하면 지원되는 모든 해시 유형과 해당 모드의 매우 긴 목록이 표시됩니다. 필요한 것을 빠르게 찾기 위해 이 출력을 grep 명령어에 파이프하여 "md5"를 검색할 수 있습니다.

MD5 해시 모드를 검색하려면 다음 명령을 실행하십시오:

hashcat --help | grep -i "md5"

grep-i 플래그는 검색을 대소문자를 구분하지 않도록 만듭니다. MD5 에는 많은 변형이 있으므로 많은 출력이 표시될 것입니다. 가장 기본적인 것을 찾으십시오.

...
      0 | MD5                                            | Raw Hash
...
   2410 | Cisco-ASA MD5                                  | Operating System
...

출력에서 볼 수 있듯이, 표준 원시 MD5 해시 (raw MD5 hash) 의 해시 모드는 0입니다. 이것은 MD5 해시를 크래킹하고 있음을 Hashcat 에 알리기 위해 -m 플래그와 함께 제공할 숫자입니다 (예: -m 0).

해시와 비밀번호 구별하기

마지막 단계에서는 비밀번호와 그 해시 사이의 결정적인 차이점을 다시 한번 강조하겠습니다. 이는 비밀번호 크래킹의 근본적인 개념입니다.

  • **비밀번호 (Password)**는 비밀의, 사람이 읽을 수 있는 문자열입니다. 우리의 예시에서는 password123입니다.
  • **해시 (Hash)**는 비밀번호로부터 생성된, 섞여 있는 고정 길이의 문자열입니다. 우리의 예시에서는 482c811da5d5b4bc6d497ffa98491e38입니다.

비밀번호 크래킹은 해시를 **역산 (reverse)**하지 않습니다. 대신, 잠재적인 비밀번호 목록 (워드 리스트) 을 가져와서 각각을 해시하고 그 결과를 대상 해시와 비교하는 방식으로 작동합니다. 일치하면 비밀번호를 찾은 것입니다.

이를 설명하기 위해 간단한 워드 리스트 파일을 만들어 보겠습니다. 실제 시나리오에서는 이 파일에 수백만 개의 비밀번호 추측이 포함될 것입니다. 이 실습 (lab) 에서는 올바른 비밀번호 하나만 포함할 것입니다.

원본 비밀번호를 포함하는 potential_passwords.txt라는 파일을 생성합니다:

echo "password123" > potential_passwords.txt

이제 준비한 두 파일을 살펴보겠습니다. 디렉토리에서 확인하려면 ls 명령어를 사용하십시오.

ls
potential_passwords.txt  target_hash.txt

크래킹할 해시가 포함된 target_hash.txt와 테스트할 비밀번호가 포함된 potential_passwords.txt가 있습니다. 이 분리는 비밀번호 크래킹 도구가 작동하는 방식의 핵심입니다.

요약

이 실습 (lab) 을 완료하신 것을 축하드립니다! LabEx 와 같은 도구를 사용하기 전에 필요한 해싱의 필수적인 기본 사항들을 성공적으로 학습하셨습니다.

이 실습에서 여러분은 다음을 수행했습니다:

  • MD5, SHA-1, NTLM 과 같은 일반적인 해시 유형의 개념을 학습했습니다.
  • echomd5sum 명령어를 사용하여 문자열로부터 MD5 해시를 생성했습니다.
  • 크래킹 도구의 표준 형식인 대상 해시 파일을 준비했습니다.
  • hashcat --help 명령어를 사용하여 MD5 에 대한 올바른 해시 모드를 식별했습니다.
  • 비밀번호와 그에 해당하는 해시 사이의 결정적인 차이에 대한 이해를 공고히 했습니다.

이러한 기초를 바탕으로, 이제 이 파일들과 개념들을 사용하여 Hashcat 으로 실제 비밀번호 크래킹 공격을 수행할 더 고급 실습으로 나아갈 준비가 되었습니다.