XSS 취약점이란 무엇일까?
위키피디아를 따르면 아래와 같이 정의 되어 있다.
사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다.
이 취약점은 사용자가 작성한 글을 검수 하지 않아 악성 코드가 전달 되거나 등록 되는 경우 나타난다. 우리가 아는 CSS과 헷갈리지 않기 위해서 XSS라고 부른다고 한다.
xss 취약점은 크게 비 지속적인 공격(Non-persistent XSS) 과 지속적인 공격(persistent XSS). 그리고 소스코드 추가로 발생되는 DOM 기반 XSS 등 유형으로 구분한다. 이 글에서는 비지속적인 공격, 지속적인 공격 2가지에 대해 알아 보겠다.
비 지속적 (Non-persistent) 기법
사용자에게 입력 받은 값을 서버에서 되돌려 주는 곳에서 발생하며, 반사(Reflected) XSS라고도 부른다. 사용자가 악의적으로 동작할 수 있는 스크립트 문을 URL에 포함하여 전달하는 방식으로 URL로 전달한 파라미터 값의 결과가 브라우저로 결과가 출력될 때 발생하는 취약점이다.
링크에 스크립트 문을 입력 후 다른 사용자에게 링크를 클릭하도록 유도 하여 클릭한 사용자의 정보를 가로챌 수 있다.
공격 예시
http://localhost/search/title/이슈”%2Balert(1)%2B”
http://localhost/search/title/이슈%22%20onmouseover=%22alert(cookie)
위와 같이 url에 스크립트 값을 전달 하여 url 호출 시 alert 메시지를 띄울 수 있다. 이런 방법을 이용하여 민감 정보를 띄워 줄 수도 있다.
지속적 (Persistent ) 기법
데이터베이스에 저장이 되어 지속적으로 공격한다고 하여 지속적 XSS 라고 부르며, 데이터베이스에 저장이 되므로 저장(Stored) XSS 공격이라고도 부른다.
사용자가 값을 저장하는 부분에 악의적인 스크립트 값을 저장시키면 한번의 저장으로 지속적으로 발생하기 때문에 피해가 클 수 있다.
게시글에 악의적인 스크립트를 주입하여 해당 글을 읽는 사용자들의 정보를 가로챌 수 있다.
공격 예시
대응 방법
그렇다면 위와 같은 XSS 공격에 대응하려면 어떻게 해야할까?
HTML 변환
-
특정 문자를 HTML 엔티티로 변환하여 필터링한다
-
악용될 가능성 있는 문구는 모두 필터링 처리한다.
-
태그를 허용해야 하는 경우 화이트 리스트를 작성한 후 그 외의 태그는 필터링 처리 한다.
보안 라이브러리 사용
- AntiXSS
- AntiXSS 라이브러리는 마이크로소프트사에서 개발한 공개용 XSS 취약점 예방 라이브러리이다. AntiXSS 라이브러리는 ASP.net 애플리케이션 개발환경에서 사용되며, 현재 ASP.net 4.5 이후 버전에만 사용이 가능하다.
- OWASP ESAPI 라이브러리
- OWASP는 포괄적인 애플리케이션 보안을 위해 웹 응용 취약점을 대응할 수 있는 오픈소스 ESAPI 라이브러리를 개발하여 제공하고 있다. XSS 취약점을 예방하기 위한 API는 validator와 encoder가 있다. validator는 입력 값을 필터링하는 기능을 하고 있으며, encoder는 출력 값을 인코딩 및 디코딩 기능을 가지고 있다.
- 자바, PHP, .NET, ASP, 자바스크립트 및 파이썬 등 지원
- TMI로 현재 우리 사이트는 네이버에서 개발한 Lucy-Xss-Servlet-Filter 사용중이다.
브라우저 확장 프로그램
NoScript는 파이어폭스 등 모질라 기반의 browser에서 실행되는 오픈 소스 확장 프로그램으로, 화이트 리스트 기반으로 신뢰된 사이트의 자바스크립트, 플래쉬, 실버라이트 및 액티브X 등 동적 스크립트만 브라우저에서 실행하도록 하여 XSS 공격을 예방할 수 있다.
참고 사이트
https://ko.wikipedia.org/wiki/사이트_간_스크립팅
https://ngsoc.nexon.co.kr/appchestra/#/inspection/inspectionTarget/result/detail/49026
https://noirstar.tistory.com/266
https://ravidusash.tistory.com/66
https://www.kisa.or.kr/uploadfile/201312/201312161355109566.pdf