Hydra 공격 조기 중단

HydraBeginner
지금 연습하기

소개

이 실습에서는 Hydra 공격을 초기 단계에서 차단하기 위해 Hydra 의 시도 횟수 제한 옵션을 활용하는 방법을 탐색합니다. vsftpd를 사용하여 FTP 서버를 설정하고 각각 고유한 비밀번호를 가진 여러 사용자 계정 (testuser1testuser2) 을 구성하여 시작합니다. 이 설정을 통해 Hydra 가 여러 계정을 동시에 해킹하려는 시나리오를 시뮬레이션할 수 있습니다.

이 실습에서는 첫 번째 성공적인 로그인 후 Hydra 를 중지하는 -f 옵션과 다중 호스트 목록을 사용하는 -F 옵션을 안내합니다. 마지막으로 -f-F의 동작을 비교하여 Hydra 공격을 완화하는 데 어떻게 사용될 수 있는지 이해합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

여러 자격 증명으로 FTP 설정

이 단계에서는 FTP 서버를 설정하고 여러 사용자 자격 증명으로 구성합니다. 이를 통해 Hydra 가 여러 계정을 동시에 해킹하는 능력을 테스트할 수 있습니다. vsftpd (Very Secure FTP Daemon) 를 FTP 서버로 사용합니다.

먼저 vsftpd를 설치합니다. 터미널을 열고 다음 명령어를 실행합니다.

sudo apt update
sudo apt install vsftpd -y

다음으로 vsftpd를 구성해야 합니다. 먼저 원본 구성 파일의 백업을 생성합니다. 시스템 구성 파일을 변경하기 전에 이 작업을 수행하는 것이 좋습니다.

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

이제 nano를 사용하여 구성 파일 /etc/vsftpd.conf를 편집합니다. 이 파일은 FTP 서버의 동작을 제어합니다.

sudo nano /etc/vsftpd.conf

nano 편집기 내에서 다음 줄을 추가하거나 수정합니다. 이 설정은 익명 접근을 비활성화하고 로컬 사용자 로그인을 활성화하며 쓰기 접근을 허용하고 보안을 위해 로컬 사용자를 해당 사용자 홈 디렉터리로 chroot합니다.

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO

nano에서 파일을 저장하려면 다음을 수행합니다.

  1. Ctrl + X를 눌러 종료합니다.
  2. Y를 눌러 저장을 확인합니다.
  3. Enter를 눌러 파일 이름을 확인합니다.

파일 저장 후 다음 명령어를 사용하여 구성 파일의 변경 사항이 올바르게 적용되었는지 확인합니다.

sudo cat /etc/vsftpd.conf | grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|listen)"

출력 결과가 추가한 구성과 동일한지 확인합니다.

이제 여러 사용자 계정을 생성합니다. testuser1testuser2 두 사용자를 생성하고 비밀번호를 설정합니다. Hydra 는 이 사용자를 사용하여 로그인 시도를 수행합니다.

testuser1을 홈 디렉터리와 함께 생성합니다.

sudo useradd -m testuser1

비대화식 명령을 사용하여 testuser1의 비밀번호를 설정합니다.

echo 'testuser1:password123' | sudo chpasswd

testuser2를 홈 디렉터리와 함께 생성합니다.

sudo useradd -m testuser2

비대화식 명령을 사용하여 testuser2의 비밀번호를 설정합니다.

echo 'testuser2:password456' | sudo chpasswd

이 명령어는 비대화식이며 자동화된 환경에서 더욱 신뢰할 수 있도록 입력을 묻지 않고 사용자를 직접 생성합니다.

이제 chroot_local_user=YES가 활성화된 경우 보안상의 이유로 사용자의 홈 디렉터리가 해당 사용자가 쓰기 권한을 갖지 않도록 홈 디렉터리 권한을 수정해야 합니다.

sudo chmod 755 /home/testuser1
sudo chmod 755 /home/testuser2

각 사용자가 파일을 업로드할 수 있는 쓰기 가능한 하위 디렉터리를 생성합니다.

sudo mkdir /home/testuser1/files
sudo mkdir /home/testuser2/files
sudo chown testuser1:testuser1 /home/testuser1/files
sudo chown testuser2:testuser2 /home/testuser2/files

다음으로, 구성 파일에 적용한 변경 사항과 새 사용자를 인식하도록 vsftpd 서비스를 다시 시작합니다.

sudo service vsftpd restart

