[Web] CSRF & XSS

·2021년 8월 12일

WEB

목록 보기
3/3

1. CSRF

CSRF(Cross Site Request Forgery)란?

직역하면 사이트 사이 요청을 위조한다!

웹 어플리케이션 취약점 중 하나로, 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위 (modify, delete, register 등)를 특정한 웹사이트에 request하도록 만드는 공격을 말한다.

주로 해커들이 많이 이용하는 것으로, 유저의 권한을 도용해 중요한 기능을 실행하도록 한다.

  • 사용자는 자신이 의도 했던 것과 무관하게 공격자가 의도한 행위를 하게 만드는 공격으로, 회원정보 변경, 데이터의 수정/삭제, 게시글 내용 변경 등을 할 수 있다.

예시 해커가 사용자의 SNS 계정으로 광고성 글을 올리는 것


CSRF 공격 조건

CSRF는 해커가 사용자 컴퓨터를 감염시거나 서버를 해킹해서 공격하는 것이 아니다. CSRF 공격은 아래와 같은 조건이 만족할 때 실행된다.

  1. 사용자가 해커가 만든 피싱 사이트에 접속한 경우
  2. 위조 요청을 전송하는 서비스에 사용자가 로그인을 한 상황

보통 자동 로그인을 해둔 경우에 이런 피싱 사이트에 접속하게 되면서 피해를 입는 경우가 많다.

대응 기법

1. Security Token 사용

사용자의 세션에 임의의 난수 값을 저장하고, 사용자의 요청시 해당 값을 포함하여 전송시킨다. 백엔드 단에서는 요청을 받을 때 세션에 저장된 토큰값요청 파라미터로 전달받는 토큰 값일치하는 지 검증 과정을 거치는 방법이다.

2. Referer 값 이용

프록시 툴, 패킷 등을 통해 확인하면 다른 페이지로 이동할 경우 전 페이지 정보를 가지고 이동한다. 이때 전 페이지 정보가 없거나, 외부 사이트에서 요청을 한 경우 요청을 처리하지 않는 방법이 있다.

3. 캡챠 사용

회원정보 변경, 게시글 작성 등 CSRF의 공격을 막아야 하는 페이지에서 캡챠를 사용해 인증이 가능한 것만 요청을 처리해주는 방법이 있다.

캡챠는 랜덤 이미지를 통해 인증이 되므로 사용자 몰래 요청하는것이 불가능 하다는 장점이 있다.



2. XSS

XSS(Cross Site Scription)란?

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

악의적으로 스크립트를 삽입하여 이를 열람한 사용자의 쿠키가 해커에게 전송시키며, 이 탈취한 쿠키를 통해 세션 하이재킹 공격을 한다. 해커는 세션ID를 가진 쿠키로 사용자의 계정에 로그인이 가능해지는 것이다.

공격자는 입력 데이터에 스크립트 코드를 입력하여 세션 정보를 탈취하는 것부터 사용자를 악의적인 사이트로 이동하게 하거나, 악성 프로그램을 강제로 다운로드 하게 한다.


공격 종류

  • Reflected XSS

    • 바로 번역하면, 비추는 XSS, 반사하는 XSS

    • 악성 스크립트가 있는 url을 사용자가 클릭하도록 유도하여, 클라이언트를 공격하는 방식으로, 쪽지나 웹 게시판을 통해 많이 이루어짐. 이 방법은 브라우저 자체에서 막는 경우가 많음

  • Stored XSS

    • Persistent XSS 라고도 함.

    • 말 그대로 지속적으로 피해를 입히는 유형으로, XSS 취약점이 존재하는 웹 어플리케이션에 악성 스크립트를 삽입하여 열람한 사용자의 쿠키를 탈취하거나 리다이렉션 시키는 공격을 한다. 이때 삽입된 스크립트를 데이터베이스에 저장시켜 지속적으로 공격을 하기 때문에 Persistent XSS라고 불린다.

    • Reflected XSS와 유사하나 Reflected XSS는 악성스크립트가 포함된 URL을 사용자가 클릭하게 유도하는 공격방식이고, Stored XSS는 웹 서버에 공격용 스크립트를 입력시켜 놓으면 해당 페이지를 읽는 순간 브라우저를 공격하는 방식

  • DOM XSS

    • 악성 스크립트가 포함된 URL을 사용자가 요청하게 되면서 브라우저를 해석하는 단계에서 발생하는 공격으로, 이 스크립트로 인해 클라이언트 측 코드가 원래 의도와 다르게 실행된다.

    • 이는 다른 XSS 공격과는 달리 서버 측에서 탐지가 어렵다.


대응 기법

1) Script 문자 필터링

  • XSS 공격은 입력값에 대한 검증이 제대로 이루어지지 않아 발생하는 취약점이다. 때문에 사용자의 모든 입력 값에 대한 정보를 서버 측에서 필터링해서 출력해 줘야 한다.

  • XSS Cheat Sheet에 대한 필터 목록을 만들어 모든 치트 시트에 대한 대응이 가능하도록 한다.

2) XSS 방어 라이브러리, 확장앱 사용

  • 서버 단에서는 Anti XSS 라이브러리를 적용한다.

  • 사용자 측에서는 개발자나 보안 확인을 위해서가 아니면 XSS필터를 켜둔다(default 값: on). 웹 브라우져 업데이트가 나오면 자주 업데이트 하는 것도 좋다.

3) 웹 방화벽 사용

  • 기본적인 웹 방화벽을 통해 XSS 공격을 대비할 수 있다. 방화벽은 XSS 외에 웹 공격에 대한 대부분을 효과적으로 막아내는 데 도움을 많이 준다.

4) 쿠키에 중요 정보 포함시키지 않기

  • 서버측에서는 중요한 정보는 쿠키에 저장하지 않는 것이 중요하다. (쿠키 스니핑을 통해 중요 정보가 유출될 수도 있기 때문)

3.CSRF vs XSS





출처

https://github.com/haewon-park/csStudy/tree/main/Web
https://kk-7790.tistory.com/73
https://hack-cracker.tistory.com/253 => CSFR 실습 예시
https://lucete1230-cyberpolice.tistory.com/191
https://godhaword.tistory.com/108

profile
당근먹고 자라나는 개발자

0개의 댓글