XSS, CSRF, SQL Incejtion
웹 사이트 보안 공격 방식인 XSS와 CSRF의 특징 및 차이점에 대해 알아봅니다.
XSS (Cross-Site Scripting)
XSS란 공격자가 웹 사이트의 소스 코드에 악의적인 스크립트를 삽입하여 사용자를 공격하는 공격 방식입니다. XSS의 목적은 아래와 같습니다.
- 쿠키나 세션 정보를 탈취한다.
- 공격자가 등록한 재리디렉션 URL로 이동되게 한다.
- 개발자의 의도가 아닌 새로운 작업이 실행되게 한다.
공격자의 XSS 공격은 크게 2가지로 나뉩니다.
Stored XSS(저장형)
일반적인 공격 방식인 Stored XSS는 서버의 데이터베이스에 스크립트가 저장되게 하여 브라우저가 서버의 응답을 통해 해당 데이터를 불러올 경우 공격자의 스크립트 코드가 실행되는 것입니다.
일반적으로 블로그 게시글이나 댓글에 스크립트 코드를 작성하는 것이 있습니다. (해당 블로그 페이지를 들어가는 모든 사용자가 해당 스크립트 코드를 실행하게 되어 피해를 보게 된다.)
이런 스크립트 코드를 통해 사용자의 쿠키나 세션이 탈취당하거나 또는 공격자의 리디렉션 URL을 통해 원하지 않는 작업이 실행될 수 있습니다.
Reflected XSS(반사형)
Reflected XSS는 Stored XSS와 달리 스크립트 코드를 서버에 전송하는 것이 목적이 아닌 브라우저에서 즉시 스크립트 코드를 실행하게 하는 것입니다.
실제로 1년 전 SW마이스터고에서 진행한 온라인 토크 콘서트 서비스에서 아래와 같이 채팅으로 스크립트를 보내는 Reflected XSS 공격이 가능했던 적이 있습니다.
<script>alert('this website is hacked!')</script>
이러한 XSS 공격의 대응 방안은 아래와 같습니다.
- 정규표현식을 통한 파라미터 값 필터링 (기본적인 공격만 방어)
- 서버 단에서 XSS를 방어해주는 라이브러리 사용 (대부분 이런 식으로 처리)
- 사용자가 브라우저 확장 앱 또는 웹 방화벽 사용
CSRF (Cross-Site Request Forgery)
CSRF란 XSS와 달리 사용자가 서버에 특정 요청을 보내도록 공격하는 방식입니다. CSRF의 목적은 아래와 같습니다.
- 사용자가 의도와 무관하게 특정 요청을 하게 되므로 공격자를 알 수 없다.
- 스크립트가 없어도 공격이 가능하며, 이를 통해 해킹, 글 작성 등을 할 수 있다.
CSRF의 공격 방식을 2008년 옥션 해킹 사고를 예시로 배워보겠습니다.
<img src="http://auction.com/changeUserAccount?id=asdf&password=asdf">
- 공격자는 위와 같은 태그가 담긴 코드를 메일을 통해 보낸다.
- 관리자 중 한 명이 권한을 가지고 작업을 하던 중 메일을 조회한다.
- 메일을 조회하는 과정에서 이미지 파일이 불러와지면서 URL이 실행되게 된다.
- 관리자는 이미 auction에 로그인 되어 있는 상태이므로 정상적으로 해킹이 된다.
이러한 CSRF 공격의 대응 방식은 아래와 같습니다.
- Referrer 검증: 같은 도메인의 요청이 아니라면 차단한다.
- CAPTCHA 사용: 캡챠를 사용해 사람의 요청인지 검사한다.
- CSRF 토큰 사용: 랜덤한 수를 사용자의 세션에 저장하여 모든 요청에서 서버가 비교하며 수가 다를 경우 동작을 허용하지 않는다.
Leave a comment