1. 쿠키와 세션
1. 쿠키(Cookie)
- 쿠키란?
- 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다.
- 사용자의 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지됩니다.
- 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조합니다.
- 클라이언트에 300개까지 쿠키 저장이 가능하며 하나의 도메인당 20개의 값만 가질 수 있습니다. 또한, 하나의 쿠키값은 4KB까지 저장합니다.
- 쿠키의 동작 방식
- 클라이언트가 페이지를 요청
- 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
- 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때, 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
- 쿠키 사용 예시
- 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
- 쇼핑몰의 장바구니 기능
- 자동 로그인
2. 세션(Session)
- 세션이란?
- 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리합니다.
- 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다.
- 물론 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능합니다.
- 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.
- 즉, 동시접속자가 많은 웹사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됩니다.
- 세션의 동작 방식
- 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
- 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
- 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
- 서버는 세션 ID를 전달 받아서 별다른 작업 없이 세션 ID로 세션에 있는 클라이언트 정보를 가져와서 사용
- 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
- 세션의 특징
- 각 클라이언트에게 고유 ID 부여
- 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공
- 보안면에서 쿠키보다 우수
- 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨
- 세션 사용 예시
- 로그인 같이 보안상 중요한 작업을 수행할 때 사용
쿠키 (Cookie) | 세션(Session) | |
저장 위치 | 클라이언트(사용자) PC | 서버 PC |
저장 형식 | 텍스트 | 객체 |
속도 | 상대적으로 빠르다 | 상대적으로 느리다 |
보안 | 상대적으로 안전하지 않다 | 상대적으로 안전하다 |
2. 쿠키와 세션의 발전 과정
1. 쿠키의 등장 이유
만약 로그인을 하고 다음 http 통신을 요청한다면 무상태 프로토콜은 로그인 정보(상태)를 가지지 않으므로 로그인을 했는지 여부를 알 수 없습니다. 즉, 로그인 했음을 알려주려면 로그인에 대한 정보를 지속적으로 알려주어야 합니다.
- URL 뒤에 로그인 정보를 쿼리문으로 붙여주면 브라우저에 직접 입력해서 로그인페이지에 들어갈 수도 있는 문제가 생깁니다.
- POST 요청 매개변수로 전달
- form의 post 요청 정보를 계속 포함시켜 전달합니다. 그러나 이렇게 할 경우, 매번 form을 이용해야 하므로 상당히 반복적이고 번거로운 작업이 듭니다.
그리하여, http 사용에서 정보유지(상태유지)의 필요성이 생겨났고, 쿠키가 등장하게 되었습니다.
2. 세션의 등장 이유
쿠키의 보안상의 이유로 등장하게 된 것이 세션입니다. 좀 더 안전하게 많은 정보의 보존이 가능합니다. 세션 아이디를 key로 상태정보를 테이블로 관리합니다. 클라이언트의 request에 대해 서버가 유일한 세션id를 부여합니다.
3. JWT
JWT(JSON Web Token)는 자바스크립트의 Object(Key Value) 자료구조를 가지고 있으며, Web Token으로써 사용할 수 있다는 의미입니다.
1. JWT 사용 이유
JWT는 HTTP의 단점을 보완하기 위해 JWT로 데이터 압축 및 서명을 위하여 JWT를 사용합니다.
- HTTP 단점
- state-ful(세션) 방식보다 비교적 많은 양의 데이터가 반복적으로 전송되므로 네트워크 성능이 저하가 될 수 있습니다.
- 데이터 노출로 인한 보안적인 문제 존재
2. JWT의 구성
aaaaaaa.bbbbbbb.ccccccc //헤더.페이로드.시그니처
구성은 헤더, 페이로드, 시그니처로 나뉩니다.
- 헤더 : 토큰 타입, 암호화 알고리즘 명시
- 페이로드 : JWT에 넣을 데이터, JWT 발급 / 만료일 등 명시
- 시그니처 : 헤더, 페이로드가 변조되었는지를 확인하는 역할
시그니처는 서명이라는 의미로 암호화하지 않고 변조 여부만을 확인하는 것이 JWT의 기본적인 구조입니다.
4. 브라우저 저장소
브라우저 저장소는 웹 애플리케이션에서 데이터를 저장하기 위한 방법으로, 주로 사용자의 프로필 정보, 로그인 상태, 사용자 환경 설정 등을 저장하고 유지하는데 사용됩니다.
브라우저 저장소는 HTML5부터 지원이 되며, JavaScript를 사용하여 사용자의 로컬 브라우저에 데이터를 저장할 수 있습니다.
대표적으로 로컬 스토리지, 세션 스토리지, 쿠키가 있습니다.
1. 로컬 스토리지(Local Storage)
- 일반적으로 키-값 쌍으로 구조화된 방식으로 데이터를 저장합니다.
- 로컬 스토리지는 브라우저 내부에 데이터를 저장할 수 있는 영구 저장소입니다.
- 데이터는 클라이언트 측 컴퓨터에 저장되며 데이터를 수동으로 지우지 않는 이상 영구적으로 보관이 가능합니다.
- 사용자가 웹 사이트를 나가더라도 데이터가 유지됩니다.
- 저장된 데이터는 동일한 도메인에서만 접근이 가능합니다.
- 주로 사용자가 선호하는 테마, 언어, 로그인 정보 등을 저장하기에 적합합니다.
2. 세션 스토리지(Session Storage)
- 일반적으로 키-값 쌍으로 구조화된 방식으로 데이터를 저장합니다.
- 세션 스토리지는 로컬 스토리지와 매우 유사하지만, 데이터가 브라우저 창이 닫힐 때 자동으로 삭제됩니다. 세션 스토리지는 사용자가 웹 사이트에 있는 동안에만 필요한 임시 데이터를 저장하는데 사용됩니다.
- 사용자가 웹 사이트를 다시 방문하면 새로운 세션이 시작되며, 이전 세션에서 저장된 데이터는 사용할 수 없습니다.
- 주로 사용자의 장바구니, 쇼핑 카트 등을 저장하기에 적합합니다.
3. 쿠키(Cookie)
- 쿠키는 웹사이트에서 사용자의 브라우저에 저장하는 작은 데이터 조각입니다. 즉, 사용자의 로컬 컴퓨터에 저장되는 작은 텍스트 파일입니다.
구분 | local storage | session storage | cookie |
저장 위치 | 클라이언트 브라우저 | 클라이언트 브라우저 | 클라이언트 브라우저 |
용량 | 5MB | 5MB | 4KB |
만료 시간 | 만료 기간을 설정 할 수 있음 | 브라우저 종료시 삭제 | 만료 기간을 설정할 수 있음 |
서버 전송 여부 | X | X | O |
보안성 | 다른 도메인에서 접근 불가능 | 다른 도메인에서 접근 불가능 | 다른 도메인에서 접근 가능 |
사용 예시 | 로그인 정보, 사용자 설정 등 장기간 보관해야 하는 정보 | 장바구니 등의 일시적인 정보 | 사용자 행동 분석, 광고 등 서버와 연동하여 사용하는 정보 |
📌 실습 도전 과제
1. 네이버 접속 시 사용되는 쿠키들 확인해보기
- 개발자 도구에서 [Application] -> [Cookies] -> [url] 선택합니다.
- 해당 웹 사이트의 쿠키 리스트는 Name의 목록으로서 확인할 수 있습니다.
2. 위에서 얻은 쿠키를 변조한 후 결과 분석하기
- 먼저 쿠키를 변조할 수 있는 프로그램인 EditThisCookie와 웹 디버깅 툴인 Fiddler 프로그램을 설치해야 합니다. 이들은 웹해킹을 하기 위해 기본적으로 쓰이는 툴입니다.
- Fiddler는 프록시 서버 역할을 합니다. 프록시 서버는 클라이언트가 특정 서버를 통해 다른 네트워크에 간접적으로 접속할 수 있게 해주는 것을 의미합니다. Fiddler를 통해 HTTP 서비스 프로토콜을 이용한 통신인 패킷들에 한해서 감청 및 조작을 합니다.
Cookie 값 변조 프로그램의 종류
1. Cooxie Toolbar : diodia.com에서 배포하는 프리웨어로 브라우저에 저장되어 있는 쿠키를 수정하거나 프록시를 설정할 수 있습니다. (EditThisCookie 사용 예정)
2. Paros : parosproxy.org에서 배포하는 웹 프록시 툴로 웹 사이트의 취약점 분석과 웹 해킹 도구로 사용됩니다. 내 컴ㅁ퓨터의 가상의 프록시를 사용해 웹서버와 클라이언트 사이에서 오고가는 데이터와 쿠키 등의 값들을 수정할 수 있습니다. (피들러 사용 예정)
3. Odysseus : Paros처럼 다양한 기능은 없지만 로그인 우회 및 데이터 조작 등에 사용될 수 있습니다. Odysseus는 별도의 랜 설정 없이 바로 사용 가능하다는 장점이 있습니다.
4. Burp suite : burp suite는 웹 응용 프로그램 테스트에 사용할 수 있는 최고의 도구 중 하나입니다. request를 가로채서 수정하고, 웹 애플리케이션 취약점을 수행하고 로그인 창에 brute force 공격을 할 수 있는 것과 같이 다양한 업무를 수행하도록 도와줍니다. 기본적으로 backtrack 5에서 burp suite 무료 버전을 이용할 수 있습니다.
아직 현재는 피들러를 잘 사용하지 못하기 때문에 개발자도구에서 쿠키 변조하는 방법에 대해 찾아보았습니다.
이전의 쿠키들을 모두 삭제할 경우 로그인이 되어있던 계정에서 로그아웃이 되었음을 알 수 있습니다.
'ELITE HACKER bootcamp > Pre.web' 카테고리의 다른 글
[1주차 TIL] 프록시 (0) | 2024.12.16 |
---|---|
[1주차 TIL] 패킷 (0) | 2024.12.16 |
[1주차 TIL] HTTP/HTTPS (2) | 2024.12.15 |
[1주차 TIL] 프로토콜 (0) | 2024.12.14 |
[1주차 TIL] 웹이란? (0) | 2024.12.12 |