CSRF 공격이란?
전회사에서 보안취약점검사 메일을 받았었다. csrf 공격에 취약하다는 내용이었는데,
그때 정확한 개념을 모르고 처리한것 같아 다시 정리중.
일단 해커의 공격의 종류중 대표적인 세가지가 있다.
1. XSS(Cross-Site-Scripting) attack
2. SQL-Injection attack
3. Buffer-Overflow attack
1. XSS attack
어플리케이션에서 다양한 기능을 위해 Server에서 수행하는 작업 말고 Browser에서 스크립트를 실행하는 기능이 있다.
XSS attack은 Client Side에서 동작하는 Client-Side-Script(ex.자바스크립트) 환경에서 스크립트 기능을 악용하여 이루어진다.
해커가 Browser에 악성 스크립트가 실행되도록 하는 기법이다.
웹서버의 어플리케이션이 방문자의 input을 받아 저장하는 기능이 있다고 가정한다.
만약 해커가 미리 <script></script> 태그 사이에 악성 스크립트를 끼워넣었다면
방문자가 input에 내용을 넣고 다음 프로세스를 진행했을때 해커가 끼워넣은 악성 스크립트가 방문자 PC에서 실행된다.
2. SQL-Injection attack
로그인(login) 인증을 우회하기 위한 기법으로 사용되며, 웹 어플리케이션을 대상으로 하는 공격
3. Buffer-Overflow attack
Buffer에 overflow를 발생시켜 attack(공격)을 수행하는 것을 의미합니다. 할당된 양을 가진 Buffer(저장소)에 할당된 양보다 많은 내용물을 부으면 넘치게 된다. 넘치면서 발생되는 side effect를 활용해서 공격하는 것.
여기서 csrf는 XSS attack과 연관되어 언급되는 또 다른 공격입니다. (XSS attack을 수행하여 CSRF attack를 할 수 있음)
CSRF(Cross-Site Request Forgery) attack
사용자가 사용하고 있는 웹브라우저를 통해서 사용자의 권한을 획득한다음 HTTP request를 웹서버에 보내는 공격.
공격에 성공하려면 해커는 사용자의 웹브라우저가 조작된 HTTP request를 보내도록 유도해야 합니다(Social engineering 기법을 사용한 이메일을 보내어 첨부된 URL주소 또는 하이퍼링크를 클릭하도록 유도)
CSRF과 XSS 공통점
Site를 Cross하는 방식으로 공격이 이루어짐.
차이점
XSS은 사용자가 브라우저에서 사용자 PC에서 악성 스크립트가 실행되는 것이고,
CSRF는 사용자가 웹 어플리케이션에 접속한 상태에서 사용자가 원하지 않는 action을 보내어 웹 어플리케이션상에서 수행되어지게 하는 것입니다.
요약하자면 동작방식은 유사하나 최종 실행방식 및 수행 code가 다릅니다.
XSS > 브라우저에서 스크립트가 실행
CSRF > 웹서버에서 HTTP request가 보내져서 웹서버에서 실행
CSRF 토큰 발급으로 공격 대비하기
위조된 페이지에서 서버에 요청을 보내는 행위를 걸러내기 위해서 CSRF Token이라는 것을 사용해, 서버에 요청을 올린 페이지가
실제 서버에서 발행한 뷰 페이지가 확인하는 것이다.
1. 서버에서 뷰 페이지를 발행할 때 랜덤으로 생성된 Token을 같이 준 뒤 사용자 세션에 저장해둔다.
2. 사용자가 서버에 작업을 요청할 때 페이지에 Hidden으로 숨어있는 Token 값이 같이 서버로 전송된다.
3. 서버에서는 Token 값이 세션에 저장된 값과 일치하는지 확인하여 해당 요청이 위조된게 아니라는 것을 확인한다.
4. 일치 여부를 확인한 Token은 바로 폐기하고 새로운 뷰 페이지를 발행할 때마다 새로 생성한다.
참고블로그