소개
이 실습에서는 널리 사용되는 오픈 소스 비밀번호 보안 감사 및 비밀번호 복구 도구인 John the Ripper 를 직접 사용해 보는 경험을 쌓게 됩니다. 이러한 도구를 사용하는 방법을 이해하는 것은 비밀번호 정책의 취약점을 식별하고 전반적인 시스템 보안을 강화하는 데 매우 중요합니다. 비밀번호 해시 수집, John the Ripper 를 사용한 약한 비밀번호 식별, 크랙된 비밀번호에 대한 보고서 생성, 개선된 비밀번호 정책 권장 사항 공식화에 관련된 실질적인 단계를 배우게 됩니다. 또한 이 실습에서는 비밀번호 감사 프로세스의 자동화에 대해서도 다루어 비밀번호 보안 모범 사례에 대한 포괄적인 개요를 제공합니다.
감사용 비밀번호 해시 수집
이 단계에서는 비밀번호 감사에 필수적인 비밀번호 해시를 수집하는 방법을 배우게 됩니다. Linux 시스템에서 비밀번호 해시는 일반적으로 /etc/shadow 파일에 저장됩니다. 그러나 이 파일에 직접 접근하려면 root 권한이 필요합니다. 이 실습의 목적을 위해 여러분이 사용할 /etc/shadow_dummy라는 더미 shadow 파일을 생성했습니다.
먼저 더미 shadow 파일의 내용을 살펴보겠습니다.
cat /etc/shadow_dummy
사용자 이름과 해당 비밀번호 해시를 보여주는 다음과 유사한 출력이 표시될 것입니다.
user1:5f4dcc3b5aa765d61d8327deb882cf99
user2:21232f297a57a5a743894a0e4a801fc3
user3:d41d8cd98f00b204e9800998ecf8427e
user4:e10adc3949ba59abbe56e057f20f883e
user5:a8b7c6d5e4f3g2h1i0j9k8l7m6n5o4p3
다음으로, John the Ripper 에서 쉽게 접근할 수 있도록 이 더미 shadow 파일을 현재 작업 디렉토리 (~/project) 로 복사합니다.
cp /etc/shadow_dummy ~/project/hashes.txt
이제 hashes.txt 파일이 ~/project 디렉토리로 성공적으로 복사되었는지 확인합니다.
ls ~/project/hashes.txt
출력은 파일의 존재를 확인할 것입니다.
/home/labex/project/hashes.txt
약한 비밀번호 식별을 위한 John the Ripper 실행
이 단계에서는 준비한 hashes.txt 파일에서 약한 비밀번호를 식별하기 위해 John the Ripper 를 사용합니다. John the Ripper 는 사전 공격을 포함한 다양한 크래킹 모드를 사용할 수 있습니다. 미리 정의된 단어 목록을 사용하여 사전 공격을 수행할 것입니다.
먼저 hashes.txt 및 wordlist.txt 파일이 있는 ~/project 디렉토리에 있는지 확인합니다.
cd ~/project
이제 hashes.txt 파일과 wordlist.txt 파일을 사용하여 John the Ripper 를 실행합니다. --wordlist 옵션은 단어 목록의 경로를 지정합니다.
john --wordlist=wordlist.txt hashes.txt
John the Ripper 가 해시 처리를 시작합니다. 일치하는 항목을 찾으면 크랙된 비밀번호를 표시합니다. 출력은 다음과 유사할 수 있습니다.
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (LM HASH, descrypt/BSDI crypt/other crypt(3) [DES/AES-NI])
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
123456 (user2)
test (user3)
admin (user4)
4g 0:00:00:00 DONE (2023-10-27 08:30) 400% (ETA: 08:30) 0.000c/s 0p/s 4.000w/s 4.000P/s user1, user2, user3, user4
Session completed.
이 예에서 John the Ripper 는 user1, user2, user3, user4의 비밀번호를 성공적으로 크랙했습니다. user5의 비밀번호는 간단한 단어 목록에 없기 때문에 크랙되지 않았습니다.
지금까지 John 이 크랙한 비밀번호를 보려면 --show 옵션을 사용할 수 있습니다.
john --show hashes.txt
출력은 크랙된 비밀번호 목록을 표시합니다.
user1:password
user2:123456
user3:test
user4:admin
4 password hashes cracked, 1 left
이 명령은 크래킹 세션의 결과를 검토하는 데 유용합니다.
크랙된 비밀번호에 대한 보고서 생성
이 단계에서는 크랙된 비밀번호에 대한 보고서를 생성하는 방법을 배우게 됩니다. John the Ripper 는 크랙된 비밀번호를 일반적으로 ~/.john/john.pot 파일에 저장합니다. --show 옵션을 사용하여 이러한 크랙된 비밀번호를 표시할 수 있으며, 이는 기본적인 보고서 역할을 합니다.
크랙된 비밀번호의 깔끔한 목록을 얻으려면 john --show의 출력을 파일로 리디렉션할 수 있습니다. 이는 추가 분석하거나 공유할 보고서를 생성하는 일반적인 방법입니다.
먼저 ~/project 디렉토리에 있는지 확인합니다.
cd ~/project
이제 john --show hashes.txt의 출력을 cracked_passwords.txt라는 새 파일로 리디렉션합니다.
john --show hashes.txt > cracked_passwords.txt
이 명령은 터미널에 출력을 생성하지 않지만 현재 디렉토리에 cracked_passwords.txt 파일을 생성합니다.
다음으로, cracked_passwords.txt 파일의 내용을 보고서가 올바르게 생성되었는지 확인합니다.
cat cracked_passwords.txt
다음과 유사한 크랙된 비밀번호 목록이 표시될 것입니다.
user1:password
user2:123456
user3:test
user4:admin
4 password hashes cracked, 1 left
이 cracked_passwords.txt 파일은 이제 약한 비밀번호가 크랙된 사용자 계정을 자세히 설명하는 보고서 역할을 합니다. 실제 시나리오에서는 이 보고서를 사용하여 즉시 비밀번호를 변경해야 하는 사용자를 식별하는 데 사용됩니다.
비밀번호 정책 개선 권장 사항
이 단계에서는 비밀번호 감사 결과를 바탕으로 비밀번호 정책 개선을 위한 권장 사항을 수립합니다. 약한 비밀번호를 식별하는 것은 첫 번째 단계일 뿐이며, 다음으로 중요한 단계는 이러한 취약점을 방지하기 위한 조치를 구현하는 것입니다.
크랙된 비밀번호 (password, 123456, test, admin) 를 바탕으로 현재 비밀번호 정책 (또는 정책 부재) 이 매우 간단하고 일반적인 비밀번호를 허용하고 있음이 분명합니다.
비밀번호 정책 개선을 위한 주요 권장 사항은 다음과 같습니다.
- 최소 길이: 최소 비밀번호 길이를 강제합니다. 일반적으로 12 자 이상이어야 합니다. 비밀번호가 길수록 크랙하기가 기하급수적으로 어려워집니다.
- 복잡성 요구 사항: 다음 문자 유형의 조합 사용을 의무화합니다.
- 대문자 (A-Z)
- 소문자 (a-z)
- 숫자 (0-9)
- 특수 문자 (!@#$%^&*()_+-=[]{}|;:'",.<>/?`~)
- 일반적인 비밀번호 피하기: 자주 사용되거나 쉽게 추측할 수 있는 비밀번호 (예:
wordlist.txt에서 찾은 것) 의 블랙리스트를 구현합니다. 많은 시스템에서 이러한 블랙리스트와 새 비밀번호를 비교할 수 있습니다. - 개인 정보 사용 금지: 사용자가 쉽게 추측하거나 온라인에서 찾을 수 있는 개인 정보 (이름, 생일, 애완동물 이름) 를 사용하지 않도록 권고합니다.
- 정기적인 변경 (주의 필요): 역사적으로 권장되었지만, 빈번한 강제 비밀번호 변경은 사용자가 더 간단하고 예측 가능한 비밀번호를 선택하게 만들 수 있습니다. 더 나은 접근 방식은 강력한 비밀번호를 강제하고 침해가 의심되는 경우에만 변경을 요구하는 것입니다.
- 다단계 인증 (MFA): 중요한 시스템의 경우 MFA 를 구현합니다. 비밀번호가 손상되더라도 MFA 는 추가적인 보안 계층을 제공합니다.
- 비밀번호 관리자: 사용자에게 비밀번호 관리자를 권장하거나 제공합니다. 이러한 도구는 다양한 서비스에 대해 강력하고 고유한 비밀번호를 생성하고 저장할 수 있습니다.
이해도를 보여주기 위해 이러한 권장 사항을 어떻게 전달할지 고려해 보세요. 예를 들어, 간단한 정책 문구를 작성할 수 있습니다.
~/project 디렉토리에 password_policy_recommendations.txt라는 파일을 만들고 몇 가지 주요 권장 사항을 추가해 보겠습니다.
cd ~/project
echo "--- Password Policy Recommendations ---" | tee password_policy_recommendations.txt > /dev/null
echo "1. Minimum length: 12 characters" | tee -a password_policy_recommendations.txt > /dev/null
echo "2. Complexity: Mix of uppercase, lowercase, numbers, special characters" | tee -a password_policy_recommendations.txt > /dev/null
echo "3. Avoid common passwords and personal information" | tee -a password_policy_recommendations.txt > /dev/null
echo "4. Implement Multi-Factor Authentication (MFA) for critical systems" | tee -a password_policy_recommendations.txt > /dev/null
이제 password_policy_recommendations.txt 파일의 내용을 확인합니다.
cat password_policy_recommendations.txt
출력에는 다음과 같은 권장 사항이 표시되어야 합니다.
--- Password Policy Recommendations ---
1. Minimum length: 12 characters
2. Complexity: Mix of uppercase, lowercase, numbers, special characters
3. Avoid common passwords and personal information
4. Implement Multi-Factor Authentication (MFA) for critical systems
이 파일은 권장 사항에 대한 기본 보고서를 나타냅니다.
비밀번호 감사 프로세스 자동화
이 단계에서는 비밀번호 감사 프로세스의 일부를 자동화하는 방법을 탐색합니다. John the Ripper 는 수동 도구이지만, 실행을 주기적으로 실행하도록 스크립트화하여 감사 프로세스를 더 효율적이고 선제적으로 만들 수 있습니다. 자동화는 비밀번호 강도를 지속적으로 모니터링하고 새로운 취약점이 나타날 때 식별하는 데 도움이 됩니다.
자동화하는 간단한 방법은 학습한 단계를 수행하는 셸 스크립트를 만드는 것입니다. 즉, 해시 수집, John the Ripper 실행 및 보고서 생성입니다.
~/project 디렉토리에 audit_script.sh라는 간단한 셸 스크립트를 만들어 보겠습니다.
cd ~/project
nano audit_script.sh
nano 편집기 안에 다음 내용을 추가합니다.
#!/bin/bash
## Define paths
HASH_FILE="/etc/shadow_dummy" ## In a real scenario, this would be /etc/shadow
WORDLIST_FILE="wordlist.txt"
OUTPUT_DIR="~/project/audit_results"
CRACKED_REPORT="$OUTPUT_DIR/cracked_passwords_$(date +%Y%m%d_%H%M%S).txt"
## Create output directory if it doesn't exist
mkdir -p "$OUTPUT_DIR"
echo "--- Starting Password Audit ---"
## Step 1: Copy hashes
cp "$HASH_FILE" "$OUTPUT_DIR/hashes.txt"
echo "Hashes copied to $OUTPUT_DIR/hashes.txt"
## Step 2: Run John the Ripper
echo "Running John the Ripper..."
john --wordlist="$WORDLIST_FILE" "$OUTPUT_DIR/hashes.txt"
## Step 3: Generate report
echo "Generating cracked password report..."
john --show "$OUTPUT_DIR/hashes.txt" > "$CRACKED_REPORT"
echo "Audit complete. Report saved to $CRACKED_REPORT"
echo "--- Audit Finished ---"
nano에서 저장하고 종료하려면 Ctrl+X를 누른 다음 Y를 누르고 Enter를 누릅니다.
다음으로 스크립트를 실행 가능하게 만듭니다.
chmod +x audit_script.sh
이제 스크립트를 실행하여 작동하는 모습을 확인합니다.
./audit_script.sh
수동 단계와 유사한 출력이 표시되며 감사 프로세스가 실행 중이고 보고서가 생성되고 있음을 나타냅니다.
--- Starting Password Audit ---
Hashes copied to /home/labex/project/audit_results/hashes.txt
Running John the Ripper...
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (LM HASH, descrypt/BSDI crypt/other crypt(3) [DES/AES-NI])
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
123456 (user2)
test (user3)
admin (user4)
4g 0:00:00:00 DONE (2023-10-27 08:35) 400% (ETA: 08:35) 0.000c/s 0p/s 4.000w/s 4.000P/s user1, user2, user3, user4
Session completed.
Generating cracked password report...
Audit complete. Report saved to /home/labex/project/audit_results/cracked_passwords_YYYYMMDD_HHMMSS.txt
--- Audit Finished ---
마지막으로 audit_results 디렉토리와 그 안의 보고서 파일이 생성되었는지 확인합니다.
ls ~/project/audit_results/
hashes.txt와 cracked_passwords_YYYYMMDD_HHMMSS.txt 파일 (여기서 YYYYMMDD_HHMMSS 는 현재 타임스탬프) 이 표시되어야 합니다.
cracked_passwords_20231027_083500.txt hashes.txt
이 스크립트는 실제 Linux 시스템에서 cron과 같은 도구를 사용하여 주기적으로 실행되도록 예약할 수 있으며, 이를 통해 지속적인 비밀번호 감사가 가능합니다.
요약
이 실습에서는 John the Ripper 를 사용하여 비밀번호 감사를 수행하는 방법을 성공적으로 배웠습니다. 더미 shadow 파일에서 비밀번호 해시를 수집하는 것으로 시작하여, wordlist 와 함께 John the Ripper 를 사용하여 약한 비밀번호를 식별했습니다. 크랙된 비밀번호 보고서를 생성하고 최소 길이, 복잡성 적용 및 일반적인 비밀번호 피하기와 같은 비밀번호 정책 개선을 위한 주요 권장 사항을 수립했습니다. 마지막으로 비밀번호 감사 프로세스를 자동화하는 기본 셸 스크립트를 만들어 이러한 작업을 지속적인 보안 모니터링 전략에 통합하는 방법을 시연했습니다. 이 실습 경험은 모든 시스템 관리자 또는 보안 전문가에게 중요한 기술인 비밀번호 보안 감사에 대한 기초적인 이해를 제공합니다.


