2021-04-17 15:10 (토)
CVE-2015-5477 Bind crash 공격 코드 공개 및 차단방안
상태바
CVE-2015-5477 Bind crash 공격 코드 공개 및 차단방안
  • 홍석범
  • 승인 2015.08.01 18:00
이 기사를 공유합니다

즉시 패치 어려울 경우, TKEY query 차단 필요
CVE-2015-5477(dailysecu.com/news_view.php?article_id=10289) Bind 취약성과 관련한 공격코드가 공개되었다. 공격코드를 이용할 경우 원격에서도 단 하나의 패킷으로 Bind DNS가 즉시 crash되기 때문에 그 피해가 매우 클 것으로 보여 긴급 패치가 필요하다. 더군다나 금번 취약성은 Resolving 이나 Auth. DNS에 무관하게 거의 모든 버전의 9.x Bind에 해당하기 때문에 매우 심각하지 않을 수 없다.

아래는 공개된 코드를 이용한 간단한 공격시연이다.
 
$ 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]