OpenCL 플래그로 GPU 성능 튜닝하기

Kali LinuxBeginner
지금 연습하기

소개

Hashcat 은 세계적으로 유명한 비밀번호 복구 도구로, GPU 의 막대한 처리 능력을 활용하여 해시를 놀라운 속도로 크랙할 수 있습니다. 하지만 하드웨어의 성능을 최대한 활용하려면 올바르게 구성하고 튜닝하는 방법을 알아야 합니다. 잘못된 설정을 사용하면 성능이 저하되거나 하드웨어 불안정을 초래할 수도 있습니다.

이 랩에서는 Hashcat 의 여러 OpenCL 관련 플래그를 사용하여 GPU 성능을 관리하고 최적화하는 방법을 배우게 됩니다. 사용 가능한 장치를 나열하고, 특정 작업을 위해 특정 GPU 를 선택하고, 온도 보호 기능을 구현하고, 성능 튜닝 옵션을 실험하는 연습을 하게 됩니다. 이러한 기술은 Hashcat 을 효과적이고 안전하게 사용하려는 모든 사람에게 필수적입니다.

--opencl-devices 로 사용 가능한 OpenCL 장치 나열하기

이 단계에서는 Hashcat 이 사용할 수 있는 컴퓨팅 장치를 식별하는 방법을 배웁니다. GPU 또는 CPU 에 작업을 할당하기 전에 시스템이 해당 장치를 어떻게 인식하는지 알아야 합니다. Hashcat 은 이 목적을 위해 특정 플래그를 제공합니다.

--opencl-devices 플래그는 시스템의 OpenCL(Open Computing Language) 프레임워크를 쿼리하고 GPU 및 CPU 와 같은 모든 호환 장치를 나열합니다. 각 장치에는 고유한 ID 가 할당되며, 이 ID 는 나중에 특정 장치를 대상으로 지정하는 데 사용됩니다.

터미널에서 다음 명령을 실행하여 사용 가능한 모든 OpenCL 장치를 나열합니다.

hashcat --opencl-devices

다음과 유사한 출력을 볼 수 있습니다. 정확한 세부 정보, 특히 장치 이름 및 플랫폼 정보는 랩 환경의 하드웨어에 따라 달라집니다.

hashcat (v6.2.6) starting

OpenCL Info:

Platform ID #1
  Vendor  : The pocl project
  Name    : Portable Computing Language
  Version : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG

  Device ID #1
    Type           : CPU
    Vendor ID      : 1024
    Vendor         : GenuineIntel
    Name           : 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
    Version        : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG
    Processor(s)   : 8
    Clock          : 3000
    ...

Platform ID #2
  Vendor  : NVIDIA Corporation
  Name    : NVIDIA CUDA
  Version : OpenCL 3.0 CUDA 12.2.142

  Device ID #2
    Type           : GPU
    Vendor ID      : 4318
    Vendor         : NVIDIA Corporation
    Name           : NVIDIA T4
    Version        : OpenCL 3.0 CUDA
    Processor(s)   : 40
    Clock          : 1590
    ...

각 항목의 Device ID를 기록해 둡니다. 이 예시에서 Device ID #2 는 해시 크랙에 이상적인 NVIDIA T4 GPU 입니다.

-d 로 특정 GPU 선택하여 크랙하기

이 단계에서는 Hashcat 이 크랙 작업을 위해 특정 장치를 사용하도록 지시하는 방법을 배웁니다. 이는 여러 GPU 가 있는 시스템이나 일반적으로 이러한 유형의 작업에 훨씬 느린 CPU 사용을 피하고 싶을 때 특히 유용합니다.

-d (또는 --devices) 플래그를 사용하면 사용할 장치 ID 를 지정할 수 있습니다. 이전 단계의 명령 출력에서 올바른 ID 를 찾을 수 있습니다.

