본문 바로가기
Lab & Research/Information Security

DNS 보안

by jaeaemin 2022. 5. 30.

DNS name Service


Domain : 도메인 네임 공간의 subtree 

Zone      : 도메인 네임 공간의 몇 몇 부분 

Authoriative name servers : Zone에 대한 정보를 가지고 있음 ) 

* delegation을 통한 분산된 관리 체계 

 

 

1.  DNS 네임 서버 

[1] 분산된 데이터베이스 : 서버가 모든 도메인-IP 매핑 테이블을 가지는 것은 불가능함.

[2] 로컬 네임 서버 : 각 ISP, 기업은 로컬 네임 서버를 가진다 ( host DNS 쿼리는 local name server에서 먼저 처리 ) 

[3] 인증 네임 서버 : 

  • 호스트 : 호스트의 IP 주소와 name을 저장함
  • 호스트의 name을 통해 name-address 변환을 수행함

[4] Root name Server 

  • 로컬 네임 서버와 연결된다.
  • 로컬 네임 서버에서 연결되었지만 이름을 확인할 수 없음
  • 에서 이름 매핑을 알 수 없는 경우 권한 있는 이름 서버에 연락합니다.
  • 매핑을 가져옵니다.
  • 로컬 네임 서버에 매핑을 반환합니다.
  • 전 세계 12개의 루트 네임 서버

 

 

2.  DNS : 반복 쿼리

Resolver    - 네임 서버에 쿼리를 날림
   - 응답을 해석하고, 사용자에게 결과를 반환함
recursive query [ 재귀 쿼리 ]    - 연결된 네임 서버에 이름을 확인하는 역할
iterated query   [ 반복 쿼리 ]    - 연결된 서버에 연결될 서버의 이름을 응답함

 

 

3.  DNS : cashing record 

네임 서버가 매핑을 학습하면,  매핑에 대해 캐시함 ( 캐시 엔트리에 TO가 적용 )

 

 

4.  DNS : Resource Records 

 - DNS: 리소스 레코드(RR)를 저장하는 분산 DB

Type = A   - name : 호스트 네임
 - vlaue : IP 주소 
Type = CHAME  - name : alias 이름 
 - value : 이 도메인에 대한 권한 있는 네임 서버의 IP 주소
Type = NS  - name : 도메인
 - value : 이 도메인에 대한 인증 네임 서버의 IP 주소
Type = MX  - value : 네임과 연결된 메일 서버와 관련된 호스트 네임 

 

 

5.  DNS 프로토콜, 메시지

> DNS 프로토콜 : 쿼리 및 응답 메시지 ( 모두 동일한 메시지 포맷 사용 )

> 메시지 헤더  

    - identification : 조회 및 응답 일치 16비트 #
    - FLAGs
         - query or reply
         - recursion desired

         - recursion available

         - reply is authortiative

 

 

 

6.  DNS 쿼리 

====

 

 

====

 

 

Zone transfer 

Name servers for a zone 

  - primary name server :  호스트의 파일에서 영역 데이터를 읽습니다.
  - Secondary(slave) name server : 영역에 대한 권한이 있는 다른 이름 서버에서 영역 데이터를 가져옵니다.

 

Zone transfer
  - 슬레이브 네임 서버가 시작되면,  마스터 서버에 접속하고 Zone의 데이터를 가져온다.

 

DNS Package : BIND 

  •  unix의 DNS 패키지 , 이는 많은 보안 문제의 역사를 가지고 있다.
  • DNS daemin in unix
    • a process called "named"
    • Configuration : /etc/named.conf

 

DNS Operation - Normal 

 

 

 

DNS Attacks


1.  DNS Cashe Poisoning 

  • URL 스푸핑 공격 : 공격 중인 사람과 유사한 이름을 등록합니다.
    예: www.ibn.com, ...
  • Cashe poisoning : 동일한 아이디어의 보다 정교한 버전입니다.
  • 공격에 대한 두 가지 Key idea는 아래와 같음
       ▪ 쿼리 번호(and reply ID)는 이전 ID를 알아낼 수 있는 경우, 예측 가능한 경우가 많다.
       ▪ DNS 캐시의 이전 결과

 

 

2.  예전 공격 방식

 > 이전 버전의 BIND에서는 수신된 응답에 추가 조회 정보(additional Info section)가 포함될 수 있름




> 이 추가 조회 정보는 나중에 사용할 수 있도록 저장됨


> victim.com의 사용자가 은행을 찾으면 해커의 사이트로 리디렉션


> 해커는 비밀번호 등을 얻기 위해 가상의 모방 사이트를 만듬.



> 추가 정보를 무시하도록 BIND가 패치되되어서  더 이상 작동되지는 않음
          ( 현재는 보안 문제로 패치 ) 

 

 

 

