1. XSS
1.1 XSS 란?
- Cross Site Scripting의 약자로 타 사용자의 정보를 추출하기 위해 사용되는 공격기법
- 사용자의 입력을 받아들이는 곳(게시판이나 검색창)에 스크립트 코드를 차단하지 않음으로써 공격자가 스크립트 코드를 실행할수 있게 된다.
1.2 XSS 공격 원리
- 정상적인 문자열을 입력할때를 알아야 공격원리를 이해할수 있다.
1) 일반 게시글 올릴 때의 과정
① 게시판에 들어가면 웹서버는 페이지를 보여준다.
② 게시글을 입력한다.
③ 입력한 게시글이 웹서버로 전송 된다.
④ 게시글을 전송받은 웹서버는 사용자가 게시글을 읽게 되면 게시글을 전송한다.
위와 같은 과장으로 게시판에 글이 작성되어진다. 사용자가 입력한 문자열을 저장하였다가, 다른 사용자가 해당 게시물을 읽어들였을 때 그대로 전송되어진다.
이것을 이용하여 공격코드가 포함된 문자열을 작성하여, 그것을 읽어들인 피해자에게 공격을 가하게 된다.
2) 일반 게시글 과정에 스크립트코드를 입력 과정
① 게시판에 들어가면 웹서버는 페이지를 보여준다.
② 게시글을 입력한다.(공격코드를 입력한다.)
③ 입력한 게시글이 웹서버로 전송 된다.(입력된 공격코드는 웹서버로 전송된다.)
④ 게시글을 전송받은 웹서버는 사용자가 게시글을 읽게 되면 게시글을 전송한다.(저장된 공격코드는 피해자가 게시글을 불러들었을때 실행되어진다.)
1.3 XSS 대응 방법
관리자 측면
① XSS 취약점은 대부분 웹 개발자가 사용자입력부분(게시글,검색 등)에 사용자입력에 대한 검증이 이루어지지 않기 때문에 발생한다. 그렇기 때문에 스크립트코드에 사용되는 특수문자에 대해 정확한 이해와 필터링을 해야한다.
가장 보편적이고 효과적인 방법으로 필요한 문자(알파벳,숫자,꼭 필요한 몇개의 특수문자)만 입력을 받고 그 외에 것은 모두 차단하는 것이다.
이방법은 XSS 취약점에 사용되는 특수문자(ex:<script)를 애초에 막을 수 있는 장점이 있다.
② 게시판에서 HTML 포맷의 입력은 사용할 수 없도록 설정한다. 최근에 만들어진 게시판들은 대부분 다양한 효과를 사용자들에게 제공하기 위해 HTML 태그 기능을 제공하고 있지만 꼭 필요한 경우가 아니라면 HTML 사용 기능을 불가능하게 해야 한다.
③ 스크립트 대체 및 무효화. javascript라고 들어오는 문자열을 무조건 ‘x-javascript’와 같이 대체를 하여 스크립트 실행을 무효화시키는 방법도 있다.
④ 무엇보다도 주기적인 점검(자체적인 취약점 점검 및 보안 컨설팅)을 통해 취약점을 수시로 확인 및 제거한다.
- XSS공격에 사용되는 특수 문자의 종류
일반이용자 측면
① 메일이나 링크가 있으면 링크를 바로 클릭하여 이동하지 말고 직접 URL에 주소를 입력하여 해당 사이트를 방문한다.상당히 불편한 방법이지만 URL 스푸핑이나 XSS 공격에 대응하는 방안 중 하나다.
②인터넷 익스플로러의 최신 패치를 적용하여 인터넷 익스플로러 자체의 취약점으로 인한 공격에 미리 대응해야 한다.
③ 인터넷 옵션에서 개인정보 등급을 상향 조절하여 불필요한 쿠키 값을 전송시키지 않는 방법. 가장 보안 설정을 높이면 쿠키 값이 필요한 사이트에서 서비스를 사용하기 힘든 경우가 있기 때문에 보안 설정을 최상위로 높이는 것을 권고하지는 않는다.