[Web Application-모의해킹] 크로스사이트 스크립팅(XSS) : 대응 방안 #6-1

2024. 5. 4. 00:22Project/Web Application-모의해킹

 

대응 방안 (feat.주요통신기반시설)

 

1) 점검 방법

 

  크로스사이트 스크립팅(XSS) 취약점을 점검하는 방법은 다음과 같다.

 

  • 사용자 입력 값을 전달받는 애플리케이션(회원정보 변경, 게시판, 댓글, 자료실 등)에 스크립트 입력 후 실행되는지 확인
  • 사용자 입력 값을 전달받는 애플리케이션(검색, URL)에 스크립트 입력 후 실행되는지 확인

 

 

2) 보안설정방법

 

  크로스사이트 스크립팅(XSS) 취약점에 대한 대응 방안은 다음과 같다.

 

  1. 웹 사이트에 사용자 입력 값이 저장되는 페이지는 공격자가 웹 브라우저를 통해 실행되는 스크립트 언어(HTML, Javascript, VBScript 등)를 사용하여 공격하므로 해당되는 태그 사용을 사전에 제한하고, 사용자 입력 값에 대한 필터링 작업이 필요함
  2. 게시물의 본문뿐만 아니라 제목, 댓글, 검색어 입력 창, 그 외 사용자 측에서 넘어오는 값을 신뢰하는 모든 form과 파라미터 값에 대해서 필터링을 수행함
  3. 입력 값에 대한 필터링 로직 구현 시 공백 문자를 제거하는 trim, replace 함수를 사용하여 반드시 서버 측에서 구현되어야 함
  4. URLDecoder 클래스에 존재하는 decode 메소드를 통해 URL 인코딩이 적용된 사용자 입력 값을 디코딩함으로써 우회 공격 차단
  5. 웹 방화벽에 모든 사용자 입력 폼(회원정보 변경, 게시판, 댓글, 자료실, 검색, URL 등)을 대상으로 특수문자, 특수 구문 필터링하도록 룰셋 적용

 

 

3) 대표적인 대응 방안

 

  • 사용자 입력 값 검증 로직 구현

 

 

사용자 입력 값 검증 로직 구현

 

  크로스사이트 스크립팅(XSS) 취약점은 공격자가 사용자 입력 값에 스크립트를 삽입하여 클라이언트 웹 브라우저에서 작동하게 만드는 취약점으로 사용자 입력 값 검증이 미흡하여 생긴다. 검증 로직을 블랙 리스트 기반 필터링 보다는 화이트 리스트 기반 필터링으로 구현하면 보안적으로 더 강력하나 XSS 같은 경우에는 화이트 리스트 기반 필터링을 사용하게 되면 본래 웹 애플리케이션 기능을 정상적으로 사용할 수 없을 가능성이 높다.

 

  그렇기 때문에 XSS 사용자 입력 값 검증 로직은 블랙 리스트 기반 필터링으로 구현을 하게 된다. 그러나 블랙 리스트 기반 필터링으로 구현을 하더라도 리스트에 추가해야 하는 문자 및 단어들이 많기도 하고 그 많은 문자 및 단어들을 필터링 리스트에 추가를 하게 되는 것 또한 본래 웹 애플리케이션 기능을 정상적으로 사용할 수 없을 가능성이 높다. 그래서 XSS 취약점 사용자 입력 값 검증 로직은 특정 문자를 필터링하는 대신 HTML Entity로 치환하는 방법을 주로 사용하게 된다.

 

*HTML Entity란?

  HTML에는 미리 예약된 특정 문자들이 존재하며, 이러한 문자들을 HTML 예약어라고 한다. HTML 예약어를 HTML 코드에서 사용하면, 웹 브라우저는 평소와는 다른 의미로 해석한다. 따라서 HTML 예약어를 기존에 사용하던 의미 그대로 사용하기 위해 별도로 만들어진 문자셋을 Entity라고 한다.

 

  스크립트는 HTML 코드에서 <script>....</script>와 같이 script 태그 사이에 Javascript 함수를 입력하면 작동하는 방식이다. 그렇다는 것은 스크립트를 작동시키는 핵심 특정 문자는 HTML 태그를 구성하는 특정 문자인 '<', '>'와 몇몇 문자들이라는 것을 알 수 있다. 즉, XSS 취약점 사용자 입력 값 검증 로직은 HTML 태그를 구성하는 특정 문자들을 HTML Entity로 치환하는 방식으로 구현을 하는 것이 가장 효과적이라고 볼 수 있다. 치환 대상이 되는 특정 문자들은 다음과 같다.

 

HTML Entity