3.  공격 방식 

> 공격의 첫 번째 단계는 victim.com의 현재 쿼리 ID 번호를 알아내는 것

> 가장 간단한 방법은 서버에 공격자의 DNS 시스템을 쿼리하도록 하는 것

> 쿼리 ID가 어떻게 변경되는지 알기 위해 이 쿼리를 여러 번 반복하면서 알아냄

> 초기 버전의 DNS 서버는 ID 필드를 결정적으로 증가시킴
 ==> 임의 쿼리 ID로 패치



생일 공격

▪ 16비트 쿼리 ID(옵션 65,536개만 해당)
▪ 해커는 동시에 다양한 ID로 많은 쿼리를 전송.
▪ 랜덤 트랜잭션 ID로 수백 개의 회신을 동시에 전송
▪ 정확한 추측을 할 수 있는 확률 증가

 

 

 

 

DNS Defense


  • BIND의 새 버전은 쿼리 ID를 예측하기가 더 어렵습니다.
  • DNSSEC: RFC 2535  :  RSA 서명된 DNS 레코드가 있는 안전한 DNS 버전
  • DNS 응답 인증
    • 각 DNS 응답에는 요청된 RR의 서명이 있습니다.
    •  Resolver는 권한 있는 서버의 공개 키를 사용하여 응답을 인증합니다.

 

 

Split-split defense ( 분할 방어 ) 

도메인 내에서 사용자의 이름을 확인하는 하나의 DNS 서버. 이 서버는 외부 쿼리에 응답하지 않습니다.

  • 외부로부터의 쿼리에 응답하기 위해 별도의 DNS 서버가 설정되었습니다.
  • 서로 정보 교환을 하지 않음
  • 사용자가 중독된 정보에 노출되지 않음

 

 

/etc/named.conf 의 방어

 

 

DNSSEC ( DNS Security )  :  DNS 서비스의 보안 확장

  • Authoritative name servers는 영역 서명을 수행하여 영역(zones)을 보호한다.
  • 응답 영역 관리자가 만들고 수신인의 해결사 소프트웨어에 의해 확인된 디지털 서명을 사용하여 엔드 투 엔드 인증을 제공합니다.
  • 기존 DNS 프로토콜에 대한 수정사항 및 새 리소스 레코드 유형 집합을 정의합니다.
  • RFC 4033, 4034, 4035

 


각 DNSSEC의 사용 가능한 인증된 NS에는 두 개의 공개 키가있음

 - ZSK ( Zone Signing Key ) : Zone의 RRset에 서명하는데 사용됨
 - KSK ( Key Signing Key  )  : DNSKEY RR의 서명에 사용 (  trush anchor로 사용 가능 )  

 

 

 

 

DNSSEC Resource Records:

 

<1> DNSKEY resource record : 공개 키를 정의함

Flags  : DNSKEY-flag , KEY-Type; (ZSK, KSK) 

Proto. : DNS 프로토콜 타입
Alg.     : 공개 키 알고리즘 종류 ( rsa/md5 , rsa/sha1 , .. )

<2> RRSIG resource Records : RRset의 인증 정의


Type cpvered  :  RRSig record에 의해 커버된 RR type
Alg : DS를 만들기 위해 사용되는 암호화 알고리즘
Num of labels : 서명된 레코드 주인 식별자
Key tag : DNSKEY RR의 키 태그 값
RRset TTL : RRSIG에 의g해 커버된 RRset 레코드의 TTL 값
DS : base64로 인코딩된 디지털 서명

<3> DS resource record : 

– 하위 영역의 KSK 해시를 포함하며 신뢰되는 앵커로 사용할 수 있다.
– 서명된 하위 영역에 대한 보안 위임 지점을 생성한다.


Key tag : DNSKEY RR의 키 태그 값 ( DNSKEY RR 은 DS RR을 가리킴 ) 
Alg : DNSKEY RR의 알고리즘
Digest type : 암호분을 만드는 알고리즘 (SHA-1 , SHA-256 .. )
Digest : DNSKEY RR digest value 

<4> a chain of trust thru DS resource record

 

 

Validation process

   - DNS 서버는 RRset 및 DNSKEY, RRSIG RR을 수신한다.
   - DNSKEY RR을 사용하여 디지털 서명을 해독하여 권한 있는 DNS 서버의 응답을 검증한다.

 

 

 

반응형

'Lab & Research > Information Security' 카테고리의 다른 글

TCP/IP 보안  (0) 2022.06.02
모니터링과 보안 위협 종류  (0) 2022.06.02
IP 보안  (1) 2022.05.29
무선 네트워크 보안  (0) 2022.05.27
이메일 보안 ( PGP , S/MIME )  (0) 2022.05.09