이제 FTP 서버가 올바르게 실행되고 새 사용자가 로그인할 수 있는지 테스트합니다. ftp 명령줄 클라이언트를 사용하여 서버에 연결할 수 있습니다. 로컬에서 서버를 실행하고 있으므로 localhost에 연결할 수 있습니다.

ftp localhost

사용자 이름을 입력하라는 메시지가 표시됩니다. testuser1을 입력하고 password123 비밀번호를 입력합니다. 모든 구성이 올바르면 로그인되었음을 나타내는 메시지가 표시됩니다.

Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:labex): testuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

FTP 클라이언트를 종료하려면 bye를 입력합니다.

ftp> bye
221 Goodbye.

이제 Hydra 가 공격에 사용할 파일을 준비합니다. 기본 작업 디렉터리인 ~/project 디렉터리로 이동합니다.

cd ~/project

~/project 디렉터리에 users.txt라는 파일을 만듭니다. 이 파일에는 Hydra 가 사용할 사용자 이름이 포함됩니다.

nano users.txt

users.txt에 다음 사용자 이름을 추가합니다.

testuser1
testuser2

파일을 저장하고 nano를 종료합니다.

다음으로 ~/project 디렉터리에 passwords.txt라는 파일을 만듭니다. 이 파일에는 테스트 사용자의 올바른 비밀번호를 포함하여 일반적인 잘못된 비밀번호도 포함된 비밀번호 목록이 포함됩니다.

nano passwords.txt

passwords.txt에 다음 비밀번호를 추가합니다.

password123
password456
password
123456
qwerty

파일을 저장하고 nano를 종료합니다.

이제 여러 사용자 계정이 있는 FTP 서버와 계정 해킹 시도에 사용할 수 있는 사용자 이름 및 비밀번호 목록이 준비되었습니다.

첫 번째 쌍 이후에 실행 중단 ( -f 옵션 사용)

이 단계에서는 Hydra 와 함께 -f 옵션을 사용합니다. -f 옵션은 Hydra 가 특정 대상에 대한 첫 번째 유효한 사용자 이름/비밀번호 쌍을 찾은 후 중지하도록 지시합니다. 특정 서비스에서 하나의 유효한 계정만 찾아야 하고 성공적인 로그인 후 Hydra 가 다른 조합을 계속 시도하지 않으려는 경우 유용합니다.

~/project 디렉터리에 있는지 확인합니다.

cd ~/project

이제 이전 단계에서 만든 사용자 이름 및 비밀번호 목록을 사용하여 FTP 서버에 대한 Hydra 를 실행합니다. -f 옵션을 포함합니다.

hydra -L users.txt -P passwords.txt localhost ftp -f

이 명령어를 분석해 보겠습니다.

  • hydra: 브루트포스 공격을 위한 명령줄 도구입니다.
  • -L users.txt: 현재 디렉터리의 사용자 이름 목록이 포함된 파일 (users.txt) 을 지정합니다.
  • -P passwords.txt: 현재 디렉터리의 비밀번호 목록이 포함된 파일 (passwords.txt) 을 지정합니다.
  • localhost: 대상 FTP 서버의 주소입니다.
  • ftp: 공격할 서비스 프로토콜 (이 경우 FTP) 입니다.
  • -f: Hydra 가 첫 번째 유효한 사용자/비밀번호 쌍을 찾은 후 중지하도록 지시하는 중요한 옵션입니다.

터미널에서 출력을 관찰합니다. Hydra 는 목록의 사용자 이름과 비밀번호를 사용하여 로그인을 시도합니다. 유효한 조합 (예: testuser1:password123) 을 찾으면 성공적인 로그인을 표시하고 작업을 중지합니다.

출력은 다음과 유사합니다.

Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:41:46
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://localhost:21/
[21][ftp] host: localhost   login: testuser1   password: password123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:41:47

Hydra 는 첫 번째 유효한 조합 (testuser1:password123) 을 찾은 직후 즉시 중지되었음을 알 수 있습니다. -f 옵션 없이 Hydra 는 testuser1에 대한 passwords.txt 파일의 모든 다른 조합을 계속 시도한 다음 testuser2로 이동하여 해당 사용자에 대한 모든 비밀번호를 시도했을 것입니다.

특정 서비스를 테스트하고 적어도 하나의 계정이 취약한지 확인하기만 하면 시간과 리소스를 크게 절약할 수 있으므로 이 옵션은 특히 유용합니다.

