XSS(cross site scripting, code injection attack)
공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자 세션 가로채기, 웹사이트 변조, 악의적 콘텐츠 삽입, 피싱 공격 등을 진행하는 것을 뜻한다.
- 순서
- 사람들이 안전하다고 생각하는 웹사이트에 악성 스크립트 주입
- 악성 스크립트가 포함됨 게시글 열람
- 해당 게시글을 열람한 피해자들의 쿠키 해커에게 전송
- 피해자의 브라우저에서 스크립트를 실행 → 사용자 세션 가로채기, 웹사이트 변조, 악의적 콘텐츠 삽입, 피싱 공격
- 대상 : 스크립트 언어, 취약한 코드
- 목적 : 사용자의 정보 도용
- 로그인 입력란을 감염시켜 로그인 세부 정보와 쿠키를 탈취
- 공격 방식
- 쿠키 스니핑(Cookie sniffing)
- 스크립트 암호화 및 우회
- 악성 스크립트 유포
- 키 로거(key logger)
- 마우스 스니퍼(Mouse sniffer)
- 거짓 정보 추가
- 공격 유형
- 반사형 XSS
- 가장 일반적인 유형의 공격 : 사용자에게 입력 받은 값을 서버에서 되돌려주는 곳에서 발생
- 1회성 공격 : 피해자가 직접 스크립트를 실행하도록 유도
- 링크를 클릭한 사용자의 쿠키 값을 해커에게 전송
- 버튼/링크를 클릭해 악성 스크립트를 실행하게 됨
- 피해자에게 입력 받은 검색어를 그대로 표시하는 곳, 피해자가 일력한 값을 오류 메세지와 함께 보여주는 곳에 악성 스크립트가 삽입됨
- 서버가 피해자의 입력 값을 포함해 응답을 전송할 때 실행됨
- 악성 스크립트는 해당 서버를 반사해 오류 메시지나 검색 결과를 통해 피해자의 화면에 표시될 수 있다.
- 영구적 XSS (저장형 XSS)
- 응용 프로그램이나 웹사이트의 모든 HTTP 응답을 감염시키는 공격
- 지속적으로 피해를 입히는 공격 유형
- 웹 애플리케이션에서 XSS 취약점을 파악 → 악성 스크립트 삽입
- 삽입된 스크립트는 데이터베이스에 저장, 악성 스크립트가 존재하는 게시글 등을 열람한 사용자들은 쿠키를 탈취당하거나 다른 사이트로 리디렉션되는 공격을 받게된다.
- 사용자가 입력한 값이 데이터베이스에 저장이 되고 저장된 값이 그대로 프론트엔드에 표시되는 곳에서 공격이 발생할 가능성이 높다.(ex. 게시판)
- 사용자의 입력 값을 검증하지 않기 때문에 발생
- 사용자가 링크를 클릭하도록 유인할 필요가 없다 → 사용자 접속을 기다리기만 하면 됨
- DOM 기반 XSS
- DOM (Document Object Model) : 웹페이지를 여는 즉시 생성되는 문서 객체 모델
- 피해자 브라우저에 초점을 맞춘 것이 특징
- 다른 종류의 XSS와 달리 응답 페이지 HTML에서 악성코드가 분명하게 나타나지 않는다 → 웹사이트의 코드를 조사하지 않고는 취약점을 발견할 수 없다.
- 반사형 XSS
CSRF(Cross Site Request Forgery)
인증된 사용자가 웹 애플리케이션에 특정 요청(수정, 삭제, 등록 등)을 보내도록 유도하는 공격 행위를 뜻 한다.
- 순서
- 사용자는 웹사이트에 로그인하여 정상적인 쿠키를 발급받는다.
- 공격자는 링크를 이메일이나 게시판 등의 경로를 통해 이용자에게 전달한다.
- 피해자가 공격용 링크를 클릭하면 가해자가 의도한 요청을 보낸다.
- 요청을 받은 서버는 피해자의 요청대로 작업을 수행한다.
- 대상 : 데이터의 값을 변경하는 요청
- 제품 구입, 계정 설정, 기록 삭제, 비밀번호 변경, 문자 전송 등
- 목적 : 사용자의 정보 탈취보다는 특정 작업을 무단으로 진행하기 위한 목적으로 이루어지는 경우가 많음.
- 공격 방식
- 공격자는 자금 송금이나 로그인 정보 변경 등 원하는 요청을 위조한 후, 이메일이나 웹사이트에 요청이 삽입된 하이퍼링크를 심어 놓고 사용자가 해당 링크를 클릭하면 요청이 자동으로 전송된다.
- 공격 예시
- 사용자 몰래 자금을 전송
- 이메일 주소와 비밀번호를 변경
- 관리자 계정이 csrf에 당하는 경우 공격자가 전체 서버 접근 권한을 탈취
XSS와 CSRF 비교
- 공통점 : 사용자의 브라우저를 대상으로 한다.
- 차이점
- XSS :
- 사용자의 인증된 세션을 악용하는 공격방식
- 사용자단에서 스크립트가 실행
- 사용자의 정보 탈취가 목적
- CSRF
- 인증된 세션 없이도 공격을 진행할 수 있다.
- 서버단에서 스크립트가 실행
- 사용자 몰래 송금과 제품 구입 등 특정 행위를 수행하는 것이 목적
- XSS :
쿠키 옵션
- 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);