John the Ripper 와 하드웨어 가속 (GPU)

Kali LinuxBeginner
지금 연습하기

소개

이 랩에서는 John the Ripper (JtR) 와 그래픽 처리 장치 (GPU) 의 강력한 조합을 사용하여 암호 크래킹을 가속화하는 방법을 탐구합니다. 복잡한 암호의 경우 기존의 CPU 기반 크래킹은 느릴 수 있습니다. GPU 는 대규모 병렬 처리 기능을 통해 암호 크래킹에 필요한 시간을 극적으로 단축할 수 있습니다.

먼저 GPU 크래킹의 기본 원리를 이해한 다음, 환경 설정의 실질적인 단계를 진행합니다. 여기에는 CUDA 또는 OpenCL 과 같은 필수 GPU 드라이버 및 프레임워크 설치가 포함됩니다. 다음으로, John the Ripper 를 구성하여 GPU 를 활용하고 성능을 벤치마킹하며 일반적인 문제 해결 기법을 배웁니다. 이 랩이 끝나면 John the Ripper 와 함께 GPU 가속을 효과적으로 사용하는 방법에 대한 확실한 이해를 갖게 될 것입니다.

GPU 크래킹 원리 이해하기

이 단계에서는 GPU 가 암호 크래킹을 가속화할 수 있게 하는 기본 원리를 배우게 됩니다.

GPU 는 병렬 처리를 위해 설계되었으며, 이는 많은 계산을 동시에 수행할 수 있음을 의미합니다. 이러한 아키텍처는 암호 크래킹과 같이 동일한 작업 (예: 암호 후보 해싱) 을 수백만 또는 수십억 번 수행해야 하는 작업에 이상적입니다.

주요 개념:

  • 병렬성 (Parallelism): 순차적 작업에 뛰어난 CPU 와 달리, GPU 는 수천 개의 더 작은 코어를 가지고 있어 문제의 독립적인 부분에 대해 동시에 작업할 수 있습니다. 암호 크래킹에서 각 코어는 다른 암호 후보를 테스트할 수 있습니다.
  • 해싱 알고리즘 (Hashing Algorithms): 암호 크래킹은 후보 암호를 반복적으로 해싱하고 결과를 알려진 해시와 비교하는 과정을 포함합니다. 많은 해싱 알고리즘 (MD5, SHA-1, bcrypt, scrypt 등) 은 계산 집약적이므로 GPU 가속에 적합한 후보입니다.
  • CUDA/OpenCL: 이들은 소프트웨어 개발자가 범용 처리를 위해 GPU 를 사용할 수 있도록 하는 병렬 컴퓨팅 플랫폼 및 프로그래밍 모델입니다.
    • CUDA (Compute Unified Device Architecture): NVIDIA 에서 개발했으며, NVIDIA GPU 를 위한 독점 플랫폼입니다.
    • OpenCL (Open Computing Language): 다양한 공급업체의 이기종 플랫폼 (CPU, GPU, FPGA 등) 전반에 걸쳐 병렬 프로그래밍을 위한 개방형 표준입니다. John the Ripper 는 둘 다 지원합니다.

작동 방식:

  1. 해시 로드: John the Ripper 는 대상 암호 해시를 GPU 메모리로 로드합니다.
  2. 후보 생성: GPU 는 대량의 암호 후보 (예: 단어 목록 또는 무차별 대입을 통해) 를 생성합니다.
  3. 해싱 및 비교: 각 GPU 코어는 할당된 후보를 동시에 해싱하고 결과 해시를 대상 해시와 비교합니다.
  4. 크랙 보고: 일치하는 항목이 발견되면 크랙된 암호가 보고됩니다.

이러한 병렬 실행은 일치하는 암호를 찾는 데 필요한 시간을 크게 단축합니다.

GPU 드라이버 및 CUDA/OpenCL 설치

