2 분 소요

XSS

개념

  • 클라우드 측 코드를 삽입하는 공격이다.
  • 클라이언트의 브라우저에서 실행된다.
  • 피해자 컴퓨터(브라우저)에 악의적인 코드를 실행되게 하는 공격이다.
  • Cross-site Scripting 의 약자이다.
  • 개발자가 고려하지 않는 기능을 동작시킨다.

POC 코드

  • alert(1)
  • console.log()
  • “임이의 클라이언트 측 코드가 동작한다.” 를 보여주면 된다.

공격 방식

script 태그 이용하기.

onerror 속성 이용하기.

  • 자바스크립트 태그 안에 있는 효과와 동일하다.

공격 피해

사용자 쿠키 탈취

  • document.cookie 를 활용하여 사용자 쿠키 값을 훔친다.
  • 사용자 브라우저의 쿠키에 저장된 합법적인 Session ID 값이나 액세스 토큰 값을 훔쳐 원격지 서버로 전송한다.

사용자 개인정보 탈취

  • Key Logger 방식으로 사용자 입력을 탈취한다.
  • XSS Keylog 가 삽입된 페이지에 사용자가 접근하면 Keyboard Event 를 통해 입력 값을 후킹한다.
  • 후킹한 값을 원격지 서버로 전송한다.

악성코드 다운로드

  • 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도하여 악성 프로그램 다운로드 받는 사이트로 리타이렉한다.
  • 사용자가 악성 프로그램을 다운로드 하도록 유도한다.

피싱 사이트 강제 이동

  • 가짜 사이트로 위장하여 사용자의 로그인 정보를 탈취한다.
  • 실제 사이트와 유사한 웹 페이지를 통해 사용자의 개인정보를 훔쳐올 수 있다.

공격 유형

Stored XSS ( 서버에 저장하기 )

설명
  • 비정상적인 방법이 아니라 서버에서 제공하는 서비스의 취약점을 이용한 것이다.
  • 공격자가 악성 스크립트를 서버 페이지에 저장하고 해당 페이지를 사용자에게 노출 시킨다.
  • 사용자가 악성 스크립트가 들어있는 페이지를 방문하면 악성 스크립트가 사용자 브라우저에서 실행된다.
  • 광역적으로 공격이 가능하다. 하지만 흔적이 남는다.
유형
  • 댓글
  • 게시판
  • 이메일
  • 블로그 포스
  • 채팅방의 유저 이름
과정
  1. XSS 취약점이 있는 게시판에 쿠키 정보를 탈취하기 위한 악성 스크립트를 포함한 게시물을 작성한다.
  2. 사용자가 해당 글 열람 시 사용자의 쿠키 정보가 공격자에게 전송된다.
  3. 공격자가 사용자의 쿠키정보를 이용하여 사이트에 접근한다.

Reflected XSS

설명
  • 서버 사이드 렌더링(SSR)
  • 무조건 GET 방식 이여야 한다.
  • 악성 스크립트가 담긴 URL을 만들어 일반 사용자에게 전달한다.
  • URL 주소 뒤에 붙는 쿼리에 악성 스크립트를 작성하여 전달한다.
  • 사용자가 공격자가 건네준 URL을 클릭하여 방문하면 악성 스크립트가 담긴 페이지를 사용자에게 보여준다. 그리고 사용자 브라우저에서 악성 스크립트가 실행된다.
유형
  • 이메일
과정
  1. XSS 취약한 서버 URL와 악성 스크립트를 합쳐서 만든 링크를 사용자에게 보낸다.
  2. 사용자가 링크를 클릭하면 취약한 서버에 악성 스크립트랑 같이 요청을 보낸다.
  3. 사용자는 서버로 부터 응답을 받는다. 이때 받은 페이지는 서버에서 완성된 페이지이고 악성 스크립트가 담겨져 있다.
  4. 사용자 브라우저는 악성 스크립트를 동작시킨다.
  5. 공격자는 사용자의 민감한 정보를 훔칠 수 있다.

DOM Based XSS

설명
  • 클라이언트 사이드 렌더링(CSR)
  • JavaScript 코드로 DOM 객체를 제어하는 과정에서 발생한다.
  • 악성 스크립트가 서버로 전송되지 않고, 브라우저에서 동적으로 동작한다.
  • 웹 사이트 코드를 조사하지 않고는 취약점을 발견할 수 없다. 따라서 공격 당하기 쉽다.
  • url에 사용자가 접근할 경우 서버와의 상호작용 없이 브라우저에서 악성 스크립트가 실행된다.
  • DOM 이 만들어지고 화면에 렌더링 된 이후, 악성 스크립트 코드에 의해 DOM 구조가 동적으로 바뀐다.
과정
  1. 악성 스크립트가 실행되도록 URL 주소를 만들어 사용자에게 전달한다.
  2. 사용자는 링크를 클릭하여 서버에 페이지를 요청하고 서버는 사용자에게 페이지를 넘겨준다.
  3. 서버로부터 받은 페이지를 사용자가 읽을 때 사용자 브라우저에서 악성 스크립트를 동작 시킨다.
  4. 사용자 브라우저에서 페이지 구조를 동적으로 변경한다.
  5. 사용자는 공격자에게 민감한 데이터를 전송한다.

대응 방안

  • 신뢰할 수 없는 사이트, 메일을 피해야한다.
  • 콘텐츠 보안 정(CSP) 사용한다. 스크립트 실행에 대한 정책을 설정하여 예방한다.
  • HTTP 응답에 유저가 입력한 데이터가 존재한다면 입력한 데이터를 인코딩 해야 한다.
  • 입력에 필터를 적용해야 한다. 즉 어떤 데이터 유효하고 예상되는 입력인지 확인한다. 특수 문자를 단순 문자로 인식하게 한다.

XSS 필터링

문자 인코딩 된 문자
& &
< &lt;
> &gt;
' &#x27;
" &quot;
( &#40;
) &#41;
/ &#x2F;

참고 사이트

댓글남기기