Spring/Security

[Security] 고정세션 보호 - 고정세션 공격방어!

석석's 2021. 12. 28. 22:23

아래 사진과 같이 공격자가 우리에 was에 접근하게 되어 jsessionid를 가진 상태에서 클라이언트에게 자신의 jsessionid 를 몰래 넘겨 클라이언트가 인증처리를 한 후 부터는 공격자와 클라이언트가 같은 jsessionid를 가지고 세션을 공유하기에 공격자가 세션이 필요한 영역에 접근할 수 있는 문제가 있다.

이것을 "고정세션 공격" 이라고 하는데 스프링 시큐리티의 API를 활용하여 이 문제를 해결 할 것이다.

 

 

 

왼쪽이 사용자 , 오른쪽이 공격자라고 해보자 공격자가 사용자에게 자신의 jsessionid를 몰래 넣어 추후 사용자의 인증처리를 통해 공격자 자신도 리소스에 접근할 수 있게 해볼것이다.

 

공격자가 자신의 세션ID를 사용자에게 넣은 모습이다.

 

 

사용자가 인증을 끝마치고 공격자는 이제 자신도 세션을 공유하기에 리소스에 접근 해볼 것이다.

 

루트 경로로 접근하게되면 공격자도 접근이 잘 된것을 확인 할 수 있다.

 

 

이제 이러한 고정세션 공격을 막아보자!!!

이러한 공격을 막기 위해서는 세션ID를 인증할 때마다 새롭게 발급하여 클라이언트에게 주면 공격자는 이제 자신이 클라이언트에게 세션ID를 몰래 넣었다 한들 인증이후에는 달라졌기에 무의미 해진다.

 

changeSessionId 로 인증이 될때마다 새로이 세션ID를 부여함

 

먼저 사용자와 공격자의 쿠키 모습이다. 아까와 마찬가지로 동일한 세션ID를 가지고 있어보자

 

 

인증이후 세션ID가 달라져서 공격자가 인증없이는 접근할 수 없는 모습이다.