DNS ( Domain Name System ) 란?

 

- 네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스이다. ( 백과사전 )

 

FQDN - (절대경로) blog.naver.com.

= Fully QulifIied Domain Name

PQDN - (상대경로) blog(.naver.com.)
  상위 naver 에 소속되어 있는 구간에서의 독립 사용가능한 주소를 의미.

최대 63자까지만 사용가능.

마지막에 . 을 안 붙여도 보통 상관이 없습니다만 실제로는 존재한다고 보시면 됩니다.

 

차후 DNS Spoofing 이라는 공격 기법에서 DNS 의 정의와 포맷 등을 자세하게 다룰 예정이니, 지금은 이 DNS 의 간략한 정의와, 타겟의 DNS 정보를 어떻게 수집하여, 공격 기반의 초석을 다질 것인지 알아봅니다.

 

 

 

 

 

클라이언트가 DNS 를 요청하는 순서


 1. 클라이언트의 hosts 파일
 2. DNS 캐쉬
 3. DNS 요청(쿼리) - 내부 ( 로컬 쿼리 ) , 외부 DNS 서버 연동된 질의( 재귀 쿼리 )
 - DNS 서버 세팅된 곳을 목적지로 지정합니다.
 
DNS 서버도 일단 

 1. 자신의 캐쉬를 확인후 해당 도메인 정보가 없으면
 2. ZONE 영역을 확인. 거기서도 없으면
 3. Root Hint 지정 ( 상위의 ROOT DNS 에게 모르는 것을 묻습니다. )
 
 www.naver.com.     오른쪽의 .부터 역순으로 하나씩 DNS질의를 합니다.
 보통 해당 dns서버는 상위 한 단계의 정보만 가지고 있습니다.
 
 Ex).은 앞의 com의 정보만. Com의 dns서버는 naver 라는 곳의 정보만 가지고 있습니다.

즉, 순서대로 거슬러 올라가면, 결국 상위 루트 DNS 에서 알려주기 때문에, DNS 서버에 해당 도메인 서버의 정보가 없어도, 세계 어느 곳이던지 도메인명으로 찾아갈 수 있게 되는 것입니다.
 
 

 


 

- 윈도우즈에서의 DNS 캐쉬 초기화 


c:\windows\system32\driver\etc\hosts

Hosts 변경후 웹브라우저를 닫고
Ipconfig /flushdns 로 dns정보를 초기화

Hosts에 의한 dns요청정보를 확인하려면
Ipconfig /displaydns

 

 - 리눅스의 DNS 캐쉬 정보 초기화
 
 1. 리눅스의 hosts 는 /etc/hosts
 
 2. 서비스 초기화 ( service nscd restart )
 

 - MAC OS 의 DNS 캐시정보 초기화하기
 
 dscacheutil -flushcache

 

[ 특정 사이트의 DNS 정보 검색하기]

 

 

1. Whois 서비스 ( 4계층 스위치 )

 

한국  http://whois.kisa.or.kr

DNS LIST
(통신사별)
 1. SK Broadband 
   - 주 : 219.250.36.130
 - 보조 : 210.220.163.82
 2. KT
 - 168.126.63.1 / 2
 3. LG 파워콤
 - 164.124.101.2 / 203.248.252.2
 4. KT 지역별 DNS
 - 서울 : 168.126.63.1 / 2
 - 인천 : 61.74.63.1 / 168.126.63.1
 - 수원 : 61.77.63.1 / 168.126.63.1
 - 대전 : 61.81.63.1 / 168.126.63.1
 - 광주 : 203.251.63.1 / 168.126.63.1
 - 대구 : 211.229.63.1 / 168.126.63.1
 - 부산 : 211.216.63.1 / 168.126.63.1

보통 다음과 같은 정보들을 획득할 수 있습니다.

 

