관리 메뉴

이사작전.com IT Blog

[jsp/java] XSS를 1초 만에 해결하는 방법 본문

카테고리 없음

[jsp/java] XSS를 1초 만에 해결하는 방법

말랑고양 플랫폼공작소 2019. 12. 9. 16:36

안녕하세요. 이사작전.com의 플랫폼공작소입니다.

오늘은 XSS공격의 개념과 해당 공격을 방어하는 방법에 대해서 공유하려합니다.


XSS공격이란 무엇인가?

XSS란 Cross-site Scripting의 약어로, 사이트 간 스크립팅을 의미합니다. 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 사람이 웹 페이지에 악성 자바스크립트를 삽입할 수 있습니다. 쉽게 설명해서 커뮤니티 게시판에 <script>alert('하하 멍청한 관리자놈!');</script>이라고 게시물을 입력해봅시다. 그리고 그 게시물을 읽었을 때 아래와 같은 화면이 나오면 지금 XSS가 뚫려있는 것입니다.

<script>alert(1)</scirpt>는 말할 가치도 없는 XSS의 가장 초보적인 방법입니다. XSS에는 헬모드라는 것이 있어서 듣도보도 못한 별의별 특수문자나 인코드된 문자를 응용하여 공격이 들어오게 됩니다. 그리고 공기업이건 중견기업이건 제가 지금까지 유지보수했던 사이트 중에서 XSS를 제대로 막은 사이트를 본적이 없습니다. 관리자를 충분히 기분나쁘게 만들 수 있을거 같은데 말이죠. 위의 사진처럼요!

<a href="&#x6A;&#x61;&#x76;&#x61;&#x73;&#xA;&#x63;&#x72;&#x69;&#x70;&#x74;&#xA;&#x3A;&#xA;&#x61;&#x6C;&#x65;&#x72;&#x74;&#xA;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;">하하 멍청한 관리자놈!</a>

우리 웹사이트에서 XSS 취약점을 막지 않을 때, 우리는 무엇을 잃을 수 있나요?

관리자 계정을 해킹당하지 않을까 생각합니다. 자바스크립트로 웹사이트의 비즈니스 로직을 만드는 사람이 많지 않기 때문이지요. XSS의 주 목적은 웹 사이트의 변조보다는 사용자의 세션 탈취입니다. 

뭐, 저처럼 장난치는게 좋다면 할말은 없지만요..

사이트의 구현 상황에 따라 다르겠지만, 취약한 사이트를 예로 들면 관리자 계정을 훔쳐서 로그인할 수 있습니다.


XSS의 대략적인 해킹 시나리오란?

악성스크립트를 담은 게시물을 등록함 > 사람들이 그 게시물을 봄 > 열람자의 쿠기 값을 가로챔. 가로챈 쿠기 값을 웹 프록시 툴을 이용하여 재 전송 > 열람자의 정보로 로그인

*만약에 열람자가 관리자라면, 관리자로 로그인이 될 것입니다.

 

Sql injection과 XSS의 차이점이 무엇인가요?

Sql injection과 유사한데요, sql injection은 엉뚱한 파라미터를 넣어서 Query를 실행하는데 목적(DB를 건드리는 것)이 있는 반면에 XSS는 자바스크립트를 실행하는데 있습니다. 파급력은 개인적으로 sql injection이 더 크다고 생각되네요.


그렇다면 XSS를 막는 방법은 무엇인가요?

첫번째로는 기도가 될 수 있겠습니다. 

"우, 우리 사이트에는 맛있는 음식이 없어요! 그러니 제발 공격하지 말아주세요."


두번째로는 정규식을 이용한 파라미터 값 필터링이 제시될 수 있습니다.

이것은 매우 간단한 예제로, 기본적인 공격을 막는데 사용할 수 있습니다.

이 필터링의 성능은 화살과 칼은 막지만 대포는 막지못하는 나무방패에 비유될 수 있습니다.

1
2
3
4
5
6
7
8
9
function XSSCheck(str, level) {
    if (level == undefined || level == 0) {
        str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
    } else if (level != undefined && level == 1) {
        str = str.replace(/\</g, "&lt;");
        str = str.replace(/\>/g, "&gt;");
    }
    return str;
}
cs


세번째로는 아래의 레퍼런스를 추천드립니다.

reference : https://github.com/naver/lucy-xss-servlet-filter


웹사이트 XSS취약점 보완에는 라이브러리를 가져다 사용하는 것이 국룰이며, 라이브러리는 전문적인 보안 업체나 기업에서 만든 것을 사용하는 것이 좋습니다. 대표적으로 추천드리는 것은 OWASP Antisamy, NAVER Lucy XSS Filter, ESAPI 입니다. 해당 키워드를 제시해드리니 검색해보시고 자신의 웹 사이트에 적절한 것을 선택하여 적용하시면 됩니다.


XSS공격은 매년 업그레이드됩니다. 마치 감기바이러스처럼요. 업데이트가 더딘 라이브러리는 결국 뚫리게 됩니다. 그점을 주의하며 라이브러리를 선택해봅시다. 추가적으로 질문사항이나 궁금한 점이 있으면 댓글남겨주세요. 감사합니다.

#XSS #XSS공격 #XSS공격방어

0 Comments
댓글쓰기 폼