소개
이 실습에서는 Hydra 가 SSH 공격 중 사용자 이름과 비밀번호를 반복하는 방식을 학습합니다. 사용자 이름과 비밀번호 목록을 생성한 후 기본 SSH 공격을 실행하여 Hydra 의 기본 동작을 관찰합니다.
먼저, 사용자 이름 목록이 포함된 usernames.txt 파일과 비밀번호 목록이 포함된 passwords.txt 파일을 준비합니다. 그런 다음, 이러한 목록을 사용하여 기본 Hydra SSH 공격을 실행하여 Hydra 가 서로 다른 조합을 시도하는 방식을 보여줍니다. 마지막으로, -u 옵션이 Hydra 가 사용자 이름과 비밀번호 조합을 시도하는 순서에 미치는 영향을 살펴봅니다.
사용자 이름 및 비밀번호 목록 준비
이 단계에서는 Hydra 가 SSH 로그인 시도에 사용할 사용자 이름 목록과 비밀번호 목록 두 개의 필수 파일을 생성합니다. 이러한 목록을 생성하여 대상 시스템에 대한 다양한 사용자 이름과 비밀번호 조합을 체계적으로 테스트할 수 있습니다.
먼저, 터미널을 엽니다. 현재 /home/labex/project 디렉터리 (또는 ~/project로도 접근 가능) 에 있습니다. 이 디렉터리에 파일을 생성합니다.
nano 텍스트 편집기를 사용하여 usernames.txt 파일을 생성합니다.
nano ~/project/usernames.txt
이제 다음 사용자 이름을 파일에 추가합니다. 이는 예시이며 필요에 따라 사용자 지정할 수 있습니다.
root
admin
test
user
ubuntu
내용을 추가한 후 Ctrl + O를 눌러 파일을 저장하고, 파일 이름을 확인하려면 Enter를 누르고, 마지막으로 Ctrl + X를 눌러 nano를 종료합니다.
다음으로 비밀번호 목록을 생성합니다. 마찬가지로 nano를 사용하여 passwords.txt 파일을 생성합니다.
nano ~/project/passwords.txt
다음 비밀번호를 파일에 추가합니다. 이 역시 예시일 뿐입니다.
password
123456
qwerty
secret
ubuntu
Ctrl + O를 눌러 파일을 저장하고, 파일 이름을 확인하려면 Enter를 누르고, 마지막으로 Ctrl + X를 눌러 nano를 종료합니다.
파일이 올바르게 생성되었는지 확인하려면 cat 명령어를 사용하여 파일 내용을 표시할 수 있습니다.
usernames.txt 파일의 내용을 표시합니다.
cat ~/project/usernames.txt
다음과 유사한 출력이 표시되어야 합니다.
root
admin
test
user
ubuntu
마찬가지로 passwords.txt 파일의 내용을 표시합니다.
cat ~/project/passwords.txt
다음과 유사한 출력이 표시되어야 합니다.
password
123456
qwerty
secret
ubuntu
이제 usernames.txt와 passwords.txt 파일은 다음 단계에서 Hydra 와 함께 사용할 준비가 되었습니다.
기본 SSH 공격 실행
이 단계에서는 이전 단계에서 생성한 사용자 이름 및 비밀번호 목록을 사용하여 Hydra 를 이용한 기본 SSH 공격을 실행합니다. 이를 통해 Hydra 가 사용자 이름과 비밀번호를 반복하는 기본 동작을 보여줍니다.
Hydra 명령어의 기본 구문은 다음과 같습니다.
hydra [options] <target> <service> [additional options]
hydra: Hydra 도구를 호출하는 명령어입니다.[options]: 공격을 사용자 지정하는 다양한 옵션으로, 사용자 이름 및 비밀번호 목록을 지정하는 등이 있습니다.<target>: 대상 SSH 서버의 IP 주소 또는 호스트 이름입니다. 이 실습에서는127.0.0.1(로컬호스트) 을 대상으로 사용합니다.<service>: 공격할 서비스 (예:ssh,ftp,http) 입니다. 이 경우ssh입니다.[additional options]: 서비스별 옵션입니다.
이제 기본 SSH 공격을 실행합니다. -L 옵션을 사용하여 사용자 이름 목록을, -P 옵션을 사용하여 비밀번호 목록을, -V 옵션을 사용하여 각 시도에 대한 자세한 출력을 볼 수 있도록 합니다.
hydra -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh
이 명령어는 Hydra 에게 다음을 지시합니다.
-V: 각 로그인 시도를 보여주는 자세한 모드를 활성화합니다.-L ~/project/usernames.txt:~/project디렉터리의usernames.txt파일을 사용자 이름 목록으로 사용합니다.-P ~/project/passwords.txt:~/project디렉터리의passwords.txt파일을 비밀번호 목록으로 사용합니다.127.0.0.1: 로컬호스트에서 실행 중인 SSH 서비스를 대상으로 합니다.ssh: SSH 서비스를 공격한다는 것을 지정합니다.
터미널에서 명령어를 실행합니다. Hydra 는 이제 usernames.txt의 각 사용자 이름과 passwords.txt의 각 비밀번호를 사용하여 127.0.0.1의 SSH 서비스에 로그인을 시도합니다. 기본적으로 Hydra 는 사용자 이름을 먼저 반복하고, 다음 사용자 이름으로 이동하기 전에 단일 사용자 이름에 대한 각 비밀번호를 시도합니다.
출력에는 시도가 표시됩니다. 각 로그인 시도에 대한 자세한 정보를 볼 수 있습니다. 약한 비밀번호를 사용하고 로컬호스트를 대상으로 하기 때문에 로그인이 성공할 가능성이 있지만, 대부분의 시도는 실패할 것입니다.
출력은 다음과 유사할 것입니다 (정확한 출력은 다를 수 있습니다).
Hydra vX.X (c) XXXX by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "qwerty" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "secret" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "ubuntu" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
...
Hydra 가 "root" 사용자에 대한 모든 비밀번호를 먼저 시도한 다음 "admin"으로 이동하는 방식을 주목하십시오. 이것이 기본 동작입니다.
먼저 비밀번호를 반복 실행하기 위해 -u 옵션 사용
이 단계에서는 Hydra 의 로그인 시도 순서를 변경하기 위해 -u 옵션을 사용합니다. 기본적으로 Hydra 는 사용자 이름을 먼저 반복하고, 각 사용자 이름에 대해 모든 비밀번호를 시도한 후 다음 사용자 이름으로 이동합니다. -u 옵션은 이 동작을 반대로 하여 Hydra 가 먼저 비밀번호를 반복하고, 다음 비밀번호로 이동하기 전에 모든 사용자 이름에 대해 각 비밀번호를 시도하도록 합니다.
이 기능은 여러 계정에서 공통 비밀번호가 사용되는 경우 유용할 수 있습니다.
-u 옵션을 사용하려면 이전 Hydra 명령어에 단순히 추가하면 됩니다. 또한 자세한 시도를 보려면 -V 옵션을 다시 사용합니다.
hydra -u -V -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh
이 명령어는 Hydra 에게 다음을 지시합니다.
-u: 비밀번호를 먼저 반복합니다.-V: 각 로그인 시도를 보여주는 자세한 모드를 활성화합니다.-L ~/project/usernames.txt:~/project디렉터리의usernames.txt파일을 사용자 이름 목록으로 사용합니다.-P ~/project/passwords.txt:~/project디렉터리의passwords.txt파일을 비밀번호 목록으로 사용합니다.127.0.0.1: 로컬호스트에서 실행 중인 SSH 서비스를 대상으로 합니다.ssh: SSH 서비스를 공격한다는 것을 지정합니다.
터미널에서 명령어를 실행합니다. Hydra 는 이제 127.0.0.1의 SSH 서비스에 로그인을 시도합니다. 이번에는 다음 비밀번호로 넘어가기 전에 passwords.txt의 첫 번째 비밀번호를 usernames.txt의 모든 사용자 이름에 대해 시도합니다.
출력을 관찰합니다. 시도 순서가 이전 단계와 다르다는 것을 알 수 있습니다. Hydra 는 이제 동일한 비밀번호를 연속적으로 여러 사용자 이름에 대해 시도합니다.
출력은 다음과 유사할 것입니다 (정확한 출력은 다를 수 있습니다).
Hydra vX.X (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at YYYY-MM-DD HH:MM:SS
[DATA] max X tasks per X server, overall X tasks, X login tries (l:X/p:X), ~X try per task
[DATA] attacking ssh://127.0.0.1:22/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "root" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "user" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "ubuntu" - pass "password" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "root" - pass "123456" - X of X [child X] (X/X)
[ATTEMPT] target 127.0.0.1 - login "admin" - pass "123456" - X of X [child X] (X/X)
...
Hydra 가 이제 "password"를 모든 사용자 이름에 대해 먼저 시도한 다음 "123456"을 모든 사용자 이름에 대해 시도하는 방식을 주목하십시오. 이것이 -u 옵션을 사용했을 때의 동작입니다.
이 명령어의 출력을 이전 단계의 명령어 출력과 비교하면 로그인 시도 순서의 차이를 명확하게 볼 수 있습니다. 이는 Hydra 의 작동 방식을 이해하고 주어진 상황에 가장 효과적인 공격 전략을 선택하는 데 도움이 될 수 있습니다.
공격 패턴 및 성능 분석
이 단계에서는 두 가지 공격 방법의 실제 차이를 분석하고 각 접근 방식이 언제 더 효과적인지 이해합니다. 또한 다양한 시나리오에 따라 Hydra 공격을 최적화하는 방법을 탐색합니다.
전략적 차이 이해
기본 모드와 -u 모드 중 선택은 공격 효율에 상당한 영향을 미칠 수 있습니다.
- 기본 모드 (사용자 이름 우선): 특정 사용자가 약한 비밀번호를 가지고 있을 것이라고 의심될 때 효과적입니다.
- 비밀번호 우선 모드 (
-u): 여러 계정에서 공통 비밀번호가 사용될 것이라고 의심될 때 효과적입니다.
이를 보다 타겟팅된 접근 방식으로 보여주겠습니다. 먼저 차이를 명확하게 보기 위해 더 작고 집중된 테스트를 생성합니다.
echo -e "admin\ntest" > ~/project/small_users.txt
echo -e "password\n123456" > ~/project/small_passwords.txt
이제 패턴을 명확하게 보기 위해 제한된 출력으로 두 가지 공격 모두를 실행합니다.
기본 공격 (사용자 이름 우선):
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh
-t 1 옵션은 Hydra 가 한 번에 하나의 작업만 사용하도록 제한하여 순서를 더 쉽게 따라갈 수 있도록 합니다.
비밀번호 우선 공격:
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh
성능 분석
이제 시간 및 효율성을 분석해 보겠습니다. 간단한 시간 측정 테스트를 생성합니다.
echo "Testing default mode timing..."
time hydra -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
echo "Testing -u mode timing..."
time hydra -u -L ~/project/usernames.txt -P ~/project/passwords.txt 127.0.0.1 ssh > /dev/null 2>&1
실제 응용 시나리오
각 모드를 사용해야 하는 시점을 이해합니다.
기본 모드 사용 시점:
- 특정 고가치 계정에 대한 정보가 있을 때
- 관리자 계정에 약한 비밀번호가 있는지 빠르게 테스트하고 싶을 때
- 소수의 특권 사용자를 대상으로 할 때
-u모드 사용 시점:- 여러 계정에서 비밀번호가 재사용될 것이라고 의심될 때
- 이전 침해 사례에서 공통 비밀번호 목록이 있을 때
- 공통 약한 비밀번호를 가진 계정을 찾고 싶을 때
공격 패턴 확인
공격 패턴의 차이를 명확하게 보기 위해 간단한 데모를 생성합니다.
echo "=== 기본 모드 패턴 ==="
hydra -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
echo "=== 비밀번호 우선 모드 패턴 ==="
hydra -u -V -t 1 -L ~/project/small_users.txt -P ~/project/small_passwords.txt 127.0.0.1 ssh 2>&1 | grep "ATTEMPT" | head -4
이렇게 하면 다음과 같은 차이를 명확하게 볼 수 있습니다.
- 기본 모드: admin/password, admin/123456, test/password, test/123456
- 비밀번호 우선 모드: admin/password, test/password, admin/123456, test/123456
계정 잠금 정책을 다루거나 여러 계정에 걸쳐 시도를 분산하여 탐지를 피하려고 할 때 차이가 중요해집니다.
요약
이 실습에서는 ~/project 디렉터리에 사용자 이름 및 비밀번호 목록을 생성하여 Hydra SSH 공격에 필요한 파일을 준비하는 방법을 배웠습니다. Hydra 를 사용하여 자세한 공격 시도를 관찰하고 Hydra 의 반복 동작을 이해하기 위해 상세 출력을 사용하여 SSH 공격을 실행했습니다.
Hydra 의 기본 모드 (사용자 이름 우선 반복) 와 -u 옵션 (비밀번호 우선 반복) 의 중요한 차이점을 탐색했습니다. 실습을 통해 다음을 발견했습니다.
- 기본 모드: 다음 사용자 이름으로 이동하기 전에 각 사용자 이름에 대해 모든 비밀번호를 시도합니다. 특정 고가치 계정을 대상으로 할 때 적합합니다.
- 비밀번호 우선 모드 (
-u): 다음 비밀번호로 이동하기 전에 모든 사용자 이름에 대해 각 비밀번호를 시도합니다. 공통 약한 비밀번호를 가진 계정을 찾을 때 더 적합합니다.
또한 이러한 모드 중 선택에 대한 실질적인 고려 사항, 성능 영향 및 각 접근 방식이 가장 효과적인 실제 시나리오를 포함하여 배웠습니다. 이러한 이해를 통해 특정 대상 환경 및 목표에 따라 침투 테스트 전략을 최적화할 수 있습니다.
이 실습은 계정 잠금 정책을 다루거나 여러 계정에 걸쳐 로그인 시도를 분산하여 탐지를 피하려고 할 때 서로 다른 공격 패턴이 얼마나 중요한지를 보여주었습니다.


