Hydra 공격에서 비밀번호 반복

HydraBeginner
지금 연습하기

소개

이 실습에서는 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.txtpasswords.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

실제 응용 시나리오

각 모드를 사용해야 하는 시점을 이해합니다.

  1. 기본 모드 사용 시점:

    • 특정 고가치 계정에 대한 정보가 있을 때
    • 관리자 계정에 약한 비밀번호가 있는지 빠르게 테스트하고 싶을 때
    • 소수의 특권 사용자를 대상으로 할 때
  2. -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): 다음 비밀번호로 이동하기 전에 모든 사용자 이름에 대해 각 비밀번호를 시도합니다. 공통 약한 비밀번호를 가진 계정을 찾을 때 더 적합합니다.

또한 이러한 모드 중 선택에 대한 실질적인 고려 사항, 성능 영향 및 각 접근 방식이 가장 효과적인 실제 시나리오를 포함하여 배웠습니다. 이러한 이해를 통해 특정 대상 환경 및 목표에 따라 침투 테스트 전략을 최적화할 수 있습니다.

이 실습은 계정 잠금 정책을 다루거나 여러 계정에 걸쳐 로그인 시도를 분산하여 탐지를 피하려고 할 때 서로 다른 공격 패턴이 얼마나 중요한지를 보여주었습니다.