naver.com

 

 등록, 관리 기관
 도메인 이름
 목표 사이트 네트워크 주소와 IP 주소
 관리자, 기술 관련 정보
 등록자, 관리자, 기술 관리자
 레코드 생성 시기와 업데이트 시기
 주 DNS 서버와 보조 DNS 서버
 IP 주소의 할당 지역 위치
 관리자 이메일 계정

 

2. Linux 의 NC ( network cat ) 을 이용한 DNS 정보 수집

 

- 테스트 조건(Backtrack 환경)


 

 

 - NAT 랜카드를 입력후 DHCP 로 자동 임대 받아서 공인아이피 인터넷이 가능한 환경을 구성합니다. 

= ( 랜카드 VMnet8 (NAT ) 로 세팅 )

= 그 후 , dhclient eth0 입력하여 자동 IP 를 할당 받습니다. ifconfig 로 확인!
 

통신 구성 및 연결 확인 하기

 1. 게이트웨이 연결 여부를 확인 ( 로컬 if/pconfig /all ) , route
 2. IP/도메인으로 각각 외부 통신여부 확인 ( ping )

 

 

 

nc -v whois.kisa.or.kr 43 을 입력

( -v :상세 보기  , 43 = port )

그 후 원하는 검색 도메인명( ex : nate.com )을 입력.

whois nate.com 도 동일한 결과값을 얻을 수 있습니다.

 

 

 

 

3. Windows의 SmartWhois 를 이용한 DNS 정보 수집

 

 

 

 

4. netcraft 를 이용한 정보 수집

www.netcraft.com 에 접속하여 사이트를 검색.

 

 

5. nslookup 을 이용한 DNS 정보 수집

리눅스/윈도우즈 공통적으로 사용할수 있는 기본 내장 "네임서버 조회" 입니다.

 

조회를 거칠 네임서버를 직접 지정할 수 있습니다. 

 

 

ns1.nate.com 을 글로벌 도메인으로 연결 후, nate 관련 정보 검색

 

 

검색 타입을 SOA 로 바꾸고 세부 정보 검색

DNS에서의 SOA Type?

= 해당 도메인 네임서버에서의 이름을 할당 후, 해당 캐쉬(세션의 개념으로 이해하시면 됩니다 )의 유지/지속시간을 설정하는 Record 입니다. 즉 아래와 같이 각종 상황에 대한 지속시간의 정보가 나오는 것을 보실 수 있습니다.

 

 

 

리눅스의 dig 명령어를 이용한 사이트 정보 획득

1) 기본적으로 알아낸 네임서버 주소를 입력하여, 아이피를 획득

 

2) 해당 글로벌 네임서버 주소를 @로 기입하고 nate의 전체 도메인 구조 검색.

 

해당 네임서버의 구조와 아이피를 적에게 노출시키는 자체가 사실 공격의 빌미를 제공하게 되죠.  그래서 요즘은 보통 특정 대상에게만, 또는 외부에 정보를 노출하지 않도록 설정하는 곳이 많습니다. ( 이런 정보 노출했다가 작년에 국내 대형포털 n 모 곳이 해킹의 빌미를 제공했었죠 .. 일명 Zone Transfer 공격 기법이라고 합니다. ) 그 설정 방법은 DNS 서버를 구성하면서, 알 수 있을 것입니다.

 

6.Zone Transfer 를 이용한 DNS 정보 획득

타입 정의에는 axfr ( Full scan ) 방식과 ixfr( 증분 ) 방식이 있습니다.

타입 정의를 위와 같이 하고, 네임서버 조회를 하면, 해당 서버의 모든 구조가 다 보여지게 됩니다.

 

 

단순한 기본 검색과 set type=axfr 로 지정하고 같은 검색어로 조회한 결과 차이

 

해당 서버의 하위 모든 DNS 구성 정보가 보여집니다.

 

리눅스의 dig 명령어에 axfr 로 입력해도 잘 나옵니다

 

