소개
이 실습에서는 강력한 네트워크 로그인 크래커인 Hydra 를 사용하여 추가적인 비밀번호 검사 방법을 배우게 됩니다. 구체적으로, LabEx VM 에서 Telnet 서비스를 설정하고 Hydra 의 -e nsr 옵션을 사용하여 비밀번호 크래킹 시도를 수행합니다. 이 옵션을 사용하면 Hydra 가 자동으로 널 비밀번호, 사용자 이름 자체를 비밀번호로, 그리고 사용자 이름을 역순으로 한 비밀번호를 시도할 수 있도록 합니다. 이는 침투 테스트에서 약하거나 기본적인 자격 증명을 신속하게 식별하는 데 일반적으로 사용되는 기법입니다.
이 실습에서는 LabEx VM 에서 Telnet 서비스를 설치하고 구성하는 방법을 안내합니다. 그런 다음 Hydra 의 -e nsr 플래그를 사용하여 이러한 추가 검사가 단순한 비밀번호를 찾는 데 어떻게 사용될 수 있는지 보여줍니다. 마지막으로 -e ns 옵션만 사용했을 때의 결과와 비교하여 역순 사용자 이름 검사를 포함했을 때의 영향을 이해합니다.
Telnet 서비스 설정
이 단계에서는 LabEx VM 에서 Telnet 서비스를 설정합니다. Telnet 은 원격 서버에 명령줄 인터페이스를 제공하는 네트워크 프로토콜입니다. Telnet 은 일반적으로 프로덕션 환경에서 데이터를 평문으로 전송하기 때문에 안전하지 않다고 여겨지지만, 제어된 실습 환경에서 비밀번호 크래킹 기법을 보여주기에 적합합니다.
먼저 널 비밀번호를 가진 테스트 사용자 계정을 생성해야 합니다.
sudo useradd -m testuser
sudo passwd -d testuser
passwd -d 명령은 사용자의 비밀번호를 제거하여 효과적으로 널 비밀번호를 생성합니다.
Telnet 구성 파일 /etc/inetd.conf를 편집해야 합니다. nano 편집기를 사용하여 이 파일을 엽니다.
sudo nano /etc/inetd.conf
nano 편집기에서 telnet으로 시작하는 줄을 찾습니다. 다음과 유사하게 보일 것입니다.
telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/telnetd
이 줄 앞에 #을 추가하여 주석 처리합니다.
#telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/telnetd
이제 주석 처리된 줄 아래에 다음 줄을 추가합니다. 이 새 줄은 인증을 비활성화하는 -i 옵션을 사용하여 Telnet 을 구성합니다.
telnet stream tcp nowait telnetd /usr/sbin/in.telnetd -i

