본문 바로가기

해킹/웹해킹

웹해킹 - SOP와 CSRF

SOP

SOP는 Same Origin Policy라고 하여, 동일 출처 정책이라고한다.

이건 어떤 사이트에서 또 다른 사이트의 리소스를 함부로 가져올 수 없도록 하는 것이다. SOP를 이해하기 이전에 그러면 Same Origin은 무엇일까?

Same Origin을 판별하기 위해서는 scheme, port, host를 비교해봐야 한다. 예를들어, https://www.naver.com 이라는 주소가 있다고 할 때, shceme은 프로토콜인 https가 되고, port는 https 포트번호인 443번, host는 www가 된다.

그러므로, 예를 들어, 아래의 여러 개의 URI가 있다고 할 때,

http://xyz.example.com/hello.php  

http://xyz.example.com/index/pwn

http://www.example.com/hello.php 

https://xyz.example.com/hello.php

http://xyz.example.com:1010/hello.php  

첫번째 URI와 같은 오리진을 가진 URI는 두 번째이고, 그 외의 URI들은 오리진이 다르다. 3~5번째까지 차례대로, host, scheme, port가 다르므로, 동일 출처라고 볼 수 없는 것이다.

위와 같이, 현재 오리진은 tistory지만, 구글링한 사진을 로딩해올 수 있다. 이거는 어떻게 된 일인가??

사실 이에 대해서는 궁금증이 정말 많았고, 내가 자세히 알았다고 확신할 수는 없지만,

이런 SOP가 적용되는 것은 보통 javascript의 fetch나 xml을 통해 리소스를 읽어올때 정의되는 것을 확인할 수 있었다. 몰론 이때만 적용된다는 이야기가 아니다. 그 기준이 정해져있거나 서버에 따라 다른거 같은데, 

developer.mozilla.org/ko/docs/Web/Security/Same-origin_policy

위의 링크를 참조해보길 바란다. 뭔가 난 이해하긴 어렵지만, img 태그로 읽어오는 사진은 보통 허용이 된다는 것 같다.

CSRF

CSRF는 Cross Site Request Forgery의 줄임말이다.

이는 사용자가 의도하지 않게, 서비스에 대한 request를 보내게 하는 것이다. 예를 들어, 사용자가 원치 않는 게시물을 sns에 업로드하거나, 원하지 않는 송금을 하게 만들 수 있다.

보통 사용자의 브라우저에, 세션 토큰이 쿠키의 형태로 저장되어 있는 경우가 있는데, 이 토큰을 사용하여 사용자가 해커의 피싱사이트에 잘못 접속하거나 XSS등의 이벤트를 통해서 악성 스크립트가 서비스를 요청하면, 브라우저는 해당 사이트에 쿠키들을 가지고 접속을 시도하여, 서비스를 동작하게 할 수 있는 것이다.

이런 CSRF를 막기 위한 방법으로는 몇 가지가 있는데, 

첫 번째로는, 사용자 인증을 위해 쿠키를 사용하지 않는 것이다.

두 번째로는, SOP로 보호될 수 있는 토큰을 따로 생성하여 인증을 진행하거나, CAPTCHA, 실제 사용자만이 알고 있는 정보를 입력하기.

등으로 예방을 할 수 있다고 한다.

그러면 SOP로는 충분히 CSRF를 막을 수 없는것인가?

그렇다고 한다. 왜냐하면 위에 알아봤듯이, SOP는 허용되는 것도 있고, 제한한 것도 다르기 때문에, CSRF를 모두 막기에는 한계가 있어서 위에 설명한 몇 가지 방법을 통해서 예방을 해야 한다고 한다.

 

'해킹 > 웹해킹' 카테고리의 다른 글

JAVA SCRIPT - Window 객체  (0) 2021.03.28
[HACKCTF] - 가위바위보  (0) 2021.03.21
[HACKCTF] Home  (0) 2021.03.21
[웹해킹] HACKCTF - Input Check  (0) 2021.03.14
[웹해킹] HACKCTF - TIME WriteUp  (0) 2021.03.14