소개
VeraCrypt 는 실시간 암호화 (on-the-fly encryption) 를 위한 인기 있는 오픈 소스 도구입니다. 강력한 보안을 제공하지만, 비밀번호는 때때로 가장 취약한 연결고리가 될 수 있습니다. 이러한 비밀번호의 강도를 테스트하는 방법을 이해하는 것은 보안 감사 및 침투 테스트에서 중요한 기술입니다.
이 실습에서는 보안 분석가의 역할을 수행하게 됩니다. 먼저 알려진 패턴을 따르는 비밀번호로 암호화된 VeraCrypt 볼륨을 생성합니다. 그런 다음, 이 볼륨에서 필요한 해시 데이터 (hash data) 를 추출하는 방법을 배우게 됩니다. 마지막으로, 강력한 비밀번호 복구 도구인 Hashcat 을 사용하여 "마스크 공격 (mask attack)"을 수행하여 비밀번호를 크랙합니다. 이 과정을 통해 디지털 포렌식 및 윤리적 해킹에 사용되는 기본적인 기술을 직접 경험하게 될 것입니다.
작은 암호화된 VeraCrypt 볼륨 생성
이 단계에서는 VeraCrypt 명령줄 인터페이스를 사용하여 새 암호화된 파일 컨테이너를 생성합니다. 이 컨테이너는 이후 비밀번호 복구 연습의 대상이 됩니다. 이후 단계에서 마스크 공격의 효과를 시연하기 위해 의도적으로 간단한 비밀번호 구조를 사용할 것입니다.
대화형 생성 프로세스를 통해 안내될 것입니다. 지침을 주의 깊게 따르십시오.
먼저 새 볼륨을 생성하는 명령을 실행합니다. -t 플래그는 텍스트 모드를 활성화하고, -c는 생성 (create) 을 의미합니다.
veracrypt -t -c
프로그램이 일련의 질문을 할 것입니다. 다음과 같이 응답하십시오.
- 볼륨 유형 (Volume Type): 기본값인
Normal을 선택하려면Enter를 누르십시오. - 볼륨 위치 (Volume Location):
myvolume.hc를 입력하고Enter를 누르십시오. 이렇게 하면 현재 디렉토리 (~/project) 에 볼륨 파일이 생성됩니다. - 볼륨 크기 (Volume Size):
1M(1 메가바이트) 을 입력하고Enter를 누르십시오. 이 실습에는 작은 크기로 충분합니다. - 암호화 알고리즘 (Encryption Algorithm): 기본값인
AES를 선택하려면Enter를 누르십시오. - 해시 알고리즘 (Hash Algorithm): 기본값인
SHA-512를 선택하려면Enter를 누르십시오. - 파일 시스템 (Filesystem): 기본값인
FAT를 선택하려면Enter를 누르십시오. - 비밀번호 (Password): 이것은 중요한 단계입니다. 이 실습에서는 비밀번호
LabEx2024를 입력하고Enter를 누르십시오. - 비밀번호 재입력 (Re-enter Password):
LabEx2024를 다시 입력하고Enter를 누르십시오. - PIM: 기본값을 사용하려면
Enter를 누르십시오 (PIM 없음). - 키파일 (Keyfiles): 키파일 사용을 건너뛰려면
Enter를 누르십시오. - 엔트로피 수집 (Entropy Collection): 도구에서 암호화 엔트로피를 생성하기 위해 최소 320 개의 무작위 문자를 입력하라는 메시지가 표시됩니다. 진행률 표시줄이 찰 때까지 키보드로 무작위 문자를 입력한 다음
Enter를 누르십시오.
마지막 단계를 거치면 VeraCrypt 가 파일을 생성합니다. ls 명령으로 생성을 확인할 수 있습니다.
ls -l myvolume.hc
다음과 유사한 출력이 표시되어 파일이 존재하고 크기가 약 1MB 임을 확인할 수 있습니다.
-rw-r--r-- 1 labex labex 1048576 Dec 01 12:34 myvolume.hc
이제 암호화된 VeraCrypt 볼륨을 성공적으로 생성했습니다.
해시로 첫 512 바이트 추출
이 단계에서는 방금 생성한 VeraCrypt 볼륨에서 비밀번호 해시를 추출합니다. SHA-512 또는 RIPEMD-160 과 같은 해시 알고리즘을 사용하는 표준 VeraCrypt 컨테이너의 경우, 비밀번호 검증에 필요한 데이터는 볼륨 파일의 첫 512 바이트 내에 저장됩니다. Hashcat 은 이 데이터를 직접 사용하여 크랙 공격을 수행할 수 있습니다.
데이터 복사 및 변환을 위한 강력한 유틸리티인 dd 명령을 사용합니다.
다음 명령을 사용하여 myvolume.hc에서 첫 512 바이트를 읽어 veracrypt.hash라는 새 파일에 씁니다.
if=myvolume.hc: input file (입력 파일) 을 지정합니다.of=veracrypt.hash: output file (출력 파일) 을 지정합니다.bs=512: block size (블록 크기) 를 512 바이트로 설정합니다.count=1: 1개의 블록만 복사하도록 지정합니다.
dd if=myvolume.hc of=veracrypt.hash bs=512 count=1
명령이 실행되고 작업 요약이 표시됩니다.
1+0 records in
1+0 records out
512 bytes copied, 0.00012345 s, 4.1 MB/s
이제 새 해시 파일이 생성되었고 정확히 512 바이트 크기인지 확인합니다.
ls -l veracrypt.hash
출력은 다음과 같아야 합니다.
-rw-r--r-- 1 labex labex 512 Dec 01 12:35 veracrypt.hash
이제 Hashcat 이 공격에 사용할 해시 데이터를 성공적으로 추출했습니다.
VeraCrypt 에 대한 올바른 Hashcat 모드 식별
이 단계에서는 Hashcat 에 대한 올바른 "해시 모드"를 찾는 방법을 배웁니다. Hashcat 은 수백 가지의 다양한 해시 유형을 지원하므로, 어떤 유형을 크랙하려는지 정확히 알려주어야 합니다. 각 유형은 고유한 번호로 식별됩니다.
1 단계에서 AES 암호화와 SHA-512 해시 알고리즘으로 볼륨을 생성했으므로, Hashcat 에서 해당 모드를 찾아야 합니다. Hashcat 의 도움말 출력을 검색하여 이를 수행할 수 있습니다.
다음 명령을 사용하여 Hashcat 의 도움말 정보를 표시하고 "VeraCrypt"가 포함된 줄을 필터링합니다. grep -i 명령은 대소문자를 구분하지 않는 검색을 수행합니다.
hashcat --help | grep -i veracrypt
출력에는 VeraCrypt 와 관련된 모든 해시 모드가 나열됩니다.
...
13711 | VeraCrypt RIPEMD160 + XTS 512 bit | Operating System
13712 | VeraCrypt RIPEMD160 + XTS 1024 bit | Operating System
13713 | VeraCrypt RIPEMD160 + XTS 1536 bit | Operating System
13721 | VeraCrypt SHA512 + XTS 512 bit | Operating System
13722 | VeraCrypt SHA512 + XTS 1024 bit | Operating System
13723 | VeraCrypt SHA512 + XTS 1536 bit | Operating System
13731 | VeraCrypt SHA256 + XTS 512 bit | Operating System
13732 | VeraCrypt SHA256 + XTS 1024 bit | Operating System
13733 | VeraCrypt SHA256 + XTS 1536 bit | Operating System
13751 | VeraCrypt Whirlpool + XTS 512 bit | Operating System
13752 | VeraCrypt Whirlpool + XTS 1024 bit | Operating System
13753 | VeraCrypt Whirlpool + XTS 1536 bit | Operating System
...
목록을 살펴보십시오. 1 단계에서 선택한 내용 (SHA512) 을 기반으로 볼륨에 대한 올바른 모드는 13721입니다. 이 모드 번호는 마지막 단계에서 Hashcat 에 veracrypt.hash 파일을 해석하는 방법을 알려주는 데 사용됩니다.
알려진 비밀번호 구조에 대한 마스크 공격 구성
이 단계에서는 Hashcat 공격을 위한 "마스크"를 구성합니다. 마스크 공격은 비밀번호 구조에 대한 일부 지식이 있을 때 매우 효율적입니다. 저희 실험실에서는 비밀번호가 LabEx2024임을 알고 있습니다. 여기서는 구조만 알고 있다고 가정해 보겠습니다. 즉, "LabEx"라는 단어 뒤에 네 자리 숫자가 오는 형태입니다 (예: 연도).
Hashcat 은 마스크를 정의하기 위해 특수 플레이스홀더 또는 "문자 집합 (charsets)"을 사용합니다.
?l= 소문자 (a...z)?u= 대문자 (A...Z)?d= 숫자 (0...9)?s= 특수 문자 (!,@,#등)
가정한 구조 ("LabEx" + 네 자리 숫자) 를 기반으로 마스크는 LabEx?d?d?d?d가 됩니다. 이는 Hashcat 에게 리터럴 문자열 "LabEx"로 시작하고 0000부터 9999까지의 모든 네 자리 숫자 시퀀스로 끝나는 모든 조합을 시도하도록 지시합니다.
마스크가 생성할 비밀번호를 확인하기 위해 드라이런 (dry run) 을 해보겠습니다. -a 3 플래그는 마스크 공격을 지정하고, --stdout은 실제 공격을 수행하는 대신 생성된 후보를 화면에 출력하도록 Hashcat 에 지시합니다.
hashcat --stdout -a 3 LabEx?d?d?d?d
이 명령은 LabEx0000, LabEx0001 등으로 시작하여 LabEx9999에 도달할 때까지 수천 개의 잠재적 비밀번호를 터미널에 빠르게 출력합니다. 언제든지 Ctrl+C를 눌러 출력을 중지할 수 있습니다.
이를 통해 마스크가 대상 비밀번호인 LabEx2024를 포함하도록 올바르게 구성되었음을 확인할 수 있습니다.
볼륨 비밀번호 복구를 위한 공격 실행
마지막 단계에서는 모든 요소를 결합하여 공격을 시작하고 VeraCrypt 볼륨 비밀번호를 복구합니다. 해시 파일 (veracrypt.hash), 해시 모드 (13721), 공격 마스크 (LabEx?d?d?d?d) 가 준비되었습니다.
최종 Hashcat 명령을 조립해 보겠습니다.
-m 13721: VeraCrypt(SHA512) 의 해시 모드를 설정합니다.-a 3: 공격 모드를 마스크 공격으로 설정합니다.veracrypt.hash: 대상 해시 파일입니다.LabEx?d?d?d?d: 사용할 비밀번호 마스크입니다.
이제 터미널에서 명령을 실행합니다.
hashcat -m 13721 -a 3 veracrypt.hash LabEx?d?d?d?d
Hashcat 이 시작됩니다. 비밀번호 공간이 작기 때문에 공격은 매우 빠르게 완료될 것입니다. 상태 업데이트가 표시된 후 최종 결과가 나타납니다.
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: VeraCrypt SHA512 + XTS 512 bit
Hash.Target......: veracrypt.hash
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Mask.......: LabEx?d?d?d?d [9]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: XXXXXX H/s (0.01ms) @ Accel:X Loops:X
Recovered........: 1/1 (100.00%) Digests
Progress.........: 10000/10000 (100.00%)
Rejected.........: 0/10000 (0.00%)
Restore.Point....: 10000/10000 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1
Candidates.#1....: LabEx0000 -> LabEx9999
Hardware.Mon.#1..: Util: 99%
veracrypt.hash:LabEx2024
All hashes have been recovered.
...
성공! veracrypt.hash:LabEx2024 줄은 Hashcat 이 비밀번호를 성공적으로 복구했음을 보여줍니다.
Hashcat 은 복구된 비밀번호를 hashcat.potfile이라는 파일에 자동으로 저장합니다. --show 옵션을 사용하여 언제든지 복구된 비밀번호를 볼 수 있습니다.
hashcat -m 13721 --show veracrypt.hash
이것은 복구된 해시와 비밀번호를 다시 출력합니다.
veracrypt.hash:LabEx2024
축하합니다! Hashcat 을 사용하여 VeraCrypt 볼륨 비밀번호를 성공적으로 크랙했습니다!
요약
이 실험실에서는 VeraCrypt 로 암호화된 볼륨을 대상으로 하여 비밀번호 보안 분석에 대한 실질적인 경험을 쌓았습니다.
비밀번호 복구 프로세스의 주요 단계를 성공적으로 수행했습니다.
- VeraCrypt 의 명령줄 도구를 사용하여 암호화된 컨테이너를 생성했습니다.
- 오프라인 공격에 필요한 512 바이트 해시 데이터를 추출했습니다.
- Hashcat 의 도움말 시스템을 사용하여 대상에 대한 올바른 해시 모드를 식별했습니다.
- 알려진 비밀번호 구조를 기반으로 대상 마스크 공격을 구성하고 테스트했습니다.
- 공격을 실행하여 볼륨의 비밀번호를 성공적으로 복구했습니다.
이러한 기술은 윤리적 해킹 및 디지털 포렌식 분야의 기본이며, 비밀번호 정책 및 구조가 약점을 테스트받을 수 있는 방법을 보여줍니다. 이러한 공격 벡터를 이해하는 것이 더 강력한 방어를 구축하는 첫 번째 단계입니다.


