CSRF(Cross Site Request Forgery)
- 웹 애플리케이션 취약점 중 하나로, 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(modify, delete, register 등)를 특정한 웹 사이트에 요청하도록 만드는 공격 기법
- 해커들이 많이 이용하는 것으로, 사용자의 권한을 도용해 중요한 기능을 실행하도록 한다.
- EX) 해커가 사용자의 SNS 계정으로 광고 성 글을 올린다.
- CSRF는 해커가 사용자 컴퓨터를 감염시키거나 서버를 해킹해서 공격하는 것이 아니다.
- 사용자가 해커가 만든 피싱 사이트에 접속한 경우 공격
- 위조 요청을 전송하는 서비스에 사용자가 로그인을 한 상황에 공격
- 해커가 XXS 공격을 성공시킨 사이트라면, 피싱 사이트가 아니더라도 CSRF 공격이 가능하다.
CSRF 대응 기법
- 리퍼러(Referer) 검증
- 백엔드 단에서 요청의 referer를 확인하여 도메인이 일치하는 지 검증하는 방법
- Security Token 사용
- 사용자의 session에 임의의 난수 값을 저장하고, 사용자의 요청 시 해당 값을 포함하여 전송
- 백엔드 단에서는 요청을 받을 때 session에 저장된 토큰 값과 요청 파라미터로 전달 받는 토큰 값이 일치하는 지 검증 과정을 거치는 방법
- 하지만 결국 같은 도메인 내에 XXS 취약점이 있다면 CSRF 공격의 취약해진다.
XSS(Cross Site Scription)
- CSRF와 같이 웹 애플리케이션 취약점 중 하나로, 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법
- 악의적으로 스크립트를 삽입하여 이를 열람한 사용자의 쿠키가 해커에게 전송되며, 이 탈취한 쿠키를 통해 세션 하이재킹(Session Hijacking) 공격을 한다.
- 해커는 session ID를 가진 쿠키로 사용자의 계정에 로그인이 가능
- 공격 종류
- 지속성(Persistent) : 지속적으로 피해를 입히는 유형, XXS 취약점이 존재하는 웹 애플리케이션에 악성 스크립트를 삽입하여 열람한 사용자의 쿠키를 탈취하거나 redirection 시키는 공격을 한다. 이 때 삽입된 스크립트를 데이터베이스에 저장 시켜 지속적으로 공격을 하기 때문에 Persistent XSS라고 불린다.
- 반사형(Reflected) : 사용자에게 입력 받은 값을 서버에서 되돌려 줄 때 발생, 공격자는 악의 스크립트와 함께 URL을 누르도록 유도, 누른 사용자는 스크립트가 실행되어 공격
- DOM(Document Object Model) 기반 : 악성 스크립트가 포함된 URL을 사용자가 요청하게 되면서 브라우저를 해석하는 단계에서 발생하는 공격, 악성 스크립트에 의해서 원래 의도와 다르게 실행, 서버 측에서 탐지가 어렵다.
XSS 대응 기법
- 입출력 값 검증
- 사용자가 입력한 값에 대한 검증과 사용자가 입력한 값을 그대로 출력할 때 검증, XXS Cheat Sheet에 대한 필터 목록을 만들어 모든 Cheat Sheet에 대한 대응을 가능하도록 사전에 대비,
- XXS 방어 라이브러리, 브라우저 확장 앱 사용
- Anti XSS 라이브러리를 사용, 이 라이브러리는 서버 단에서 추가하며, 사용자들은 각자 브라우저에서 악성 스크립트가 실행되지 않도록 확장 앱을 설치하여 방어할 수 있다.
- 웹 방화벽 사용
- 웹 방화벽은 웹 공격에 특화되어있기 때문에 다양한 Injection 공격을 방어할 수 있다.