이 단계에서는 필요한 드라이버와 OpenCL 프레임워크를 설치하여 LabEx 환경을 GPU 가속을 위해 준비합니다. LabEx 환경은 가상화되어 있어 물리적 GPU 에 직접 액세스하지 못할 수 있으므로, John the Ripper 의 GPU 모듈에 필수적인 OpenCL 개발 라이브러리를 설치하여 설정을 시뮬레이션할 것입니다.

먼저 패키지 목록을 업데이트하여 최신 버전의 소프트웨어를 가져오도록 합니다.

sudo apt update

다음으로 ocl-icd-opencl-dev 패키지를 설치합니다. 이 패키지는 OpenCL Installable Client Driver (ICD) 로더 및 개발 파일을 제공하며, 이는 John the Ripper 와 같은 애플리케이션이 OpenCL 호환 장치와 상호 작용하는 데 매우 중요합니다.

sudo apt install -y ocl-icd-opencl-dev

설치 후 OpenCL 라이브러리가 존재하는지 확인할 수 있습니다. clinfo로 쿼리할 물리적 GPU 는 없지만, 개발 파일의 존재는 시스템이 OpenCL 애플리케이션을 컴파일하고 실행하도록 설정되었음을 나타냅니다.

ls -l /usr/lib/x86_64-linux-gnu/libOpenCL.so

라이브러리가 존재함을 확인하는 다음과 유사한 출력을 볼 수 있어야 합니다.

lrwxrwxrwx 1 root root 19 Mar 28  2023 /usr/lib/x86_64-linux-gnu/libOpenCL.so -> libOpenCL.so.1.0.0

이 단계는 John the Ripper 가 감지하고 활용할 수 있도록 기반 OpenCL 구성 요소가 사용 가능한지 확인합니다.

GPU 사용을 위한 John the Ripper 설정

이 단계에서는 John the Ripper 를 설치하고 OpenCL 감지 능력을 확인합니다. LabEx 환경에는 물리적 GPU 가 없을 수 있지만, John the Ripper 의 OpenCL 모듈은 여전히 존재하며 구성할 수 있습니다.

먼저 John the Ripper 를 설치합니다.

sudo apt install -y john

설치 후 John the Ripper 의 기능, 특히 OpenCL 지원을 확인해 볼 수 있습니다. John the Ripper 의 john --list=opencl-devices 명령은 감지된 OpenCL 장치를 나열하는 데 사용됩니다. 물리적 GPU 가 없는 가상화된 환경에서는 실제 장치가 나열되지 않을 수 있지만, 명령 자체는 OpenCL 모듈이 John the Ripper 에 컴파일되었음을 확인합니다.

john --list=opencl-devices

이 가상 환경에서는 "No OpenCL devices found" 또는 유사한 출력이 표시될 수 있으며, 이는 예상된 결과입니다. 중요한 것은 명령이 오류 없이 실행되어 JtR 의 OpenCL 기능이 존재함을 확인하는 것입니다.

No OpenCL devices found.

다음으로, 크래킹을 준비하기 위해 더미 해시 파일을 생성해 보겠습니다. 시연을 위해 간단한 MD5 해시를 사용하겠습니다.

echo "testuser:5d41402abc4b2a76b9719d911017c592" > ~/project/hashes.txt

이것은 암호 "hello"에 대한 해시가 포함된 ~/project 디렉터리에 hashes.txt 파일을 생성합니다.

이제 John the Ripper 를 사용하여 해시를 크랙해 보겠습니다. 물리적 GPU 가 없더라도 John the Ripper 는 사용 가능한 경우 OpenCL 지원 모듈을 사용하려고 시도하며, 장치를 찾지 못하면 CPU 로 대체됩니다.

john --format=raw-md5 ~/project/hashes.txt --wordlist=/usr/share/john/password.lst

