CSRF와 XSS
- CORS와 더불어 웹 취약점으로 알려진 CSRF와 CSS.
- 보안 지식중 하나로
csrf
와xss
의 특징과 차이점을 정리해보자.
XSS란?
- Cross Site Scripting(크로스 사이트 스크립팅)의 약자
- 악성 스크립트를 주입하는 행위
- 상대방의 브라우저에서 스크립트가 실행되도록 하여 세션을 가로채거나, 웹사이트를 변조, 콘텐츠삽입, 피싱 공격을 하는것
- 보안 취약점 목록인 OWASP top 10에 있는 만큼 자주 발생하는 공격
- 크로스 사이트 인 이유?
상대방 - 웹사이트 - 공격자
형태로 사이트를 넘어서 공격한다는 의미- 상대방은 친숙한 웹사이트라 약해진 경계심을 이용해 공격을 당한다.
목적
- 사용자의 정보와 쿠키를 탈취
공격 방법
-
reflected XSS(반사형)
- 작성한게 그대로 다시 출력되는것을 이용
- 입력한 검색어와 같은 입력한 값을 오류 메시지로 보여주는 곳에 삽입
- script를 입력하면 화면에 출력하고 작동하는것을 이용
-
stored XSS(저장형)
- 웹 서버 자체에 스크립트를 저장
- 웹사이트의 HTTP응답을 감염시켜 반사형과 다르게 지속적으로 피해를 준다.
- 해당 스크립트는 데이터 베이스에 저장된다.
- 웹 서버 자체에 스크립트를 저장
-
dom XSS
- DOM을 이용해 브라우저 자체에서 실행
- 피해자의 브라우저에 초점을 맞춘것이 특징
- 반사형이나 저장형에 비해 위험징후 발견하기 어렵다.
- 어딘가로 이동을 시키거나, 세션을 가로채는게 가능
대책
- 사용자는 의심하기
- 수상한 URL은 클릭하지 않기
- 최신 브라우저를 사용하기
-
악성 스크립트 삽입을 방지하고 무효화 해야 한다.
-
입력값 필터링
- <,>,’“등의 특수문자를 무효화 하도록 한다.
- 지정된 HTML태그만 사용하도록 whitelist필터링 적용
- XSS관련 외부 라이브러리도 존재한다
- OWASP ESAPI, Lucy-XSS-Filter 등
-
CSRF란?
- Cross-Site Request Forgery
- CSRF또는 XSRF로 불린다.
- 크로스사이트 요청 위조라고 번역할 수 있다.
-
이 공격은 혼동된 대리인(confused deputy) 사이버 공격의 한 유형
- 사용자가 뜻하지 않게 계정 자금 이체, 비밀번호 변경 등 원치 않는 작업을 수행
- 인증된 사용자가 웹 어플리케이션에 특정 요청을 보내도록 유도하는 공격 행위
- 관리계정이 공격당할시 서버 전체가 위험해진다.
- 이 공격은 무차별 공격이며 데이터 도난보다는
특정 요청을 무단으로 진행
하기 위한공격이다.- 그래도 데이터 도난도 있지않나? 하지만 일단 권한을 탈취하면 부가적으로 개인정보등 노출은 일어나게 되있다.
-
크로스 사이트 요청 위조인 이유는?
- 공격자의 요청이 사용자 요청처럼 속이는 공격방식이어서 이런 이름이 붙여였다.
공격의 예
- 사용자의 권한으로 어떤 기능을 수행하도록 유도하는 방식이다.
- 도배 공격
- 특정 사이트의 게시글을 작성하라는 요청을 위조합니다.
- 이를 웹사이트에 삽입합니다.
- 만약 로그인한 사용자가 위조된 요청이 삽입된것을 클릭하면, 게시글이 모르는사이에 작성됩니다.
- 웹사이트 서버는 해당 요청을 받고 게시글을 올립니다.
- 만약 관리자 계정으로 공지사항에 작성하는 요청을 넣었다면 공지사항에 이상한 글이 작성될것입니다. 사용자는 모르게
- 가장 유명한 예시 자금 탈취공격
- 공격자의 계좌로 천만원 송금하라는 요청을 위조
- 이 요청을 하이퍼링크로 메일이나 웹사이트에 삽입
- 사용자가 이 하이퍼링크를 클릭하면 자기도 모르게 사용자는 공격자에게 천만원 송금 요청함
- 서버는 해당 요청을 정상이라 판단하고 공격자에게 천만원 송금 진행
- 이 공격들은 전부 브라우저를 속여서 HTTP요청을 표적 사이트로 보내도록 합니다.
예방법
- 사용하지 않은 웹 어필리케이션 로그아웃
- 로그인 정보 안전하게 보관
- 브라우저 비밀번호 저장하지 않기
- 여러 웹사이트 동시 사용하지 않기
- 교차 출처 리소스 공유(CORS)
- 이럴때 CORS 개념이 사용된다.
- SOP(동일 출처 정책)으로 동일한 출처로부터의 요청만 허용하도록 하는것
- 이런 구현으로 웹페이지가 다른 출처와 상호작용하는 기능을 제한 할 수 있다.
XSS와 CSRF의 차이 및 정리
- 둘은 사용자의 브라우저를 대상으로 한다는 공통점이 존재
- 차이점
- CSRF
- 사용자의 인증된 세션을 악용하는 공격
- 서버가 인증된 사용자를 신뢰하는 부분을 이용
- 서버에서 스크립트가 실행
- 요청을 위조하여 사용자 몰래 특정 행위를 수행하는 것을 목적
- XSS
- 인증된 세션이 없어도 공격이 진행
- 특정 사이트를 신뢰하는 부분을 이용
- 사용자가 스크립트를 실행
- pc에서 스크립트를 실행해 사용자의 정보 탈취
- CSRF