[Web Hacking] DH Cookie & Session

KyungH·2024년 2월 22일

DH Lecture - Web Hacking

목록 보기
4/17
post-thumbnail

DH Web Hacking

서버는 수많은 클라이언트를 어떻게 관리하고 기억할까?
HTTP의 두 가지 특징 때문에 웹 서버는 클라이언트를 기억할 수 없다.

HTTP의 특징)
Connectionless: 하나의 요청에 하나의 응답을 한 후 연결을 종료하는 것을 의미.
이후의 요청은 연결되지 않으며, 요청이 있을 때 마다 항상 새로운 연결을 맺는다.

Stateless: 통신이 끝난 후 상태 정보를 저장하지 않는 것을 의미.
이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없다.

이러한 특성을 가지는 HTTP에서 상태를 유지하기 위해 쿠키가 탄생했다.
쿠키는 Key와 Value로 이뤄진 일종의 단위로, 서버가 클라이언트에게 쿠키를 발급하며,
클라이언트는 서버의 요청을 보낼 때마다 쿠키를 같이 전송한다.
서버는 이 쿠키를 확인하여 클라이언트를 구분한다.

쿠키는 정보 기록과 상태 정보를 표현하는 용도로 사용

정보 기록: "7일 간 표시하지 않기" 등 각 클라이언트의 팝업 옵션을 기억하기 위해
쿠키에 해당 정보를 기록한다.

상태 정보: 서버에서는 수많은 클라이언트의 로그인 상태와 이용자를 식별하기 위해 값을 쿠키에 저장한다.

쿠키는 클라이언트의 브라우저에 저장되고 요청에 포함되는 정보이며, 악의적인 클라이언트는 쿠키 정보를 변조해 서버에 요청을 보낼 수 있다.

📌 Session

쿠키에 인증 상태를 저장하지만 클라이언트가 인증 정보를 변조할 수 없게 하기 위해 사용, 세션은 인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키를 만들어 클라이언트에게 전달한다 (Session ID).

세션은 쿠키를 기반으로 하며, 사용자 정보 파일을 서버 측에서 관리한다.
여기에 접속 시간에 제한을 두어 정보가 유지되지 않게 설정할 수 있다.

쿠키보다 보안이 뛰어나지만, 서버 메모리를 사용하기에 동접자 수가 많은 사이트의 경우 서버에 과부하를 주게 된다.

쿠키와 세션은 동작원리가 비슷하나 차이점이 있다.

세션도 결국 쿠키를 사용하므로 둘 중 한가지만 사용한다거나 어떤게 더 좋다고는 말할 수 없다. 보안 면에서 세션이 더 우수하며, 요청 속도는 쿠키가 세션보다 더 빠르다.
(세션은 서버의 처리가 필요하기 때문)

우리가 흔히 말하는 쿠키와 세션의 차이점에는 데이터를 어디에 저장하냐에 있다. 쿠키는 서버의 자원을 전혀 사용하지 않고, 세션은 서버의 자원을 사용한다.

쿠키와 세션은 라이프타임에서도 차이를 보인다.

먼저 세션은 만료시간을 따로 정할 수는 있으나, 브라우저가 종료되면 만료시간에 상관없이 삭제된다.

쿠키는 크게 세션쿠키, 지속쿠키로 나눌 수 있다.

세션쿠키는 만료시간을 지정하지 않은 경우이며, 이는 곧 브라우저 메모리에 저장된다. 따라서 현재 세션이 끝나는 시점에 삭제된다.

지속쿠키는 만료시간을 정해둔 쿠키이며, 이는 곧 파일로 저장되므로 브라우저가 종료되어도 쿠키는 남아있다. 이후 정해둔 만료시간에 맞추어 삭제된다.

쿠키와 세션에 대해 공부하면서 헷갈리는 부분이 있었다.

결국 세션으로 데이터를 저장하더라도, 세션 ID 자체는 쿠키형태로 클라이언트에 남는데,
악의적인 사용자로부터 클라이언트가 쿠키를 빼앗기던, 세션ID를 뺴앗기던 같은 결과를 불러오지 않나?

위의 질문에 대한 답은 같은 결과를 불러오지 않는다.
세션을 일반적으로 쿠키보다 안전하다고 부르는 이유는 위에서 얘기하였던 "데이터 저장 위치"에 있다.

세션 ID가 탈취되었을 때 공격자는 해당 세션의 사용자로 가장할 수 있다. 즉, 사용자의 계정에 대한 권한을 가지는 것과 유사한 효과를 가진다.
반면에 쿠키가 탈취되었을 경우, 공격자는 탈취한 쿠키가 연관된 정보에 접근할 수 있다. 여기서 말하는 연관된 정보는 세션ID를 포함하나, 뿐만 아니라 사용자의 기본설정, 사용자가 본 콘텐츠, 장바구니 등 여러 개인정보가 포함될 수 있다.

따라서 쿠키는 더 많은 정보를 클라이언트에 저장하기 때문에 탈취되었을 경우 더 많은 정보가 유출될 수 있다.

또한, 클라이언트에게서 세션ID를 가지고왔다고 해도, 실제로 세션 데이터에 접근하려면 일단 서버로부터 인증을 받아야 하고, 이 과정에서 다양한 보안 매커니즘으로 방어할 수 있으며, 세션 ID만으로는 서버 측에 저장된 세션 데이터에 직접적으로 접근하여 확인하거나 수정할 수 없으므로 세션이 더 보안적으로 뛰어나다고 할 수 있다.

정리하자면, 일반적으로 세션은 쿠키보다 적은 정보를 포함하고있다.
현재 대부분의 사용자는 민감한 개인정보를 서버의 데이터베이스와 같은 안전한 서버저장소에 저장하며, 세션ID로는 이러한 개인정보에 접근할 수 없다. 반면에, 서버로부터 전송받은 데이터가 포함되는 쿠키는 사용자의 개인정보가 포함될 수 있다.

세션과 쿠키 모두 웹 애플리케이션에서 상태를 유지하고 사용자를 식별하는 목적이지만, 세션은 상태 및 제어정보를 관리하고, 쿠키는 클라이언트 측에 데이터를 저장하는 데 사용되므로 개인정보가 노출될 가능성이 높다.

References

DreamHack 강의: Background: Cookie & Session
세션쿠키와 지속쿠키의 차이
세션의 장점과 보안적 결함

0개의 댓글