John the Ripper 가 해시를 처리하고 있음을 나타내는 출력이 표시되어야 합니다. 암호 "hello"가 기본 단어 목록에 있다면 크랙될 것입니다.

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5])
Cost 1 (iteration count) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
hello            (testuser)
1g 0:00:00:00 DONE (2024-01-01 12:00) 100.0% 1000000g/s 1000000p/s 1000000c/s 1000000C/s testuser
Session completed.

이 단계는 John the Ripper 가 설치되었고, OpenCL 구성 요소가 인식되었으며, 해시를 처리할 수 있음을 확인합니다.

GPU 크래킹 성능 벤치마킹

이 단계에서는 John the Ripper 의 성능을 벤치마킹하는 방법을 배웁니다. 물리적 GPU 가 없는 가상화된 환경에 있지만, 벤치마킹 프로세스를 이해하는 것은 실제 시나리오에 매우 중요합니다. John the Ripper 에는 다양한 해시 유형을 테스트할 수 있는 내장 벤치마킹 도구가 있습니다.

John the Ripper 를 벤치마킹하려면 --test 옵션을 사용합니다. 이 명령은 다양한 해시 알고리즘에 대한 일련의 테스트를 실행하여 각 알고리즘의 크래킹 속도 (초당 추측 횟수) 를 표시합니다.

john --test

출력은 방대하며 다양한 해시 유형에 대한 성능을 보여줍니다. OpenCL 장치가 감지되었다면 설명에 "OpenCL"이 포함된 줄을 찾으십시오. 물리적 GPU 가 없더라도 John the Ripper 는 컴파일된 모듈을 기반으로 이론적인 OpenCL 성능을 보고할 수 있습니다.

예시 출력 (간결성을 위해 축약됨):

Benchmarking: Raw-MD5 [MD5]... DONE
Many salts:     1000000 c/s real, 1000000 c/s virtual
Only one salt:  1000000 c/s real, 1000000 c/s virtual

Benchmarking: bcrypt ($2*$, $2a$, $2x$, $2y$, $2b$) [Blowfish OpenCL]... DONE
Many salts:     1000000 c/s real, 1000000 c/s virtual
Only one salt:  1000000 c/s real, 1000000 c/s virtual

c/s (초당 후보 수) 또는 p/s (초당 암호 수) 값은 크래킹 속도를 나타냅니다. 강력한 GPU 가 있는 실제 환경에서는 GPU 가속 알고리즘의 경우 이러한 숫자가 CPU 전용 벤치마크에 비해 훨씬 높을 것입니다.

예를 들어 raw-md5와 같은 특정 해시 유형을 벤치마킹하여 더 집중된 결과를 얻을 수도 있습니다.

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

이 명령은 raw-md5 형식을 구체적으로 벤치마킹합니다. --test=0 옵션은 짧은 시간 동안 벤치마크를 실행하며, 이는 빠른 확인에 유용합니다.

이러한 벤치마크 결과를 이해하는 것은 GPU 설정의 효과를 평가하고 다른 하드웨어 구성을 비교하는 데 중요합니다.

GPU 크래킹 문제 해결

이 단계에서는 John the Ripper 및 GPU 가속에 대한 일반적인 문제 해결 기법을 배웁니다. LabEx 환경에는 물리적 GPU 가 없지만, 이러한 단계를 이해하는 것은 실제 애플리케이션에 매우 중요합니다.

