John the Ripper 성능 최적화

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 강력한 비밀번호 크래킹 도구인 John the Ripper 의 성능을 최적화하는 다양한 기술을 탐구합니다. 효율적인 비밀번호 크래킹은 종종 사용 가능한 하드웨어 리소스를 효과적으로 활용해야 합니다. 이 실습에서는 John the Ripper 를 구성하여 여러 CPU 코어를 활용하는 방법, GPU 크래킹 기능 이해, 정확한 성능 측정을 위한 벤치마킹 설정 조정, Hashcat 과의 GPU 성능 비교, 크래킹 작업 중 시스템 리소스 모니터링 방법을 배우게 됩니다. 이러한 기술은 사이버 보안, 침투 테스팅 또는 시스템 관리 분야에 종사하는 모든 사람에게 중요하며, 비밀번호 감사 작업의 효율성을 극대화할 수 있도록 합니다.

여러 CPU 코어 활용하기

이 단계에서는 John the Ripper 를 구성하여 여러 CPU 코어를 활용하는 방법을 배우게 됩니다. 이는 멀티코어 프로세서가 있는 시스템에서 크래킹 프로세스를 크게 가속화할 수 있습니다. 기본적으로 John the Ripper 는 사용 가능한 모든 코어를 사용하지 않을 수 있습니다. --fork 옵션을 사용하여 사용할 CPU 코어 수를 지정할 수 있습니다.

먼저, 기본 성능을 확인하기 위해 코어 수를 지정하지 않고 간단한 벤치마크를 실행해 보겠습니다.

john --test=0

다음과 유사한 출력이 표시되며, 다양한 해시 유형에 대한 성능을 보여줍니다.

Benchmarking: Traditional DES [32/32 BS SSE2-i]... DONE
Many calculations will be done, please be patient.
Raw:    100000 c/s real, 100000 c/s virtual
Benchmarking: BSDI DES [32/32 BS SSE2-i]... DONE
Raw:    100000 c/s real, 100000 c/s virtual
...

이제 여러 CPU 코어를 사용하도록 John the Ripper 에 명시적으로 지시하면서 벤치마크를 다시 실행해 보겠습니다. 시스템에서 사용 가능한 CPU 코어 수를 확인하려면 nproc 명령을 사용할 수 있습니다.

nproc

이 명령은 사용 가능한 처리 장치 수를 출력합니다. 예를 들어, 2가 출력되면 CPU 코어가 2 개 있는 것입니다.

이제 사용하려는 코어 수와 함께 --fork 옵션을 사용합니다. 선호하는 경우 $(nproc)를 실제 코어 수로 바꾸어도 되지만, $(nproc)는 동적입니다.

john --test=0 --fork=$(nproc)

두 벤치마크의 "Raw" 성능 숫자를 비교해 보세요. 여러 코어를 사용할 때, 특히 CPU 집약적인 해시 유형의 경우 크래킹 속도가 향상되는 것을 볼 수 있어야 합니다. --fork 옵션은 별도의 프로세스를 생성하며, 각 프로세스는 크래킹 작업의 일부를 처리하여 병렬 처리를 활용합니다.

마지막으로, 여러 코어를 사용하여 비밀번호 파일을 크래킹해 보겠습니다. ~/project 디렉토리에 passwords.txt 파일이 있습니다.

john --wordlist=~/project/wordlist.txt --fork=$(nproc) ~/project/passwords.txt

크래킹이 완료된 후, 크랙된 비밀번호를 볼 수 있습니다.

john --show ~/project/passwords.txt

이 명령은 John the Ripper 가 성공적으로 크랙한 비밀번호를 표시합니다.

GPU 크래킹을 위한 John the Ripper 구성 (해당하는 경우)

이 단계에서는 GPU 크래킹을 위한 John the Ripper 구성에 대해 논의합니다. LabEx 환경은 일반적으로 일반 실습을 위한 전용 GPU 리소스를 제공하지 않지만, 호환되는 GPU 가 있는 시스템에서 John the Ripper 를 최적화하려면 이 개념을 이해하는 것이 중요합니다. John the Ripper 는 OpenCL 및 CUDA 구현을 통해 GPU 크래킹을 지원하며, 이는 특정 해시 유형에 대해 CPU 크래킹보다 상당한 속도 향상을 제공할 수 있습니다.

