우선 DNS Cache란
recursion 과 연관된 개념으로 최 상위 root DNS 에 질의를 할때까지의 과정을
순환하여 질의할때 DNS Cache 에 저장되어 있는 정보가 있으면 Root DNS 까지의 질의를
거치지 않고도 cache 정보만으로 빠르게 질의를 할 수가 있도록 하는 것입니다.
test.com 이라는 도메인의 네임서버 정보변경 ( xxx.xxx.xxx.xx1 에서 xxx.xxx.xxx.xx2 로 변경)
네임서버의 정보 변경을 위해서는 만 하루이상의 시간이 소요가 되는경우가 많은데
이것은 네임서버의 설정에서 TTL (Time To Live) 값이 86400 ( 1일 ) 로 설정이 되어 있을때 생깁니다.
TTL 값이 86400 이면 각각의 이용자들의 DNS Cache에 test.com 이라는 도메인의 ip주소가 xxx.xxx.xxx.xx1로
기억이 되어 있기 때문에 이 값이 refresh 되기 위해서는 약 1일정도의 시간 (TTL 소멸시간) 이 소요되는 것입니다.
** 참고
1) 윈도우 사용자의 DNS Cache 확인하기
시작 - 실행 - cmd 입력
ipconfig /displaydns 라고 입력하면 현재 cache에 저장된 dns 값들이 나열됩니다.
ipconfig /flushdns 라고 입력하면 현재 cache에 저장된 dns값들을 flushing 합니다.
2) Linux 사용자의 DNS Cache 확인하기
[root@saintserver named]# rndc dumpdb => 현재 DNS cache 저장
[root@saintserver named]# rndc flush => 현재 DNS cache flushing
위 파일을 보시면 현재 Linux 서버에 저장된 DNS cache 값을 확인 할 수 있습니다.
DNS Cache Poisining 공격은 ip주소/ port 번호 / transaction id 만 위조하면 충분히 공격가능하며,
ip 및 port 는 조건만 맞다면 쉽게 위조가 가능합니다.
그리고 transaction id 는 bind 8.x 버전에서 8번에 한번정도로 유추가 가능합니다. 이를 유추할 수 있는
공식은 이미 알려진 상태이며 실제로 cache poisining 공격의 피해사례도 많이 발생을 하고 있습니다.
** 조치사항
우선 서버 관리자분께서 가장 간단히, 우선적으로 취해야 할 내용은 자체 네임서버를 구축하여 사용하는
경우 재귀질의(recursion 을 제한을 하거나, 허용할 필요가 없다면 사용하지 않는것으로 하셔야 합니다.)
아래의 경우 recursion 을 허용할 ip로
123.123.123.123 및 123.123.123.0/24 대역으로 제한한 예입니다.
options {
allow-recursion {123.123.123.123; 123.123.123.0/24; };
};
recursion 을 허용할 필요가 없다면 다음과 같은 설정으로 차단합니다.
options {
allow-recursion {none;};
};
또는,
options {
recursion no;
};
recursion 과 연관된 개념으로 최 상위 root DNS 에 질의를 할때까지의 과정을
순환하여 질의할때 DNS Cache 에 저장되어 있는 정보가 있으면 Root DNS 까지의 질의를
거치지 않고도 cache 정보만으로 빠르게 질의를 할 수가 있도록 하는 것입니다.
test.com 이라는 도메인의 네임서버 정보변경 ( xxx.xxx.xxx.xx1 에서 xxx.xxx.xxx.xx2 로 변경)
네임서버의 정보 변경을 위해서는 만 하루이상의 시간이 소요가 되는경우가 많은데
이것은 네임서버의 설정에서 TTL (Time To Live) 값이 86400 ( 1일 ) 로 설정이 되어 있을때 생깁니다.
TTL 값이 86400 이면 각각의 이용자들의 DNS Cache에 test.com 이라는 도메인의 ip주소가 xxx.xxx.xxx.xx1로
기억이 되어 있기 때문에 이 값이 refresh 되기 위해서는 약 1일정도의 시간 (TTL 소멸시간) 이 소요되는 것입니다.
** 참고
1) 윈도우 사용자의 DNS Cache 확인하기
시작 - 실행 - cmd 입력
ipconfig /displaydns 라고 입력하면 현재 cache에 저장된 dns 값들이 나열됩니다.
ipconfig /flushdns 라고 입력하면 현재 cache에 저장된 dns값들을 flushing 합니다.
2) Linux 사용자의 DNS Cache 확인하기
[root@saintserver named]# rndc dumpdb => 현재 DNS cache 저장
[root@saintserver named]# rndc flush => 현재 DNS cache flushing
위 파일을 보시면 현재 Linux 서버에 저장된 DNS cache 값을 확인 할 수 있습니다.
DNS Cache Poisining 공격은 ip주소/ port 번호 / transaction id 만 위조하면 충분히 공격가능하며,
ip 및 port 는 조건만 맞다면 쉽게 위조가 가능합니다.
그리고 transaction id 는 bind 8.x 버전에서 8번에 한번정도로 유추가 가능합니다. 이를 유추할 수 있는
공식은 이미 알려진 상태이며 실제로 cache poisining 공격의 피해사례도 많이 발생을 하고 있습니다.
** 조치사항
우선 서버 관리자분께서 가장 간단히, 우선적으로 취해야 할 내용은 자체 네임서버를 구축하여 사용하는
경우 재귀질의(recursion 을 제한을 하거나, 허용할 필요가 없다면 사용하지 않는것으로 하셔야 합니다.)
아래의 경우 recursion 을 허용할 ip로
123.123.123.123 및 123.123.123.0/24 대역으로 제한한 예입니다.
options {
allow-recursion {123.123.123.123; 123.123.123.0/24; };
};
recursion 을 허용할 필요가 없다면 다음과 같은 설정으로 차단합니다.
options {
allow-recursion {none;};
};
또는,
options {
recursion no;
};