원문은 마이크로소프트 SRD 블로그의 MS10-006 and MS10-012: SMB security bulletins 입니다.
이번 2월 보안 공지로 발표된 SMB 취약점 중 MS10-006은 SMBv1 클라이언트 구현에서 발견된 2개의 취약점에 대한 것이고, MS10-012는 SMB 서버 구현에서 발견된 4개의 취약점을 다루고 있습니다.
SMB 서버 취약점은 무엇이고 어떻게 익스플로잇이 가능합니까?
첫번째 문제는 사용자 인증된 상태에서 원격 코드 실행이 가능한 취약점(CVE-2010-0020)이 모든 윈도우 버전의 SMBv1 서버 구현에 존재한다는 점입니다. 긴 파일 이름은 오류를 처리하는 코드 경로에서 커널 풀 메모리를 오염 시킬 수 있습니다. 이 취약점은 공격을 하려면 먼저 인증을 필요로 하기 때문에 중요 등급을 받았습니다.
두번째 취약점(CVE-2010-0021)과 세번째 취약점(CVE-2010-0022)은 SMBv1과 SMBv2 서버 구현 모두에서 인증 없이 서비스 거부 공격(DoS)이 가능한 취약점입니다. CVE-2010의 경우 Negotiation 요청을 처리하는 부분의 경쟁 조건이 원인이고, CVE-2010-0022는 SMB 요청의 경로 이름을 처리할 때 정수 언더플로우가 발생하는 것이 원인입니다.
마지막 취약점은 서버 쪽 취약점(CVE-2010-0231)으로 모든 버전의 윈도우에서 원격지에서 권한 상승이 가능한 취약점입니다. SMB가 생성하는 Challenge의 엔트로피가 충분하지 않았던 것이 원인입니다.
SMB 클라이언트 취약점은 무엇입니까?
첫번째 취약점(CVE-2010-0016)은 커널 풀 메모리 오염이 가능한 취약점제으로 윈도우 2003 이하 모든 SMBv1 클라이언트 구현에 존재합니다. 이 취약점은 SMB 클라이언트와 서버가 협상하는 과정에서 발생하므로 인증을 필요로 하지 않습니다. 공격자는 원격지에서 이 취약점을 이용하여 대상 시스템의 완전한 권한을 획득할 수 있습니다.
두번째 취약점(CVE-2010-0017)은 윈도우 비스타 이상의 SMBv1 클라이언트 코드의 경쟁 조건이 원인입니다. 이 취약점도 SMB 클라이언트와 서버의 협상 과정에서 발생하므로 인증이 필요하지 않습니다. 위험도는 클라이언트 윈도우의 버전에 따라 나뉘어져 있습니다.
- 비스타나 윈도우 서버 2008의 경우 공격자가 대상 시스템의 제어 권한을 얻을 수는 없고 서비스 거부를 일으킬 수는 있습니다. 하지만 로컬의 인증된 사용자라면 이 취약점을 익스플로잇 할 수 있을 것이고 완전한 제어를 얻을 수 있을 것입니다.
- 윈도우 7과 서버 2008 R2는 이 취약점의 다양한 변용을 통해 대상 시스템의 제어를 얻을 가능성이 있습니다. 원격 코드 실행이 가능한 위험 때문에 이 플랫폼에서는 해당 취약점이 긴급 등급으로 분류됩니다. 이번 업데이트는 원격 코드 실행 가능성 때문에 이루어진 것이긴 하지만 대부분 그 영향은 서비스 거부로 끝날 가능성이 높습니다.
왜 SMB 클라이언트 업데이트가 윈도우 7과 서버 2008 R2에서는 긴급 등급이고 비스타나 서버 2008에서는 중요 등급인 것입니까?
그 이유는 윈도우 7 개발 과정에서 설계를 바꾸면서 SMB 클라이언트 코드가 커널 모드 네트워킹 I/O 방식을 사용하도록 변경되었기 때문입니다. (Winsock Kernel 참조) 이 때문에 SMB 클라이언트 코드가 서로 다른 타이밍 조건에 노출되면서 경쟁 조건이 만들어진 것입니다. 하지만 WSK 자체가 취약점의 원인은 아니며 이번 업데이트로 인해 WSK가 변경되는 부분은 없습니다.
어떤 식으로 SMB 클라이언트 취약점을 익스플로잇 할 수 있습니까?
MS10-006의 취약점은 서버 쪽이 아닌 클라이언트 구현 쪽에 존재합니다. 따라서 이 취약점을 공략하려면 악성 SMB 서버를 만들어놓고 클라이언트가 이 서버로 접속하도록 유도해야 합니다. 여러분의 네트워크 환경이 외부 인터넷으로의 SMB 연결을 허용하지 않도록 되어있다면 인터넷을 통한 공격은 막을 수 있습니다. 하지만 로컬 네트워크에 해킹된 컴퓨터가 있다면 MITM 공격을 수행하여 인트라넷 내부의 클라이언트가 전송한 SMB 요청에 악의적인 응답을 보내는 방식으로 공격이 가능합니다.
인터넷을 이용한 공격 경로에는 SMB 서버로 향하는 링크를 포함하고 있는 감염된 사이트를 방문하거나 HTML 이메일을 받는 것도 포함됩니다. HTML 파일에 링크가 걸린 내용을 가져오려고 외부로 나가는 SMB 연결이 만들어지고 이 때 방화벽에서 차단하지 않는다면 공격이 가능합니다.
참고 문헌
- Winsock Kernel on MSDN (영문)
- SMB 클라이언트/서버 역할 (영문)
악용된 사례가 있을지 궁금하군요.
개발자 입장에서 보면 정상적인 포맷인지 확인하는 예외처리만 두었어도 안정적인 코딩으로 볼 것 같습니다.
솔직히 권고문 보면서 살짝 소름돋았습니다. 사람이 이렇게 생각하기도 하는구나 싶기도 해서...취약점은 볼때마다 신기합니다.
<a href=http://www.randka-romans.pl/randki>Randki</a>
Czeka Cie wielka Milosc!
Zarejestruj siêa darmo i szukaj