본문 바로가기
💻Information Security

XSS 대응방안에 대한 자세한 설명

by Prof. Panda 2024. 1. 20.

Nathan da Silva on Unsplash

XSS의 대응방안

XSS의 대응법에 대해서는 https://panda-university.tistory.com/14에서 간략하게 언급하였습니다. 여기서 가장 중요한 입력값 검증과 HTML Entity인코딩에 대한 내용을 조금 상세하게 다뤄보겠습니다. 대부분의 웹 취약점에 대한 대응법으로 '필터링'이 언급되기 때문에 당연하다고 느껴지기 쉽습니다. 하지만 필터링은 매우 큰 문제가 있어서 XSS의 대응법으로 제일 먼저 언급될 만큼 최선의 선택은 아닙니다. 따라서 HTML Entity를 우선적인 대응 방안으로써 검토하고 보조적인 수단으로 필터링을 적용해 볼 수 있겠습니다.

 

XSS(Cross Site Scripting)이란?

XSS의 정의 XSS란 "Cross Site Scripting"의 약자로 사이트에 스크립트를 삽입하여 클라이언트 측에서 악의적인 실행이 일어나도록 하는 해킹 공격 기법입니다. 약자가 CSS가 되어야 할 것 같지만, 이미 C

panda-university.tistory.com

블랙리스트와 화이트리스트 필터링의 문제

필터링에는 블랙리스트와 화이트리스트 방식이 있습니다. 블랙리스트의 경우 특정 단어를 치환하거나 제거하는 식으로 사용하지 못하게 하는 것입니다. 예를 들어 '<'나 '>'와 같은 꺽쇠를 필터링하여 '<script>'를 사용하지 못하게 하는 방법이 있습니다. 문제는 블랙리스트 필터링 범위가 적기 때문에 우회가 가능한 부분이 생긴다는 것입니다. 그렇다면 화이트리스트 방식은 어떨까요? 화이트리스트는 보안에 있어서는 매우 우수하지만 유연성이 적어서 사용자에게 큰 불편함을 줄 수 있다는 것이 문제입니다. 특정 입력밖에 허용하지 않기 때문입니다. 특히 게시판과 같이 여러 가지 글을 쓰는 곳에서 입력과 표현이 자유롭지 않다면 사용자 입장에서는 매우 불편할 수 있습니다. 게시판의 경우는 블랙리스트 필터링도 좋지 않습니다. 공격이 의도되지 않은 표현까지 필터링될 수 있기 때문입니다.

블랙리스트 필터링을 우회하는 XSS기법의 예시

블랙리스트 필터링만을 사용한 필터링을 우회하여 XSS 공격을 하려고 할 때 해커가 사용할 수 있는 우회 방식은 다음과 같습니다.

  • 대소문자 섞기
  • 겹쳐쓰기
  • img 태그 활용
  • 이벤트 핸들러 활용
  • a 태그와 href에서 javascript 실행

HTML Entity의 개념과 필요성

HTML Entity란 HTML을 구성하는 특수문자들을 다른 모습으로 치환하여 표현하는 것을 말합니다. 예를 들어 꺽쇠를 '&gt;'와 같이 표현합니다. 여기서 '&gt;'가 HTML Entity고 브라우저에서는 해당 Entity를 다시 꺽쇠로 해석하여 표현합니다. 이렇게 할 경우 브라우저가 꺽쇠를 html의 태그로 인식하지 않아서 XSS공격을 근본적으로 방어할 수 있습니다. 하지만, 티스토리와 같은 곳에서 HTML 에디터를 사용하는 곳에서는 어떻게 해야 할까요? 바로 아래 단계를 통해서 HTML 에디터에서도 XSS를 방어할 수 있습니다.

  1. 사용자의 입력을 받는 파라미터에서 html 특수 문자들을 모두 HTML Entity로 치환
  2. 허용해줄 tag를 식별하여 해당 tag를 다시 사용할 수 있도록 역치환(화이트리스트)
  3. 살려준 tag에서 악의적 event handler(onload, onerror 등)가 있는지 블랙리스트 기반으로 필터링