Hydra 를 이용한 SSH 무차별 대입 공격

HydraBeginner
지금 연습하기

소개

이 실습에서는 사이버 보안 분야에서 널리 사용되는 비밀번호 크래킹 도구인 Hydra 를 사용하여 SSH 서비스를 대상으로 무차별 대입 공격 (Brute Force Attack) 을 수행하는 방법을 배웁니다. 실습 과정에는 Hydra 설치, 취약한 자격 증명을 가진 대상 서버 설정, 그리고 미리 준비한 단어 목록 (Wordlist) 을 이용한 공격 실행이 포함됩니다.

SSH 테스트 환경을 직접 구성하고 Hydra 의 무차별 대입 성능을 분석하며 실무적인 경험을 쌓을 수 있습니다. 이 실습은 실제 공격 시나리오를 재현하는 동시에, 통제된 환경 내에서 윤리적 해킹 원칙을 강화하는 데 목적이 있습니다.

이 과정은 단계별 지침을 통해 학습과 연습을 돕는 가이드 실습입니다. 각 단계를 주의 깊게 따라가며 실무 경험을 쌓으시기 바랍니다. 통계 데이터에 따르면 이 실습은 초급 수준이며, 81%의 완료율을 기록하고 있습니다. 또한 학습자들로부터 100%의 긍정적인 평가를 받았습니다.

Hydra 설치

이 단계에서는 다양한 네트워크 서비스를 대상으로 무차별 대입 공격을 수행할 때 사용하는 강력한 비밀번호 크래킹 도구인 Hydra 를 설치합니다. Hydra 는 보안 시스템에 접속하기 위해 다양한 사용자 이름과 비밀번호 조합을 체계적으로 시도할 수 있어 모의 해킹 시 매우 유용합니다. 이번 실습에서 다룰 SSH 를 비롯하여 FTP, HTTP 등 수많은 프로토콜을 지원합니다.

  1. 먼저 LabEx 가상 머신 환경에서 터미널을 엽니다. 터미널은 리눅스에서 명령어를 실행하는 기본 인터페이스입니다. 모든 실습 작업을 진행할 기본 작업 디렉터리로 이동했는지 확인합니다.

    cd ~/project
  2. 새로운 소프트웨어를 설치하기 전에는 패키지 목록을 업데이트하는 것이 좋습니다. 이를 통해 Hydra 와 관련 의존성 파일들을 최신 버전으로 설치할 수 있습니다.

    sudo apt update
  3. 이제 Ubuntu 와 같은 데비안 계열 시스템에서 소프트웨어 설치를 담당하는 apt 패키지 관리자를 사용하여 Hydra 를 설치합니다. -y 플래그는 설치 확인 질문에 자동으로 동의하는 옵션입니다.

    sudo apt install -y hydra
  4. 설치가 완료되면 버전을 확인하여 Hydra 가 제대로 설치되었는지 검증합니다. head -n 1 명령어는 출력 내용 중 버전 정보가 포함된 첫 번째 줄만 보여줍니다.

    hydra -h | head -n 1
    Hydra 버전 출력 화면

    다음과 유사한 출력이 나타나야 합니다.

    Hydra v9.2 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes.
  5. Hydra 는 명령줄 인터페이스 외에도 그래픽 사용자 인터페이스 (GUI) 버전을 제공합니다. 이번 실습에서는 명령줄 버전을 사용하지만, 필요한 경우 다음 명령어로 GTK+ GUI 버전을 설치할 수 있습니다.

    sudo apt install -y hydra-gtk
    Hydra 버전 출력 화면

대상 SSH 서버 설정

