본문 바로가기

쿠키 & 세션 본문

보안/개인공부

쿠키 & 세션

Seongjun_You 2022. 5. 28. 22:17

쿠키

Connetionless, Stateless 특성을 갖는 HTTP에서 상태를 유지하기 위해 쿠기가 탄생되었습니다.

쿠키는 Key와 Value로 이뤄진 일종의 단위로, 서버가 클라이언트에게 쿠키를 발급하면,

클라이언트는 서버에 요청을 보낼 때마다  쿠키를 같이 전송합니다.

서버는 클라이언트의 요청에 포함된 쿠키를 확인해 클라이언트를 구분할 수 있습니다.

 

HTTP 프로토콜 특징

Connectionless :  하나의 요청에 하나의 응답을 한 후 연결을 종료하는 것 

Stateless : 통신이 끝난 후 상태 정보를 저장하지 않는 것을 의미

 

세션

쿠키에 인증 상태를 저장하지만 클라이언트가 인증 정보를 변조할 수 없게 하기 위해

세션을 사용합니다. 세션은 인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는

키를 만들어 클라이언트에 전달하는 방식으로 작동

해당 키를 일반적으로 Session ID라고 합니다. 브라우저는 해당 키를 쿠키에 저장하고 이후에

HTTP 요청을 보낼 때 사용합니다. 서버는 요청에 포함된 키에 해당하는 데이터를 가져와

인증 상태를 확인합니다.

 

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

세션은 서버가 저장

 

취약점 분석

@app.route('/') # / 페이지 라우팅 
def index():
    username = request.cookies.get('username', None) # 이용자가 전송한 쿠키의 username 입력값을 가져옴
    if username: # username 입력값이 존재하는 경우
        return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not admin"}') # "admin"인 경우 FLAG 출력, 아닌 경우 "you are not admin" 출력
    return render_template('index.html')

드림핵 워게임입니다.

쿠기는 사용자가 변조할 수 있기에 취약점입니다.

 

쿠기의 값을 guest에서 admin으로 변경해주면 flag가 출력됩니다.

 

 

SOP

브라우저는 인증 정보로 사용될 수 있는 쿠키를 브라우저 내부에 보관합니다.

그리고 이용자가 웹 서비스에 접속할 때, 브라우저는 해당 웹 서비스에서 사용하는

인증 정보인 쿠키를 HTTP 요청에 포함시켜 전달합니다.

이와 같은 특징은 사이트에 직접 접속하는 것에만 한정되지 않습니다. 브라우저는 웹 리소스를 통해

간접적으로 타 사이트에 접근할 때도 인증 정보인 쿠키를 함께 전송하는 특징을 가지고 있습니다.

 

이 특징 때문에 악의적인 페이지가 클라이언트의 권한을 이용해 대상 사이트에

HTTP 요청을 보내고, HTTP 응답 정보를 획득하는 코드를 실행할 수 있습니다.

이는 정보 유출과 같은 보안 위협이 생길 수 있는 요소가 됩니다. 따라서, 클라이언트 입장에서는

가져온 데이터를 악의적인 페이지에서 읽을 수 없도록 해야 합니다.

이것이 바로 브라우저의 보안 메커니즘인 SOP입니다.

 

SOP는 Cross Origin이 아닌 Same Origin일 때만 정보를 읽을 수 있도록 해줍니다.

Path만 다른 경우엔 Same Origin입니다.

 

 

CORS

SOP는 클라이언트 사이드 웹 보안에서 중요한 요소입니다. 하지만, 브라우저가 

이러한 SOP에  구애 받지 않고 외부 출처에 대한 접근을 허용해주는 경우가 존재합니다.

예를 들면, 이미지나 자바스크립트, CSS 등의 리소스를 불러오는 <img>, <style>, <script> 등의 태그는

SOP의 영향을 받지 않습니다.

위 경우들 외에도 웹 서비스에서 SOP를 완화하여 다른 출처의 데이터를 처리해야 하는 경우가 있습니다.

두 사이트는 오린진이 다르므로 SOP를 적용받지 않고 리소스를 공유할 방법이 필요합니다.

자원을 공유하기 위해 사용할 수 있는 공유 방법을 교차 출처 리소스 공유(CORS)라고 합니다.

 

'보안 > 개인공부' 카테고리의 다른 글

CSRF  (0) 2022.05.30
XSS  (0) 2022.05.30
Web Browser  (0) 2022.05.27
WEB  (0) 2022.05.27
HTTP/HTTPS  (0) 2022.05.27
Comments