John the Ripper 빌드가 OpenCL 또는 CUDA 를 지원하는지 확인하려면 다음 명령을 실행할 수 있습니다.

john --list=opencl-devices

OpenCL 장치가 감지되면 다음과 유사한 출력이 표시됩니다 (이 환경에서는 비어 있을 가능성이 높음).

No OpenCL devices found.

호환되는 GPU 와 OpenCL 드라이버가 설치된 시스템에 있었다면 사용 가능한 GPU 장치 목록이 표시됩니다. 예를 들어:

Device #0: NVIDIA GeForce RTX 3080, 10240MB, 1710MHz, 68CU

크래킹에 특정 GPU 장치를 사용하려면 일반적으로 OpenCL 지원 형식을 사용하고 (raw-md5-opencl 등) --format 옵션을 사용하고, 여러 GPU 가 있는 경우 특정 GPU 를 선택하기 위해 --device 옵션을 사용할 수 있습니다.

예를 들어, GPU 가 있는 시스템에서는 다음과 같이 실행할 수 있습니다.

john --format=raw-md5-opencl --wordlist=~/project/wordlist.txt ~/project/passwords.txt

참고: 이 LabEx 환경에는 GPU 가 없으므로 위의 명령은 실패하거나 사용 가능한 경우 CPU 폴백으로 실행될 가능성이 높습니다. 이 단계의 목적은 이 특정 환경에서 실제 GPU 크래킹을 수행하는 것이 아니라 명령과 개념을 설명하는 것입니다.

John the Ripper 가 GPU 크래킹을 시도하도록 구성되었는지 확인하려면 GPU 지원 형식을 사용하여 크래킹 명령을 실행할 때 OpenCL 또는 CUDA 초기화를 나타내는 메시지를 찾아야 합니다.

John the Ripper 벤치마킹 설정 조정

이 단계에서는 보다 정확하고 관련성 높은 성능 지표를 얻기 위해 John the Ripper 의 벤치마킹 설정을 조정하는 방법을 배웁니다. 기본 벤치마크 (john --test=0) 는 다양한 해시 유형에 대해 빠른 테스트를 실행합니다. 그러나 특정 해시 유형 또는 특정 기간을 벤치마크에 지정할 수 있습니다. 이는 특정 크래킹 시나리오에 대한 성능을 측정하려는 경우 유용합니다.

먼저 John the Ripper 가 지원하는 모든 사용 가능한 해시 형식을 나열해 보겠습니다. 이를 통해 벤치마크하려는 특정 형식을 식별하는 데 도움이 될 수 있습니다.

john --list=formats

이 명령은 지원되는 해시 형식의 긴 목록을 출력합니다. 예를 들어:

raw-md5
raw-sha1
raw-sha256
...

이제 특정 해시 형식, 예를 들어 raw-md5를 벤치마크해 보겠습니다. --format 옵션을 사용하여 형식을 지정할 수 있습니다.

john --test=0 --format=raw-md5

raw-md5 형식에 대한 벤치마크 결과를 볼 수 있습니다.

특히 성능 비교를 위해 더 안정적이고 정확한 벤치마크를 얻으려면 --max-run-time 옵션을 사용하여 테스트 기간을 늘릴 수 있습니다. 이 옵션은 벤치마크가 실행될 최대 시간을 초 단위로 지정합니다.

10 초 동안 raw-md5 벤치마크를 실행해 보겠습니다.

john --test=0 --format=raw-md5 --max-run-time=10

"Raw" 성능 숫자가 더 긴 실행 시간 동안 안정화되거나 더 일관된 평균을 제공하는지 관찰하십시오. 이는 특히 다른 하드웨어 구성 또는 John the Ripper 빌드를 비교할 때 유용합니다.

또한 1 단계의 --fork 옵션과 결합하여 특정 기간 동안 특정 해시 유형에 대한 멀티코어 성능을 벤치마크할 수 있습니다.

john --test=0 --format=raw-md5 --fork=$(nproc) --max-run-time=10

이러한 벤치마킹 설정을 조정하면 특정 크래킹 요구 사항과 관련된 보다 정확한 성능 데이터를 얻을 수 있으며, 하드웨어 업그레이드 또는 구성 변경에 대한 정보에 입각한 결정을 내리는 데 도움이 됩니다.