이 단계에서는 이후 단계에서 비밀번호 크래킹의 대상이 될 로컬 SSH 서버를 구성합니다. 이를 통해 통제된 환경에서 모의 해킹 기술을 연습할 수 있습니다. SSH(Secure Shell) 는 컴퓨터 간의 안전한 원격 로그인을 위해 사용되는 프로토콜이며, 학습을 위해 의도적으로 취약하게 설정된 서버를 구축할 것입니다.

  1. 먼저 기본 작업 디렉터리에 있는지 확인합니다. 모든 실습 파일을 한곳에 모아 관리하는 것이 중요합니다.

    cd ~/project
  2. OpenSSH 서버 패키지를 설치합니다. 이 소프트웨어는 현재 사용 중인 머신을 원격 접속을 수락할 수 있는 SSH 서버로 변환해 줍니다.

    sudo apt install -y openssh-server
  3. 실습 목적으로 취약한 비밀번호를 가진 테스트용 사용자 계정을 생성합니다. 실제 환경에서 이러한 취약한 비밀번호는 공격자들의 주요 표적이 됩니다.

    sudo useradd -m testuser
    echo "testuser:password123" | sudo chpasswd
  4. SSH 가 비밀번호 인증을 허용하도록 설정합니다 (이 실습을 위해 일시적으로 설정). 기본적으로 많은 시스템이 보안을 위해 비밀번호 인증을 비활성화하지만, 여기서는 무차별 대입 공격의 원리를 보여주기 위해 활성화합니다.

    sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
  5. 변경된 설정을 적용하기 위해 SSH 서비스를 재시작합니다. 설정 파일을 수정한 후에는 대개 서비스를 재시작해야 변경 사항이 반영됩니다.

    sudo service ssh restart
  6. SSH 서버가 정상적으로 실행 중인지 확인합니다. 이 명령어는 SSH 서버가 활성화되어 연결을 기다리고 있는지 체크합니다.

    sudo service ssh status

    서비스가 활성 (running) 상태라는 메시지가 표시되어야 합니다. 만약 그렇지 않다면 이전 단계에서 오류가 발생했을 수 있으므로 점검이 필요합니다.

  7. 로컬에서 SSH 연결을 테스트합니다. 이 최종 점검을 통해 공격 단계로 넘어가기 전 모든 설정이 올바른지 확인합니다.

    ssh testuser@localhost -o StrictHostKeyChecking=no

    비밀번호 입력창이 뜨면 password123을 입력합니다. 로그인이 성공하면 exit를 입력하여 원래 세션으로 돌아옵니다. -o StrictHostKeyChecking=no 옵션은 SSH 가 서버 지문 확인을 요청하지 않도록 하는 설정으로, 이 실습 환경에서는 안전하게 사용할 수 있습니다.

    로컬 SSH 연결 테스트 결과

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

이 단계에서는 Hydra 가 SSH 인증을 시도할 때 사용할 사용자 이름과 비밀번호 후보군이 담긴 텍스트 파일을 생성합니다. 이러한 파일은 사전 기반 무차별 대입 공격 (Dictionary Attack) 에 필수적입니다. 사전 공격은 미리 정의된 목록에서 가능한 모든 조합을 체계적으로 시도하는 방식이므로, 양질의 목록을 준비하는 것이 매우 중요합니다.

  1. 먼저 기본 작업 디렉터리에 있는지 확인합니다. 프로젝트 파일을 체계적으로 관리하면 나중에 참조하기 편리합니다.

    cd ~/project
  2. nano 텍스트 편집기를 사용하여 사용자 이름 목록 파일을 만듭니다. 많은 시스템이 기본값이나 예측 가능한 이름을 사용하기 때문에, 무차별 대입 공격에서는 흔히 쓰이는 사용자 이름을 먼저 시도합니다.

    nano usernames.txt

    다음의 일반적인 사용자 이름들을 추가합니다 (저장은 Ctrl+O, 종료는 Ctrl+X).

    admin
    root
    testuser
    user
    guest
  3. 비밀번호 목록 파일을 생성합니다. 다음과 같이 취약한 비밀번호는 자주 사용되며 보안 테스트에서 가장 먼저 확인하는 대상입니다.

    nano passwords.txt

    다음의 일반적인 비밀번호들을 추가합니다.

    password
    password123
    123456
    qwerty
    letmein
  4. 파일 내용이 올바르게 작성되었는지 확인합니다. 이 확인 과정을 통해 목록에 오타나 형식 오류가 없는지 점검할 수 있습니다.

    cat usernames.txt
    cat passwords.txt

    터미널에 작성한 목록이 그대로 표시되어야 합니다.

  5. (선택 사항) crunch 도구를 사용하여 더 많은 비밀번호 변형을 생성해 봅니다. 이 도구는 지정된 패턴에 따라 조합을 자동으로 생성하여 더 포괄적인 비밀번호 목록을 만드는 데 도움을 줍니다.

    sudo apt install -y crunch
    crunch 4 6 0123456789 -o num_passwords.txt

    이 명령은 4 자에서 6 자 사이의 숫자 (0-9) 조합으로 이루어진 비밀번호 목록을 생성합니다. 명령어의 인자는 각각 최소 길이 (4), 최대 길이 (6), 사용할 문자 집합 (0123456789) 을 의미합니다.

