[보안 해킹] 홈페이지 보안 취약점 - 크로스 사이트 스크립트(XSS) 취약점
■ 취약점 설명 및 사례
⑴ 취약점 설명
- 페이지에 악의적인 스크립트를 포함시켜 웹페이지를 열람하는 접속자의 권한으로 부적절한 스크립트가 수행되어 정보유출 등의 공격을 유발할 수 있는 취약점
⑵ 사례
① OO대학은 게시판의 댓글 기능이 공개되어 있고 [HTML 편집기] 기능을 이용하여 스크립트 코드의 삽입이 가능
- 삽입한 스크립트가 동작함
② OO대학의 아이디/학번 조회 URL에 스크립트를 삽입하면 스크립트가 동작함
■ 점검 방법
⑴ 취약점 설명
- 글 쓰기 기능이 있는 게시판 및 검색란에 다음과 같은 스크립트 문장을 각각 입력하고 글 쓰기(또는 검색)를 시도
XSS 점검 예) <script>alert('XSS 취약점 존재');</script> '<embed src=http://cyber.go.kr/xss_test.swf></embed> |
⑵ 글을 게시하는 중에 스크립트 태그 사용에 대한 "오류"나 "경고" 메시지가 발생하며 입력한 정보가 등록되지 않는다면 취약점 없음
⑶ 윈도우 경고창이 나타나지 않고 아래 그림과 같이 스크립트 문장이 입력한 내용과 같이 나타나면 취약점 없음
⑷ 윈도우 경고 창을 통해 1번 항목에서 입력한 문장인 XSS 취약점 존재 또는 'XSS 취약점 존재' 와 같은 형태의 팝업 경고창이 나타날 경우 XSS 취약점이 존재
⑸ 또한 아래 그림과 같이 검색란에 스크립트를 입력
■ 대응 방안
⑴ 웹 서버 내에서의 조치
① 웹 서버에서 입력 값에 정의된 문자 길이를 검증하여 javascript 등의 명령이 삽입되지 않도록 수정
② 웹 서버의 검증 치환 등의 과정은 서버 사이드 스크립트(Server Side Script)에서 구현하여 검증 치환 기능의 우회를 차단
(검증 치환 등의 기능을 javascript 로 구현할 경우 우회 가능)
③ 웹 서버에서 HTML 형식의 입력이 불가피할 경우만 XSS 공격에 주로 사용되는 Tag 입력을 차단
④ 웹 서버는 사용자 입력 폼(로그인 폼, 검색 폼, URL 등)을 대상으로 특수문자, 특수구문 필터링 규칙 적용
필터링 대상 |
||||
< |
> |
< |
> |
|
javascript |
eval |
onmousewheel |
onactivae |
onfocusin |
vbscript |
innerHTML |
ondataavailable |
oncopy |
onfocusout |
expression |
charset |
onafterprint |
oncut |
onhelp |
applet |
document |
onafterupdate |
onclick |
onkeydown |
meta |
string |
onmousedown |
onchange |
onkeypress |
xml |
create |
onbeforeactivate |
onbeforecut |
onkeyup |
blink |
append |
onbeforecopy |
ondblclick |
onrowsdelete |
link |
binding |
ondatasetchanged |
ondeactivate |
onload |
style |
alert |
onbeforedeactivate |
ondrag |
onlosecapture |
script |
msgbox |
onbeforeeditfocus |
ongragend |
onbounce |
embed |
refresh |
onbeforepaste |
ongragenter |
onmouseenter |
object |
embed |
onbeforeprint |
ondragleave |
onmouseleave |
iframe |
liayer |
onbeforeunload |
ondragover |
onbefore |
frame |
applet |
onbeforeupdate |
ondragstart |
onmouseout |
framset |
cookie |
onpropertychange |
ondrop |
onmouseover |
ilayer |
javascript |
ondatasetcomplete |
onerror |
onmouseup |
layer |
void |
oncellchange |
onerrorupdate |
onresizeend |
bgsound |
href |
onlayoutcomplete |
onfilterchange |
onabort |
title |
on paste |
onmousemove |
onfinish |
onmoveend |
base |
onstart |
oncontextmenu |
onfocus |
onmovestart |
onreset |
onresize |
oncontrolselect |
onresizestart |
onrowenter |
onmove |
onrowexit |
onreadystatechange |
onunload |
onsubmit |
onstop |
onselect |
onselectionchange |
onselectstart |
onblur |
|
onrowsinserted |
|
|
⑤ 웹 서버의 취약점 조치를 완료한 후 위 과정을 다시 수행하여 XSS 취약점의 추가 존재 여부를 재점검
⑵ 홈페이지 개발 보안 조치
① 홈페이지 소스코드는 사용자가 입력한 문자열에서 <, >, &, ", " 등을 replace 등의 문자 변환 함수(혹은) Method)를 사용하여 <, >, &, " 로 치환
② 홈페이지 게시판 등에서 HTML 태그 허용 시 HTML 태그의 리스트(White List)를 선정한 후, 해당 태그만 허용하는 방식 적용
※ 기재될 홈페이지 개발 보안 방안 - 크로스사이트 스크립트를 참조, 소스코드를 수정하여 보안취약점을 조치하시길 바람
※ 문의 사항은 메일 : jyuhm@sntkor.com 이나 070-8611-4853
'Security > Hacking & Security' 카테고리의 다른 글
[보안 해킹] 홈페이지 보안 취약점 - 권한 인증 취약점(파라미터/URL 변조) (0) | 2016.10.17 |
---|---|
[보안 해킹] 홈페이지 보안 취약점 - SQL Injection 취약점 (0) | 2016.10.14 |
[보안 해킹] 홈페이지 보안 취약점 - 공개용 웹 게시판 취약점 (0) | 2016.10.13 |
[보안 해킹] 홈페이지 보안 취약점 - 소스코드 내 중요정보 노출 취약점 (0) | 2016.10.13 |
[보안 해킹] 홈페이지 보안 취약점 - 파일 업로드 취약점 (0) | 2016.10.12 |