보안/Dreamhack

Web Hacking STAGE 3 Cookie & Session

넌 감동란이었어 2022. 6. 23. 23:49

쿠키(Cookie)

쿠키는 Key와 Value로 이뤄진 일종의 단위이다.
쿠키는 Connectionless, Stateless 특성을 가지고 있다.
Connectionless: 하나의 요청에 하나의 응답을 한 후 연결을 종료한다.
Stateless: 통신이 끝난 후 상태 정보를 저장하지 않는다.

서버가 클라인어트에게 쿠키를 발급하면, 클라이언트는 서버에 요청을 보낼 때 마다 쿠키를 같이 전송한다.
서버는 클라이언트의 요청에 포함된 쿠키를 확인해 클라이언트를 구분한다.

복습

Web Server
정보를 제공하는 주체

ex) 식당에서 음식을 서빙하는 사람

Web Client
정보를 받는 이용자

ex) 음식을 주문하는 고객

단 쿠키 변조가 일어날 수 있다.
쿠키는 클라이언트의 브라우저에 저장되고 요청에 포함되는 정보다
따라서 악의적인 클라이언트는 쿠키 정보를 변조해 서버에 요청을 보낼 수 있다.
이렇게 뚫린다면 이용자의 정보를 탈취해갈 수 있다.

해결법

Session 사용하기

Session

인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키(유추할 수 없는 랜덤한 문자열)를 만들어 클라이언트에게 전달하여
클라이언트가 인증정보를 변조할 수 없게한다.
해캉 키를 Session ID라고 한다.

쿠키는 데이터 자체를 이용자가 저장

세션은 서버가 저장

세션 하이재킹

다른 사람의 쿠키를 훔쳐 인증 정보를 획득하는 공격이다.

Same Origin Policy (SOP) = 동일 출처 정책

악의적인 페이지에서 읽을 수 없도록 하는 브라우저의 보안 메커니즘이다.

Same Origin Policy의 오리진(Origin) 구분 방법

Origin을 구분하려면 프로토콜(Protocol, Scheme), 포트(Port), 호스트(Host)가 모두 일치해야한다.

모두 일치하면 Same Origin 다르면 Cross Origin

ex) https://same-origin.com/

프로토콜: https://

포트: same-origin.com

호스트: 뒷부분

Cross Origin Resource Sharing(CORS) = 교차 출처 리소스 공유

SOP를 적용받지 않고 리소스를 공유하는 방법

CORS preflight

발신측에서 POST 방식으로 HTTP요청을 보냈으나 OPTIONS 메소드를 가진 HTTP 요청이 전달되게 되는데 이때 수신측에 웹 리소스를 요청해도 되는지 질의를 하는 과정

응답 결과

Header 설명

Access-Control-Allow-Origin 헤더 값에 해당하는 Origin에서 들어오는 요청만 처리합니다.
Access-Control-Allow-Methods 헤더 값에 해당하는 메소드의 요청만 처리합니다.
Access-Control-Allow-Credentials 쿠키 사용 여부를 판단합니다. 예시의 경우 쿠키의 사용을 허용합니다.
Access-Control-Allow-Headers 헤더 값에 해당하는 헤더의 사용 가능 여부를 나타냅니다.

그 다음 서로의 응답이 상응하는지 확인하고 POST요청을 보내 수신측의 웹 리소스를 요청하는 HTTP 요청을 보낸다.

JSON with Padding(JSONP)

자바스크립트, CSS 등의 리소스는 SOP에 구애 받지 않고 외부 출처에 대해 접근을 허용한다.

이러한 특징을 이용해 <script>태크로 Cross Origin의 데이터를 불러온다.

하지만 <script>태그 내에서는 데이터를 자바스크릅티의 코드로 인식하기 때문에 Callback 함수를 활용한다.

https://dreamhack.io/lecture/courses/166

[Background: Cookie & Session

이 코스에서는 쿠키와 세션에 대해 설명합니다.

dreamhack.io](https://dreamhack.io/lecture/courses/166)