새소식

카테고리 없음

[jsp/java] 5분 내로 XSS를 만에 해결하는 방법

  • -
728x90

안녕하세요. 팀드모네입니다.

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

 

1. XSS 공격이란 무엇인가?

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

<script>alert(1)</scirpt>는 말할 가치도 없는 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를 제대로 막은 사이트를 본 적이 없습니다. 관리자를 충분히 기분 나쁘게 만들 수 있을 거 같은데 말이죠.

 

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

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

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

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

 

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

악성스크립트를 담은 게시물을 등록함 > 사람들이 그 게시물을 봄 > 

열람자의 쿠기 값을 가로챔. 가로챈 쿠기 값을 웹 프록시 툴을 이용하여 재 전송 > 열람자의 정보로 로그인

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

 

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

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

 

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

첫번째로는 기도가 될 수 있겠습니다. "우, 우리 사이트에는 맛있는 음식이 없어요! 그러니 제발 공격하지 말아주세요."

 

6. 필터링을 통한 방어 기법

두번째로는 정규식을 이용한 파라미터 값 필터링이 제시될 수 있습니다. 이것은 매우 간단한 예제로, 기본적인 공격을 막는데 사용할 수 있습니다. 이 필터링의 성능은 화살과 칼은 막지만 대포는 막지못하는 나무방패에 비유될 수 있습니다.

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;
}

 

7. lucy-xss-servlet-filter를 통한 방어

세번째로는 아래의 레퍼런스를 추천드립니다. 서블릿 필터 기반의 라이브러리를 사용하는 것입니다.

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

 

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

 

XSS공격은 매년 업그레이드됩니다. 마치 감기바이러스처럼요. 업데이트가 더딘 라이브러리는 결국 뚫리게 됩니다. 그점을 주의하며 라이브러리를 선택해봅시다.

 

블로그 방문해주셔서 감사합니다. 도움이 되셨기를 바라며

추가로 궁금한 점이 있으면 댓글 남겨주세요 :)


광고 링크 : https://ogx4.com

 

인공지능이 추천하는 10개의 게임!

보물처럼 숨겨진 게임을 발굴하자! 게이머엑스포 유저들은 누구나 게임 발굴 대회에 참여 가능합니다. 게임 발굴 대회에서 입상한 게임은 2023 에디터 추천 TOP100에 노출됩니다. 단순 조회, 게임

ogx4.com

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.