XSS & CSRF

Sammy·2024년 4월 18일
0

Authorization

목록 보기
6/9

XSS (Cross Site Scripting)

  • 공격자가 악성 스크립트를 웹사이트에 삽입하여 사용자에게 실행시키는 공격
  • 주로 사용자의 권한 및 토큰 탈취 목적
  • 사용자가 특정 사이트를 신뢰한다는 사실을 이용한 공격 방식

공격 예시

Reflected XSS (반사형)

  • 공격자가 악성 스크립트를 포함하는 url 을 만들고 사용자에게 전송한다.
  • 사용자가 url 을 클릭하면 악성 스크립트가 실행되어 사용자 정보가 탈취된다.

Stored XSS (저장형)

  • 공격자가 악성 스크립트를 웹사이트의 데이터베이스에 저장한다.
  • 사용자가 웹사이트에 방문하면 악성 스크립트가 실행되어 사용자 정보가 탈취된다.
  • 예시
    • 공격자가 악성 스크립트를 포함하는 댓글을 게시판에 올린다.
    • 사용자가 댓글을 볼 때 악성 스크립트가 실행되어 사용자의 정보를 탈취하거나 쿠키를 도용한다.

공격 방지 방법

  • 사용자의 입력값을 검증하여 악성 스크립트가 포함되지 않도록 한다.
  • 웹사이트에 출력되는 값을 인코딩하여 악성 스크립트가 실행되지 않도록 한다.
  • HTTP Content-Security-Policy 헤더 설정을 함으로서 웹사이트에서 허용되는 콘텐츠 소스를 제어한다.
  • HttpOnly 설정으로 JavaScript를 통해 쿠키에 접근하는 것을 방지한다.

CSRF(Cross-Site Request Forgery)

  • 인증된 사용자가 자신의 의지와는 무관하게 악의적인 요청을 보내도록 하는 공격 방식
  • 공격자는 사용자가 이미 로그인한 웹사이트에 악의적인 요청을 포함하는 링크 또는 이미지를 삽입하고, 사용자가 해당 링크를 클릭하거나 이미지를 보면 악의적인 요청이 실행된다.

공격 예시

  • 은행 송금
    • 공격자가 사용자에게 “환불 요청” 이라는 제목의 이메일을 보낸다.
    • 이메일에는 악의적인 링크가 포함되어 있고, 사용자가 링크를 클릭하면 공격자의 계좌로 돈이 송금된다.
  • 쇼핑몰 구매
    • 공격자가 온라인 커뮤니티에 “저렴한 상품 판매” 라는 제목의 게시글을 작성한다.
    • 게시글에는 악의적인 링크가 포함되어 있고, 사용자가 링크를 클릭하면 사용자의 의도와 상관없이 상품이 구매된다.
  • SNS 게시물 작성
    • 공격자가 사용자에게 메시지를 보낸다.
    • 메시지에는 악의적인 링크가 포함되어 있으며, 사용자가 링크를 클릭하면 공격자의 의도와 상관없이 SNS 게시물이 작성된다.

공격 방지 방법

  • CSRF 토큰 사용: 사용자 요청에 CSRF 토큰을 포함하여 공격자의 악의적인 요청을 차단한다.
    • 웹 서버는 사용자 로그인 시 임의의 값을 생성하여 csrf 토큰으로 사용한다.
    • csrf 토큰은 사용자 세션에 저장하거나 쿠키로 전송한다.
    • 사용자가 웹사이트에 요청을 보낼 때, 매 요청마다 csrf 토큰을 포함시킨다.
    • 웹 서버는 요청에 포함된 csrf 토큰을 검증한다.
  • HTTP Referer 헤더 검증: 사용자 요청의 Referer 헤더를 검증하여 요청 출처가 유효한지 확인한다.
  • SameSite 쿠키 설정: 다른 도메인으로의 쿠키 전송을 제한하여 공격자가 다른 웹사이트에서 사용자의 쿠키를 사용하지 못하도록 한다.

SameSite

  • SameSite 쿠키는 CSRF 공격을 방지하기 위한 쿠키 속성이다.
  • SameSite 쿠키는 브라우저가 쿠키를 요청하는 사이트와 일치하는 사이트에서만 전송하도록 지시한다.

SameSite 속성

  • Lax: 쿠키는 요청 사이트와 동일한 사이트 또는 상위 사이트에서만 전송된다. 예를 들어, example.com에서 설정된 쿠키는 subdomain.example.com에서도 사용할 수 있지만 otherdomain.com에서는 사용할 수 없다.

  • Strict: 쿠키는 요청 사이트에서만 전송된다. example.com에서 설정된 쿠키는 subdomain.example.com에서도 사용할 수 없다.

  • None: 쿠키는 모든 사이트에서 전송된다. 보안 위험이 있으므로 주의해서 사용해야 한다.

samesite 쿠키 설정 방법

JavaScript 예시

document.cookie = "session=value; SameSite=Lax";

Go 예시

package main
import (
    "fmt"
    "net/http"
)
func main() {
    // 쿠키 생성
    cookie := &http.Cookie{
        Name:  "session",
        Value: "session-value",
        // SameSite 속성 설정
        SameSite: http.SameSiteLaxMode,
    }
    // 쿠키 설정
    http.SetCookie(w, cookie)
    // ...
}

reference
정보보안

profile
Web Developer

0개의 댓글