이제 /etc/inetd.conf 파일의 관련 부분은 다음과 같아야 합니다.
#telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/telnetd
telnet stream tcp nowait telnetd /usr/sbin/in.telnetd -i
Ctrl+X를 눌러 nano를 종료합니다. 저장하라는 메시지가 나타나면 Y를 누르고 Enter 를 눌러 /etc/inetd.conf에 변경 사항을 저장합니다.
또한 PAM 이 Telnet 에 대한 널 비밀번호를 허용하도록 구성되어 있는지 확인해야 합니다. PAM 구성을 확인합니다.
cat /etc/pam.d/common-auth | grep pam_unix.so
다음과 같은 줄이 표시되어야 합니다.
auth [success=1 default=ignore] pam_unix.so nullok
이 줄에 nullok가 없으면 추가해야 합니다. 파일을 편집합니다.
sudo nano /etc/pam.d/common-auth
pam_unix.so가 포함된 줄을 찾아 이미 존재하지 않는 경우 끝에 nullok를 추가합니다. 변경 사항이 있으면 파일을 저장하고 종료합니다.
마지막으로, 변경 사항이 적용되도록 inetd 서비스를 다시 시작해야 합니다. Docker 컨테이너 환경에 있으므로 /etc/init.d 스크립트를 사용하여 서비스를 다시 시작합니다.
sudo /etc/init.d/openbsd-inetd restart
서비스가 다시 시작되고 있음을 나타내는 출력이 표시되어야 합니다.
* Restarting internet superserver inetd
이 실습을 위해 Telnet 서비스가 설정되어 비밀번호 없이 로그인을 허용하도록 구성되었습니다.
Hydra -e nsr 검사 실행
이 단계에서는 Hydra 를 사용하여 Telnet 서비스에 대한 브루트포스 공격을 수행합니다. 특히 -e nsr 옵션을 사용하여 Hydra 가 널 비밀번호, 사용자 이름 자체 및 역순 사용자 이름을 잠재적인 비밀번호로 시도하도록 지시합니다.
~/project 디렉토리에서 터미널을 열고 다음 명령을 실행합니다.
hydra -l testuser -P ~/project/unix_passwords.txt -vV -e nsr telnet://localhost
이 명령을 살펴보겠습니다.
hydra: Hydra 도구를 실행하는 명령입니다.-l testuser: 공격에 사용할 사용자 이름을 지정합니다. 널 비밀번호를 가진 테스트 사용자를 대상으로 합니다.-P ~/project/unix_passwords.txt:-e로 지정된 검사 외에도 사용할 비밀번호 목록 파일을 지정합니다. 이 파일에는 설정 단계에서 다운로드한 일반적인 Unix 비밀번호 목록이 포함되어 있습니다.-vV: 자세한 출력을 활성화하여 각 로그인 시도와 결과를 표시합니다.-e nsr: 이 단계의 핵심 옵션입니다. Hydra 가 추가 검사를 수행하도록 지시합니다.n: 널 비밀번호 (빈 문자열) 를 시도합니다.s: 사용자 이름 (testuser) 을 비밀번호로 시도합니다.r: 역순 사용자 이름 (resutest) 을 비밀번호로 시도합니다.
telnet://localhost: 대상 서비스 및 주소를 지정합니다.telnet은 Telnet 프로토콜을 나타내고localhost는 로컬 머신 (LabEx VM 자체) 을 나타냅니다.
명령을 실행합니다. Hydra 는 지정된 사용자 이름과 목록의 비밀번호, 널 비밀번호, 사용자 이름 및 역순 사용자 이름을 사용하여 포트 23(기본 Telnet 포트) 에서 Telnet 서비스에 로그인하려고 시도합니다.
Hydra 가 시도를 수행하면 다음과 유사한 출력이 표시됩니다.
Hydra vX.Y (c) 2020 by van Hauser/THC - use allowed only for legal purposes.
Hydra is starting...
[DATA] 1 task, 1 server, XXXX service(s)
[DATA] attacking service telnet on port 23
[DATA] attacking target localhost
[ATTEMPT] target localhost - login: 'testuser' - pass: ''
[23][telnet] host: localhost login: testuser password:
[ATTEMPT] target localhost - login: 'testuser' - pass: 'testuser'
[ATTEMPT] target localhost - login: 'testuser' - pass: 'resutest'
...
테스트 사용자를 널 비밀번호로 구성했기 때문에 Hydra 는 널 비밀번호 (빈 비밀번호로 첫 번째 시도) 를 사용하여 성공적인 로그인을 신속하게 찾아야 합니다.
성공적인 검사 결과 확인
이 단계에서는 방금 실행한 Hydra 명령의 출력을 검토하여 성공적인 로그인 시도를 식별합니다.
터미널에서 출력을 위로 스크롤하여 성공적인 로그인을 나타내는 줄을 찾습니다. 이러한 줄은 일반적으로 포트 번호와 서비스, 이후 호스트, 로그인 및 비밀번호로 표시됩니다.
Telnet 서비스를 비밀번호 없이 로그인을 허용하도록 구성했기 때문에 출력에 다음과 유사한 줄이 표시되어야 합니다.
[23][telnet] host: localhost login: testuser password:
이 줄은 Hydra 가 localhost에서 사용자 이름 testuser와 널 비밀번호 ( password: 뒤의 공백으로 표시됨) 를 사용하여 Telnet 서비스에 성공적으로 로그인했음을 확인합니다.
~/project/unix_passwords.txt 파일에 있는 비밀번호 중 testuser 사용자의 실제 비밀번호와 일치하는 경우 다른 성공적인 로그인도 볼 수 있습니다 (하지만 이 실습 설정에서는 널 비밀번호가 의도된 성공적인 검사입니다).
-vV 옵션은 각 시도에 대한 자세한 출력을 제공하여 Hydra 의 진행 상황과 시도하는 비밀번호를 이해하는 데 유용합니다. 성공적인 로그인 줄은 작동한 자격 증명을 명확하게 보여줍니다.
이 단계는 -e nsr 옵션이 널 비밀번호와 같이 표준 비밀번호 목록에서 종종 간과되는 일반적인 약한 비밀번호 시나리오를 신속하게 식별하는 데 어떻게 도움이 되는지 보여줍니다.
-e ns 검사와 비교
이 단계에서는 Hydra 를 다시 실행하지만 이번에는 -e nsr 대신 -e ns 옵션을 사용합니다. 이렇게 하면 Hydra 가 널 비밀번호와 사용자 이름을 비밀번호로 시도하도록 지시하지만, 역순 사용자 이름은 시도하지 않습니다. 이 명령의 출력을 이전 명령의 출력과 비교하여 수행된 검사의 차이점을 확인할 수 있습니다.
~/project 디렉토리에서 터미널을 열고 다음 명령을 실행합니다.
hydra -l testuser -P ~/project/unix_passwords.txt -vV -e ns telnet://localhost
이 명령은 이전 명령과 거의 동일하며 유일한 차이점은 -e ns 옵션입니다.
-e ns: 이 옵션은 Hydra 가 다음 추가 검사를 수행하도록 지시합니다.n: 널 비밀번호를 시도합니다.s: 사용자 이름 (testuser) 을 비밀번호로 시도합니다.
명령을 실행합니다. Hydra 는 다시 목록의 비밀번호, 널 비밀번호 및 사용자 이름을 비밀번호로 시도하여 Telnet 서비스에 로그인을 시도합니다.
출력을 관찰합니다. 이전 실행과 유사하게 널 비밀번호와 사용자 이름을 비밀번호로 시도하는 시도가 표시됩니다. 그러나 역순 사용자 이름 (resutest) 을 시도하는 시도는 표시되지 않습니다.
Hydra vX.Y (c) 2020 by van Hauser/THC - use allowed only for legal purposes.
Hydra is starting...
[DATA] 1 task, 1 server, XXXX service(s)
[DATA] attacking service telnet on port 23
[DATA] attacking target localhost
[ATTEMPT] target localhost - login: 'testuser' - pass: ''
[23][telnet] host: localhost login: testuser password:
[ATTEMPT] target localhost - login: 'testuser' - pass: 'testuser'
...
이 명령의 출력을 2 단계의 출력과 비교하면 -e nsr 옵션에는 역순 사용자 이름 검사가 포함되어 있지만 -e ns 옵션에는 포함되어 있지 않음을 명확하게 알 수 있습니다. 이는 Hydra 의 서로 다른 옵션을 사용하여 비밀번호 해독 프로세스를 사용자 지정하고 특정 시나리오에서 관련성이 있을 수 있는 특정 유형의 검사를 포함할 수 있음을 보여줍니다.
요약
이 실습에서는 LabEx VM 에 Telnet 서비스를 설정하고 -e nsr 옵션을 사용하여 Hydra 에서 추가적인 비밀번호 검사를 수행하는 방법을 배웠습니다. telnetd 패키지를 설치하고, 널 비밀번호를 허용하도록 Telnet 서비스를 구성했습니다. 이를 위해 널 비밀번호를 가진 테스트 사용자를 생성하고 /etc/inetd.conf 파일을 수정하고 PAM 을 구성하여 널 비밀번호를 허용했습니다.
그런 다음 -e nsr 옵션을 사용하여 Hydra 를 사용하여 비밀번호 해독 시도를 수행했습니다. 이는 널 비밀번호, 사용자 이름을 비밀번호로, 그리고 역순 사용자 이름을 비밀번호로 시도하는 것을 포함했습니다. 출력을 관찰하고 널 비밀번호를 사용한 성공적인 로그인을 식별했습니다. 마지막으로 -e ns 옵션을 사용한 결과와 비교하여 수행된 검사의 차이점을 이해했습니다. 이 실습은 Hydra 의 추가 비밀번호 검사가 일반적인 약한 자격 증명을 신속하게 식별하는 데 어떻게 사용될 수 있는지 보여주었습니다.


