슬슬의 공부

쿠키 / 세션 인증 취약점

seulseul 2021. 3. 18. 00:07

쿠키 / 세션

쿠키는 (Cookie) 는 사용자 정보를 유지할 수 없는 HTTP (Hyper Text Transfer Protocol) 의 단점을 해결 할수 있는 방법의 하나로서 쿠키를 사용하여 브라우저가 갖고 있는 정보를 참조 할 수 있습니다. 

 

이와 같이 클라이언트에서 동작되는 쿠키는 암호화 등의 문제를 비롯하여 그 구조상 클라이언트 측에서의 조작으로 인한 다양한 문제점을 가지고 있어,

많은 웹 프로그래밍 언어들에는 서버에 클라이언트의 정보를 저장하는 세션 (Session) 을 지원하고 있다.

 

적절히 보호되지않은 쿠키를 사용하면 Cookie Injection 등과 같은 쿠키값 변조를 통하여 다른 사용자로의 위장 및 권한 상승 등의 문제가 생길 수 있다.

 

또한 쿠키 및 세션은 Cookie Sniffing 및 XSS(Cross Site Scripting 악성 스크립트 실행 ) 를 통한 Cookie Hijacjing 등과 같은 쿠키 값 복사를 통해 현재 활성화 된 사용자의 권한 복제 위험성이 존재합니다.

 

대응 방법

 

쿠키보다 세션 기반 공격에서 상대적으로 안전하기 때문에 쿠키 기반 방식 보다 세션이나 토큰을 사용하는 방식을 권장합니다.

 

쿠키 설정시 사용자 아이디, 주민 번호 등과 같이 중요한 정보는 평문으로 사용하지 말아야하며 사용자가 쿠키값의 조작이 쉽지 않도록 합니다. 세션 사용 등 서버 측 인증 기술을 사용해야하며, 부재시 강제로 서버에서 세션을 파기하도록 시간을 설정하고 인증이 필요한 모든 페이지는 서버 측에서 인증하도록 수정합니다.

 

한 세션에 대한 IP 정보를 기록하여 중복 세션 사용이 되지 않도록 해야합니다.

또한 http only 옵션을 사용하여 XSS 쿠키 하이재킹 공격을 무력화 시켜야 합니다.

 

 

Response.AddHeader "Set-Cookie", "CookieName=Cookie.Value; path=/;HttpOnly"

 

 

/WEB-INF/web.xml

<session-config> 
  <cookie-config>
    <http-only>true</http-only>
  </cookie-config>
</session-config>

 

Tomcat 설정 (tomcat 6이상)

<Context path="/myWebApplicationPath" useHttpOnly="true">