SSH 를 대상으로 Hydra 실행

이 단계에서는 Hydra 를 사용하여 로컬 SSH 서버에 무차별 대입 공격을 수행합니다. 무차별 대입은 올바른 정보를 찾을 때까지 수많은 사용자 이름과 비밀번호 조합을 시도하는 방법입니다. 앞서 준비한 단어 목록을 활용하여 이 과정을 자동화하겠습니다.

  1. 먼저 단어 목록이 있는 프로젝트 디렉터리로 이동합니다. 그래야 Hydra 가 우리가 만든 파일들을 찾을 수 있습니다.

    cd ~/project
  2. 이제 특정 매개변수와 함께 Hydra 를 실행합니다. 명령어 구조는 Hydra 에게 무엇을 어떻게 공격할지 지시합니다. 각 옵션의 의미는 다음과 같습니다.

    hydra -L usernames.txt -P passwords.txt ssh://localhost -t 4 -vV

    매개변수 설명:

    • -L usernames.txt: 시도할 사용자 이름 목록 파일을 지정합니다.
    • -P passwords.txt: 사용할 비밀번호 사전 파일을 지정합니다.
    • ssh://localhost: 이 머신의 SSH 서비스를 공격 대상으로 설정합니다.
    • -t 4: 동시 시도 횟수를 4 개로 제한하여 속도를 조절합니다.
    • -vV: 터미널에 상세한 진행 과정을 표시합니다.
  3. Hydra 가 실행되면서 각 시도 내용을 실시간으로 보여줍니다. 유효한 자격 증명을 찾으면 다음과 같이 출력 결과에 명확하게 표시됩니다.

    [22][ssh] host: localhost   login: testuser   password: password123
    Hydra 실행 결과 화면
  4. (선택 사항) 결과를 영구적으로 기록하기 위해 파일로 저장할 수 있습니다. 이는 문서화나 추가 분석 시 유용합니다.

    hydra -L usernames.txt -P passwords.txt ssh://localhost -t 4 -o results.txt
  5. 스캔이 완료된 후 저장된 결과를 확인하려면 다음 명령어를 사용합니다.

    cat results.txt

요약

이 실습을 통해 강력한 비밀번호 크래킹 도구인 Hydra 를 사용하여 SSH 무차별 대입 공격을 수행하는 방법을 배웠습니다. 실습 과정에는 Hydra 설치, 테스트용 SSH 서버 구성, 그리고 타겟팅된 사용자 이름 및 비밀번호 목록 작성이 포함되었습니다.

사전 기반 공격을 직접 실행하고 결과를 분석해 봄으로써, 취약한 자격 증명이 어떻게 악용될 수 있는지 확인했습니다. 이러한 실무 경험은 사이버 보안에서 강력한 비밀번호 설정과 안전한 인증 방식 도입이 얼마나 중요한지를 잘 보여줍니다.