- 네트워크에서는 사실 요청과 응답 사이에 두 시스템이 연결이 되어 있다는 것을 증명할 어떤 장치가 있어야 연결이 유지되었다고 할 수 있습니다.
만약 연결을 위한 정보가 없다면
, 다음과 같은 문제가 발생하게 됩니다.
-
만약 연결 정보가 없다면, 통신의 연속성이 없습니다.
- 연결 정보는 연결이 되어 있고, 연결한 사용자가 누구인지에 대한 정보가 들어있습니다.
- 이러한 정보가 없다면, 통신하고 있는 주체가 누구인지, 언제부터 통신했는지 알 수 없습니다.
- 연결 정보가 없다면, 현재 인터넷에서 우리가 사용하는 것과 같은
연속적인 통신이 어렵
습니다.
-
만약 연결을 수시로 수행한다면, 서버에 부담이 발생하게 됩니다.
- 연결이 연속적이지 않다고 하여, 계속 다시 연결을 시도한다면, 서버에 불필요한 연산작업이 늘어나게 됩니다.
- 이는 서버의 성능 저하로 연결되며, 통신 장애로 이어질 수 있습니다.
- 쿠키(Cookie)란 HTTP 프로토콜을 사용하는 인터넷 사용자가 어떤 웹사이트를 방문할 경우, 사용자와 서버 사이의 연결을 확인하기 위한 정보입니다. 쿠키는 사용자 컴퓨터 내부에 저장되며, 이 정보를 통해 서버는 사용자가 누구인지 특정할 수 있습니다.
- 쿠키는 특정한 정보일 뿐, 프로그램이 아닙니다. 따라서 쿠키는 컴퓨터 내에서 프로그램처럼 실행될 수 없으며, 바이러스를 옮길 수도, 악성코드를 설치할 수도 없습니다.
-
사용자(Client)에 쿠키가 저장되는 과정을 설명하면 아래와 같습니다.
- 사용자가 서버에 연결 요청을 보냅니다.
- 서버는 이때 쿠키(Cookie)를 생성합니다.
- 그리고 쿠키와 함께 연결 응답 정보를 전송 합니다.
- 사용자는 다음에 연결을 수행할 때 쿠키와 함께 데이터를 요청합니다.
- 서버는 이때 쿠키를 확인하고 사용자가 누구인지 확인한 후 그에 따른 응답을 하게 됩니다.
- 쿠키의 취약점을 이용하는 방법은 어렵지 않습니다. 쿠키는 사용자 정보에 남기도 하며,
암호화되지 않은 통신에서 노출될 가능성
이 있기 때문입니다.
- 만약 정상적인 사용자의 쿠키 정보를 악의정인 사용자가 탈취할 경우의 시나리오는 그림과 같습니다.
-
만약 사용자의 쿠키가 탈취된다면 시나리오의 순서는 다음과 같습니다.
- 사용자(Client) A ~ C가 서버와 통신을 하고, 이로인해 서버에는 A,B,C의 쿠키 정보가 저장되어 있습니다.
- 쿠키에는 사용자의 민감한 정보가 들어 있습니다.
- 이러한 쿠키의 구조를 알았을 경우, 사용자는 사용자의 다른 정보를 추측하여 자신의 쿠키 정보를 변조할 수 있습니다.
- 공격을 수행할(요청을 보낼) 때, 변경된 쿠키를 입력하여 패킷을 전송합니다.
- 패킷을 전송받은 서버는, 악의적인 사용자를 정상적인 사용자일 것으로 판단하여, 요청한 정보를 응답합니다.
- 위와 같이
사용자가 악의적인 목적
으로 쿠키값을 변조한다면 다른 사용자로 둔갑하여 정보를 요청할 수 있습니다. 때문에 쿠키값을 통해서 민감한 정보나 사용자 구별 정보를 삽입해두면, 보다 쉽게 공격이 가능해집니다.
- 즉, 연결 지속성을 가지고 있는 정보를
사용자의 쿠키 값에 오롯이 의지하여 통신을 수행할 경우, 공격에 쉽게 노출될 가능성이 매우 높습니다.
이를 보완하기 위한 개념으로 Session이라는 개념이 생겨났습니다.