분산 크래킹을 위한 Hashcat Brain 사용법

Kali LinuxBeginner
지금 연습하기

소개

Hashcat 은 속도와 다용성으로 유명한 세계적으로 유명한 비밀번호 복구 도구입니다. 대규모 비밀번호 크래킹을 수행할 때, 동일한 해시 목록을 공격하기 위해 여러 시스템을 사용하는 것이 일반적입니다. 이 분산 접근 방식은 서로 다른 시스템이 동일한 비밀번호 후보를 시도하는 데 시간을 낭비할 수 있으므로 비효율성을 초래할 수 있습니다.

이 문제를 해결하기 위해 Hashcat 은 "Brain" 기능을 도입했습니다. Hashcat Brain 은 시도된 모든 비밀번호 후보를 기록하는 중앙 집중식 서버 역할을 합니다. 클라이언트가 비밀번호를 시도하기 전에 Brain 에 쿼리합니다. 비밀번호가 이전에 시도되었다면 클라이언트는 이를 건너뛰어 귀중한 시간과 리소스를 절약합니다.

이 랩에서는 다음을 수행하는 방법을 배웁니다.

  • Hashcat Brain 서버 시작하기
  • Hashcat 클라이언트를 서버에 연결하기
  • 비밀번호 공격을 실행하고 Brain 이 중복 작업을 방지하는 방법 관찰하기

Hashcat Brain 개념 이해하기

이 단계에서는 Hashcat Brain 의 핵심 개념과 해결하고자 하는 문제에 대해 간략하게 다룹니다. 이 단계는 순전히 개념적인 것이며 명령은 필요하지 않습니다.

일반적인 비밀번호 크래킹 시나리오에서는 해시 목록과 잠재적 비밀번호 목록 (단어 목록) 이 있습니다. Hashcat 은 단어 목록의 각 비밀번호를 해시에 대해 시도합니다. 이제 동일한 작업을 수행하는 두 개의 별도 컴퓨터 (또는 클라이언트) 가 있다고 상상해 보세요.

문제점: 조정 없이는 클라이언트 A 와 클라이언트 B 모두 다른 시간에 정확히 동일한 비밀번호 ("123456" 등) 를 시도할 수 있습니다. 작업이 중복되므로 이는 계산 능력 낭비입니다.

해결책 (Hashcat Brain): Hashcat Brain 은 스마트한 중앙 서버 역할을 합니다. 워크플로우는 다음과 같습니다.

  1. 클라이언트 (예: 클라이언트 A) 가 비밀번호 "123456"을 시도하려고 합니다.
  2. 먼저 Brain 서버에 "이전에 '123456'을 시도했습니까?"라고 요청을 보냅니다.
  3. Brain 서버는 데이터베이스를 확인합니다. 처음이라면 "아니요, 시도하지 않았습니다."라고 응답합니다.
  4. 클라이언트 A 는 비밀번호 테스트를 진행합니다. 완료 후 Brain 서버에 "'123456'을 이제 테스트했습니다."라고 알립니다. Brain 서버는 이를 기록합니다.
  5. 나중에 클라이언트 B 가 "123456"을 시도하려고 하면 Brain 서버에 문의합니다. 서버는 이제 "예, 시도했습니다."라고 응답합니다.
  6. 클라이언트 B 는 즉시 이 비밀번호를 건너뛰고 다음 비밀번호로 이동하여 시간과 전기를 절약합니다.

이 메커니즘은 전체 분산 네트워크에서 각 비밀번호 후보가 한 번만 테스트되도록 하여 대규모 공격의 효율성을 극적으로 향상시킵니다.

Hashcat Brain 서버 시작하기

이 단계에서는 Hashcat Brain 서버를 시작합니다. 이 서버는 Hashcat 클라이언트의 연결을 수신하고 시도된 비밀번호 데이터베이스를 관리합니다.

이 랩에서는 서버와 클라이언트를 동일한 머신에서 실행하지만, 마치 별도의 시스템에 있는 것처럼 네트워크를 통해 통신합니다.

서버를 시작하는 명령은 --brain-server 플래그를 사용한 hashcat입니다. 또한 수신할 포트를 지정할 것입니다. 보안을 위해 Hashcat 은 서버에 대한 비밀번호를 자동으로 생성할 수 있습니다.

먼저 프로젝트 폴더 안에 brain 파일을 위한 디렉토리를 생성합니다.

mkdir -p ~/project/brain

이제 터미널에서 다음 명령을 실행하여 서버를 시작합니다. 포트 7890에서 수신 대기하고 데이터를 ~/project/brain/ 디렉토리에 저장합니다.

참고: 이 명령은 현재 터미널을 점유합니다. 다음 단계를 위해 터미널 패널의 + 아이콘을 클릭하여 새 터미널 탭을 열어야 합니다.

hashcat --brain-server --brain-port 7890 --brain-session-path ~/project/brain/

명령을 실행한 후 서버가 실행 중임을 나타내는 출력이 표시됩니다. Password..:라고 표시된 줄에 주의 깊게 살펴보세요. 이 줄은 클라이언트가 연결하는 데 필요한 자동으로 생성된 비밀번호입니다.

Starting brain server on 0.0.0.0:7890...

Password..: 82b5d1a3e... (a long hex string)

Accepting clients...

이 터미널을 계속 실행 상태로 두세요. 닫지 마세요. 다음 단계를 위해 새 터미널을 엽니다.

Brain 서버 비밀번호 얻기

