개발일지/TIL

[TIL] 210729 오늘 공부는 http only cookie

햄❤️ 2021. 7. 31. 19:22
반응형

이런 질문을 받았다. 로그인 할 때, 유저의 id와 비밀번호를 서버에 전달 할 때, 비밀번호에 어떤 보안 처리를 하였는가? 

생각해보니 처리 하지 않았다. 해커가 마음먹고 공격하면 유저의 비밀번호를 획득하기 쉽겠다는 생각을 했다. 누가 그런 사이트를 이용하겠는가? 🙄 보안에 대한 지식과 개념이 부족하다고 생각했다. secure cookie, http only cookies 등이 있는 것 같지만 오늘은 http only cookies에 대해 공부하려고 한다.

 

쿠키

나는 JWT 방식을 이용하여 서버로부터 JWT Token을 받아 쿠키에 저장했다. 쿠키는 서버에서도 생성이 가능하고, 나 처럼 클라이언트에서도 생성할 수 있다. 일단 쿠키가 한번 생성되면 브라우저는 쿠키 정보를 기억하게 된다. 그리고 이후의 모든 요청에 쿠키를 포함하여 서버로 전달한다. 그러면 서버는 브라우저의 요청에 포함된 쿠키를 읽을수 도 있다.

수많은 사이트들이 나처럼 개인 정보를 쿠키에 저장하고 있다. 해커들은 이 쿠키를 탈취하고 싶다.  그 중 가장 대중적인 공격은 Session hijacking(하이재킹) 공격이다. 

 

*XSS(Cross Site Scripting)를 이용한 쿠키 탈취 및 세션 하이재킹이란?

 - 공격자가 게시판에 악의적인 글을 올린다. 누군가 그 글을 읽으면 그 사람의 쿠키값이 공격자의 웹서버로 전송되고, 공격자는 그 쿠키값을 통해 해당인의 세션으로 접속할 수 있게 된다. 

 

HTTP는 stateless 프로토콜이라고 한다. 기본적으로 상태 정보를 기억하지 못해서, 서버는 요청자가 같은 사람인지, 누군지 식별할 수 없다. 이러한 문제를 해결하고자 서버는 식별정보를 쿠키에 저장하고, 그 정보를 통해 사용자를 구별한다. 

즉 해커가 다른 사용자의 쿠키를 탈취하여, 쿠키의 식별정보를 바탕으로 사용자로 위장하게 된다면 서버는 해커인지 모르고 권한을 내어줄 수 있는것이다. 

 

HTTP Only Cookies

해커들이 쿠키를 가로채려는 대표적인 공격중 하나는 XSS(Cross Site Scripting)이다. 이를 막기위해 브라우저에서 쿠키에 접근 할 수 없도록 제한해야한다. 이 역할을 하는 것이 HTTP Only Cookies이다. 

해커가 악의적인 자바스크립트 코드를 페이지에 삽입하고, 사용자가 그 페이지에 접속하기를 기다리는 방식의 공격을 예방할 때 이 옵션을 사용해야한다. 

 

how

간단한 접미사를 쿠키 생성 코드에 추가함으로써 활성화 할 수 있다.

Set-Cookie: 쿠키명=쿠키값; path=/; HttpOnly

가장 마지막에 HttpOnly 라는 접미사를 추가함으로써 Http Only Cookie가 활성화 되고, 위에서 말한 XSS와 같은 공격이 차단된다. Http Only Cookie을 설정하면 브라우저에서 해당 쿠키로 접근할 수 없게 되지만, 쿠키에 포함된 정보의 대부분이 브라우저에서 접근할 필요가 없으므로 기본적으로 적용하는 것이 좋다. 

httpOnly 옵션이 설정된 쿠키는 document.cookie로 쿠키 정보를 읽을 수 없기 때문에 쿠키를 보호할 수 있다. 

 

 


 

참고 사이트

https://nsinc.tistory.com/121

728x90
반응형