이제 GPU 를 대상으로 하는 간단한 크랙 작업을 실행할 것입니다. ~/project 디렉토리에 준비된 hash.txtwordlist.txt 파일을 사용합니다. 이 명령은 해시 유형 (MD5의 경우 -m 0), 공격 모드 (사전 공격의 경우 -a 0) 및 대상 장치를 지정합니다. 이전 예시의 GPU 가 Device ID #2 라고 가정하면 명령은 다음과 같습니다.

hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2

GPU 의 ID 가 다른 경우 -d 뒤의 숫자를 적절히 조정하십시오.

명령을 실행하면 Hashcat 은 지정된 장치에서만 공격을 시작하고 암호를 빠르게 찾을 것입니다.

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 5d41402abc4b2a76b9719d911017c592
Time.Started.....: ...
Time.Estimated...: ...
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#2.........:  104.6 kH/s (0.00ms) @ Accel:128 Loops:128 Thr:1024 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 2/2 (100.00%)
Rejected.........: 0/2 (0.00%)
Restore.Point....: 1/2 (50.00%)
Restore.Sub.#2...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#2....: wrongpass -> password
Hardware.Mon.#2..: Temp: 40c Fan: 30% Util: 13% Core:1410MHz Mem:5000MHz Bus:16

5d41402abc4b2a76b9719d911017c592:password

Started: ...
Stopped: ...

출력은 해시가 크랙되었고 암호가 password임을 확인합니다.

--gpu-temp-retain 플래그 이해하기

이 단계에서는 하드웨어를 보호하는 중요한 안전 기능에 대해 배웁니다. GPU 를 장시간 100% 활용도로 실행하면 상당한 열이 발생합니다. 관리되지 않으면 높은 온도는 열 스로틀링 (GPU 가 냉각을 위해 속도를 늦추는 것) 또는 영구적인 손상을 유발할 수 있습니다.

--gpu-temp-retain 플래그는 Hashcat 에게 GPU 온도를 모니터링하고 지정된 섭씨 값 이하로 유지하기 위해 작업 부하를 자동으로 조정하도록 지시합니다. 이는 긴 크랙 세션 동안 하드웨어의 안정성과 수명을 보장하는 훌륭한 방법입니다.

이전과 동일한 공격을 실행하되, 이번에는 GPU 온도를 85°C 이하로 유지하는 플래그를 추가하겠습니다. 이는 대부분의 GPU 가 부하 상태일 때 일반적으로 안전한 온도입니다.

hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2 --gpu-temp-retain=85

크랙 작업이 매우 짧기 때문에 온도 관리가 작동하는 것을 볼 수 없습니다. 그러나 명령은 수락되며 Hashcat 은 해당 기능을 활성화합니다. 수 시간 또는 수일에 걸친 크랙 작업에서는 이 플래그가 백그라운드에서 적극적으로 작동하여 열 안전을 위해 속도를 약간 줄일 수 있습니다.

암호가 거의 즉시 발견되므로 출력은 이전 단계와 동일합니다. 핵심은 이 보호 설정을 적용하는 방법을 아는 것입니다.

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

최적 설정을 찾기 위한 --opencl-vector-width 실험

이 단계에서는 성능 튜닝 옵션을 탐색합니다. --opencl-vector-width 플래그는 단일 명령으로 처리하기 위해 몇 개의 "스레드" 또는 작업 항목이 함께 번들로 묶이는지를 제어합니다. 이는 SIMD(Single Instruction, Multiple Data) 너비라고도 합니다.

이 설정의 최적 값은 특정 GPU 아키텍처와 크랙 중인 해시 유형에 따라 크게 달라집니다. 최상의 설정을 찾는 유일한 방법은 실험하는 것입니다. 허용되는 값은 일반적으로 1, 2, 4, 8 또는 16 과 같은 2 의 거듭제곱입니다.

이 플래그의 효과를 테스트하기 위해 Hashcat 의 내장 벤치마크 모드 (-b) 를 사용할 수 있습니다. MD5(-m 0) 에 대한 벤치마크를 실행하고 벡터 너비를 4 로 설정해 보겠습니다.