GPU 를 위한 Hashcat vs. John the Ripper 이해

이 단계에서는 특히 GPU 크래킹 기능과 관련하여 Hashcat 과 John the Ripper 의 차이점에 대해 논의합니다. 둘 다 강력한 비밀번호 크래킹 도구이지만, 특히 GPU 를 활용하는 데 있어서는 서로 다른 강점과 약점을 가지고 있습니다.

John the Ripper (JtR):

  • 강점: CPU 기반 크래킹에 탁월하며, 많은 내장 형식으로 매우 다재다능하고, 단일 사용자 시스템에 적합하며, 사전 및 무차별 대입 공격에 중점을 둡니다. GPU 지원 (OpenCL/CUDA) 은 통합되어 있지만, 원시 GPU 성능에 있어서는 역사적으로 Hashcat 보다 최적화가 덜 되어 있습니다.
  • 약점: GPU 성능은 존재하지만, 특정 해시 유형에 대해 Hashcat 의 원시 속도와 항상 일치하지 않을 수 있습니다. GPU 구성이 때때로 덜 직관적일 수 있습니다.

Hashcat:

  • 강점: 가장 빠르고 효율적인 GPU 기반 비밀번호 크래커로 널리 알려져 있습니다. GPU(NVIDIA CUDA 및 AMD OpenCL 모두) 에서의 병렬 처리에 대해 고도로 최적화되어 있습니다. 광범위한 해시 유형 및 공격 모드를 지원합니다.
  • 약점: 주로 GPU 에 중점을 두므로 CPU 성능이 주요 강점은 아닙니다. 광범위한 옵션과 공격 모드로 인해 초보자에게는 학습이 더 복잡할 수 있습니다.

GPU 크래킹을 위한 주요 차이점:

  1. 최적화: Hashcat 은 GPU 가속을 위해 특별히 제작되었으며 동일한 해시 유형에 대해 John the Ripper 보다 GPU 에서 더 높은 초당 해시 (H/s) 속도를 달성하는 경우가 많습니다.
  2. 사용 편의성: John the Ripper 의 GPU 옵션은 기존 명령줄 인터페이스에 통합되어 있습니다. Hashcat 은 자체적인 고유한 구문과 옵션을 가지고 있어 GPU 제어에 대해 더 세분화될 수 있습니다.
  3. 커뮤니티 초점: Hashcat 의 개발 및 커뮤니티는 GPU 크래킹 성능 극대화에 중점을 두고 있습니다.

언제 무엇을 사용할 것인가:

  • 일반적인 CPU 크래킹, 많은 내장 기능이 있는 다재다능한 도구가 필요하거나 강력한 GPU 가 없는 시스템에서 작업할 때는 John the Ripper를 사용하십시오.
  • 강력한 GPU 에 액세스할 수 있고 광범위한 해시 유형에 대해 절대적으로 가장 빠른 크래킹 속도가 필요한 경우, 특히 전문적인 침투 테스트 또는 감사 시나리오에서는 Hashcat을 사용하십시오.

설명을 위해 Hashcat 이 설치되어 있다면 (이 환경에서는 기본값이 아님), GPU 를 사용하여 MD5 해시를 크래킹하는 일반적인 명령은 다음과 같습니다.

## This command is for illustration only and will not work without Hashcat installed
## hashcat -m 0 -a 0 ~/project/passwords.txt ~/project/wordlist.txt

여기서 -m 0은 MD5 해시 유형을 지정하고 -a 0은 사전 공격을 지정합니다.

이러한 차이점을 이해하면 작업에 적합한 도구를 선택하고 사용 가능한 하드웨어에 따라 비밀번호 감사 작업의 효율성을 극대화하는 데 도움이 됩니다.

크래킹 중 시스템 리소스 모니터링

이 단계에서는 John the Ripper 가 크래킹 작업을 수행하는 동안 시스템 리소스를 모니터링하는 방법을 배웁니다. CPU 사용량, 메모리 사용량 및 디스크 I/O 를 모니터링하면 병목 현상을 식별하고 시스템이 효율적으로 활용되고 있는지 확인할 수 있습니다. 이는 성능을 최적화하고 문제를 해결하는 데 중요합니다.

