웹해킹 실습 - 5. 크로스 사이트 변조 공격(CSRF)

roon-replica·2022년 6월 18일
0

웹보안

목록 보기
6/8

생각들

  • 크로스 사이트가 무슨 의미?

  • 요청을 변조한다는게 무슨 의미?

  • Server Side Request Forgery는 또 뭐임?

  • 악성 코드를 포함하고 있는 페이지가 어떤 형태인지 대충은 알겠는데 구체적으로 잘 모르겠음

  • 피싱 공격은 정확히 뭐 어떻게 주의해야 함?
    -> 링크 클릭하기 전에 URL이 이상하지 않은지 확인하기

  • 로그인되어 있을 때는 웹페이지를 요청할 때마다 쿠키가 브라우저에 의해 자동으로 전송된다?

  • CORS !!!
    레퍼러 헤더랑 상관있는 듯??

  • js로 레퍼러 헤더 조작할 수 있지 않나?

  • 서버에서 생성한 CSRF 토큰을 클라이언트로 전달할 때 form hidden field를 이용하는 방법 외에 다른 방법은 뭐가 있는지?

개요

  • 개발자가 csrf 취약점에 대해 잘 모르고 애플리케이션을 개발해서 여전히 csrf가 많이 발견되고 있다고 함.
    2021년 OWASP top 10에는 없음. 요즘에는 거의 문제가 안되는 취약점인가 봄
    (근데 SSRF라는 것이 top 10에 있다..!!)
    OWASP top 10

  • 2008 옥션이라는 사이트의 사용자 1000만명의 개인정보가 csrf로 유출된 적 있다고 함

  • CSRF는 공격자가 피싱을 이용해서 사용자가 링크를 누르도록 하고, 링크를 누르면 사용자가 모르게 사용자가 로그인되어 있는 웹사이트의 특정 기능을 실행하도록 하는 공격이라고 함..

공격 과정

  1. 사용자가 웹사이트(이하 W)에 로그인
    csrf는 사용자가 로그인하는 이 단계가 필수 조건이라고 함
    로그인되어 있으면 쿠키가 자동으로 전송이 되기 때문이라고 함...

  2. 사용자가 W에 로그인되어 있는 와중에,
    공격자는 악성 코드?가 있는 페이지를 여는 링크를 포함한 이메일로 피싱

  3. 사용자가 링크 클릭.
    악성코드(예를 들어, 패스워드 변경하는 요청)이 W로 전송되서
    사용자도 모르게 비밀번호가 변경됨.(이게 가능..??)

  4. 공격자가 변경된 패스워드를 이용하여 사용자의 계정으로 로그인 가능하게 됨..

공격 실습

  • 실습에서 사용한 구체적인 공격 과정
    1. 공격 스크립트가 있는 웹페이지 작성
    2. 공격자 웹서버 실행
    3. 사용자는 로그인한 상태에서 새탭을 열어 공격자가 작성한 웹페이지 방문
    4. 악성 코드 링크 클릭
      예를 들어 클릭하면 웹사이트로 XHR을 이용하여 비밀번호 변경 요청

근데 실습해보니 CORS 때문에 XHR 요청이 불가능하다..!!!!

대응법

  1. Request의 referer 헤더를 검사
    referer 헤더는 링크 클릭 이전의 웹 페이지 주소를 알려주는 헤더
    정상적인 패스워드 변경 요청이라면 referer 헤더에 다른 사이트가 아니라 동일한 사이트의 주소가 들어있을 것.
    이렇게 referer 헤더로 정상적인 요청 여부를 검사할 수 있음

  2. CSRF 토큰 이용
    공격자가 추측할 수 없는 값을 요청 파라미터에 포함하는 방법

    • 동작 방식
      1. 웹 어플리케이션(서버)이 CSRF 토큰을 매 응답마다 랜덤하게 생성하여 클라이언트로 보냄
        (form hidden field 이용한다고 함..)
      2. 클라이언트는 다음 요청 때 이 CSRF 토큰을 함께 보냄.
      3. 서버는 CSRF 토큰 값을 검사해서 정상적인 경로를 통한 요청인지 확인 가능

  • 그런데 XSS 취약점이 존재하는 사이트이면 위 2가지 방법을 다 우회할 수 있다고 함...

    악성 스크립트 코드를 공격자 사이트에서 링크를 통해 실행하는게 아니라
    XSS를 통해 취약점이 있는 웹사이트 내에서 실행한다.
    그러면 referer 헤더는 공격자의 웹서버가 아니라 웹사이트라서 정상적인 요청으로 간주하게 된다고 함..

  1. 패스워드 변경의 경우 기존 패스워드를 입력하도록 하기
    CSRF로 기존 패스워드를 알 수 있는 것은 아니라서 좋은 대응방법이라고 함.
profile
집중 ➝ 프로세서↑ 시간 투자 ➝ 디스크↑

0개의 댓글