마이크로소프트(Microsoft) 11월 패치 릴리즈

미국 시간으로 11 13일 화요일 오전 마이크로 소프트사에서개의 패치가 발표 되었다. 정기적인 패치 릴리즈 계획에 따른 것이다. 매달 두번째 화요일인 이 날을 통상적으로 패치 투스데이(Patch Tuesday)라고 부른다.

번에는 단지 두개의 패치가 발표 되었지만 모두 중요도가 높고 파급 효과가 높은 것들이었다.

첫번째 패치인 Vulnerability in Windows URI Handling Could Allow Remote Code Execution (943460) IE7의 프로토콜 핸들러의 오작동으로 인한 것으로 간단하게 대상 시스템에서 명령을 실행 시킬 수 있다. 이를 악용한 악성 코드가 대체로 PDF 파일을 이용하여 공격한 바 있다.

두번재 패치는 Vulnerability in DNS Could Allow Spoofing (941672)로서 DNS 서버의 취약점에 대한 것이다. 이미 Windows DNS Server Cache Poisoning라는 문서에서 자세한 공격법이 밝혀진바 있다. 아직 공개된 코드(exploit)는 없지만, 생각보다 간단하게 공격 코드를 완성할 수 있었다. 이미 러시아 등지에서 해당 취약점을 이용한 대규모 파밍 공격이 벌어졌다는 보고가 있다고 한다.

격의 원리는 간단하다. DNS 패킷의 경우 UDP를 주로 사용하게 되는데, 시퀀스 넘버등을 사용하지 않음으로 인해서UDP TCP에 비해서 스푸핑에 취약하다는 맹점이 있다. DNS의 경우 각 쿼리 패킷에 트랜잭션 아이디(Transaction ID)를 부여하여 패킷을 전송하고 응답 패킷에서 해당 트랜잭션 아이디가 그대로 되돌아 왔는지 확인하는 방법으로 스푸핑을 방지하고 있다. 하지만, 윈도우즈 계열의 DNS 서버에서는 이 트랜잭션 아이디가 추측이 가능하다는 데에 문제가 발생한다.

랜잭션 아이디는 아래와 같이 16비트의 값으로서, M은 순수하게 랜덤한 값이지만 C L에는 어떠한 규칙성이 존재한다.

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

0

M=pseudo random data

C=n%256

L

n 변수는 패킷이 하나 나갈 때마다 1씩 증가하게 되므로 C를 추측하는 것은 간단하다. L의 경우는 다음과 같은 공식으로 통해서 계산된다고 한다.

L=(T[C mod 8][n mod 7]+(C mod 8)·t) mod 8

기에서 우리가 모르는 변수는 t로서 시간과 관련된 변수이다. 하지만 이 공식의 문제는 C mod 8 0이 될 때에는 L의 값이 항상 0가 된다는 것이다. C는 추측이 가능하므로 8패킷에 하나마다 C L을 확실하게 알 수 있는 경우가 생긴다. 이 경우 단지 3비트의 M 값만 맞추면 트랜잭션 아이디를 맞출 수 있게 된다. 3비트는 8개의 경우의 수를 만들므로 8개의 가짜 응답을 보내면 그 중에 하나는 맞게 된다.

Windows DNS Server Cache Poisoning 문서를 보면 해당 공격을 실질적으로 행할 수 있는 방법으로 “Cname Chain”을 들고 있다. 이 방법에 대해서 나중에 따로 설명을 하겠다.

Leave a Reply