본문 바로가기

SpringSecurity

SpringSecurity(세션 고정 보호정책)

반응형

현재 사용자와 공격자가 웹 어플리케이션이 있다.

공격자가 서버에 접속하고 서버에서는 공격자에게 쿠키 아이디를 발급해주고 공격자는 사용자에게 서버에서 받은

쿠키값을 심어 놓는다  이상태에서 사용자가 공격자가 심어 놓은 쿠키값을 가지고 로그인시도를 하게 되면 공격자와 사용자가

세션을 공유하게된다 그러면 공격자는 인증을 받지 않아도 서버자원의 접근이 가능하다 

 

이런 세션공격을 방어하기 위해 SpringSecurity는 세션 고정보호기능을 제공한다 

사용자가 비록 공격자가 심어 놓은 쿠키로 인증을 시도 하더라도 새로운 세션과 쿠키가 생성된다. 공격자가 심어 놓은 쿠키값은 의미가 없어지기 때문에 서버자원의 접근이 불가능하다. 

 

 

protected void configure(HttpSecurity http) throws Exception

1.sessionManagement() 로 설정한다

 

2..sessionFixation().changeSessionId() // 기본값 // none,migrateSession , new Session

사용자가 인증에 성공하게 되면 세션아이디만 변경된다 이게 기본값이다!

migrateSession = 이속성도 새로운 세션도 생성되고 아이디가 새로 생긴다 (Servlet 3.1 기본값) 

new Session = 새로운 세션도 생성되고 아이디가 새로 생긴다 이전 세션에서 설정된 여러가지 속성의 값들을 사용하지 못하고 새롭게

속성값을 설정해야한다

none = 은 말그대로 아무일도 하지 않는다.. 그대로 공격자에게 공격을 받게 된다.

이 설정은 기본적으로 SpringSecurity에서 기본적으로 초기화 되면 호출한다

 

 

필자는 none으로 하여 실제로 공격자에게 당해보기로 했다 ㅋㅋ 물론 내가 공격한다

 

 

현재 공격자의 쿠키 값을 확인할수 있다 이 쿠키 값을 복사하여 사용자에게 전달하였다

 

현재 사용자는 로그인을 한상태이므로 공격자는 어떤 인증처리를 하지 않아도 서버자원의 접근이 가능하다 

 

사용자의 쿠키값
공격자의 쿠키값

사용자의 쿠키값을 확인해보면 동일한것을 알수 있다 꺅~~~~ 

 

그러면 기본값인 changeSessionId()로 시도해본다

공격자의 쿠키값
사용자의 쿠키값

 

공격자의 쿠키값과 사용자의 쿠키값이 다른걸 확인할수 있다.

 

이기능은 정말 중요한 기능이다 이런 기능을 구현하기가 쉽지가 않은데

스프링 시큐리티가 제공을 해주니 참 편리하다ㅜ

반응형

'SpringSecurity' 카테고리의 다른 글

SpringSecurity(세션제어 Filter)  (0) 2020.10.31
SpringSecurity(세션 정책)  (0) 2020.10.30
SpringSecurity(동시 세션 제어)  (0) 2020.10.30
SpringSecurity(AnonymousAuthenticationFilter)  (0) 2020.10.30
SpringSecurity(RemeberMe)  (0) 2020.10.30