원문은 SRD 블로그의 MS10-054: Exploitability Details for the SMB Server Update 입니다.

이번 달 마이크로소프트는 SMB 서버 구성요소에서 발견된 3개의 취약점에 대한 보안 업데이트를 배포했습니다. 2개는 서비스 거부 공격이 가능한 취약점이고, 1개는 잠재적으로 원격 코드 실행이 가능한 취약점(CVE-2010-2550)입니다. 이 글에서는 왜 실제 안정적인 원격 코드 실행 공격이 어려운지 설명합니다.

이미 보안 공지에서 언급되었다시피, 윈도우 비스타, 윈도우 7, 윈도우 서버 2003, 윈도우 서버 2008, 윈도우 서버 2008 R2 운영체제는 기본적으로 인증되지 않은 사용자의 공격으로부터 안전합니다. 대부분의 공격 시나리오에서는 인증이 필요합니다.

취약점 세부사항

CVE-2010-2550을 익스플로잇하려면 대상 시스템의 SMB 공유에 대한 읽기 권한을 반드시 가지고 있어야 합니다. 이는 공격자가 이미 사용자 인증을 거쳤거나, 네트워크 공유가 익명 접근을 허용하는 상태라는 것을 의미합니다. (이는 윈도우 XP에서만 기본 설정입니다.)

공격자는 읽기 권한을 가진 상태로 공격 대상에게 조작된 SMB 패킷을 보내야만 커널 풀 블록(kernel pool block)이 덮어씌워지도록 유도할 수 있습니다. 이는 메모리 할당 요청을 할 때 공격자가 제공한 크기 값이 그대로 사용되기 때문입니다. 만약 공격자가 작은 크기 값을 주게 되면, 시스템은 할당된 버퍼에 인접한 풀 블록을 덮어쓰게 됩니다. 이 때 덮어씌워지는 데이터로 대상 시스템의 디스크나 파일시스템에 존재하는 데이터를 이용할 수 있습니다.

익스플로잇 세부사항

공격자가 이 취약점을 공략할 수 있다고 가정하더라도, 아래와 같은 사항들 때문에 안정적으로 익스플로잇하는 것이 어렵습니다.

  • 윈도우 7과 윈도우 2008 R2 운영체제는 커널 내부에 풀 오버런 익스플로잇에 대응할 수 있는 방안을 갖추고 있기 때문에 원격에서 공격하는 것이 매우 어렵습니다. (Safe Unlinking in the Kernel Pool 참조)
  • 커널 풀 블록에 쓰여지는 데이터가 공격자가 쉽게 제어할 수 있는 부분이 아니라 대상 시스템의 디스크 혹은 파일시스템에서 오게 되어있습니다. 원격 공격 시에 공격자의 의도에 맞는 정확한 값을 찾기란 어렵습니다. 다만, 로컬 공격의 경우라면 위치 제어가 가능하므로 로컬 권한 상승에 악용할 수 있겠습니다.
  • 익스플로잇에 실패하는 경우 시스템 충돌(블루스크린)이 발생하므로 익스플로잇 기회는 단 한 번 밖에 없습니다.

이상의 이유로 이 취약점을 악용하여 원격 코드 실행하는 것은 어려울 것이고, 이보다는 서비스 거부 공격의 발생 가능성이 높을 것으로 예상됩니다. 로컬 권한 상승은 가능하나, 이 취약점을 이용한 웜이 퍼질 가능성은 매우 낮습니다.