Studying Security

Cookie & Session 본문

Web

Cookie & Session

J4guar 2022. 7. 16. 22:54
728x90
반응형

HTTP protocol의 특징

○ 클라이언트의 IP 주소와 User-Agent는 매번 변경될 수 있는 고유하지 않은 정보입니다.

● Connectionless

하나의 요청에 하나의 응답을 한 후 연결을 종료합니다.

특정 요청에 대한 연결은 이후의 요청과 이어지지 않고 새 요청이 있을 때 마다 항상 새로운 연결을 맺습니다.

 Stateless

통신이 끝난 후 상태 정보를 저장하지 않습니다.

이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없습니다.

Cookie

따라서 HTTP에서 상태를 유지시키기 위해 Cookie가 탄생

일반적으로 쿠키는 클라이언트의 정보 기록상태 정보를 표현하는 용도로 사용합니다.

정보 기록

웹 서비스 사용 시 종종 등장하는 팝업 창에 “다시 보지 않기”, “7일 간 표시하지 않기” 버튼이 있습니다.

웹 서버는 각 클라이언트의 팝업 옵션을 기억하기 위해 쿠키에 해당 정보를 기록하고, 쿠키를 통해 팝업 창 표시 여부를 판단합니다. 과거에는 클라이언트의 정보를 저장하기 위해 쿠키가 종종 사용됐습니다.

쿠키는 서버와 통신할 때마다 전송되기 때문에 쿠키가 필요 없는 요청을 보낼 때 리소스 낭비가 발생할 수 있습니다.

최근에는 이러한 단점을 보완하기 위해 Modern Storage APIs를 통해 데이터를 저장하는 방식을 권장하고 있습니다.

상태 정보

많은 웹 사이트에서는 회원 가입과 로그인을 통해 개개인에게 맞춤형 서비스를 제공합니다.

웹 서버에서는 수많은 클라이언트의 로그인 상태와 이용자를 구별해야 하는데, 이때 클라이언트를 식별할 수 있는 값을 쿠키에 저장해 사용합니다.

 

쿠키는 클라이언트의 브라우저에 저장되고 요청에 포함되는 정보이기 때문에 악의적인 클라이언트는 쿠키 정보를 변조해 서버에 요청을 보낼 수 있습니다. 만약 서버가 별다른 검증 없이 쿠키를 통해 이용자의 인증 정보를 식별한다면 공격자가 타 이용자를 사칭해 정보를 탈취할 수 있습니다.

 

서버
HTTP 응답 중 헤더에 쿠키 설정 헤더 (Set-Cookie)를 추가하면 클라이언트의 브라우저가 쿠키를 설정합니다.

HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: name=test;
Set-Cookie: age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;
...

클라이언트
자바스크립트를 사용해 쿠키를 설정합니다.

document.cookie = "name=test;"
document.cookie = "age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;"

 

크롬 Console을 활용하는 법

개발자 도구에 존재하는 Console 탭을 누릅니다. document.cookie를 입력하면 쿠키 정보를 확인할 수 있습니다.

쿠키 옵션(HttpOnly)에 따라 자바스크립트에서 쿠키 확인이 불가능 할 수 있습니다.

크롬 Application을 활용하는 법

개발자 도구의 Application 탭을 누릅니다. 좌측에 나열된 목록에서 Cookies를 펼치면 Origin 목록을 확인할 수 있습니다. Origin을 누르면 설정 된 쿠키 정보를 확인 / 수정할 수 있습니다.

 

Session

쿠키에 인증 상태를 저장하지만 클라이언트가 인증 정보를 변조할 수 없게 하기 위해 세션(Session)을 사용합니다.

세션은 인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키(유추할 수 없는 랜덤한 문자열(Session ID))를 만들어 클라이언트에 전달하는 방식으로 작동합니다.

브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP 요청을 보낼 때 사용합니다.

서버는 요청에 포함된 키에 해당하는 데이터를 가져와 인증 상태를 확인합니다.

 

세션 하이재킹 (Session Hijacking)

쿠키에는 세션 정보가 저장되어 있고 서버는 이를 통해 이용자 식별하고 인증을 처리합니다.

공격자가 이용자의 쿠키를 훔칠 수 있으면 세션에 해당하는 이용자의 인증 상태를 훔칠 수 있는데 이를 세션 하이재킹이라 합니다.

 

※ 쿠키는 데이터 자체를 이용자가 저장하며, 세션은 서버가 저장한다는 핵심적인 차이가 있습니다.

 

Reference

반응형

'Web' 카테고리의 다른 글

SQL Injection: DBMS  (0) 2022.07.18
Cross Site Request Forgery(CSRF)  (0) 2022.07.18
Same Origin Policy(SOP)  (0) 2022.07.17
Cross Site Script(XSS)  (0) 2022.07.15
Comments