1. 웹 서버 정보 노출 방지
2015. 10.13
기술지원
황인균
UrlScan 유의사항
2. 2
보안 요구사항
TTP 응답에는 아래 박스처럼 HTTP 헤더에 서버 환경에 대한 정보를 포함하고 있는 항목들이 있다. 요구사항은 보안과 관련된 이 헤더 항
목들을 제거하라는 것.
제거 대상 헤더 : Server, X-ASPNet-Version, X-Powered-By, X-AspNetMvc-Version
3. 3
첨부) HTTP응답 헤더 제거하기
■ IIS6.0
http://www.4guysfromrolla.com/articles/120209-1.aspx
헤더 例 방법
Server Server: Microsoft-IIS/6.0 UrlScan 툴 사용
http://aspdotnet.tistory.com/1282
1) UrlScan 인스톨
2) Global Filter에서 제거(*)
3) IIS관리자 > 사이트 > “ISAPI 필터”
3.1) 필터 추가
"UrlScan 3.1 - C:WindowsSystem32inetsrvurlscanurlscan.dll“
3.2) IIS 7.x 경우
C:WindowsSystem32inetsrvconfigapplicationHost.config 수정
preCondition="bitness64" preCondition="bitness32"
3.3) UrlScan.ini 설정
- RemoveServerHeader=1
- AllowDotInPath=1
X-Powered-By X-Powered-By: ASP.NET 1) IIS 관리자 > 사이트 속성 > HTTP Headers에서 제거
2) 또는 web.config 수정
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
X-AspNet-Version X-AspNet-Version: 2.0.50727 <httpRuntime enableVersionHeader="false" />
X-AspNetMvc-
Version
X-AspNetMvc-Version: 1.0
* ASP.NET MVC 사용하는 경우 추가됨
Application_Start 이벤트 핸들러에 아래 코드 추가
MvcHandler.DisableMvcResponseHeader = true;
HTTP 응답 헤더에서 불필요한 값을 제거하는 방법은 “IIS 버전별, 그리고 문제 헤더별로 제거하는 방법이 다르다.
(*) Global Filter에서 제거 – “첨부) UrlScan 인스톨 유의사항” 참조
4. 4
첨부) HTTP응답 헤더 제거하기
■ IIS7.x 클래식 모드
- 앞에서와 같은 방식으로 제거
■ IIS7.x 통합 모드
HTTP 모듈을 사용하면 one point에서 관리 가능
1) 직접 제작 가능( 아래 코드 참조)
https://blogs.technet.microsoft.com/stefan_gossner/2008/03/12/iis-7-how-to-send-a-custom-server-http-header/
2) 이미 만들어진 HTTP 모듈도 제공한다.
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
3) URLRewrite 유틸을 사용할 수도 있다.
http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx
/// <summary>
/// IIS7.0 이상, Integration 모드에서만 사용가능
/// </summary>
public class HttpHeaderModule : System.Web.IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders; // 이 이벤트는 IIS7.0 통합 모드에서만 발생
}
void OnPreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("Server");
HttpContext.Current.Response.Headers.Remove("X-Powered-By");
HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
}
public void Dispose()
{ }
}
5. 5
첨부) UrlScan ISAPI 필터 기능
■ UrlScan 기능
- 파일 설정( urlscan.ini)을 통해서 웹 서버로의 요청과 응답에 대한 규칙을 정의해서 제어할 수 있음.
%WINDIR%System32InetsrvURLscan
응답 제거 예 ) RemoveServerHeader = 1 설정을 하면, Server 헤더는 HTTP 응답에 포함되지 않음.
요청 체크 예 ) AllowDotInPath=1을 설정하면, URL에 dot(.)가 포함되면 요청을 거부하게 됨.
클라이언트 웹서버
ScanUrl 룰
UrlScan
ISAPI
필터
② RemoveServerHeader 값 체크
①
③ RemoveServerHeader =1이면
Server 헤더 포함시키지 않고 응답
클라이언트 웹서버
룰
UrlScan
ISAPI
필터
② AllowDotInPath=0
( Url에 dot가 포함되어도 OK)
① http://~/PEC.Launcher.exe.manifest
[ Server 응답 헤더 없애기 ]
[ 요청 URL 필터링 ]
6. 6
첨부) UrlScan 인스톨 유의사항
IIS7.x이상에서는 UrlScan 툴을 설치하면 해당 서버에 포함된 모든 사이트에 UrlScan용 ISAPI 필터가 추가됨.
IIS 관리자를 통해서 보면, 최상위 노드 즉 로컬 머신 노드의 ISAPI 필터로 등록이 되어 있어서 하위의 모든 사이트에 상속되기 때문
이다.
IIS 관리자의 로컬 머신 노드에서 UrlScan 필터를 제거하고 필요한 사이트에서만 수작업으로 추가한다.
Update – 2015.10.16(금)
UrlScan (urlscan_xxx.msi)을 인스톨하면 IIS의 Global Filter로 등록되는 것은 v7.x이상만은 아니다. v6.0에서도 마
찬가지다. IIS 관리 툴에서 확인하는 노드 위치가 다를 뿐이다.
: IIS7.x - “로컬 머신 노드”의 속성 창
: IIS6.0 - “웹 사이트” 노드의 속성창
보안상 Global Filter로 등록되어서 전체 사이트에 적용되는 것이 맞겠지만,
1) 만약 하나의 서버에 공개된 사이트와 내부에서 사용되는 사이트가 혼재되어 있는 상황이고,
2) UrlScan 설정이 일부 사이트에 영향을 줄 수 있는 상황이라면,
Global Filter에서 제거하고 특정 사이트의 필터로만 등록해야 할 수 있다.
그런 경우에는 Global Filter에서 UrlScan 필터를 제거하고 필요한 사이트에서만 수작업으로 추가한다.