XSS와 CSRF
XSS 공격은 Cross Site Scripting의 약자로, 웹 애플리케이션에서 많이 나타나는 취약점 중 하나입니다. 공격자가 웹페이지에 악성스크립트를 삽입하는 공격입니다.
[XSS 종류]
▷ Reflected XSS: 사용자(웹브라우저) -> 서버 -> 사용자(웹브라우저)
=> EX) 피싱메일, 스미싱링크
▷ Stored XSS(=persistent XSS): 사용자(웹브라우저) -> 서버 -> DB -> 서버 -> 사용자(웹브라우저)
=> 가장 위험한 공격
=> DB/서버에 악성 스크립트가 저장되기 때문에 이 데이터를 지우지 않는다면 해당 페이지를 볼 때 마다 스크립트가 실행됩니다.
▷ DOM-Based XSS: 사용자(웹브라우저)
CSRF 공격은 Cross Site Request Forgery의 약자로, 사용자 의지와는 무관하게 공격자가 의도한 행위를 웹사이트에 요청하게 만드는 공격입니다.
취약점 설명
특정 페이지나 기능에 악의적인 스크립트를 삽입하여 공격자가 의도한대로 행동하도록 하는 취약점
=> 사용자 정보유출(비밀번호, 계정 등)을 탈취하는 피싱공격
=> 사용자 인증 도용
=> 악성코드 유포 및 브라우저 무한 반복 등의 공격
공격포인트
사용자 입력으로부터 들어오는 파라미터 값이 화면에 출력되는 부분을 확인
ex) 게시판 제목, 내용, 댓글, 검색 등 사용자 입력 값
해킹 시나리오
공격자는 악성 스크립트가 삽입된 게시물을 서버에 등록합니다. 악성스크립트가 삽입된 게시물을 열람하게 된 사용자는 PC 내 악성스크립트를 실행하게 됩니다. 악성스크립트를 통해 사용자의 중요정보가 공격자에게 유출됩니다.
보안대책
- 외부로부터 입력되는 모든 문자열에 대해 특수문자 및 키워드 필터링 적용
- 오픈소스 XSS 필터링 라이브러리 적용(Lucky-Filter, Anti-Samy)
- 보안장비 내 XSS 필터링 정책 활용(WAF)
- Http Only 설정 / CSP(Contents Security Policy)
[특수문자 필터링]
From | To |
< | < |
> | > |
( | ( |
) | ) |
# | # |
& | & |
‘ | ' |
“ | " |