일반적인 문제 및 해결 방법:

  1. "No OpenCL devices found" 또는 "CUDA error":

    • 원인: GPU 드라이버가 잘못되었거나 누락되었거나 OpenCL/CUDA SDK 가 제대로 설치되지 않았습니다.
    • 해결 방법: GPU 드라이버가 최신 상태이고 올바르게 설치되었는지 확인하십시오. NVIDIA GPU 의 경우 CUDA Toolkit 을 설치하십시오. AMD/Intel GPU 의 경우 OpenCL 드라이버가 설치되었는지 확인하십시오. 가상 환경에서는 가상 GPU 가 노출되지 않는 경우 이 메시지가 예상됩니다.
    • 확인: john --list=opencl-devices 또는 nvidia-smi (NVIDIA 의 경우) 를 실행하여 장치 감지를 확인하십시오.
  2. 낮은 성능:

    • 원인: 오래된 드라이버, 부족한 GPU 메모리 또는 GPU 에서 CPU 최적화 해시 유형 사용.
    • 해결 방법: 드라이버를 업데이트하십시오. 선택한 해시 유형 및 단어 목록에 대해 GPU 에 충분한 메모리가 있는지 확인하십시오. 일부 해시 유형 (예: bcrypt, scrypt) 은 의도적으로 느리고 메모리 집약적으로 설계되어 MD5 와 같은 간단한 해시에 비해 GPU 에서 덜 효율적입니다.
    • 확인: john --test를 사용하여 성능을 벤치마킹하고 GPU 에 대한 예상 값과 비교하십시오.
  3. 충돌 또는 멈춤:

    • 원인: 과열, 불안정한 오버클럭킹 또는 드라이버 충돌.
    • 해결 방법: GPU 온도를 모니터링하십시오. 적용된 경우 오버클럭킹을 줄이십시오. 드라이버를 깨끗하게 다시 설치하십시오.
    • 확인: watch -n 1 nvidia-smi (NVIDIA 의 경우) 를 사용하여 GPU 사용량 및 온도를 모니터링하십시오.
  4. John the Ripper 가 GPU 를 사용하지 않음:

    • 원인: JtR 이 GPU 지원으로 컴파일되지 않았거나 특정 해시 형식이 JtR 의 GPU 모듈에서 지원되지 않음.
    • 해결 방법: 올바른 JtR 버전을 설치했는지 확인하십시오 (예: 사용 가능한 경우 john-opencl 또는 john-cuda, 또는 GPU 플래그로 소스에서 빌드). 크랙하려는 해시 형식이 JtR 에 OpenCL/CUDA 구현이 있는지 확인하십시오.
    • 확인: john --list=formats를 실행하고 설명에 OpenCL 또는 CUDA가 포함된 형식을 찾으십시오.

문제 해결 단계 시뮬레이션:

문제가 발생하여 OpenCL 을 지원하는지 확인하기 위해 John the Ripper 버전을 확인해야 한다고 가정해 보겠습니다.

john --version

이 명령은 설치된 John the Ripper 의 버전을 출력하며, 이는 GPU 지원이 포함된 빌드를 식별하는 데 도움이 될 수 있습니다.

John the Ripper 1.9.0-jumbo-1 (linux-gnu)
Copyright (c) 1996-2023 by Solar Designer and others
...

이러한 일반적인 문제와 해결 방법을 이해하면 실제 시나리오에서 John the Ripper 를 GPU 가속과 함께 사용할 때 발생하는 문제를 효과적으로 해결하는 데 도움이 될 것입니다.

요약

이 실습에서는 GPU 하드웨어 가속을 사용하여 John the Ripper 를 활용하여 더 빠른 암호 크래킹을 수행하는 방법에 대한 포괄적인 이해를 얻었습니다. GPU 병렬 처리의 기본 원리와 OpenCL 과 같은 프레임워크의 역할을 탐색하는 것으로 시작했습니다.

그런 다음 필요한 OpenCL 개발 라이브러리 설치를 포함하여 환경 설정의 실질적인 단계를 진행했습니다. John the Ripper 를 설치하고, OpenCL 기능을 확인하고, 기본적인 해시 크래킹을 수행하는 방법을 배웠습니다. 또한 John the Ripper 의 내장 벤치마킹 도구를 탐색하여 성능을 평가하고 GPU 크래킹 문제에 대한 일반적인 문제 해결 기법을 논의했습니다.

이 실습을 완료함으로써 이제 John the Ripper 와 함께 GPU 가속을 효과적으로 활용하는 지식을 갖추게 되었으며, 실제 시나리오에서 암호 크래킹 능력을 크게 향상시킬 수 있습니다.