여러 대상 목록으로 -F 옵션 테스트

이 단계에서는 Hydra 의 -F 옵션을 살펴봅니다. -f 옵션은 단일 호스트에 대한 첫 번째 유효한 자격 증명 쌍을 찾은 후 중지하는 반면, -F 옵션은 목록의 모든 호스트에서 첫 번째 유효한 자격 증명 쌍을 찾은 후 중지합니다. 여러 시스템을 대상으로 하고 그 중 하나의 취약점만 찾으면 되는 경우에 특히 유용합니다.

이를 보여주기 위해 다중 호스트 시나리오를 시뮬레이션합니다. 가상 머신이 하나뿐이므로 호스트 목록에서 localhost를 여러 번 사용하여 다른 대상을 시뮬레이션합니다.

먼저 ~/project 디렉터리에 있는지 확인합니다.

cd ~/project

이제 ~/project 디렉터리에 hosts.txt라는 파일을 만듭니다. 이 파일에는 대상 호스트 목록이 포함됩니다.

nano hosts.txt

hosts.txt에 다음 줄을 추가합니다.

localhost
localhost

파일을 저장하고 nano를 종료합니다. localhost를 두 번 나열하여 Hydra 가 동일한 머신을 가리키더라도 두 개의 별개의 대상으로 취급하도록 지시합니다.

이제 hosts.txt에 지정된 호스트 목록을 대상으로 -F 옵션을 사용하여 Hydra 를 실행합니다.

hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F

이 명령어를 분석해 보겠습니다.

  • -L users.txt: 사용자 이름 목록이 포함된 파일을 지정합니다.
  • -P passwords.txt: 비밀번호 목록이 포함된 파일을 지정합니다.
  • -M hosts.txt: 새로운 옵션입니다. 대상 호스트 목록이 포함된 파일 (hosts.txt 현재 디렉터리) 을 지정합니다.
  • ftp: 공격할 서비스 프로토콜입니다.
  • -F: 목록의 모든 호스트에서 첫 번째 성공적인 로그인을 찾은 후 중지하도록 Hydra 에 지시하는 중요한 옵션입니다.

터미널에서 출력을 관찰합니다. Hydra 는 hosts.txt 파일의 각 호스트에 대해 목록의 사용자 이름과 비밀번호를 사용하여 로그인을 시도합니다. 호스트 중 어느 하나에서 유효한 조합을 찾으면 성공적인 로그인을 표시하고 hosts.txt에 나열된 모든 호스트에 대한 공격을 중지합니다.

출력은 다음과 유사합니다.

Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:42:10
[DATA] max 10 tasks per 2 servers, overall 20 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://(2 targets):21/
[21][ftp] host: localhost   login: testuser1   password: password123
[STATUS] attack finished for localhost (valid pair found)
2 of 2 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:42:11

hosts.txtlocalhost 항목이 두 개 있더라도 Hydra 는 첫 번째 localhost 인스턴스에서 첫 번째 성공적인 로그인을 찾은 후 중지합니다. 두 번째 localhost 항목에 대한 자격 증명을 찾으려고 시도하지 않습니다. 이는 -F 옵션의 효과를 보여줍니다.

-F 옵션은 여러 시스템을 대상으로 하고 목표를 달성하기 위해 하나의 취약한 시스템만 찾으면 되는 경우 매우 유용합니다. 나열된 대상 중 하나에서 취약점이 발견되면 즉시 공격을 중지하여 시간과 계산 리소스를 크게 절약할 수 있습니다.

-f 옵션과 -F 옵션 비교

이 단계에서는 -f-F 옵션의 동작을 직접 비교하여 차이점을 명확히 이해합니다. 이전 단계와 동일한 설정을 사용합니다. localhost에서 실행되는 FTP 서버, users.txtpasswords.txt 파일, localhost에 대한 항목이 두 개 포함된 hosts.txt 파일입니다.

먼저 -f 옵션을 사용하여 명령을 다시 실행합니다. 이 명령은 단일 호스트 (localhost) 를 대상으로 하며 해당 특정 호스트에 대한 첫 번째 유효한 자격 증명을 찾은 후 중지합니다.

hydra -L users.txt -P passwords.txt localhost ftp -f

2 단계에서 관찰했듯이 Hydra 는 testuser1:password123을 찾은 후 중지합니다. localhost에 대한 testuser2:password456을 찾으려고 하지 않습니다.

