Network Cookie란 무엇인가?

네트워크의 연결성이란?

  • 네트워크에서는 사실 요청과 응답 사이에 두 시스템이 연결이 되어 있다는 것을 증명할 어떤 장치가 있어야 연결이 유지되었다고 할 수 있습니다. 만약 연결을 위한 정보가 없다면, 다음과 같은 문제가 발생하게 됩니다.

  • 만약 연결 정보가 없다면, 통신의 연속성이 없습니다.

    • 연결 정보는 연결이 되어 있고, 연결한 사용자가 누구인지에 대한 정보가 들어있습니다.
    • 이러한 정보가 없다면, 통신하고 있는 주체가 누구인지, 언제부터 통신했는지 알 수 없습니다.
    • 연결 정보가 없다면, 현재 인터넷에서 우리가 사용하는 것과 같은 연속적인 통신이 어렵습니다.

  • 만약 연결을 수시로 수행한다면, 서버에 부담이 발생하게 됩니다.

    • 연결이 연속적이지 않다고 하여, 계속 다시 연결을 시도한다면, 서버에 불필요한 연산작업이 늘어나게 됩니다.
    • 이는 서버의 성능 저하로 연결되며, 통신 장애로 이어질 수 있습니다.

Cookie란 사용자 영역에 남아 있는 연결 정보

  • 쿠키(Cookie)란 HTTP 프로토콜을 사용하는 인터넷 사용자가 어떤 웹사이트를 방문할 경우, 사용자와 서버 사이의 연결을 확인하기 위한 정보입니다. 쿠키는 사용자 컴퓨터 내부에 저장되며, 이 정보를 통해 서버는 사용자가 누구인지 특정할 수 있습니다.
  • 쿠키는 특정한 정보일 뿐, 프로그램이 아닙니다. 따라서 쿠키는 컴퓨터 내에서 프로그램처럼 실행될 수 없으며, 바이러스를 옮길 수도, 악성코드를 설치할 수도 없습니다.

  • 사용자(Client)에 쿠키가 저장되는 과정을 설명하면 아래와 같습니다.

    1.  사용자가 서버에 연결 요청을 보냅니다.
    2.  서버는 이때 쿠키(Cookie)를 생성합니다.
    3.  그리고 쿠키와 함께 연결 응답 정보를 전송 합니다.
    4.  사용자는 다음에 연결을 수행할 때 쿠키와 함께 데이터를 요청합니다.
    5.  서버는 이때 쿠키를 확인하고 사용자가 누구인지 확인한 후 그에 따른 응답을 하게 됩니다.

Cookie의 취약성

  • 쿠키의 취약점을 이용하는 방법은 어렵지 않습니다. 쿠키는 사용자 정보에 남기도 하며, 암호화되지 않은 통신에서 노출될 가능성이 있기 때문입니다.
  • 만약 정상적인 사용자의 쿠키 정보를 악의정인 사용자가 탈취할 경우의 시나리오는 그림과 같습니다.

  • 만약 사용자의 쿠키가 탈취된다면 시나리오의 순서는 다음과 같습니다.

    1.  사용자(Client) A ~ C가 서버와 통신을 하고, 이로인해 서버에는 A,B,C의 쿠키 정보가 저장되어 있습니다.
    2.  쿠키에는 사용자의 민감한 정보가 들어 있습니다.
    3.  이러한 쿠키의 구조를 알았을 경우, 사용자는 사용자의 다른 정보를 추측하여 자신의 쿠키 정보를 변조할 수 있습니다.
    4.  공격을 수행할(요청을 보낼) 때, 변경된 쿠키를 입력하여 패킷을 전송합니다.
    5.  패킷을 전송받은 서버는, 악의적인 사용자를 정상적인 사용자일 것으로 판단하여, 요청한 정보를 응답합니다.

  • 위와 같이 사용자가 악의적인 목적으로 쿠키값을 변조한다면 다른 사용자로 둔갑하여 정보를 요청할 수 있습니다. 때문에 쿠키값을 통해서 민감한 정보나 사용자 구별 정보를 삽입해두면, 보다 쉽게 공격이 가능해집니다.
  • 즉, 연결 지속성을 가지고 있는 정보를 사용자의 쿠키 값에 오롯이 의지하여 통신을 수행할 경우, 공격에 쉽게 노출될 가능성이 매우 높습니다. 이를 보완하기 위한 개념으로 Session이라는 개념이 생겨났습니다.

학습 키워드

  • HTTP Cookie
  • 연결을 위한 정보