🔮
CSRF(Cross-Site Request Forgery)
January 31, 2022
CSRF(사이트 간 요청 위조(Cross-Site Request Forgery)?
웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법이다. 2008년에 발생한 옥션의 개인정보 유출 사건에서도 관리자 계정을 탈취하는 데 이 방법이 사용되었다. 공격의 난이도가 높지 않아 흔히 사용된다.
-나무위키-
사례
- 2006 년 Netflix 웹사이트에는 CSRF에 대한 수많은 취약점이 있었습니다. 이 취약점으로 인해 공격자는 피해자의 대여 대기열에 DVD를 추가하거나, 계정의 배송 주소를 변경하거나, 계정을 완전히 손상시키기 위해 피해자의 로그인 자격 증명을 변경하는 등의 작업을 수행할 수 있었습니다.
- ING Direct 의 온라인 뱅킹 웹 애플리케이션은 불법 자금 이체를 허용하는 CSRF 공격에 취약했습니다.
- 인기 동영상 웹사이트 YouTube 도 2008년에 CSRF에 취약했으며 이로 인해 모든 공격자가 모든 사용자의 거의 모든 작업을 수행할 수 있었습니다.
- McAfee Secure는 CSRF에도 취약했으며 공격자가 회사 시스템을 변경할 수 있었습니다. 이것은 최신 버전에서 수정되었습니다.
-위키피디아-
공격
공격을 위해 애플리케이션을 분석해서 사용자 모르게 요청 URL을 심어 놓습니다.
예를들면, 해당 사이트에 게시물을 작성하는 요청을 숨겨 놓을 수 있습니다.
GET http://blabla.com/new/content?content=blabla content
이렇게 되면 해당 유저가 로그인이 되어있다면, 이메일을 클릭하거나 하이퍼 링크를 통해 자신도 모르게 해당 사이트의 기능을 호출 될 수 있습니다.
POST
요청 같은경우 사용자가 버튼을 클릭하도록 속여서 공격할수도 있습니다.
<body onload="document.forms[0].submit()">
<form action="http://blabla.com/new/content" method="POST">
<input type="hidden" name="content" value="blabla content"/>
<input type="submit" value="이거 클릭하면 이벤트 당첨"/>
</form>
</body>
이런식으로도 공격을 할수도 있습니다.
예방
- Security Token 사용
- Referer 확인
- Referer는 HTTP 헤더에 있는 정보로 해당 요청이 요청된 페이지의 정보를 가지고 있는데 해당 정보는 Paros나 Zap, fiddler같은 프로그램으로 조작이 가능하기 때문에 권장되지 않는다.
- GET/POST 등을 구분
- img 태그 등을 이용할 경우 GET 요청으로 들어오게 될 것이고, 반면 흔히 하듯 form을 이용해 값을 받을 경우 POST를 이용하게 되는 경우가 많기 때문이다.