XSS
Last updated
Was this helpful?
Last updated
Was this helpful?
XSS는 자바스크립트를 이용하여 다른 사용자의 민감 데이터를 탈취하는 클라이언트 공격입니다.
XSS는 공격 과정에 따라 다양한 종류로 나뉘지만, 이번 장에서는 대표적인 2가지 기법을 다룹니다.
Stored XSS는 주로 웹 사이트의 게시판, 댓글 등과 같이 게시한 이후
다른 사용자들도 확인할 수 있는 공간에서 발생합니다.
공격자는 게시판과 같은 공간에 악성 코드를 작성한 뒤 다른 사용자가 해당 링크를 클릭하기를 기다립니다.
링크를 클릭한 사용자는 자바스크립트 코드 실행에 의해 공격자의 웹서버로 접속하게 되며,
이때 자신의 쿠키 데이터를 함께 전송합니다.
공격자는 자신의 웹 서버 로그에 기록된 사용자들의 쿠키 정보를 통해
계정 정보 없이도 피해자의 계정을 사용할 수 있습니다.
Stored XSS가 성공하기 위해서는 다음 조건이 요구됩니다.
XSS 공격에 취약한 저장 폼(게시판, 댓글, 회원 아이디 출력칸 등)
저장된 악성 스크립트를 다른 사용자가 확인할 수 있어야 한다.
자바스크립트를 실행시키는 것은 가능하지만, 마이페이지 등과 같이
다른 사용자들이 조회하지 못하는 공간에서 일어나는 XSS를 Self XSS라고도 부릅니다.
Self XSS는 그 자체로는 취약점이 아니지만,
다른 취약점 혹은 방법과 연계하여 Stored XSS로의 발전 가능성이 있습니다.
Reflected XSS는 악성 코드를 저장하는 방식이 아닌, 반사형 공격입니다.
사용자 매개변수가 응답 페이지의 페이지 소스에 노출되며,
이때 매개변수를 처리하는 메소드가 GET 방식이며 입력값 검증에 취약할 경우
공격자는 매개변수에 자바스크립트 코드를 삽입하여 다른 사용자에게 링크를 전달함에 따라
다른 사용자들의 민감 데이터를 탈취할 수 있습니다.
Reflected XSS에 취약한 주소가http://target.com/board.php?context
라고 가정할 때,
공격자의 주소인 http://attacker.com
으로 쿠키가 탈취되는 페이로드 예시는 다음과 같습니다.
사용자 입력값 HTML 엔티티 적용
사용자 입력값 화이트리스트 검증
HTTP Only 속성 적용
CSP 정책 설정
XSS는 자바스크립트 실행만 시키지 못하게 한다면 방어가 가능한 공격입니다.
사용자들이 HTML 코드를 직접 작성할 수 있는 공간이 아니라면 HTML 엔티티 함수를 적용하거나
입력값 화이트리스트 검증 등을 통하여 방어할 수 있습니다.
또한 HTTP Only 속성과 CSP 정책 등을 통한 쿠키 보호를 할 수 있습니다.