XSS 대응 방안 심화

gyub·2025년 6월 22일
0

모의해킹 스터디

목록 보기
26/31

XSS클라이언트 측에서 악성 스크립트를 실행시키는 공격입니다

이런 XSS의 대응 방안에는 무엇이 있을까요?

혹시 필터링을 떠올리지는 않으셨나요?

정말 필터링이 XSS의 대응 방안이 될 수 있는지 알아보도록 하겠습니다


🔎 필터링

: 특정 조건에 따라 데이터, 정보, 자료 등을 걸러내는 과정


필터링에는 화이트리스트 기반 필터링블랙리스트 기반 필터링이 있습니다

  • 화이트리스트 기반 필터링 : 특정 단어만 허용
  • 블랙리스트 기반 필터링 : 특정 단어만 제한

화이트리스트 기반 필터링은 특정 단어만 허용하기 때문에, 게시판 같은 공간에는 현실적으로 적용하기 어렵습니다

그럼 블랙리스트 기반 필터링은 어떨까요?

script 와 같은 태그나 < , > , ' , " 와 같은 특수문자가 문제가 된다면 이걸 제한하는 것으로 XSS 취약점을 해결할 수 있을까요?

정답은 아니요 입니다

우선 게시판의 상황을 가정하면 그저 script 라는 단어를 쓰고 싶었을 뿐인데 단어가 필터링 되어 사라진다거나, >.< 와 같은 표현을 하고 싶어도 할 수 없는 상황이 발생합니다

이런 상황을 감안하고 필터링을 통해 <script> ~~ </script> 를 삽입할 수 없게 만든다 하더라도, XSS 취약점을 해결할 수는 없습니다

왜냐하면 블랙리스트 기반 필터링은 언제나 우회 가능성을 가지고 있기 때문입니다


🔎 <script> 필터링 우회로 스크립트 실행시키기

1. 대소문자 섞기
script 가 필터링 되어 있다면 대소문자를 섞어봅니다 (ex. <sCrIpT>)

2. 필터링 결과 값이 원하는 단어가 되도록 작성
script 가 필터링 되어 있다면 script 를 필터링 한 결과가 script가 되도록 작성합니다 (ex. scrscriptipt)

3. <script> 없이 다른 방식으로 스크립트 실행
만약 scriptxript 와 같이 치환해버리는 방식의 필터링이 적용되어 있다면 script 라는 단어를 사용하지 않고 스크립트를 실행시킬 방법을 생각해 보아야 합니다

  • Event Handler 활용 : onerror , onclick , onmouseover 와 같이 스크립트가 실행되는 event handler 활용
    ex) <img src = "x" onerror = "alert(1);"/> 와 같이 src 에 당연히 이미지를 가져올 수 없는 경로를 작성하면 에러가 발생하므로 onerror 가 실행

  • <a> 태그의 href 속성 활용 : href 속성은 연결할 페이지의 링크를 지정. 이 링크에 자바스크립트 삽입 가능
    ex) <a href="javascript:alert(1);">TEST</a>

  • 기존 스크립트 내에 존재하는 XSS 취약점 이용 : 기존에 이미 있던 스크립트에서 XSS 취약점이 발견되는 경우 <script> 태그 사용 불필요
    ex) <script>var data = "[취약점 존재]"</script> 와 같이 이미 html 내에 스크립트가 존재하고 그 스크립트 내부에 취약점이 있는 경우, 이미 스크립트 내부이기 때문에 <script> 태그를 이용할 필요 없음

  • <input> 태그 활용 : input 태그의 속성을 활용해 스크립트를 실행
    ex) <input type="text" autofocus />


    이 외에도 여러가지 우회 방법이 존재합니다


🔎 HTML Entity를 활용한 XSS 대응

HTML Entity는 HTML의 특수문자 등을 특정 형태로 치환한 텍스트입니다

주로 XSS 공격에 활용되는 < , > , ' , " 이 4개의 특수문자를 HTML Entity 표현으로 바꿉니다

🔎 HTML Entity를 적용하기 어려운 곳의 XSS 대응

HTML 특수 문자를 HTML Entity로 바꾸면 안되는 곳은 어디일까요?

바로 HTML 에디터입니다

종종 게시판이나 블로그 같은 곳에 HTML 에디터 기능이 탑재되어 있는데요,

이 기능에서는 HTML 특수문자를 특수문자 그대로 받아들여야 하니 HTML Entity를 활용한 XSS 대응이 어렵습니다

그렇다면 이런 HTML 에디터에서는 어떻게 XSS 공격에 대응해야 할까요?

👉 가능하다면 HTML 에디터 기능 삭제

HTML 에디터 기능이 꼭 필요한 게 아니라면 삭제합니다

👉 삭제 할 수 없다면 아래의 대응 방법 시행

  1. 우선 입력 파라미터에서 HTML 특수문자를 전부 HTML Entity로 치환합니다

  2. 허용할 tag를 식별하고 그 tag를 다시 HTML 특수문자로 복구합니다(화이트리스트 기반 필터링)

  3. 복구한 tag 내 악의적인 event handler를 제거합니다(블랙리스트 기반 필터링)

0개의 댓글