[CS-WEB]CSRF & XSS

지영·2023년 9월 11일
0

CS

목록 보기
70/77

CSRF

Cross Site Request Forgery의 줄임말이다. 웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정 및 삭제 등의 작업을 하게 만드는 공격방법이다. 예시로 경매 사이트 옥션의 개인정보 유출사건이 있다.

✔ 공격방식

  1. 공격자는 email이나 게시판에 CSRF 스크립트가 포함된 게시물을 전송한다.
  2. 관리자는 공격자가 등록한 CSRF 스크립트가 포함된 게시물을 확인한다.
  3. 관리자가 CSRF스크립트가 포함된 게시물을 열람하면, 공격자가 관리자의 권한으로 원하는 CSRF스크립트 요청이 발생한다.
  4. 공격자가 원하는 CSRF스크립트가 실행되어, 관리자 및 사용자의 피해가 발생하게 된다.

✔ 방어, 예방 방법

  • Referer 체크
    • HTTP헤더에 있는 Referer로 해당 요청이 요청된 페이지의 정보를 확인하고 승인된 도메인으로 요청시에만 처리하는 방법. 간단하다는 장점이 있어, 주로 소규모인 웹사이트에서 주로 이용된다. 자미나 Paros, Zap, Fiddler같은 조작 프로그램이 있어 완벽한 예방이 될 수 없다.
  • GET/POST 요청 구분
    • IMG태그 등의 경우 GET요청으로, FORM태그로 값을 받는 경우 POST를 이용하여 요청을 구분한다.
  • Token사용
    • 서버에서 해시로 암호화된 Token을 발급하여 사용자는 매 요청마다 해당 Token을 함께 보내 서버의 검증을 받아 리소스에 접근한다.
  • 추가인증 수단 사용
    • 추가 인증 수단을 거쳐 만약 테스트를 통과하지 못할 시에는 해당 요청자체를 거부한다. 예시로는 CAPCHA가 있다.

XSS

Cross Site Scription의 줄임말이다. CSRF와 같이 웹 어플리케이션 취약점 중 하나로, 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법이다.

Cross Site Scription의 약자가 CSS가 되어야 하지만 이미 CSS는 Cascading Style Sheets의 약어로 사용되고 있어 XSS라고 한다.

✔ 공격 분류

1. Reflected XSS

URL 파라미터(특히 GET방식)에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식이다. 검증되지 않은 사용자(해커)가 URL파라미터나 HTTP요청 헤더 정보를 수정하여 공격할 수 있는데, 사용자에게 입력받은 검색어를 그대로 보여주는 검색 엔진 같은 곳이 취약점이다. 이 곳에 악성 스크립트가 삽입되면 서버가 사용자으 입력 값을 포함하여 스크립트를 실행하게 되고 이때 문제가 생긴다.

2. DOM Based XSS


악의적인 스크립트가 포함된 URL을 사용자가 요청하게 되어 브라우저를 해석하는 단계에서 공격이 발생한다. (*DOM이란, HTML및 XML문서에 접근하는 방법을 표준으로 정의하는 문서 객체 모델이다.)

피해자의 브라우저에서 DOM환경을 수정하여 클라이언트 측 코드가 예상치 못한 방식으로 공격 스크립트가 실행된다. 페이지 자체는 변경이 안되지만 페이지에 포함된 클라이언트 측 코드에서 실행된다. 서버와 관계없이 브라우저에서 발생하고 DOM객체 생성 시 클라이언트 측에서 악성 스크립트가 포함된다. 따라서 서버측에서 탐지가 어렵다.

3. Persistent XSS

악의적으로 스크립트를 삽입하여 이를 열람한 사용자의 쿠키가 해커에게 전송되고 이렇게 탈취된 쿠키를 통해 Session hijacking공격을 한다. 해커는 세션ID를 가진 쿠키로 로그인 등 인증을 받을 수 있게 된 것이다.

✔ 방어, 예방 방법

  • 입출력 값 검증

    • XSS Cheat Sheet에 대한 필터 목록을 만들어서 모든 Cheat Sheet에 대한 대응이 가능하도록 사전에 대비한 것이다. XSS필터링을 적용 후 스크립트가 실행되는지 테스트도 가능하다
  • XSS 방어 라이브러리, 확장앱 사용

    • Anti XSS라이브러리를 제공해주는 회사들이 있다. 해당 회사의 라이브러리를 서버단에 추가하고, 사용자들은 각자 브라우저에서 악성 스크립트가 실행되지 않도록 확장앱을 설치할 수 있다.
  • 웹 방화벽

    • 웹 방화벽은 웹 공격에 특화된 것이다. 다양한 Injection을 한꺼번에 방어할 수 있다.
      (*Injection이란, 공격자가 신뢰할 수 없는 입력을 프로그램에 삽입하는 것을 말한다. )
  • CORS, SOP설정

    • CORS(Cross-Origin Resource Sharing), SOP(Same-Origin-Policy)를 통해 리소스의 출처를 제한하는 것이다.

💥 SOP이란,

CORS에러는 SOP이라는 브라우저 원칙으로 인해 발생한다. 즉, Same Origin Policy 동일 출처가 아닌 경우에 발생한다. 여기서 동일 출처는 프로토콜, 호스트, 포트가 동일한 경우를 말한다.

💨 CORS란,

Cross Origin Resource Sharing으로, 이런 SOP으로 발생하는 에러를 해결하는 방법이다. SOP은 사용자를 보호할 수 있지만, 서버가 확정되면서 때로는 다른 회사의 서버로 이용(API사용 등..)해야 하는 상황이 자주 발생할 수 있다. 따라서 조건에 따라 다른 출처는 허가해주는 방법이다.

CSRF와 XSS 공격의 차이

  • CSRF : 특정 웹사이트가 사용자의 브라우저를 신용하여 발생함. 악성코드가 서버단에서 발생함.
  • XSS : 사용자가 웹사이트를 신용하여 악성 스크립트가 실행됨, 즉 악성코드가 클라이언트 측에서 발생함.








*참고 : https://github.com/gyoogle/tech-interview-for-developer/blob/master/Web/CSRF%20%26%20XSS.md, https://velog.io/@gwanuuoo/CSRF-%EA%B3%B5%EA%B2%A9%EA%B3%BC-%EB%B0%A9%EC%96%B4-%EA%B8%B0%EB%B2%95, https://swk3169.tistory.com/24
profile
꾸준함의 힘을 아는 개발자📍

0개의 댓글