일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- __environ
- Dynamic Analysis
- _IO_FILE Arbitrary Address Read
- DreamHack
- seccomp
- DFC 2022
- srop
- ROP
- Reversing
- malware
- heap feng shui
- BOF
- RTL
- UAF
- DFB
- H4CKING GAME
- tcache
- master canary
- heap
- shellcode
- vtable
- Lazenca
- _IO_FILE Arbitrary Address Write
- heap exploit
- HackCTF
- 나뭇잎 책
- _IO_FILE
- K-shield Junior
- GOT overwrite
- Android
- Today
- Total
Studying Security
Cookie & Session 본문
HTTP protocol의 특징
○ 클라이언트의 IP 주소와 User-Agent는 매번 변경될 수 있는 고유하지 않은 정보입니다.
● Connectionless
하나의 요청에 하나의 응답을 한 후 연결을 종료합니다.
특정 요청에 대한 연결은 이후의 요청과 이어지지 않고 새 요청이 있을 때 마다 항상 새로운 연결을 맺습니다.
● Stateless
통신이 끝난 후 상태 정보를 저장하지 않습니다.
이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없습니다.
Cookie
따라서 HTTP에서 상태를 유지시키기 위해 Cookie가 탄생
일반적으로 쿠키는 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용합니다.
정보 기록
○ 웹 서비스 사용 시 종종 등장하는 팝업 창에 “다시 보지 않기”, “7일 간 표시하지 않기” 버튼이 있습니다.
○ 웹 서버는 각 클라이언트의 팝업 옵션을 기억하기 위해 쿠키에 해당 정보를 기록하고, 쿠키를 통해 팝업 창 표시 여부를 판단합니다. 과거에는 클라이언트의 정보를 저장하기 위해 쿠키가 종종 사용됐습니다.
○ 쿠키는 서버와 통신할 때마다 전송되기 때문에 쿠키가 필요 없는 요청을 보낼 때 리소스 낭비가 발생할 수 있습니다.
○ 최근에는 이러한 단점을 보완하기 위해 Modern Storage APIs를 통해 데이터를 저장하는 방식을 권장하고 있습니다.
상태 정보
○ 많은 웹 사이트에서는 회원 가입과 로그인을 통해 개개인에게 맞춤형 서비스를 제공합니다.
○ 웹 서버에서는 수많은 클라이언트의 로그인 상태와 이용자를 구별해야 하는데, 이때 클라이언트를 식별할 수 있는 값을 쿠키에 저장해 사용합니다.
쿠키는 클라이언트의 브라우저에 저장되고 요청에 포함되는 정보이기 때문에 악의적인 클라이언트는 쿠키 정보를 변조해 서버에 요청을 보낼 수 있습니다. 만약 서버가 별다른 검증 없이 쿠키를 통해 이용자의 인증 정보를 식별한다면 공격자가 타 이용자를 사칭해 정보를 탈취할 수 있습니다.
서버
HTTP 응답 중 헤더에 쿠키 설정 헤더 (Set-Cookie)를 추가하면 클라이언트의 브라우저가 쿠키를 설정합니다.
HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: name=test;
Set-Cookie: age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;
...
클라이언트
자바스크립트를 사용해 쿠키를 설정합니다.
document.cookie = "name=test;"
document.cookie = "age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;"
크롬 Console을 활용하는 법
개발자 도구에 존재하는 Console 탭을 누릅니다. document.cookie를 입력하면 쿠키 정보를 확인할 수 있습니다.
쿠키 옵션(HttpOnly)에 따라 자바스크립트에서 쿠키 확인이 불가능 할 수 있습니다.
크롬 Application을 활용하는 법
개발자 도구의 Application 탭을 누릅니다. 좌측에 나열된 목록에서 Cookies를 펼치면 Origin 목록을 확인할 수 있습니다. Origin을 누르면 설정 된 쿠키 정보를 확인 / 수정할 수 있습니다.
Session
쿠키에 인증 상태를 저장하지만 클라이언트가 인증 정보를 변조할 수 없게 하기 위해 세션(Session)을 사용합니다.
세션은 인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키(유추할 수 없는 랜덤한 문자열(Session ID))를 만들어 클라이언트에 전달하는 방식으로 작동합니다.
브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP 요청을 보낼 때 사용합니다.
서버는 요청에 포함된 키에 해당하는 데이터를 가져와 인증 상태를 확인합니다.
세션 하이재킹 (Session Hijacking)
쿠키에는 세션 정보가 저장되어 있고 서버는 이를 통해 이용자 식별하고 인증을 처리합니다.
공격자가 이용자의 쿠키를 훔칠 수 있으면 세션에 해당하는 이용자의 인증 상태를 훔칠 수 있는데 이를 세션 하이재킹이라 합니다.
※ 쿠키는 데이터 자체를 이용자가 저장하며, 세션은 서버가 저장한다는 핵심적인 차이가 있습니다.
Reference
'Web' 카테고리의 다른 글
SQL Injection: DBMS (0) | 2022.07.18 |
---|---|
Cross Site Request Forgery(CSRF) (0) | 2022.07.18 |
Same Origin Policy(SOP) (0) | 2022.07.17 |
Cross Site Script(XSS) (0) | 2022.07.15 |