먼저 John the Ripper 크래킹 프로세스를 백그라운드에서 시작해 보겠습니다. passwords.txt 파일에 간단한 사전 공격을 사용할 것입니다.

john --wordlist=~/project/wordlist.txt ~/project/passwords.txt &

끝에 있는 &는 프로세스를 백그라운드로 보내 터미널을 계속 사용할 수 있도록 합니다. 표시되는 프로세스 ID(PID) 를 기록해 두십시오. 예: [1] 12345.

이제 top 명령을 사용하여 시스템의 CPU 및 메모리 사용량을 모니터링해 보겠습니다. top은 실행 중인 시스템의 동적 실시간 보기를 제공합니다.

top

top 출력에서 john 프로세스를 찾으십시오. CPU 사용량 (%CPU) 및 메모리 사용량 (%MEM) 을 볼 수 있습니다. John the Ripper 가 활발하게 크래킹 중일 때, 특히 여러 코어를 사용하는 경우 %CPU 값이 높게 표시되어야 합니다 (멀티코어 프로세스의 경우 100% 를 초과할 수 있음). top을 종료하려면 q를 누르십시오.

프로세스 모니터링에 유용한 또 다른 명령은 htop입니다. htop이 설치되어 있지 않으면 설치할 수 있습니다.

sudo apt install -y htop

설치 후 htop을 실행합니다.

htop

htoptop보다 사용자 친화적이고 대화형 보기를 제공하며, 코어별 CPU 사용량, 메모리 사용량 및 프로세스 트리를 표시합니다. CPU 또는 메모리 사용량별로 프로세스를 쉽게 정렬할 수 있습니다. john 프로세스를 찾고 리소스 소비를 관찰하십시오. htop을 종료하려면 F10 또는 q를 누르십시오.

디스크 I/O 를 모니터링하려면 iotop 명령을 사용할 수 있습니다. 단어 목록이나 해시 파일이 매우 큰 경우 디스크 액세스가 병목 현상이 될 수 있으므로 특히 유용합니다. iotop이 설치되어 있지 않으면 설치하십시오.

sudo apt install -y iotop

그런 다음 iotop을 실행합니다.

sudo iotop

iotop은 실시간 디스크 I/O 활동을 보여줍니다. john 또는 관련 프로세스를 찾아 디스크에서 읽거나 쓰는 작업이 많은지 확인하십시오. iotop을 종료하려면 q를 누르십시오.

마지막으로 백그라운드 john 프로세스를 다시 포그라운드로 가져와 중지하거나, 여전히 실행 중인 경우 간단히 종료하겠습니다.

fg
## 프로세스를 중지하려면 Ctrl+C를 누르십시오

fg가 작동하지 않거나 PID 로 종료하려는 경우:

killall john

시스템 리소스를 정기적으로 모니터링하면 John the Ripper 가 하드웨어를 완전히 활용하고 있는지 또는 크래킹에 할당될 수 있는 리소스를 소비하는 다른 프로세스가 있는지 식별할 수 있습니다. 이는 최적의 성능을 위해 크래킹 설정을 미세 조정하는 데 도움이 됩니다.

요약

이 실습에서는 John the Ripper 의 성능을 최적화하는 실질적인 경험을 쌓았습니다. --fork 옵션을 사용하여 여러 CPU 코어를 활용하여 크래킹 속도를 높이는 방법을 배웠습니다. 전용 GPU 가 없는 환경에서도 John the Ripper 의 GPU 크래킹 원리를 논의했으며, OpenCL/CUDA 지원의 중요성을 강조했습니다. 또한 특정 해시 유형 및 기간에 대한 정확한 성능 지표를 얻기 위해 벤치마킹 설정을 조정하는 방법을 익혔습니다. 또한 GPU 가속 크래킹을 위한 John the Ripper 와 Hashcat 간의 주요 차이점을 이해하여 다양한 시나리오에 가장 적합한 도구를 선택할 수 있게 되었습니다. 마지막으로, 크래킹 작업 중 CPU, 메모리 및 디스크 I/O 와 같은 시스템 리소스를 모니터링하는 방법을 배웠는데, 이는 병목 현상을 식별하고 효율적인 하드웨어 활용을 보장하는 데 필수적입니다. 이러한 기술은 비밀번호 감사 및 보안 테스트의 효율성을 극대화하려는 모든 사람에게 기본적입니다.