상세 컨텐츠

본문 제목

[보안 공부] 13주 차 - CSRF 방어

컴퓨터/보안 수업(Segfault)

by 디멘터 2024. 7. 15. 21:34

본문

※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(Note: Security-related learning is allowed, but the individual is solely responsible for any legal consequences arising from the use of the acquired knowledge.)


※ 공부 기록용 포스트이며, 검수를 하고 올리지만 간혹 잘 못된 정보가 있을 수도 있습니다.

[보안 공부] 13주 차 - CSRF 방어
PC 화면에서 보시기 적합하도록 작성되었습니다.


1. CSRF vs XSS

  • XSS : 클라이언트 측에, 공격자가 의도한 스크립트를 실행하도록 하는 공격.
  • CSRF : 클라이언트가 서버로, 공격자의 의도대로 요청하도록 하는 공격.
  • 스크립트 삽입 또는 태그 입력이 가능한 취약점을 주로 이용한다는 점에서,
    비슷한 공격 루트를 갖는 경우가 많지만, 둘은 다른 공격이다.

  • 구현 가능한 최대 공격 범위에서 살펴보면,
    XSS는 사용자 브라우저에서 실행가능 한 스크립트에 한해 가능하다.
    CSRF는 사용자가 서버에 '요청'할 수 있는 작업에 한해 가능하다

  • 본질은 사용자 단에서 실행하는 스크립트 vs 사용자의 요청인 것이다

  • 공격을 위한 수단으로 Javascript나 HTML 태그가 사용될 수 있다.
    스크립트 삽입(XSS)으로 서버에 위조된 요청을 보내면 그것은 CSRF가 되는 것이다.
    취약점이 존재한다는 가정 하라면, CSRF는 스크립트 없이 HTML 태그만으로도 가능하다.
    HTML의 form태그로  '여기를 클릭하세요!' 버튼을 만들고 action 속성에 비밀번호 변경 요청을 넣으면 된다.
    <form action="http://공격대상_사이트/비밀번호_변경페이지.php" method="POST">
        <input type="hidden" name="new_password" value="newpassword1234">
        <input type="submit" value="여기를 클릭하세요!">
    </form>

2. CSRF 방어 방법

  • referer 헤더 체크
    ex. 엉뚱한 페이지에서 비밀번호 변경 요청 시 차단

  • 인증정보 요구
    ex. 비밀번호 변경 공격 시 이전 비밀번호를 입력하도록 요구

  • SOP(Same-origin Policy : 동일 출처 정책),
    CORS(Cross Origin Resource Sharing - SOP 정책을 우회하기 위한 설정)

    SOP는 프로토콜(http, https), 호스트(도메인), 포트 이 세 가지가 같아야, 스크립트로 자원에 접근가능
    CORS는 다른 출처에서도 요청을 해야 할 필요가 있을 때, SOP를 우회하기 위해 사용한다.

  • CSRF 토큰
    세션기반, 고유 토큰 발행, 민감한 요청 시 토큰을 요구하여 검증

관련글 더보기