hashcat -m 0 -b --opencl-vector-width 4

Hashcat 은 벤치마크를 실행하고 각 장치의 속도를 표시합니다. GPU 의 Speed 줄에 주의하십시오.

...
Hashtype: MD5

Speed.#2.........:   480.3 MH/s (94.38ms) @ Accel:256 Loops:1024 Thr:256 Vec:4
...

이제 다른 벡터 너비, 예를 들어 8 로 벤치마크를 다시 실행해 보세요.

hashcat -m 0 -b --opencl-vector-width 8

이 실행의 Speed를 이전 실행과 비교하십시오. 다른 값을 테스트하여 특정 하드웨어 및 해시 조합에 대한 최적의 벡터 너비를 결정하여 크랙 성능을 극대화할 수 있습니다. 이 실험실에서는 명령으로 실험하는 것만으로도 충분합니다.

공격 중 GPU 온도 및 팬 속도 모니터링

이 마지막 단계에서는 Hashcat 이 실행되는 동안 GPU 의 주요 상태를 실시간으로 모니터링하는 방법을 배웁니다. 이는 성능 문제를 진단하고 열 설정이 예상대로 작동하는지 확인하는 데 필수적입니다.

NVIDIA GPU 를 관리하고 모니터링하는 강력한 명령줄 도구인 nvidia-smi(NVIDIA System Management Interface) 유틸리티를 사용합니다. 통계를 실시간으로 업데이트하려면 watch 명령과 함께 실행합니다.

먼저 두 번째 터미널 창을 열어야 합니다. 화면 하단의 터미널 탭 표시줄에 있는 "+" 아이콘을 클릭하여 이 작업을 수행할 수 있습니다.

새로운 (두 번째) 터미널에서 다음 명령을 실행합니다. 이 명령은 매초 nvidia-smi를 실행하고 최신 데이터로 화면을 새로 고칩니다.

watch -n 1 nvidia-smi

GPU 의 이름, 온도, 팬 속도, 전력 사용량 및 메모리 사용량을 보여주는 대시보드가 표시됩니다.

이제 원본 (첫 번째) 터미널로 돌아갑니다. GPU 에 상당한 부하를 주기 위해 무거운 벤치마크를 시작합니다. 부하를 최대화하기 위해 -w 4 (작업 부하 프로필 4, "Insane"용) 플래그를 사용합니다.

hashcat -m 0 -b -w 4

watch를 실행 중인 두 번째 터미널로 시점을 다시 전환합니다. GPU 가 벤치마크에서 열심히 작업함에 따라 Temp, PwrGPU-Util 값이 상당히 증가하는 것을 볼 수 있습니다. 이를 통해 하드웨어 상태를 실시간으로 확인할 수 있습니다.

관찰이 끝나면 첫 번째 터미널에서 Ctrl+C를 눌러 Hashcat 벤치마크를 중지하고, 두 번째 터미널에서 Ctrl+C를 눌러 watch 명령을 중지합니다.

요약

이 실험실에서는 GPU 성능을 관리하고 튜닝하기 위한 몇 가지 주요 Hashcat 플래그에 대한 실습 경험을 쌓았습니다.

다음과 같은 방법을 배웠습니다.

  • --opencl-devices를 사용하여 사용 가능한 모든 OpenCL 호환 장치 나열하기
  • -d 플래그를 사용하여 특정 GPU 를 작업 대상으로 지정하기
  • --gpu-temp-retain으로 온도 제한을 설정하여 하드웨어를 과열로부터 보호하기
  • 벤치마크 모드에서 --opencl-vector-width 플래그를 실험하여 최적의 성능 설정 찾기
  • 무거운 작업 부하 중에 nvidia-smiwatch를 사용하여 GPU 의 실시간 통계 모니터링하기

이러한 명령을 숙달하면 기본 사용자에서 고급 실무자로 발전하여 하드웨어의 안전성과 안정성을 보장하면서 크랙 속도를 극대화할 수 있습니다.