CSRF의 공격 방안
CSRF라는 것이 서버에 임의의 요청을 보내는 것이기 때문에 서버로 데이터로 보내는 방법인 GET, POST 방식을 사용하게 된다. 그렇기 때문에 공격 방안도 어떠한 방식으로 데이터를 보내는가에 따라서 달라지게 된다.
(1) GET 방식
GET방식이라는 것은 URL을 통해 데이터 전달이 가능하다. 이 말은 즉 URL을 변형하는 것만으로도 변조가 가능하다는 것을 의미한다.
대표적인 예시로 옥션 해킹 사건이 있겠다.
"관리자리님 급합니다! 메일 확인 부탁합니다." 라는 이메일을 작성하고 안에 아래와 같은 코드를 작성한 것이다.
<img src="http://auction.com/changeUserAcoount?id=admin&password=admin" width="0" height="0">
위 코드는 src라는 경로로 이미지 파일을 불러오는 것인데 저 주소를 접속한 순간 id와 password가 admin으로 모두 바뀌게 되어 외부 침입자가 계정을 탈취하는 것이 가능하다. 이와 같이 get 방식의 경우 url을 변경하여 공격을 하는 방법이다.
물론 위 코드는 script 코드이기때문에 XSS를 같이 이용한 기법이다. CSRF만을 사용한다면 이메일에 "아래 주소로 긴급하게 들어와주세요" 라는 글을 작성하고 그 링크를 클릭해야만 작동이 가능하다. 하지만 이러한 기법은 의심의 여지가 크기 때문에 이렇게 결합하여 사용을 많이한다.
(2) POST 방식
POST 방식은 단독으로 사용이 불가능하다. 기본적인 POST방식의 경우 form의 형태로 전달이 되기 때문에 스크립트 형태로 전달되어야 할 필요성이 있다. 그렇기 때문에 XSS와 같이 사용하면 CSRF의 날개를 달아준 것과 같은 역할을 하게 되는 것이다.
<form method="POST" action="http://hack.com/study/mypage_change_ok.php">
<input type="hidden" name="id" value="admin">
<input type="hidden" name="password" value="admin">
</form>
<script>
document.forms[0].submit();
</script>
위의 form은 action이라는 사이트에 접속하여 post 방식으로 id=admin, password=admin 으로 바꾸는 코드를 서버에 전달한다는 의미이다. document.forms[0].submit()을 적어놓으면 자동으로 값을 전달하게 된다.
위 코드를 Stored XSS으로 게시글에 저장해 놓으면 자동으로 계정 정보를 바꾸게 되는 것이다.
CSRF 대응 방안
이제 공격 방안을 알았으니 이를 막는 방안에 대해 설명하겠다.
(1) 웹 메서드 변경 GET -> POST
생각해 보면 GET의 경우 url을 변경하는 것만으로도 데이터 변경이 가능하다. 그에 반해 POST 방식의 경우 스크립트가 필요하다. 그 말은 즉 GET 방식보다 POST 방식이 변조에 더 어렵다는 것을 나타내기 때문에 GET 방식을 POST 방식으로 바꿀 필요성이 있다.
(2) Referrer 헤더 검증
-Referrer 헤더 검증 이라는 것은 HTTP://hackyou:5001/read.php? 와 같은 어느 주소에서 요청이 오는지를 확인하는 것이다. 만약 해커가 다른 사이트에서 공격을 해온다고 하면 요청 사이트의 헤더를 확인해 미리 차단시켜 공격을 방지하는 것이다.
만약 같은 도메인내에서 XSS 취약점이 발견될 경우 우회가 가능하지만, Referrer 헤더의 조건을 엄격하게 만들 수록 우회가 어려워 진다.
물론 헤더를 없애고 보내는 아래 코드를 보내면 우회가 가능하다. 이 외에는 Referrer을 엄격하게 하면 우회가 불가능하다는 것이 특징이다.
<meta name="Referrer" content="no-Referrer">
(3) CSRF Token
CSRF Token의 경우 랜덤한 난수값을 생성하여 서버와의 응답시 난수값을 포함하여 전달하는 것이다.
이럴 경우 서버와의 응답을 하는 페이지에 접속할 때마다 새로운 CSRF Token을 발행하여 공격자가 CSRF Token을 위조하지 못하도록 하여 CSRF 공격을 막는 것이다.
(4) Captcha
Captcha란 아래 사진과 같이 사람만이 풀 수 있는 기법으로 이를 사용하여 대규모 자동화 공격을 막거나 계정을 변경할 때 아래와 같은 Captcha를 넣게된다면 자동화 공격이 어렵다.
즉 challenge / solve 라는 개념을 넣어 해커의 공격을 더 어렵게 만드는 것이다.
(5) 인증 정보 추가
우리가 보통 비밀번호를 바꾸면 이전 비밀번호를 넣어야 변경이 가능한 것이 대부분일 것이다. 이렇게 하는 이유는 기존 비밀번호는 공격자가 알아내기 어렵기 때문이다. 특정 서버 이용자를 사회공학기법을 이용한 피싱을 통해 기존 비밀번호를 얻어내야한다는 번거로움이 있고, 만약 이를 성공한다고 해도 특정 이용자의 데이터만 가로챌 수 있다. 또한 매번 새로운 정보를 입력해야하는 OTP도 이를 해결하는데 큰 도움이 될 것이다. 이 때문에 이러한 인증 정보 추가는 확실하면서 중요한 공격 방어 기법이 된다.
'Web > Web 보안' 카테고리의 다른 글
[ Burp suit] File upload 문제 5 풀이 마지막 (0) | 2022.06.02 |
---|---|
[File upload] 공격 기법 (0) | 2022.05.27 |
XSS, CRSF (0) | 2022.05.12 |
SQL Injection 접근 방법 (0) | 2022.04.10 |
[ 웹 해킹 ] SQL Injection (0) | 2022.04.08 |