XSS 이론
XSS
개념
- 클라우드 측 코드를 삽입하는 공격이다.
- 클라이언트의 브라우저에서 실행된다.
- 피해자 컴퓨터(브라우저)에 악의적인 코드를 실행되게 하는 공격이다.
- Cross-site Scripting 의 약자이다.
- 개발자가 고려하지 않는 기능을 동작시킨다.
POC 코드
- alert(1)
- console.log()
- “임이의 클라이언트 측 코드가 동작한다.” 를 보여주면 된다.
공격 방식
script 태그 이용하기.
onerror 속성 이용하기.
- 자바스크립트 태그 안에 있는 효과와 동일하다.
공격 피해
사용자 쿠키 탈취
- document.cookie 를 활용하여 사용자 쿠키 값을 훔친다.
- 사용자 브라우저의 쿠키에 저장된 합법적인 Session ID 값이나 액세스 토큰 값을 훔쳐 원격지 서버로 전송한다.
사용자 개인정보 탈취
- Key Logger 방식으로 사용자 입력을 탈취한다.
- XSS Keylog 가 삽입된 페이지에 사용자가 접근하면 Keyboard Event 를 통해 입력 값을 후킹한다.
- 후킹한 값을 원격지 서버로 전송한다.
악성코드 다운로드
- 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도하여 악성 프로그램 다운로드 받는 사이트로 리타이렉한다.
- 사용자가 악성 프로그램을 다운로드 하도록 유도한다.
피싱 사이트 강제 이동
- 가짜 사이트로 위장하여 사용자의 로그인 정보를 탈취한다.
- 실제 사이트와 유사한 웹 페이지를 통해 사용자의 개인정보를 훔쳐올 수 있다.
공격 유형
Stored XSS ( 서버에 저장하기 )
설명
- 비정상적인 방법이 아니라 서버에서 제공하는 서비스의 취약점을 이용한 것이다.
- 공격자가 악성 스크립트를 서버 페이지에 저장하고 해당 페이지를 사용자에게 노출 시킨다.
- 사용자가 악성 스크립트가 들어있는 페이지를 방문하면 악성 스크립트가 사용자 브라우저에서 실행된다.
- 광역적으로 공격이 가능하다. 하지만 흔적이 남는다.
유형
- 댓글
- 게시판
- 이메일
- 블로그 포스
- 채팅방의 유저 이름
과정
- XSS 취약점이 있는 게시판에 쿠키 정보를 탈취하기 위한 악성 스크립트를 포함한 게시물을 작성한다.
- 사용자가 해당 글 열람 시 사용자의 쿠키 정보가 공격자에게 전송된다.
- 공격자가 사용자의 쿠키정보를 이용하여 사이트에 접근한다.
Reflected XSS
설명
- 서버 사이드 렌더링(SSR)
- 무조건 GET 방식 이여야 한다.
- 악성 스크립트가 담긴 URL을 만들어 일반 사용자에게 전달한다.
- URL 주소 뒤에 붙는 쿼리에 악성 스크립트를 작성하여 전달한다.
- 사용자가 공격자가 건네준 URL을 클릭하여 방문하면 악성 스크립트가 담긴 페이지를 사용자에게 보여준다. 그리고 사용자 브라우저에서 악성 스크립트가 실행된다.
유형
- 이메일
과정
- XSS 취약한 서버 URL와 악성 스크립트를 합쳐서 만든 링크를 사용자에게 보낸다.
- 사용자가 링크를 클릭하면 취약한 서버에 악성 스크립트랑 같이 요청을 보낸다.
- 사용자는 서버로 부터 응답을 받는다. 이때 받은 페이지는 서버에서 완성된 페이지이고 악성 스크립트가 담겨져 있다.
- 사용자 브라우저는 악성 스크립트를 동작시킨다.
- 공격자는 사용자의 민감한 정보를 훔칠 수 있다.
DOM Based XSS
설명
- 클라이언트 사이드 렌더링(CSR)
- JavaScript 코드로 DOM 객체를 제어하는 과정에서 발생한다.
- 악성 스크립트가 서버로 전송되지 않고, 브라우저에서 동적으로 동작한다.
- 웹 사이트 코드를 조사하지 않고는 취약점을 발견할 수 없다. 따라서 공격 당하기 쉽다.
- url에 사용자가 접근할 경우 서버와의 상호작용 없이 브라우저에서 악성 스크립트가 실행된다.
- DOM 이 만들어지고 화면에 렌더링 된 이후, 악성 스크립트 코드에 의해 DOM 구조가 동적으로 바뀐다.
과정
- 악성 스크립트가 실행되도록 URL 주소를 만들어 사용자에게 전달한다.
- 사용자는 링크를 클릭하여 서버에 페이지를 요청하고 서버는 사용자에게 페이지를 넘겨준다.
- 서버로부터 받은 페이지를 사용자가 읽을 때 사용자 브라우저에서 악성 스크립트를 동작 시킨다.
- 사용자 브라우저에서 페이지 구조를 동적으로 변경한다.
- 사용자는 공격자에게 민감한 데이터를 전송한다.
대응 방안
- 신뢰할 수 없는 사이트, 메일을 피해야한다.
- 콘텐츠 보안 정(CSP) 사용한다. 스크립트 실행에 대한 정책을 설정하여 예방한다.
- HTTP 응답에 유저가 입력한 데이터가 존재한다면 입력한 데이터를 인코딩 해야 한다.
- 입력에 필터를 적용해야 한다. 즉 어떤 데이터 유효하고 예상되는 입력인지 확인한다. 특수 문자를 단순 문자로 인식하게 한다.
XSS 필터링
문자 | 인코딩 된 문자 |
---|---|
& |
& |
< |
< |
> |
> |
' |
' |
" |
" |
( |
( |
) |
) |
/ |
/ |
참고 사이트
- 저장형 XSS(Stored Cross Site Scripting) 공격과 방어 - Junhyunny’s Devlogs
- 토픽 스터디 / 정보보안 / XSS(Cross Site Scripting) 공격 - 해킹
- 토큰(token)은 어떻게 탈취 당하는가? (velog.io)
- What is cross-site scripting (XSS) and how to prevent it?
- XSS(Cross-site Scripting) 공격 (tistory.com)
- XSS(Cross Site Scripting) 공격이란? :: ARGOS (tistory.com)
- 크로스 사이트 스크립팅의 정의 및 공격 유형 NordVPN
- XSS - 나무위키 (namu.wiki)
댓글남기기