John the Ripper 를 사용하여 Office 문서 (DOCX, XLSX, PPTX) 크랙하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 강력한 비밀번호 크래킹 도구인 John the Ripper 를 사용하여 비밀번호로 보호된 Microsoft Office 문서 (DOCX, XLSX, PPTX) 를 크래킹하는 과정을 탐구합니다. office2john.py를 사용하여 Office 파일에서 비밀번호 해시를 추출한 다음, 이 해시를 John the Ripper 에 전달하여 크래킹합니다. 이 실습은 실제 시나리오에 포함된 단계를 보여주며, Office 문서에 대한 약한 비밀번호의 보안 영향을 이해하는 데 도움이 될 것입니다.

비밀번호로 보호된 DOCX 파일 생성

이 단계에서는 간단한 DOCX 파일을 생성하고 비밀번호로 보호합니다. 이 파일은 이후 단계에서 비밀번호 해시를 추출하고 크래킹하는 데 사용됩니다.

먼저 DOCX 파일을 생성하기 위해 libreoffice-writer를 설치합니다.

sudo apt install -y libreoffice-writer

설치가 완료되면 LibreOffice Writer 를 엽니다.

libreoffice --writer &

새로운 LibreOffice Writer 창이 열립니다.

  1. "This is a test document."와 같이 일부 텍스트를 입력합니다.
  2. 파일 -> 다른 이름으로 저장...으로 이동합니다.
  3. 다른 이름으로 저장 대화 상자에서 /home/labex/project/로 이동합니다.
  4. 파일 이름으로 secret.docx를 입력합니다.
  5. 비밀번호로 저장 상자를 선택합니다.
  6. 저장을 클릭합니다.
  7. 비밀번호 설정 대화 상자에서 비밀번호 입력비밀번호 확인 필드에 모두 password123을 비밀번호로 입력합니다.
  8. 확인을 클릭합니다.
  9. LibreOffice Writer 를 닫습니다.

~/project 디렉토리에 secret.docx 파일이 있는지 확인합니다.

ls -l ~/project/secret.docx

-rw-r--r-- 1 labex labex XXXX Month XX XX:XX /home/labex/project/secret.docx

office2john 을 사용하여 DOCX 에서 해시 추출

이 단계에서는 John the Ripper 스위트의 일부인 office2john.py 스크립트를 사용하여 생성한 secret.docx 파일에서 비밀번호 해시를 추출합니다. 이 해시는 John the Ripper 가 크래킹을 시도할 대상입니다.

먼저 office2john.py 스크립트를 찾습니다. 일반적으로 /usr/share/john/ 디렉토리에 있습니다.

find /usr/share/john/ -name office2john.py

/usr/share/john/office2john.py

이제 office2john.py를 사용하여 secret.docx에서 해시를 추출하고 hash.txt라는 파일에 저장합니다.

python3 /usr/share/john/office2john.py ~/project/secret.docx > ~/project/hash.txt

추출된 해시를 보려면 hash.txt의 내용을 표시합니다.

cat ~/project/hash.txt

secret.docx:$office$*2007*100000*256*16*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX

출력에는 secret.docx:$office$...로 시작하는 긴 문자열이 표시되며, 이것이 비밀번호의 해시입니다.

John the Ripper 로 DOCX 해시 크래킹

해시를 추출했으므로 이제 John the Ripper 를 사용하여 이를 크래킹합니다. 비밀번호가 "password123"으로 일반적인 단어이므로 이 시연에서는 간단한 단어 목록을 사용합니다.

John the Ripper 에는 /usr/share/john/password.lst에 위치한 기본 단어 목록이 있습니다. 이 단어 목록을 사용해 보겠습니다.

john --wordlist=/usr/share/john/password.lst ~/project/hash.txt

John the Ripper 가 해시 처리를 시작합니다. 비밀번호가 단어 목록에 있으면 빠르게 찾을 것입니다.


Using default input encoding: UTF-8
Loaded 1 password hash (Office, 2007/2010/2013/2016 [MD5/SHA1/SHA256/SHA512 RC4/AES])
Will run till all hashes are cracked, by default
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (secret.docx)
1g 0:00:00:00 DONE (20XX-XX-XX XX:XX) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Session completed.

크래킹 후에는 --show 옵션을 사용하여 크래킹된 비밀번호를 볼 수 있습니다.

john --show ~/project/hash.txt

secret.docx:password123

1 password hash cracked, 0 left

이 출력은 John the Ripper 가 secret.docx의 비밀번호를 password123으로 성공적으로 크래킹했음을 확인합니다.

XLSX 및 PPTX 파일에 대해 반복

이 단계에서는 XLSX(Excel) 및 PPTX(PowerPoint) 파일에 동일한 프로세스를 적용하여 office2john.py와 John the Ripper 가 다양한 Office 문서 유형에 걸쳐 유사하게 작동함을 보여줍니다.

먼저 libreoffice-calclibreoffice-impress를 설치합니다.

sudo apt install -y libreoffice-calc libreoffice-impress

