본문 바로가기

새빨간거짓말

[CVE-2015-5477] Bind(DNS Server) TKEY 서비스거부 취약점

# 취약점 정보 :


  • CVE Number : CVE-2015-5477
  • 영향을 받는 버전 : 

        : 9.1.0 -> 9.8.x

        : 9.9.0-> 9.9.7-P1

        : 9.10.0->9.10.2-P2


  • 요약 :  

: DNS 서버는 DNS 데이터베이스 업데이트를 인증하기 위해 TSIG(Transaction Signature) 라는 프로토콜을 사용함. 이 때, 사용하는 키를 TKEY 메시지를 통해서 공유.

: TKEY 메시지를 처리하는 과정에 적절한 레코드 데이터를 찾기 위해 아래 2 섹션에서 뒤짐(Lookup).

        Answer Record Section

        Additional Records Section    

: 이때, 아래와 같이 초기에 NULL로 세팅된 name 변수가 첫 번째 Lookup 함수(additional records) 과정을 거치면서 non-null 값으로 세팅. 이 값이 다시 두 번째 lookup 함수(answer records) 안으로 넘겨지면서 Null 검사코드 에서  REQUIRE assertion fail  이 발생하고 Bind 서버를 종료시킴(Crash).

 

[그림] lib/dns/tkey.c 코드 일부


[그림] lib/dns/message.c 코드 일부

 


# 취약점 테스트 :

  

  • 공개된 POC

[01] http://pastebin.com/raw.php?i=j68PwWZh

[02] https://github.com/robertdavidgraham/cve-2015-5477


[그림] 첫 번째 PoC 코드

  

  • 대상 시스템

    우분투 / Bind 9.8.0-P1 (취약한 버전)

    http://tw.archive.ubuntu.com/Unix/isc/bind9/9.8.0-P1/

 

  • 공격코드 실행


[그림] 두 번째 PoC 실행화면 

 

  • Bind 서버 종료 (Bind 서버 DoS)

[그림] tail –f /var/log/syslog 에러 메시지

 

  • 트래픽 정보

>> Queries(Type = TKEY(00 F9) + Class = IN (0x0001)) + Answers + Additional Records

[그림] 첫 번째 PoC 공격패킷

  

>> Queries(Type = TKEY ( 00 F9 ) + Class :=ANY( 00 FF )) + Additional Records 

[그림] 두 번째 PoC 공격패킷

  

  • 패치 적용 후,

    우분투 / Bind 9.8.1-P1 (패치된 버전)

    >> apt-get install bind9

    >> tail –f /var/log/syslog ( 깨끗… ^^* )


   

 

- 끝 -