DNS 해킹 (2) : DNSrecon, DNSenum, NSlookup, Metasploit 실습

미키오·2024년 9월 21일

Secure

목록 보기
4/5
post-thumbnail

이전 글에서 DNS의 개념과 구조를 들여다보았다.
이번 글에서는 이를 기반으로 다양한 DNS 정보 수집 도구들에 대해 알아보고,
실제 실습을 통해 어떠한 메커니즘으로 DNS 해킹이 이루어지는지 알아보자.

⛔️ 참고로 위와 같은 DNS 해킹 도구 활용법과 실습은 어디까지나 실험용이며 가급적 로컬 서버에서 사용하기를 권장한다. 실제 서비스되는 사이트나 허가 받지 않은 환경에서 부적절하게 사용할 경우 정말로 위험해질 수 있기 때문이다.

DNS 정보 수집 도구

여러가지가 있지만 이번 글에서 대표적으로 사용할 도구들만 가져왔다.

  • Dig
    : DNS 질의 도구
  • NSlookup
    : DNS 질의 도구
  • DNSrecon
    : 이름 서버에 대한 정찰을 수행하는 스크립트
  • DNSenum
    : 이름 서버의 정보를 나열하는 도구
  • Nmap
    : 포트들을 스캐닝해서 모든 종류의 호스트에 관한 유용한 정보를 알려주는 도구

Dig를 이용해서 SOA 찾기

dig google.co.kr SOA

다음 명령어를 통해 google.co.krSOA 를 찾을 수 있다.

ANSWER SECTION 이후에 ns1.google.com 이 있는데 이것이 바로 구글의 주 이름 서버의 호스트 이름이다.
이 호스트 이름을 가지고 이름 서버의 IP 주소 를 조회할 수 있다.

dig ns1.google.com


ANSWER 섹션을 유심히 보면 DNS 조회에 대한 응답을 나타내는데 90926 IN A 216.239.32.10 이 보인다.
이는 도메인의 A 레코드 결과로, ns1.google.com이 가리키는 IP 주소는 216.239.32.10이다. 190926은 레코드의 TTL(생존 시간)을 나타낸다.

DNSRecon

DNSRecon은 A, AAAA, NS, MX, SOA 등 다양한 유형의 DNS 기록을 검색할 수 있는 도구이다.
명령어는 다음과 같이 dnsrecon -n + 조회 요청을 처리할 DNS 서버의 주소 + -d 대상 도메인 으로 구성하면 된다.

필자는 로컬에서 돌리고 있는 임의의 서버에 적용을 해보았다.

dnsrecon -n 192.168.56.101 -d nsa.gov

DNSRecon의 특징으로는 파이썬으로 작성되어 확장성이 높고 스크립트와 통합하기 쉽고, 브루트 포싱(서브 도메인 발견), 역 DNS 스위핑 (역방향 DNS 조회를 통한 호스트 이름 확인), 구글 존 자료 검색(구글 검색 활용, 공개적으로 접근 가능한 DNS 정보 수집) 등의 기능을 지원한다.

DNSEnum

DNSenum은 DNS 정보 수집과 네트워크 매핑을 목적으로 하는 스크립트이다.
하위 도메인 브루트 포싱, WHOIS 조회, 존 전송 테스트 등의 기능을 통해 도메인 관련 상세 정보를 제공하며, 이 결과를 CSV 파일로 출력할 수 있어 보고서 작성이 용이하다.

dnsenum --dnsserver 192.168.56.3 nsa.gov

역시나 로컬에서 돌리고 있는 임의의 서버에 dns 정보를 요청했다.

위 예시에서 DNSEnum은 10.1.0.5010.1.0.51에 있는 두 이름 서버에 영역 전송을 했지만 실패하였다. 해당 주소들에 실제로 이름 서버가 존재하지 않기 때문이다.

nslookup으로 ip주소 찾아보기

nslookup google.com


터미널에 nslookup 을 통해 도메인 이름을 검색하면 ip주소를 얻을 수 있다.
구글의 ip 주소인 172.217.25.174 가 잘 반환된다.

네이버 도메인을 검색했는데 구글로 가버리기

이를 이용해서 로컬에서 실습해볼 수 있는 DNS 우회 기법이 있다.

로컬 DNS 우회를 수행하기 위해 먼저 운영체제가 도메인 이름을 IP 주소로 변환할 때 참조하는 파일인 hosts 파일을 수정해야 한다.

터미널을 열고 아래 명령어를 입력하여 nano 텍스트 에디터에서 hosts 파일을 연다:

sudo nano /etc/hosts


nano 에디터가 열리면, 파일의 맨 아래로 스크롤하여 다음 라인을 추가한다.
이렇게 하면 naver.comwww.naver.com을 접속할 때 구글의 IP 주소로 리디렉션된다.
여기서 www.naver.com을 추가하는 것은 www가 포함된 웹 요청도 해당 IP로 리디렉션되도록 하는 것이다.

172.217.25.174 naver.com www.naver.com

수정 후, Ctrl + O를 눌러 변경사항을 저장하고, Ctrl + X를 눌러 nano 에디터에서 빠져나온다.

혹시라도 캐시가 남아있어 리다이렉션 조작이 제대로 되지 않을 수도 있으니 해당 명령어로 dns 캐시를 비울 수 있다.

sudo killall -HUP mDNSResponder

이제 naver.com을 입력하면, 설정한 IP 주소(구글 주소)로 브라우저가 리디렉션된다. 변경사항은 해당 컴퓨터에서만 적용되며 다른 장치나 외부 사용자에게는 영향을 주지 않는다.


참고로 naver.com 주소를 구글의 IP 주소로 리디렉션 했지만 "404 Not Found" 오류가 발생하는 것은 구글 서버에서 naver.com 이라는 경로를 인식하지 못하기 때문이다.

