Cha4SEr Security Study

[Web] - HTTP / 쿠키와 세션 본문

Web/Web_etc

[Web] - HTTP / 쿠키와 세션

Cha4SEr 2020. 7. 13. 17:04

웹해킹을 하기 위해서는 웹 상에서의 여러가지 특성에 대한 이해가 중요합니다.

 

이번시간에는 쿠키와 세션에 대해 알아보도록 하겠습니다.

 

 

 

우선 Web이 다른 시스템과의 가장 큰 차이점은 

 

접근성이 좋고 HTTP 프로토콜을 사용한다는 것 입니다. 

 

HTTP (HyperText Transfer Protocol)

 

인터넷 상에서 서버와 사용자 사이에 문서를 주고 받기 위한 통신 규약을 의미합니다.

 

사용자가 서버에 요청을 보내는 것을 HTTP Request

 

받은 요청에 대한 서버의 응답을 HTTP Response 라고 합니다.

 

 

[HTTP Request]
[HTTP Response]

 

 

HTTP Request와 Response의 각각 부분이 어떤 것을 의미하는지는 다른 포스팅에서 알아보도록 하고

이번에는 HTTP 특징에 따른 쿠키와 세션에 대해 알아보겠습니다.

 

 

우선 HTTP의 특징은 두가지가 있습니다.

 

1. Connectionless

- 비 연결성

- 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝맺는 것을 의미

- 서버에서 다수의 클라이언트와 연결을 유지한다면 많은 리소스가 발생하게 되며,

  이를 위한 리소스를 줄이면 더 많은 연결을 유지할 수 있기 때문에 이와같은 특징을 가짐

 

 

2. Stateless

- 무상태

- 네트워크 연결을 끝맺을 때 상태를 유지하지 않는 것을 의미

 

 

이중 Stateless 속성 때문에 HTTP 요청이 있을 때마다 새로운 연결을 해야하기 때문에 사용자 인증을

계속 해아 한다는 단점이 있습니다.

 

이와같은 특성 때문에 나온 개념이 바로 "쿠키(Cookie)" 입니다.

 

쿠키는 웹 브라우저에 저장하며 인증 상태를 포함할 수 있습니다.

 

 

이와같이 ID와 Password를 쿠키에 저장하여 사용자 인증에 사용할 수 있습니다.

 

하지만 쿠키에 인증 상태를 포함한 데이터를 저장하면 공격자가 얼마든지 이를 위조하여

다른 사용자로 위장해 서버에 접속할 수 있고,

 

사용자의 정보가 클라이언트 단에서 그대로 노출되기 때문에 상당히 위험합니다.

 

때문에 서버 단에서 사용자 인증 데이터를 저장하기 위한 개념인 세션("Session")이 등장하게 

되었습니다.

 

세션은 Session ID 라고 불리는 공격자가 유추할 수 없는 랜덤 문자열 키를 사용합니다.

 

세션/쿠키를 통한 사용자 인증은 다음과 같은 방식으로 진행됩니다.

 

 

1. 사용자는 ID와 Password를 이용해 서버에 로그인

 

2. 서버는 DB에서 ID/PW에 대한 사용자 인증

 

3. 해당 ID에 해당하는 회원 정보의 세션을 생성

 

4. Session ID 발급

 

5. 사용자에게 응답을 하면서 Session ID를 헤더에 실어서 보낸다.

 

6. 사용자가 데이터를 요청하면서 Session ID가 저장된 쿠키를 함께 보낸다.

 

7. 서버는 세션 저장소에서 쿠키에 있는 Session ID를 검증한다.

 

8. 해당 세션에 대한 사용자 정보를 획득한다.

 

9. 사용자로부터 받은 요청에 대한 응답을 보낸다.

 

 

=======================================================

 

 

세션/쿠키 인증 방식은 쿠키가 담긴 HTTP 요청이 공격자에게 노출되더라도 쿠키 자체는 의미있는 값이 아니라는

장점이 있긴 하지만,

 

공격자가 Session ID를 탈취하여 사용자 인증에 사용한다면 충분히 다른 사용자로 위장하여 서버에 접근할 수 있는

위험성 또한 존재합니다.

 

이를 위해서는 HTTP-only 헤더 사용 / 세션 인증기간을 줄이고 올바른 파기절차 적용 등의 방법이 있습니다.

(이에 대해서는 XSS 공격기법에 대해 포스팅할때 자세히 다루겠습니다.)

 

 

 

다음 포스팅에서는 쿠키/세션 방법이 아닌 jwt를 이용한 사용자 인증 방법에 대해 알아보도록 하겠습니다.

 

 

(이미지 출처 : https://tansfil.tistory.com/58)

Comments