이 단계에서는 세션 파일에서 Brain 서버의 비밀번호를 검색하는 방법을 배웁니다. 서버를 시작할 때 터미널에 비밀번호가 표시되었지만, 자동화된 환경에 유용한 쉬운 접근을 위해 파일에도 저장됩니다.

세션 파일은 기본적으로 hashcat.brain이라는 이름으로 지정됩니다. --brain-session-path를 사용하여 사용자 지정 경로를 지정했으므로 파일은 ~/project/brain/hashcat.brain에 있습니다.

새 터미널 탭에서 cat 명령을 사용하여 이 파일의 내용을 표시합니다. 이 내용은 서버 비밀번호입니다.

cat ~/project/brain/hashcat.brain

출력은 비밀번호인 긴 16 진수 문자열입니다.

82b5d1a3e4c9a0f7d6b3c1a9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9

이 비밀번호는 Brain 서버에 연결하려는 모든 클라이언트에서 필요합니다. 다음 단계에서는 복사 - 붙여넣기 오류를 피하기 위해 파일에서 이 비밀번호를 직접 읽는 명령을 사용할 것입니다.

Brain 에 연결하도록 Hashcat 클라이언트 구성하기

이 단계에서는 Hashcat 클라이언트가 Brain 서버를 사용하도록 구성합니다. 이는 표준 hashcat 명령에 여러 --brain-* 옵션을 추가하여 수행됩니다.

연결을 테스트하기 위해 "드라이런 (dry-run)" 명령을 실행할 것입니다. Hashcat 의 --show 옵션은 이전에 크랙된 해시를 표시하는 데 사용되지만, brain 클라이언트 옵션과 결합하면 전체 공격을 시작하지 않고 연결을 확인하는 좋은 방법으로 사용됩니다.

필요한 클라이언트 옵션은 다음과 같습니다.

  • --brain-client: Hashcat 에 클라이언트 모드로 작동하도록 지시합니다.
  • --brain-host: 서버의 IP 주소입니다. 동일한 머신에 있으므로 127.0.0.1을 사용합니다.
  • --brain-port: 서버가 수신 대기 중인 포트이며, 7890입니다.
  • --brain-password: 서버의 비밀번호입니다. 파일에서 직접 읽기 위해 명령 치환 $(cat ...)을 사용할 수 있습니다.

새 터미널 탭에서 다음 명령을 실행합니다.

hashcat --show -m 0 ~/project/hashes.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

이 명령은 클라이언트 터미널에 많은 출력을 생성하지 않습니다. 그러나 첫 번째 터미널 탭(서버를 실행 중인 탭) 으로 다시 전환하면 Client connected from 127.0.0.1이라는 새 줄이 표시되어야 합니다. 이는 클라이언트가 서버에 성공적으로 연결되었음을 확인합니다.

## In the server terminal
Accepting clients...
Client connected from 127.0.0.1

이는 클라이언트 구성이 올바르게 되었음을 확인합니다.

공격 실행 및 Brain 통신 관찰

이 단계에서는 사전 공격을 수행하고 Hashcat Brain 이 작동하는 것을 볼 것입니다. 여러분을 위해 준비된 hashes.txtwordlist.txt 파일을 사용할 것입니다.

먼저 공격을 실행합니다. 이 명령은 MD5 해시 (-m 0) 에 대한 표준 사전 공격 (-a 0) 이며, brain 클라이언트 옵션이 추가되었습니다.

클라이언트 터미널(두 번째 탭) 에서 이를 실행합니다.

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

공격이 실행되고 비밀번호를 빠르게 찾는 것을 볼 수 있습니다.

...
5f4dcc3b5aa765d61d8327deb882cf99:password
...
Session..........: hashcat
Status...........: Cracked
...

이제 중요한 부분입니다. 정확히 동일한 명령을 다시 실행합니다.

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

이번에는 출력을 관찰하십시오. 공격은 거의 즉시 완료되어야 합니다. Status 줄에 주목하십시오.

...
Session..........: hashcat
Status...........: Exhausted
...

상태가 Exhausted인 이유는 Brain 클라이언트가 서버에 wordlist.txt의 모든 비밀번호에 대해 문의했고, 서버가 "네, 이들 모두 이전에 시도되었습니다."라고 응답했기 때문입니다. 그런 다음 클라이언트는 할 일이 없다는 것을 알고 즉시 종료했습니다. 이는 Hashcat Brain 의 강력함과 효율성을 보여줍니다.

요약

이 실습에서는 분산된 비밀번호 크랙 작업을 최적화하는 강력한 기능인 Hashcat Brain 을 성공적으로 탐색했습니다.

다음 내용을 학습했습니다.

  • Hashcat Brain 의 핵심 개념과 중복 작업을 방지하는 방법
  • Hashcat Brain 서버를 시작하고 안전한 비밀번호를 생성하도록 하는 방법
  • 서버의 세션 파일 위치를 파악하여 비밀번호를 검색하는 방법
  • Brain 에 연결하기 위해 필요한 플래그로 Hashcat 클라이언트를 구성하는 방법
  • 공격을 실행하고 Brain 이 작동하는 것을 관찰하며, 이전에 시도된 비밀번호를 지능적으로 건너뛰는 방법을 확인하는 방법

Hashcat Brain 을 숙달함으로써 대규모 또는 장기 실행 비밀번호 복구 캠페인의 효율성을 크게 향상시켜 시간과 컴퓨팅 리소스를 절약할 수 있습니다.