BOSS/웹 멘토링

[금오공대 BOSS] 웹 멘토링(5)-XSS와 CSRF

jir4vvit 2019. 10. 6. 18:50

마지막 멘토링이다..

 

XSS와 CSRF는 다들 많이 헷갈려하는 웹 취약점이다. 

이번 기회에 나도 둘의 개념을 잘 잡고 가보려고 한다.

 

일단 공통점은, 쿠키만으로 인증하는 서

 

XSS(Cross-Site Scripthing)

- 악의적인 사용자가 공격하려는 웹 사이트에 악성 스크립트를 넣는 기법을 말한다. 

- 공격에 성공하면, 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

- 즉, XSS공격은 브라우저로 전달되는 데이터에 악성 스크립트가 포함되어 개인의 브라우저에서 실행되면서 해킹을 하는 것이며, 이 공격용 악성 스크립트는 공격자가 웹 서버에 구현된 웹 애플리케이션의 XSS취약점을 이용하여 서버 측 또는 URL에 미리 삽입을 해 놓은 것이다.

- 사용자가 입력한 값을 검사하지 않고 사용하여, 악성 스크립트가 저장 혹은 실행되어 나타나게 되는 문제점이다.

- 보통 자바스크립트를 사용하여 공격하는 방법이 많다.

 

 

# Stored XSS

그림1

- 웹 애플리케이션 취약점이 있는 웹 서버에 악성 스크립트를 영구적으로 저장해 놓는 방법이다.

- 웹 사이트의 게시판, 사용자 프로필 및 코멘트 필드 등에 악성 스크립트를 삽입해 놓으면, 사용자가 이 사이트를 방문하여 저장되어 있는 페이지에 정보를 요청할 때, 서버는 악성 스크립트를 사용자에게 전달하여 사용자 브라우저에서 스크립트가 실행되면서 공격한다.

 

# 동작 원리(시나리오 예시)

  1. 공격자가 악성 script를 포함한 글을 웹 사이트 데이터베이스에 등록한다.
  2. 웹 서버는 악성 script가 포함한 글을 서버에 저장한다.
  3. 피해자는 공격자의 글을 request(요청)한다. (게시글을 확인하려고 클릭한다.)
  4. 웹 사이트에는 데이터베이스의 악성 script가 response(응답)에 포함되어 피해자에게 전송된다.
  5. 피해자의 브라우저는 response(응답) 내에서 악성 scrpit를 실행하여 피해자의 쿠키나 세션(클라이언트의 private 한 정보들)을 공격자의 서버로 보낸다.

# 예시

  • 게시판에 악성 스크립트를 삽입한 글을 남기고 다른 사용자가 해당 게시글을 읽엇을 경우 악성 스크립트가 실행되게 한다.

 

 

# Reflected XSS

그림2

- 공격자가 HTTP 요청에 악성 콘텐츠를 주입하면 그 결과가 사용자에게 "반사되는" 형태이다.

 

# 동작 원리(시나리오 예시)

  1. 공격자가 피해자에게 이메일로 URL을 전달한다.
  2. 피해자는 (취약한) 서버에게 URL을 클릭하여 request한다.
  3. (취약한) 서버는 피해자에게 script를 포함하여 reponse를 전달한다.
  4. 이 때, 공격자의 서버에서 악성 script를 피해자에게 전달한다.
  5. 피해자의 컴퓨터에서 악성 script가 실행된다.

# 예시

  • 순수한 스트리밍 xx사이트인 줄 알고 클릭했더니 악성 Active X가 설치되었다.
  • 이상한 사이트를 접속했더니 바탕화면에 바로가기가 설치된다거나 즐겨찾기에 추가되었다.
  • 유용한 유틸리티를 다운받을 수 있는 URL이라 URL에 들어가서 다운받았는데 다운받고 나니 악성 프로그램이었다.

 

CSRF(Cross-Site Request Forgery)

출처: 화이트해커 웹 모의해킹

- 웹 어플리케이션의 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격

- 해커는 희생자의 권한을 도용하여 중요 기능을 실행하는 것이 가능하다.

→예를 들어, 페이스북에 희생자의 계정으로 광고성 글을 올리는 것이 가능해진다.

- 해커가 사용자의 컴퓨터를 감염시키거나 어떤 서버를 해킹을 해서 이뤄지는 공격은 아니다.

 

  • 위조 요청을 전송하는 서비스에 희생자가 로그인 상태
  • 희생자가 해커가 만든 피싱 사이트에 접속

이 두 조건을 다 만족시키면 CSRF 공격이 이루어질 수 잇다.

 

# 동작 원리(시나리오 예시)

  1. A사이트의 주소를 http://site-a.com이라고 해보자. A사이트는 쿠키로 인증한다고 가정한다.
  2. A사이트의 출석체크 API인, '/api/attendance'는 GET요청을 허용한다고 가정해보자.
  3. 사용자가 A사이트에서 로그인 후, A사이트와 전혀 관계 없는 B사이트로 이동했다.
  4. 만약 사용자가 B사이트에서 '<img src="http://site-a.com/api/attendance">'와 같은 이미지 태그를 만났다면,  A사이트에 출석체크가 된다.

 

 

 

이제 웹 멘토링은 끝났고 그 다음은 포렌식이다...