이 취약점은 Microsoft Security Advisory (2416728) 또는 CVE-2010-3332 로 이름붙여진 상태입니다.
이 취약점은 .NET FrameWork가 지원되는 IIS 버전에서 발생하며, 윈도우 XP/Vista/7과 같은 클라이언트 운영체제 뿐만 아니라 Windows 2003/2008/2008R2에서도 문제가 있습니다. 다만 Windows 2000 운영체제에서는 문제가 발생하지 않습니다.
이 취약점을 통해 웹서버에서 암호화되어 전송되는 View State(__VIEWSTATE)와 같은 데이터를 공격자가 알아 낼 수 있습니다. 또한, 웹 서버에 저장된 파일 - 예를 들어 ASP.NET의 환경 설정 파일인 web.conifg - 을 읽을 수 있습니다.
이렇게 암호화된 데이터를 예상하여 알아내는 기술을 패딩 오라클(padding oracle) 기법이라고 하며, 최근에 이에 대한 뉴스가 잠시 나온 적이 있어 ASP.NET에 관련된 무언가에 대한 문제점이 있다는 추측이 나오기도 했습니다.
현재까지 이 취약점을 이용하여 공격하는 코드가 출현했다는 보고는 들어오고 있지 않지만, 나타날 가능성도 배제할 수는 없습니다.
마이크로소프트는 이 문제점을 해결하기 위해 조사를 진행 중에 있으며, 대안으로는 오류 페이지를 하나로 통일하여 보여 주는 방식이 유일한 것으로 알려져 있습니다.
아래 코드는 web.config 파일과 C#으로 작성된 ErrorPage.aspx 예제입니다.
<configuration>
<location allowOverride="false">
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx" />
</system.web>
</location>
</configuration>
<location allowOverride="false">
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx" />
</system.web>
</location>
</configuration>
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Threading" %>
<script runat="server">
void Page_Load() {
byte[] delay = new byte[1];
RandomNumberGenerator prng = new RNGCryptoServiceProvider();
prng.GetBytes(delay);
Thread.Sleep((int)delay[0]);
IDisposable disposable = prng as IDisposable;
if (disposable != null) { disposable.Dispose(); }
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<div>
An error occurred while processing your request.
</div>
</body>
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Threading" %>
<script runat="server">
void Page_Load() {
byte[] delay = new byte[1];
RandomNumberGenerator prng = new RNGCryptoServiceProvider();
prng.GetBytes(delay);
Thread.Sleep((int)delay[0]);
IDisposable disposable = prng as IDisposable;
if (disposable != null) { disposable.Dispose(); }
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<div>
An error occurred while processing your request.
</div>
</body>
보다 자세한 자료는 MS의 기술 자료를 참고하십시오.
https://www.microsoft.com/technet/security/advisory/2416728.mspx
이 취약점에 대한 공격코드가 아직 나타나지 않은 점에 대해 안도해야 할 수도 있을 것입니다. 만약, 공격코드가 있다면 전세계 수백, 수천만대의 웹서버가 위험에 처해질 수도 있는 매우 광범위하게 피해를 입힐 수 있는 문제점이기 때문입니다.
감사합니다.
2010년 9월 20일자로 마이크로소프트는 해당 취약점을 통해 제한적이지만 실제적으로 공격이 가능하다는 연구 결과를 발표했습니다.
댓글을 달아 주세요