dig @ [ @다음에는 거쳐갈 네임서버의 아이피를 적어준다 ]

axfr = Full scan

 

이렇게 죄다 보여져 버리면 공격해달라고 광고하는 격이 되버리겠죠?

그래서 반드시 보안상 문제로, 외부에서는 이러한 조회를 할 수 없게 설정해야 합니다.

DNS 서버에서 외부에서 조회를 하지 못하도록 설정해야 합니다.

 

DNS서버구성 파일( /etc/named.rfc1912.zones )

allow-transfer { any; } 를 반드시 { none; } 또는 지정 아이피로 해주어야 합니다.

 

any = 모두에게 허용

none = 검색 불가

특정 아이피 = 해당 아이피만 검색 허용

 

 

 

 앞에서 행한 nslookup, dig, tansfer , 구글 해킹 등으로 해당 DNS 서버의 구조와 목록을 유추할 수 있습니다. ( 정보 수집 )

지금까지 보시다시피, axfr 로 transfer 를 질의하면, 해당 dns 서버의 모든 정보와 구조를 보여줄 수 있기에 named.rfc1912.zones 파일에서 transfer { none; 또는 특정 보조 dns 서버로 설정 } 를 수정해야 한다는 것까지 보았구요.

위의 수법이 막혔을 경우, 이제 무차별 대입(Brute Forcing) 이라는 방법을 사용할 수도 있습니다.


무작정 하나씩 서버에 질의를 보내, 해당 아이피가 진짜인지 아닌지 파악하는 행위를 이어서 행할 수 있는데, 일일이 하나씩 보내는 것이 아닌(Brute) 를 자동으로 프로그램화시켜(dictionary attack) 알아내는 기법이 존재합니다.

BackTrack 에 자체 내장된 DNSBrutefocing Tool 또는 DNSenum Tool 을 사용합니다.

보통 더 편리한 DNSenum 을 쓰게 됩니다.

 

백트랙 Bruteforcing

 - Backtrack R3 에서의 경로
 - /pentest/enumeration/web/revhosts/data/plugins/pig/DNSBruteforce/DNSBruteforce.py
 
 
 - 사용 방식
 - ./DNSBruteforce.py [ 도메인 ] [서버목록파일] [서비스목록파일]
 - (ex) ./DNSBruteforce.py test.co.kr server.lst hosts.txt


= 이 방법은, Wireshark 같은 패킷 감시 프로그램으로, 일일히 결과값을 확인해 봐야 한다는 단점이 있어, 잘 쓰지 않습니다.

 

백트랙 DNSenum

 - 경로 : /pentest/enumeration/dns/dnsenum/


 
 - 형식 : ./dnsenum.pl --dnsserver ( 서버 ip주소) -f (호스트 리스트의 사전파일) ( 도메인 )

 

예제 : ./dnsenum.pl --dnsserver 172.16.1.2 -f ./dict.txt test.co.kr

dick.txt 파일에는 앞의 호스트 네임들을 기입합니다.

생각보다 cafe.  ftp. mail. 등의 고정된 호스트 도메인을 쓰는 경우가 많기 때문에

이런 단어 기입(Dictionary Attack) 기법이 잘 통할 수도 있습니다.

 

 ./dict.txt 파일에 단어를 기입해 줍니다.

 

커맨드

172.16.0.2 => 정보를 얻어낼 해당 dns 도메인 서버의 아이피

 

결과값 = 일치하는 정보가 나옵니다.

 

여기까지 하면 도메인 서버의 네임주소 = IP 일치까지는 획득할 수 있습니다

하지만 실제로, 지금도 이 도메인 명을 사용하는지는 알 수 없지요.

그래서, 해당 주소에 이제 Port 를 이용한 Scan 과 접근으로, 탐지하고, 또 계속된 공격 수립을 준비할 수 있게 됩니다.

다음 편은 PORT 입니다.

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,