이번 시간에는 웹 사이트의 보안 측면에서 자주 언급되는 2가지 공격 방법인 XSS, CSRF에 대해 알아보겠습니다.
XSS(Cross-Site Scripting) 이란 웹 애플리케이션의 취약점 중 하나로 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 악의적으로 스크립트를 삽입하여 공격하는 기법이다.
이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타나며, 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 된다. 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등 민감한 정보를 탈취한다.
1) 해커가 XSS 공격에 취약한 웹 사이트에 악의적인 스크립트를 삽입하고
2) 해당 사이트를 열람한 사용자는 악성 스크립트로 인해 본인의 쿠키 등의 정보가 해커에게 전송된다
3) 세션ID가 포함된 쿠키를 탈취한 해커는 탈취한 사용자의 계정으로 로그인한다.
지속적으로 피해를 입히는 유형이다. XSS 취약점이 존재하는 웹 애플리케이션에 악성 스크립트를 삽입하여 열람한 사용자의 쿠키를 탈취하거나 리다이렉트 시키는 공격을 한다. 이때 삽입된 스크립트를 DB에 저장하고 지속적으로 공격을 한다.
사용자에게 입력 받은 값을 서버에서 되돌려 주는 곳에서 발생한다. (예를 들어, 사용자에게 입력 받은 검색어를 그대로 보여주거나, 사용자가 입력한 값을 에러 메시지에 포함하여 보여주는 곳에 악성 스크립트를 삽입) 공격자는 악성 스크립트와 함께 URL을 사용하여 사용자에게 누르도록 유도하고, 누른 사용자는 악성 스크립트가 실행되어 공격을 당한다.
악성 스크립트가 포함된 URL을 사용자가 요청하게 되어 브라우저를 해석하는 단계에 발생하는 공격이다. 악성 스크립트로 인해 클라이언트 측 코드가 원래 의도와 다르게 실행된다. 이는 다른 XSS 공격과 달리 서버 측에서 탐지하기가 어렵다.
사용자가 입력한 값에 대한 검증과 이를 그대로 출력할 때의 검증이 필요하다. XSS Cheat Sheet 에 대한 필터 목록을 만들어 모든 Cheat Sheet에 대한 대응이 가능하도록 한다. XSS에 대한 필터링을 적용한 뒤 직접 테스트하는 것도 좋다.
Anti XSS 라이브러리를 제공해주는 회사들이 많다. 이 라이브러리는 서버 단에 추가하고, 사용자들은 각자 브라우저에서 악성 스크립트가 실행되지 않도록 확장 앱을 설치하여 방어할 수 있다.
웹 방화벽은 웹 공격에 특화되어있기 때문에 XSS 공격을 방어하기 위함만이 아니라 각종 Injection 공격을 효과적으로 방어할 수 있다.
CSRF 공격(Cross Site Request Forgery)은 웹 애플리케이션의 취약점 중 하나로, 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹 사이트에 요청하게 만드는 공격이다. 예를 들어, 희생자의 SNS 계정으로 광고성 글을 올리는 것이 가능해진다.
CSRF는 해커가 사용자의 컴퓨터를 감염시키거나 서버를 해킹하여 공격하는 것이 아니다. 이 공격은 다음 조건을 만족해야 한다.
보통 자동 로그인을 해 놓고 이런 피싱 사이트에 접속하게 되어 피해를 입는 경우가 많다. 또한 해커가 XSS 공격을 성공한 사이트라면, 피싱 사이트가 아니더라도 CSRF 공격이 수행될 수 있다.
백엔드 단에서 Refferer 검증을 통해 승인된 도메인으로 요청시에만 처리하도록 한다.
사용자의 세션에 임의의 난수 값을 저장하고, 사용자의 요청 시 해당 값을 포함하여 전송시킨다. 서버 측에서는 요청을 받을 때 세션에 저장된 토큰 값과 요청 파러미트로 전달받는 토큰 값이 일치하는지 검증한다. 하지만, 같은 도메인 내에 XSS에 취약점이 있다면 CSRF 공격에 취약해진다.
Reference
https://noirstar.tistory.com/266
https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95