참고 사이트 : http://www.owasp.org/index.php/Category:OWASP_Ruby_on_Rails_Security_Guide_V2
문서 다운로드(PDF파일) : https://www.owasp.org/images/8/89/Rails_Security_2.pdf
1.Anti-Cross Site Scripting Library 란?
The Microsoft Anti-Cross Site Scripting Library V3.1 (Anti-XSS V3.1) XSS취약점으로부터 ASP.NET기반의 웹 어플리케이션을 대응하는데 사용되는 인코딩 기능을 가지고 있는 라이브러리 이다. XSS 공격들을 대응하는데, 허용되는 패턴과 가능한 패턴들을 정의하여 잠재적인 위험성이 존재하는 패턴들에 대해서 인코딩된 결과 값으로 표시한다.
2.적용 방법
Step1. 출력값이 생성되는 ASP.NET 코드를 검사
XSS(Cross Site Scripting) 취약점은 출력물의 결과값에 따라서 발생한다. 그렇기 때문에 출력문을 처음 검사를 해야 한다. .NET 환경에서 일반적으로 사용되는 패턴은 “Response.Write” 와 “<%=” 이다.
Step2. 신뢰하지 않는 입력값이 결과값에 포함이 되어 있는지 결정
신뢰하지 않는 입력값이 아래와 같은 변수에 사용되었는지 판단한다.
Application variables Cookies Databases Form fields Query String variables |
// 취약한 소스 예제 // 수정된 소스 예제 |
Encoding 메소드 | 관련 내용 | 패턴 예제 |
HtmlEncode(String) | HTML 속성 이외에 신뢰하지 않는 입력값이 HTML출력에 사용할 시 | <a href=”http://www.contoso.com”>Click Here [Untrusted input]</a> |
HtmlAttributeEncode(String) | 신뢰하지 않는 입력값이 HTML 속성에 사용할 시 | <hr noshade size=[Untrusted input]> |
JavaScriptEncode(String) | 신뢰하지 않는 입력값이 Javascript 문에 사용할 시 |
<script type=”text/javascript”> … [Untrusted input] … |
UrlEncode(String) | 신뢰하지 않는 입력값이 URL에 사용할 시 | <a href=”http://search.msn.com/results.aspx?q=[Untrusted input]”>Click Here!</a> |
VisualBasicScriptEncode(String) | 신뢰하지 않는 입력값이 VBScript 문에 사용할 시 | <script type=”text/vbscript” language=”vbscript”> … [Untrusted input] … |
XmlEncode(String) | XML 속성 이외에 신뢰하지 않는 입력값이 XML출력에 사용할시 | <xml_tag>[Untrusted input]</xml_tag> |
XmlAttributeEncode(String) | 신뢰하지 않는 입력값이 XML 속성에 사용할 시 | <xml_tag attribute=[Untrusted input]>Some Text</xml_tag> |
// 잘 구현한 예제 // Process input |
3.참고 자료
가. MSDN 블로그
http://blogs.msdn.com/sdl/archive/2009/09/23/new-and-improved-antixss-3-1-now-with-sanitization.aspx
나. MSDN 다운로드 페이지
http://www.microsoft.com/downloads/thankyou.aspx?familyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09&displayLang=en
본 내용은 MSDN 을 참고하여 내용을 번역 및 추가하였습니다.
일반적으로 아직은 Version 2.0 기준으로 사용되기 때문에 해당 자료들을 참고해서 대응을 해주시면 좋을듯 합니다.
소스기반에서 대응을 하는 것보단 .NET에서 지원되고 있는 모듈들을 이용해서 대응하는게 많습니다. 마이크로 소프트 정신을 생각하면 이게 아마 더 효율적이라 해당되고요.
Security Guidelines: ASP.NET 2.0 : http://msdn.microsoft.com/en-us/library/ms998258.aspx (상세설명)
Security Checklist: ASP.NET 2.0 : http://msdn.microsoft.com/en-us/library/ms998249.aspx
.NET 환경에서 웹 어플리케이션 보안 개발시 참고할만한 사이트 들입니다. 대부분 MSDN에서 제공하고 있으며, 관련된 상황에 맞게 적용하시면 될거 같습니다.
Validate all untrusted input
http://msdn.microsoft.com/en-us/library/ms972961.aspx
Encode any Web response data that could contain user or other untrusted input
http://msdn.microsoft.com/en-us/library/ms998274.aspx
Use built-in ASP.NET protection via the ValidateRequest option
http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.validaterequest.aspx
Use the System.Web.HttpCookie.HttpOnly property
http://msdn.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx
Use the <frame>, <iframe> IE6 and above security attribute
http://msdn.microsoft.com/en-us/library/ms534622.aspx
Use the Microsoft Anti-Cross Site Scripting Library (AntiXSS)
http://www.codeplex.com/antixss
Developer Encoding Libraries:
.NET System.Web.HttpUtility
http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx
Microsoft Anti-Cross Site Scripting Library
http://msdn.microsoft.com/en-us/library/aa973813.aspx
Reducing Exposure to Cross-Site Scripting Attacks using ASP.NET
http://msdn.microsoft.com/en-us/library/ms998274.aspx
참고 사이트)
http://www.microsoft.com/downloads/details.aspx?FamilyID=0fcba3c7-bc30-47b0-a2f8-2e702720998a&DisplayLang=en
웹 인증 및 IP 기반 접근 제어 메커니즘 우회 기법에 대한 연구
(XSS_SHELL, XSS_TUNELING 응용기법)
kerz@a3security.com
(A.K.A k3rz)
※ 본 연구 문서는 신규 취약점 또는 보안 기술 우회 기법에 관한 문서로써 악용될 우려가 있는 상세 공격 코드 및 내용은 제한합니다.
I. 웹 인증 및 IP 기반 접근 제어 메커니즘 우회 기법 개요
1. 개 요
"웹 인증 및 IP 기반 접근 제어 메커니즘 우회 기법"은 웹 기반 환경에서 가장 보편적으로 많이 사용되고 있는 "아이디", "비밀번호" 기반의 인증 체계와 IP 기반의 네트워크 접근 제어 방식을 우회, 무력화 시키는 기법이다.
본 기법은 웹 취약점과 네트워크 터널링 기술을 응용하여 다양한 웹 기반 환경하에서 적용이 가능하다.
2. 공격유형: 코드 실행, 원격 접속
3. 공격영향도: 높음
4. 시스템 환경: Apache, IIS 등 HTML이 실행되는 웹 서버
II.. 위험 분석
1. 위험 분석
XSS 취약점은 국내는 물론 해외에서도 웹 서버에서 보편적으로 가장 많이 발견되는 취약점이다.
이러한 XSS 취약점이 매개체가 되어, 쿠키 세션 수집, 리버스 채널, 임의의 명령 실행 등이 복합적으로 연계가 되며, 이로 인해 관리자 권한 획득, 내부 정보 및 개인 정보 유출이 가능하다.
또한 네트워크 터널링 기술을 이용하여 방화벽 우회를 통한 외부망에서 내부망으로의 침입 및 IP 접근 제어 우회가 가능하다.
III. 대응 방안
1. 입력값 검증
XSS SHELL, XSS TUNNELING 또한 XSS가 근본이 되는 기술이기 때문에 근본적으로 XSS에 대한 대응으로 보안성을 높일 수 있습니다. 간단하게 입력 값 변환으로 <, > 와 같은 문자들을 HTML에 표시하는 < > 로 변환을 하여 저장을 하고 보여주는 방법으로 막을 수 있다. 그외 다음과 같은 추가적인 대응방안이 필요하다.
- 자산 중요도가 높은 주요 서버는 인증서와 같은 강화된 인증 체계 사용
- 네트워크 Outbound 필터링 등
IV. 세부내역
1. 웹 인증 공격(XSS_SHELL) 시나리오
(1) XSS 취약점 및 파일업로드 취약점을 통한 스크립트 삽입
(2) 해당 서비스에 사용자들 쿠키 세션 수집
(3) 리버스 채널
(4) 임의의 명령 실행 및 사용자 정보 획득
다음은 피해자의 브라우저에 alert 명령 실행된 화면이다.
[그림 1] alert 명령 실행 성공
2. IP 기반 접근 제어 우회 (XSS Tunneling)시나리오
(1) XSS 취약점 및 파일업로드 취약점을 통한 스크립트 삽입
(2) 해당 서비스에 사용자들 쿠키 세션 수집
(3) 리버스 채널
(4) 공격자 서버에 사용자 연결 (터널링)
(5) 관리자 페이지 및 내부 시스템 접근
다음은 XSS_TUNNELING을 통해 피해자가 방문한 URL을 실시간으로 확인한 화면이다.
[그림 2] 피해자가 방문한 URL 확인
※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.