• Home
  • About
    • Monu Kim photo

      Monu Kim

      Strike while the iron is hot

    • Learn More
    • Email
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

XSS, CSRF

12 Oct 2022

Reading time ~3 minutes

XSS(cross site scripting, code injection attack)

공부한 문서

공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자 세션 가로채기, 웹사이트 변조, 악의적 콘텐츠 삽입, 피싱 공격 등을 진행하는 것을 뜻한다.

  • 순서
    1. 사람들이 안전하다고 생각하는 웹사이트에 악성 스크립트 주입
    2. 악성 스크립트가 포함됨 게시글 열람
    3. 해당 게시글을 열람한 피해자들의 쿠키 해커에게 전송
    4. 피해자의 브라우저에서 스크립트를 실행 → 사용자 세션 가로채기, 웹사이트 변조, 악의적 콘텐츠 삽입, 피싱 공격
  • 대상 : 스크립트 언어, 취약한 코드
  • 목적 : 사용자의 정보 도용
    • 로그인 입력란을 감염시켜 로그인 세부 정보와 쿠키를 탈취
  • 공격 방식
    1. 쿠키 스니핑(Cookie sniffing)
    2. 스크립트 암호화 및 우회
    3. 악성 스크립트 유포
    4. 키 로거(key logger)
    5. 마우스 스니퍼(Mouse sniffer)
    6. 거짓 정보 추가
  • 공격 유형
    • 반사형 XSS
      • 가장 일반적인 유형의 공격 : 사용자에게 입력 받은 값을 서버에서 되돌려주는 곳에서 발생
      • 1회성 공격 : 피해자가 직접 스크립트를 실행하도록 유도
        • 링크를 클릭한 사용자의 쿠키 값을 해커에게 전송
        • 버튼/링크를 클릭해 악성 스크립트를 실행하게 됨
      • 피해자에게 입력 받은 검색어를 그대로 표시하는 곳, 피해자가 일력한 값을 오류 메세지와 함께 보여주는 곳에 악성 스크립트가 삽입됨
      • 서버가 피해자의 입력 값을 포함해 응답을 전송할 때 실행됨
      • 악성 스크립트는 해당 서버를 반사해 오류 메시지나 검색 결과를 통해 피해자의 화면에 표시될 수 있다.
    • 영구적 XSS (저장형 XSS)
      • 응용 프로그램이나 웹사이트의 모든 HTTP 응답을 감염시키는 공격
      • 지속적으로 피해를 입히는 공격 유형
      • 웹 애플리케이션에서 XSS 취약점을 파악 → 악성 스크립트 삽입
        • 삽입된 스크립트는 데이터베이스에 저장, 악성 스크립트가 존재하는 게시글 등을 열람한 사용자들은 쿠키를 탈취당하거나 다른 사이트로 리디렉션되는 공격을 받게된다.
      • 사용자가 입력한 값이 데이터베이스에 저장이 되고 저장된 값이 그대로 프론트엔드에 표시되는 곳에서 공격이 발생할 가능성이 높다.(ex. 게시판)
        • 사용자의 입력 값을 검증하지 않기 때문에 발생
      • 사용자가 링크를 클릭하도록 유인할 필요가 없다 → 사용자 접속을 기다리기만 하면 됨
    • DOM 기반 XSS
      • DOM (Document Object Model) : 웹페이지를 여는 즉시 생성되는 문서 객체 모델
      • 피해자 브라우저에 초점을 맞춘 것이 특징
      • 다른 종류의 XSS와 달리 응답 페이지 HTML에서 악성코드가 분명하게 나타나지 않는다 → 웹사이트의 코드를 조사하지 않고는 취약점을 발견할 수 없다.

CSRF(Cross Site Request Forgery)

공부한 문서

인증된 사용자가 웹 애플리케이션에 특정 요청(수정, 삭제, 등록 등)을 보내도록 유도하는 공격 행위를 뜻 한다.

  • 순서
    1. 사용자는 웹사이트에 로그인하여 정상적인 쿠키를 발급받는다.
    2. 공격자는 링크를 이메일이나 게시판 등의 경로를 통해 이용자에게 전달한다.
    3. 피해자가 공격용 링크를 클릭하면 가해자가 의도한 요청을 보낸다.
    4. 요청을 받은 서버는 피해자의 요청대로 작업을 수행한다.
  • 대상 : 데이터의 값을 변경하는 요청
    • 제품 구입, 계정 설정, 기록 삭제, 비밀번호 변경, 문자 전송 등
  • 목적 : 사용자의 정보 탈취보다는 특정 작업을 무단으로 진행하기 위한 목적으로 이루어지는 경우가 많음.
  • 공격 방식
    • 공격자는 자금 송금이나 로그인 정보 변경 등 원하는 요청을 위조한 후, 이메일이나 웹사이트에 요청이 삽입된 하이퍼링크를 심어 놓고 사용자가 해당 링크를 클릭하면 요청이 자동으로 전송된다.
  • 공격 예시
    • 사용자 몰래 자금을 전송
    • 이메일 주소와 비밀번호를 변경
    • 관리자 계정이 csrf에 당하는 경우 공격자가 전체 서버 접근 권한을 탈취

XSS와 CSRF 비교

  • 공통점 : 사용자의 브라우저를 대상으로 한다.
  • 차이점
    • XSS :
      • 사용자의 인증된 세션을 악용하는 공격방식
      • 사용자단에서 스크립트가 실행
      • 사용자의 정보 탈취가 목적
    • CSRF
      • 인증된 세션 없이도 공격을 진행할 수 있다.
      • 서버단에서 스크립트가 실행
      • 사용자 몰래 송금과 제품 구입 등 특정 행위를 수행하는 것이 목적

쿠키 옵션

  • Secure Https를 통해 통신하는 경우에만 쿠키를 전송한다. → 세션값을 납치(Session Hijacking)해 사용자인 척할 수 있기 때문에 이를 막는 것
  • HttpOnly 웹 브라우저가 통신할 때만 쿠키를 알 수 있다. (자바스크립트로 접근이 불가능) → 자바스크립트로 세션값을 탈취하는 걸 막기 위한 옵션
var http = require("http");
var cookie = require("cookie");
http.createServer(function (request, response) {
    console.log(request.headers.cookie);
    var cookies = {};
    if (request.headers.cookie !== undefined) {
        cookies = cookie.parse(request.headers.cookie);
    }
    console.log(cookies.yummy_cookie);
    response.writeHead(200, {
        "Set-Cookie": [
            "yummy_cookie=choco",
            "tasty_cookie=strawberry",
            `Permanent=cookies; Max-Age=${60 * 60 * 24 * 30}`,
            "Secure=Secure; Secure",
            "HttpOnly=HttpOnly; HttpOnly",
        ],
    });
    response.end("Cookie!!");
}).listen(3000);


studyxsscsrf Share Tweet +1