XSS의 대응방안
XSS의 대응법에 대해서는 https://panda-university.tistory.com/14에서 간략하게 언급하였습니다. 여기서 가장 중요한 입력값 검증과 HTML Entity인코딩에 대한 내용을 조금 상세하게 다뤄보겠습니다. 대부분의 웹 취약점에 대한 대응법으로 '필터링'이 언급되기 때문에 당연하다고 느껴지기 쉽습니다. 하지만 필터링은 매우 큰 문제가 있어서 XSS의 대응법으로 제일 먼저 언급될 만큼 최선의 선택은 아닙니다. 따라서 HTML Entity를 우선적인 대응 방안으로써 검토하고 보조적인 수단으로 필터링을 적용해 볼 수 있겠습니다.
블랙리스트와 화이트리스트 필터링의 문제
필터링에는 블랙리스트와 화이트리스트 방식이 있습니다. 블랙리스트의 경우 특정 단어를 치환하거나 제거하는 식으로 사용하지 못하게 하는 것입니다. 예를 들어 '<'나 '>'와 같은 꺽쇠를 필터링하여 '<script>'를 사용하지 못하게 하는 방법이 있습니다. 문제는 블랙리스트 필터링 범위가 적기 때문에 우회가 가능한 부분이 생긴다는 것입니다. 그렇다면 화이트리스트 방식은 어떨까요? 화이트리스트는 보안에 있어서는 매우 우수하지만 유연성이 적어서 사용자에게 큰 불편함을 줄 수 있다는 것이 문제입니다. 특정 입력밖에 허용하지 않기 때문입니다. 특히 게시판과 같이 여러 가지 글을 쓰는 곳에서 입력과 표현이 자유롭지 않다면 사용자 입장에서는 매우 불편할 수 있습니다. 게시판의 경우는 블랙리스트 필터링도 좋지 않습니다. 공격이 의도되지 않은 표현까지 필터링될 수 있기 때문입니다.
블랙리스트 필터링을 우회하는 XSS기법의 예시
블랙리스트 필터링만을 사용한 필터링을 우회하여 XSS 공격을 하려고 할 때 해커가 사용할 수 있는 우회 방식은 다음과 같습니다.
- 대소문자 섞기
- 겹쳐쓰기
- img 태그 활용
- 이벤트 핸들러 활용
- a 태그와 href에서 javascript 실행
HTML Entity의 개념과 필요성
HTML Entity란 HTML을 구성하는 특수문자들을 다른 모습으로 치환하여 표현하는 것을 말합니다. 예를 들어 꺽쇠를 '>'와 같이 표현합니다. 여기서 '>'가 HTML Entity고 브라우저에서는 해당 Entity를 다시 꺽쇠로 해석하여 표현합니다. 이렇게 할 경우 브라우저가 꺽쇠를 html의 태그로 인식하지 않아서 XSS공격을 근본적으로 방어할 수 있습니다. 하지만, 티스토리와 같은 곳에서 HTML 에디터를 사용하는 곳에서는 어떻게 해야 할까요? 바로 아래 단계를 통해서 HTML 에디터에서도 XSS를 방어할 수 있습니다.
- 사용자의 입력을 받는 파라미터에서 html 특수 문자들을 모두 HTML Entity로 치환
- 허용해줄 tag를 식별하여 해당 tag를 다시 사용할 수 있도록 역치환(화이트리스트)
- 살려준 tag에서 악의적 event handler(onload, onerror 등)가 있는지 블랙리스트 기반으로 필터링
'💻Information Security' 카테고리의 다른 글
DDoS(분산 서비스 거부 공격)이란? (1) | 2024.01.28 |
---|---|
CSRF(Cross Site Request Forgery)이란? (1) | 2024.01.21 |
XSS(Cross Site Scripting)이란? (0) | 2024.01.18 |
SQL Injection이란? (0) | 2024.01.18 |
Root와 Web Root, 헷갈리는 '루트'란? (0) | 2024.01.15 |