Internet Explorer 8 보안 4부 : XSS 필터

 

 

안녕하세요, 저는 David Ross라고 합니다. SWI 팀의 보안 소프트웨어 엔지니어죠. SWI 팀이 인터넷 익스플로러 팀과 함께 작업한 결과를 IE 블로그에 포스트 하게 된 것을 자랑스럽게 생각합니다.

오늘 인터넷 익스플로러 8 내부에서 reflected / "Type-1" Cross-Site Scripting(XSS) 취약점을 악용하기 훨씬 어렵게 만들 새로운 IE8의 기능을 발표하려 합니다. 전체 보고된 취약점에서 Type-1XSS 결함이 차지하는 비중이 증가하는 것으로 나타나고 있으며, 재미로 그리고 이익을 위해 점점 더 많은 수의 XSS 결함이악용되고 있습니다.

유명한 웹 사이트들에서 보고된 XSS 결함의 수는 최근 하늘을 치솟고 있습니다 – MITRE는 XSS 취약점이 현재 가장 빈번하게 보고되는 취약점 종류라고 보고한 바 있습니다. 최근에는 XSSed.com과 같은 사이트에서 여러 웹사이트에서 나타나는 만 종류가 넘는 Type-1 XSS 취약점을 수집하고 발표하기 시작했습니다.

XSS 취약점은 공격자로 하여금 사용자와 웹 사이트 혹은 사용자가 신뢰하는 웹 어플리케이션 간의 관계를 조정하는 것을 가능하게 합니다. 크로스-사이트 스크립팅은 다음과 같은 공격을 가능하게 합니다:

  • 쿠키 절도, 계정 하이재킹으로 이어질 수 있는 세션 쿠키의 절도를 포함
  • 피해 웹 사이트 / 어플리케이션에 대한 키 입력의 감시
  • 웹사이트에서 특정 사용자인 것처럼 행동. 가령 Window Live Mail에 대한 한 XSS 공격은 공격자가 이메일을 읽고 전달할 수 있으며, 새로운 일정을 설정할 수 있습니다.

웹사이트 / 어플리케이션의 XSS 취약점을 줄여주는 좋은 도구들이 많이 있긴 했지만, 이런 도구들은 평범한 사용자들이 웹 브라우징을 할 때 XSS 공격으로부터 보호해 주지 못합니다.

XSS 필터 - 동작 원리

XSS 필터는 브라우저를 통하는 모든 요청 / 응답을 들여다 볼 수 있는 IE8 구성 요소로서 동작합니다. 필터가크로스-사이트 요청에서 XSS처럼 보이는 것을 발견한 경우, 필터는 그 공격을 확인하여 만일 서버의 응답에서 그것이 다시발견되면 무력화합니다. 사용자에게 물어보거나 하지는 않습니다. IE는 단순히 악의적인 스크립트의 실행을 차단합니다.

새로운 XSS 필터로 인해, IE8 베타 2 사용자들은 Type-1 XSS 공격을 당했을 때 다음과 같은 알림이 표시되는 것을 볼 수 있을 것입니다:
XSS 공격 차단 화면
"인터넷 익스플로러가 잠재적인 XSS 공격을 차단하기 위해 페이지를 변경했습니다."
(Internet Explorer modified this page to prevent a potential cross-site scripting attack.)

이 경우에는 XSS 필터가 해당 URL에서 크로스-사이트 공격을 발견한 것입니다. 식별된 스크립트가 응답 페이지에서도 재연되었기 때문에 XSS 필터가 이 공격을 무력하게 만들었습니다. 이런 방법으로 필터는 초기 서버에 대한 요청을 변경하거나 전체응답을 막지 않아도 효과적으로 동작할 수 있습니다.

이미 생각하셨을 수도 있는데, 필터가 반드시 제대로 처리해야 하는 몇 가지 복잡한 시나리오가 존재합니다. 예를 들면:

  • 필터는 공격이 흔히 사용되는 웹 어플리케이션 프레임워크들이 가지는 기능을 활용하도록 맞춰진 경우라 할지라도 공격을 잡아낼 수 있어야 합니다. 예: 요청에 포함되어 있던 몇몇 문자들이 응답에서는 일부 빠지거나 변형되는 경우라도 공격을 식별할 수 있어야 합니다.
  • 필터링을 수행하는 과정에서 새로운 공격 시나리오를 만들어내면 안 됩니다. 예: 필터가 닫는 SCRIPT 태그를 강제로 무력화하다가 페이지의 신뢰할 수 없는 컨텐트가 수행될 수 있습니다.

그리고 이런 것들 외에도 XSS-Focused Attack Surface Reduction 대응 방안에서 다루지 않았던모든 XSS 공격 벡터들을 효과적으로 대응할 필요가 있습니다.

호환성은 매우 중요합니다. 저희는 "웹을 깨뜨릴 경우" 필터 기능을 기본값으로 활성화 시킬 수 없다는 사실을 알고있습니다. 만일 필터가 호환성을 깨뜨린다면, 사용자들은 필터를 꺼버릴테고 어떠한 이득도 얻지 못할 것입니다. 저희는 진정으로 최대한 많은 사용자 분들께 가능한 한 많은 가치를 제공하고자 합니다.

인터넷 익스플로러의 어플리케이션 호환성 로깅이 활성화 된 경우, Microsoft 어플리케이션 호환성 툴킷을 사용하여 XSS 필터의 모든 활동을 살펴볼 수 있습니다.

웹 개발자라면 경우에 따라 특정 페이지에서 XSS 필터를 비활성화 하고 싶을 수 있습니다. 이런 경우에는 다음과 같이 HTTP 헤더를 설정하면 됩니다:

X-XSS-Protection: 0

저희는 아주 실용적인 방법을 선택했습니다 – 사이트의 호환성을 떨어뜨리는 쪽으로 필터를 개발하는 방법을 택하지 않았습니다. 그래서, XSS 필터는 가장 흔한 XSS 공격에 대한 방어를 수행하긴 하지만 XSS에 대한 만병통치약은 아니며 그렇게 되지도 않을 것입니다. 이는 ASP.NET의 요청 검증 기능에서 택한 실용적인 접근 방식과 유사합니다. 물론, XSS 필터가ASP.NET의 검증 기능에 비해 더 공격적으로 동작할 수는 있지만 말입니다.

사이트 호환성 문제와 성능에 대한 영향이 무시할만한 수준이라고 한다면, 가장 흔하게 발견되는 Type-1 XSS 공격인"><script>… 패턴을 필터가 효과적으로 차단한다는 사실은 커다란 진보라 할 수 있을 것입니다. 가능한XSS 공격 유형을 차단하도록 계속 집어넣을 수 있다는 점은 큰 장점입니다.

XSSed.com과 같은 사이트에 등록된 수만 개가 넘는 Type-1 XSS 취약점들이 IE8에서 동작하지 않는 것을 보면 정말 대단하다는 생각이 들 것입니다.

몇 주 안에 필터의 동작, 역사, 한계점, 그리고 개발 과정에서 얻은 교훈에 관한 더 자세한 이야기를 제 블로그에 올리겠습니다.

데이비드 로스
보안 소프트웨어 엔지니어

 

* 역자 : 이글은 IE8 Security Part IV: The XSS Filter (영문)을 NCHOVY 인터넷스톰센터에서 번역해 주셨습니다. 진심으로 감사의 말씀을 드립니다.