비밀번호로 보호된 XLSX 파일 생성:

  1. LibreOffice Calc 열기:
    libreoffice --calc &
  2. 일부 텍스트 입력, 예: "Spreadsheet data."
  3. File -> Save As...로 이동합니다.
  4. /home/labex/project/로 이동합니다.
  5. 파일 이름으로 secret.xlsx를 입력합니다.
  6. Save with password를 선택합니다.
  7. Save를 클릭합니다.
  8. 비밀번호를 password123으로 설정하고 확인합니다.
  9. OK를 클릭하고 LibreOffice Calc 를 닫습니다.

XLSX 에서 해시 추출:

python3 /usr/share/john/office2john.py ~/project/secret.xlsx >> ~/project/hash.txt

비밀번호로 보호된 PPTX 파일 생성:

  1. LibreOffice Impress 열기:
    libreoffice --impress &
  2. 제목 추가, 예: "Presentation Title."
  3. File -> Save As...로 이동합니다.
  4. /home/labex/project/로 이동합니다.
  5. 파일 이름으로 secret.pptx를 입력합니다.
  6. Save with password를 선택합니다.
  7. Save를 클릭합니다.
  8. 비밀번호를 password123으로 설정하고 확인합니다.
  9. OK를 클릭하고 LibreOffice Impress 를 닫습니다.

PPTX 에서 해시 추출:

python3 /usr/share/john/office2john.py ~/project/secret.pptx >> ~/project/hash.txt

모든 해시 크래킹:
이제 업데이트된 hash.txt 파일 (DOCX, XLSX 및 PPTX 에 대한 해시 포함) 에서 John the Ripper 를 실행합니다.

john --wordlist=/usr/share/john/password.lst ~/project/hash.txt

Using default input encoding: UTF-8
Loaded 3 password hashes (Office, 2007/2010/2013/2016 [MD5/SHA1/SHA256/SHA512 RC4/AES])
Will run till all hashes are cracked, by default
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (secret.xlsx)
password123      (secret.pptx)
password123      (secret.docx)
3g 0:00:00:00 DONE (20XX-XX-XX XX:XX) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Session completed.

모든 크래킹된 비밀번호 확인:

john --show ~/project/hash.txt

secret.xlsx:password123
secret.pptx:password123
secret.docx:password123

3 password hashes cracked, 0 left

Office 문서 암호화 이해

이 단계에서는 Microsoft Office 문서에서 사용되는 암호화 메커니즘과 John the Ripper 와 같은 도구가 효과적인 이유에 대해 간략하게 논의합니다.

최신 Microsoft Office 문서 (DOCX, XLSX, PPTX) 는 XML 기반 형식 (Open XML) 을 사용합니다. 비밀번호가 설정되면 문서의 콘텐츠가 암호화됩니다. 암호화 프로세스에는 PBKDF2(Password-Based Key Derivation Function 2) 와 같은 키 파생 함수 (KDF) 를 사용하여 사용자 비밀번호에서 암호화 키를 파생하는 과정이 포함됩니다.

office2john.py는 솔트 (salt), 반복 횟수, 암호화된 검증자 해시 (encrypted verifier hash) 와 같은 필요한 매개변수를 Office 문서의 XML 구조에서 추출하여 작동합니다. 이러한 매개변수는 해시 유형 (예: Office 2007/2010/2013/2016)과 함께 John the Ripper 가 이해하는 "해시" 문자열을 형성합니다.

그런 다음 John the Ripper 는 무차별 대입 (brute-force) 또는 사전 공격 (dictionary attack) 을 수행합니다. 단어 목록의 각 단어 (또는 무차별 대입 공격의 각 조합) 에 대해 추출된 매개변수와 동일한 KDF 를 적용하여 후보 키를 생성합니다. 이 후보 키가 암호화된 검증자 해시와 일치하면 비밀번호가 발견됩니다.

암호화의 강도는 비밀번호의 복잡성과 길이에 크게 좌우됩니다. "password123"과 같이 약하거나 일반적인 비밀번호는 이 실습에서 보여준 것처럼 사전 공격을 사용하여 쉽게 크래킹할 수 있습니다. 길고 무작위이며 다양한 문자를 포함하는 강력한 비밀번호는 크래킹에 필요한 시간과 컴퓨팅 리소스를 크게 증가시켜 훨씬 더 안전하게 만듭니다.

이 연습은 민감한 문서에 강력하고 고유한 비밀번호를 사용하여 무단 액세스로부터 보호하는 것의 중요성을 강조합니다.

요약

이 실습에서는 office2john.py를 사용하여 비밀번호로 보호된 Microsoft Office 문서 (DOCX, XLSX, PPTX) 에서 비밀번호 해시를 추출하는 방법을 성공적으로 배웠습니다. 그런 다음 John the Ripper 를 사용하여 추출된 해시를 크래킹함으로써 약한 비밀번호로 보호된 문서의 취약성을 입증했습니다. 이 실습 경험을 통해 비밀번호 크래킹 프로세스에 대한 통찰력을 얻고 디지털 자산을 보호하기 위해 강력하고 복잡한 비밀번호를 사용하는 것의 중요성을 다시 한번 강조했습니다.