구글 서버는 구글 도메인에 대한 요청만 처리하도록 설정되어 있으며, 다른 도메인 이름이 사용될 경우 적절한 서버 경로를 찾을 수 없어 이러한 오류가 발생한다.

또한 일반적으로 구글 서버는 google.com, youtube.com 등 구글이 소유한 도메인에 대한 인증서를 가지고 있다. 그러나 naver.com에 대해서는 인증서가 없기 때문에 브라우저는 보안 경고를 표시한다.

Metasploit을 이용한 Dos 공격

⛔️ 특히나 이 실습은 교육적 목적으로만 사용되어야 하며, 실제 운영 환경이나 타인의 시스템에 무단으로 적용해서는 절대 안된다.

Metasploit은 보안 전문가들이 네트워크 보안의 취약점을 발견, 검증 및 모의 공격을 실행하는 데 널리 사용되는 오픈 소스 프레임워크이다.

Metasploit 에는 악용기법에 대한 모듈이 있는데 이 모듈은 CVE-2015-5477에 나온 취약점을 이용한다.

0. nmap 으로 네트워크 스캔
이전 실습과 동일하게 역시 VM으로 돌리고 있는 Kali Linux를 통해
별도로 다른 VM으로 돌리고 있는 리눅스 서버 192.168.56.3에 공격을 수행할 예정이다.

 nmap 192.168.56.3

본격적인 실습 전에 네트워크 스캔 도구인 nmap 을 통해 공격 대상 서버의 포트 상태를 검사해보았다.

여기서 주목해볼 점은 바로 DNS 서비스 포트가 있는 53/domain 이 멀쩡히 살아있다는 것이다. 이제 Metasploit을 통해 해당 포트를 죽여보자.

1. Metasploit 콘솔 실행

msfconsole

msfconsole 명령어는 Metasploit Framework의 대화형 콘솔을 시작한다.
이 콘솔은 다양한 보안 도구와 모듈을 사용하여 시스템을 테스트하고 공격 시뮬레이션을 수행하는 데 사용된다.

2. 특정 공격 모듈 검색

search tkey

search tkey 명령어는 "tkey"를 포함하는 모든 Metasploit 모듈을 검색한다.
여기서는 DNS 관련 취약점을 이용하는 DoS 공격 모듈인 bind_tkey를 찾기 위해 사용했다.

3. DoS 공격 모듈 선택

use auxiliary/dos/dns/bind_tkey

이 명령어는 bind_tkey DoS 공격 모듈을 선택하여 활성한다. 이 모듈은 BIND DNS 서버의 특정 취약점을 이용하여 서비스 거부 공격을 수행한다.

참고로 잘 모르는 모듈을 사용할 때는 모듈 정보를 해당 명령어로 확인할 수 있다.

show info

이 정보에는 모듈의 설명, 저자, 라이선스, 사용 가능한 옵션, 참고 문헌 등이 포함된다.
description에 의하면 이 모듈은 변조된 TKEY 쿼리를 보내어 영향을 받는 'named' DNS 서버에서 처리 오류를 유발한다고 한다.

4. 공격 옵션 확인

show options

show options 명령어는 공격을 수행하기 위해 설정해야 할 필수 옵션과 선택 옵션들을 표시한다.
이는 공격자가 각 옵션을 올바르게 설정하여 공격을 최적화할 수 있도록 돕는다.

5. 대상 호스트 설정

set RHOSTS 192.168.56.3

set RHOSTS 명령어는 공격 대상 호스트의 IP 주소를 설정한다.
역시나 여기서는 별도의 VM으로 돌리고 있는 로컬 서버 192.168.56.3이 공격 대상이다.

다시 show options를 확인하면 RHOSTSCurrent Setting이 바뀐 것을 확인할 수 있다.

6. 공격 실행

run

run 명령어는 설정된 옵션으로 공격 모듈을 실행한다.
이 과정에서 서버에 대한 DoS 공격이 시작된다.

7. 공격 결과 확인

nmap 192.168.56.3

nmap은 네트워크 스캔 도구로, 공격 대상 서버의 포트 상태를 검사한다.

이 명령어를 사용하여 해당 공격을 수행하기 전과 비교하여
port 53(DNS 서비스 포트)이 닫혔는지 확인할 수 있다.
포트가 닫혀 있으면 DoS 공격이 성공적으로 수행된 것이다.

DNS서비스가 죽었으므로, VM을 다시 실행시키면 이름 서버를 다시 실행할 수 있다.

CVE-2015-5477 공식 문서에 따르면 이 취약점은 '패킷 처리 초기 단계에서 입력 검증 실패 혹은 예외 처리 미흡에서 기인한다' 라고 명시되어 있다. 이는 곧 공격자가 의도적으로 만든 패킷이 서버의 정상적인 동작을 방해하고, 예상치 못한 방식으로 서버가 반응하도록 만들어 서버를 종료시킬 수 있음을 의미한다. (Dos 공격이 가능하다는 뜻이다.)

맺으며..

스터디를 하면서 본격적인 해킹 실습은 처음이었다. 이번 실습을 통해 네트워크 보안 취약점을 식별하고, 보안 툴을 사용하는 경험을 할 수 있었다. 앞으로 실제 개발 환경에서 발생할 수 있는 보안 문제를 어느정도 인지하고 대응하는 데 큰 도움이 되었으면 좋겠다.

이번 실습은 교육적 목적으로만 사용되었음을 다시 한번 강조하며, 실제 운영 환경에서는 절대로 무단으로 이러한 공격을 시도하지 않아야 함을 강조하면서 끝마치겠다 🫨

Bibliography

profile
교육 전공 개발자 💻

0개의 댓글