이제 -F 옵션을 사용하여 명령을 다시 실행합니다. 이 명령은 호스트 목록(hosts.txt) 을 대상으로 하며 해당 목록의 모든 호스트 중 어느 하나에서 첫 번째 유효한 자격 증명을 찾은 후 중지합니다.

hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F

3 단계에서 관찰했듯이 Hydra 는 hosts.txt의 첫 번째 localhost 항목에서 testuser1:password123을 찾은 후 중지합니다. hosts.txt 파일의 두 번째 localhost 항목을 확인하지 않습니다.

핵심적인 차이점은 Hydra 가 대상을 어떻게 해석하고 언제 중지할지 결정하는 데 있습니다.

  • -f (단일 대상): 단일 대상 (예: localhost) 을 지정하면 -f는 Hydra 가 해당 특정 대상에 대한 임의의 유효한 사용자 이름/비밀번호 쌍을 찾는 즉시 중지하도록 지시합니다. 동일한 대상에 대한 다른 유효한 자격 증명을 계속 검색하지 않습니다.

  • -F (다중 호스트 목록): -M을 사용하여 대상 목록을 지정하면 -F는 Hydra 가 해당 목록의 임의의 호스트에서 임의의 유효한 사용자 이름/비밀번호 쌍을 찾는 즉시 중지하도록 지시합니다. 동일한 호스트에 대한 다른 유효한 자격 증명을 계속 검색하지 않으며 목록의 후속 호스트를 확인하지도 않습니다.

차이점을 더 명확히 하기 위해, 여러 FTP 서버 (ftp1.example.com, ftp2.example.com, ftp3.example.com) 가 있는 네트워크를 스캔하는 가상 시나리오를 고려해 보겠습니다.

  • -f를 사용하고 ftp1.example.com을 대상으로 하면 Hydra 는 ftp1.example.com에서 첫 번째 유효한 자격 증명을 찾고 중지합니다. 그런 다음 ftp2.example.com을 확인하려면 별도의 Hydra 명령을 실행해야 합니다.

  • 세 서버를 모두 hosts.txt 파일에 넣고 -F를 사용하면 Hydra 는 ftp1.example.com을 확인하기 시작합니다. 거기서 유효한 자격 증명을 찾으면 ftp2.example.com 또는 ftp3.example.com에 연결하려고 시도조차 하지 않고 전체 작업을 즉시 중지합니다.

요약하면 다음과 같습니다.

  • 단일 대상에 집중하고 해당 대상에 대한 적어도 하나의 유효한 자격 증명을 찾으려면 -f를 사용합니다.
  • 여러 대상을 스캔하고 임의의 대상에서 임의의 유효한 자격 증명을 찾는 즉시 전체 작업을 중지하려면 -F를 사용합니다.

이로써 랩이 종료됩니다. FTP 서버를 성공적으로 설정하고 여러 사용자 계정을 구성했으며 Hydra 를 사용하여 계정을 해킹했으며 -f-F 옵션을 사용하여 Hydra 의 공격 동작을 제어했습니다.

요약

이 실습에서는 -f-F 옵션을 사용하여 Hydra 의 공격 동작을 제어하는 방법을 배웠습니다. vsftpd를 사용하여 로컬 FTP 서버를 설정하고 여러 사용자 계정 (testuser1testuser2) 으로 구성하여 실제 상황을 시뮬레이션했습니다. 또한 Hydra 가 사용할 users.txtpasswords.txt 파일을 준비했습니다.

그런 다음 -f 옵션을 사용하여 Hydra 가 단일 대상에 대한 첫 번째 유효한 사용자 이름/비밀번호 쌍을 찾은 후 중지하도록 지시하여 단일 취약 계정을 효율적으로 찾는 방법을 보여주었습니다. 이어서 다중 호스트 목록 (hosts.txt) 을 사용하여 -F 옵션을 탐색하여 Hydra 가 나열된 호스트 중 하나에서 단일 유효한 자격 증명을 찾는 즉시 전체 다중 대상 공격을 중지하는 방법을 배웠습니다.

마지막으로 -f-F의 차이점을 비교하여 각각의 사용 사례를 이해했습니다. -f는 단일 대상에서 첫 번째 성공 후 중지하고, -F는 여러 대상에서 첫 번째 성공 후 중지합니다. 이 지식은 무차별 대입 공격을 최적화하고 리소스를 효과적으로 관리하는 데 필수적입니다.