소개
이 실습에서는 강력한 비밀번호 크래킹 도구인 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 창이 열립니다.
- "This is a test document."와 같이 일부 텍스트를 입력합니다.
파일->다른 이름으로 저장...으로 이동합니다.다른 이름으로 저장대화 상자에서/home/labex/project/로 이동합니다.- 파일 이름으로
secret.docx를 입력합니다. 비밀번호로 저장상자를 선택합니다.저장을 클릭합니다.비밀번호 설정대화 상자에서비밀번호 입력및비밀번호 확인필드에 모두password123을 비밀번호로 입력합니다.확인을 클릭합니다.- 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-calc 및 libreoffice-impress를 설치합니다.
sudo apt install -y libreoffice-calc libreoffice-impress
비밀번호로 보호된 XLSX 파일 생성:
- LibreOffice Calc 열기:
libreoffice --calc & - 일부 텍스트 입력, 예: "Spreadsheet data."
File->Save As...로 이동합니다./home/labex/project/로 이동합니다.- 파일 이름으로
secret.xlsx를 입력합니다. Save with password를 선택합니다.Save를 클릭합니다.- 비밀번호를
password123으로 설정하고 확인합니다. OK를 클릭하고 LibreOffice Calc 를 닫습니다.
XLSX 에서 해시 추출:
python3 /usr/share/john/office2john.py ~/project/secret.xlsx >> ~/project/hash.txt
비밀번호로 보호된 PPTX 파일 생성:
- LibreOffice Impress 열기:
libreoffice --impress & - 제목 추가, 예: "Presentation Title."
File->Save As...로 이동합니다./home/labex/project/로 이동합니다.- 파일 이름으로
secret.pptx를 입력합니다. Save with password를 선택합니다.Save를 클릭합니다.- 비밀번호를
password123으로 설정하고 확인합니다. 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 를 사용하여 추출된 해시를 크래킹함으로써 약한 비밀번호로 보호된 문서의 취약성을 입증했습니다. 이 실습 경험을 통해 비밀번호 크래킹 프로세스에 대한 통찰력을 얻고 디지털 자산을 보호하기 위해 강력하고 복잡한 비밀번호를 사용하는 것의 중요성을 다시 한번 강조했습니다.


