CSRF 공격은 Cross Site Request Forgery의 약자로, 공격자가 사용자로 하여금 '서버에 요청을 하게 만들어' 공격하는 방식이고, CSRF 공격은 링크를 활용해서 공격합니다. 또한 CSRF 공격은 XSS공격과 잘 어울리는 공격으로 같이 사용되는 경우가 많습니다.
CSRF 공격에서 사용하는 링크는 어떤 링크를 사용할까요? CSRF 공격은 마이 페이지같은 화면에서 비밀번호 변경을 했을 때 서버에 요청을 합니다. 이 때 요청에 인증정보, 예를 들면 토큰같은 것이 없는 경우에 해당 요청에 대한 링크를 복사해 사용할 수 있습니다.
또한 공격방식도 Get 메소드와 Post 메소드에 따라 조금의 차이가 있습니다.
Get 메소드를 사용한 방식은 URL 자체에 파라미터가 포함되기 때문에 링크를 누르는 것만으로도 공격이 가능합니다. 물론 URL이 수상하게 생기긴 했습니다. 또한 보통 비밀번호 변경 이후에는 마이 페이지로 다시 이동하기 때문에 수상하다는 문제점도 있습니다. 이걸 해결하기 위해 XSS가 사용됩니다. 스크립트를 삽입해 버튼을 누르는 방식으로 바꾼다면? 아니면 사진을 삽입해서 사진에 src에 링크를 삽입하는 방법도 있습니다. Get에서 CSRF 공격은 이런식으로 이뤄집니다.
Post 메소드를 사용하는 경우에는 다른 점이 있습니다. URL을 보내도 파라미터가 존재하지 않기 때문에 XSS와 같이 사용해서 Form 태그를 사용해야 한다는 것입니다. Form 태그를 통해 요청할 사이트에 파라미터를 보내 요청하는 방법으로 CSRF 공격이 이뤄집니다. 이 때 input 태그에 hidden 속성을 주고, input을 DOM을 통해서 submit해 공격을 숨긴다던가, 비밀번호 변경 이후에 알림을 없애기 위해 iframe과 form태그를 연결해 iframe을 만들고, 그 안에서 공격해서 알림창이 안뜨게 한다던가 하는 방법 등 다양한 추가 방법들이 존재합니다.
CSRF 공격을 막는 방법은 CSRF Token입니다. CSRF Token은 마이 페이지에 들어갔을 때, 랜덤한 문자로 이뤄진 토큰을 생성하고, 비밀번호 변경을 하거나 할 때 보내는 파라미터와 같이 토큰을 보내도록 하는 방법입니다. 하지만 토큰이 있는 경우에 토큰을 우회하는 방법도 있습니다. 해당 방법은 추후에 포스팅하겠습니다.