모의 해킹? 취약점 검사?

모의 해킹? 취약점 검사?

개발일기

 

회사에서 내 프로젝트를 모의해킹이란 걸 외주로 맡겼다.

그러고 나서 XSS에 취약점이 있다고 리포트를 받았는데

사실 스프링 시큐리티에서 CSRF FilterDisable 해놓긴 했다.

개발할 때 너무 번거로워서….😣

 

그리고 귀찮은걸 떠나서 두 가지 근거가 있긴 했다.

 

  1. 완전 내부망이었다.

  2. 로그인 페이지를 제외한 어떤 페이지도 외부로 노출되지 않았다.

 

암튼 그래서 CSRF FilterDisable 해뒀는데 모의해킹을 하니까 XSS 공격에 취약하다고 온 셈이다.

리포트를 면밀히 보니까 심지어 슈퍼계정으로 XSS 공격을 했더라…😭

 

 

아무튼 고쳐야 된다고 하니 울며 겨자 먹기로 작업에 들어갔다.

곰곰이 내가 이 취약점을 보완하기 위해 해야 할 작업은 크게 세 가지였다.

 

  1. CSRF Filter를 적용한다.

  2. 모든 View에서 CSRF Token을 같이 보내게 한다.

  3. XSS Filter를 적용해서 스크립트 공격을 막는다.

 

CSRF Filter는 스프링 시큐리티에서 코드 한 줄만 제거하면 끝났다.

 

http.csrf().disable()

 

View에서 CSRF Token을 사용하는 것은 공통 헤더 파일에 코드 두줄을 삽입해서 끝냈다.

 

마지막으로 XSS Filter가 문제였는데

스프링 시큐리티에 XSS Filter가 당연히! 있을 줄 알았는데 없더라…? 🤷‍♂️

“응? 이게 대체 왜 없지?” 싶어서 직접 만들어야 하나 고민하면서 한참 서칭을 하는데

네이버 형님들이 XSS Filter를 하나 만드셔서 오픈소스로 뿌려주셨더라 (정말 감사합니다 센빠이… 😭)

 

 

lucy-xss-servlet-filter라는 물건인데.

XSS 공격에 사용되는 <, > 같은 문자들을

Http Request Body에서 필터링하여 &lt;, &gt; 등으로 바꿔주는 필터다.

 

📜 lucy-xss-servlet-filter GitHub

 

문서도 깔끔하게 잘 적혀있어서(심지어 한글이다..!) 쉽게 쉽게 금방 적용해봤다.

그리고 테스트를 해보는데 잘 적용된 듯싶다가 좀 이상한 부분이 있었다.

RestController 쪽에서는 제대로 동작하지 않는 것처럼 보여 관련 글들을 또 서칭 해봤다.

 

📜 Spring에서 JSON에 XSS 방지 처리 하기

 

위 글을 보면서 적용해보니 해당 문제도 해결된 듯했다.

내일부터는 본격적으로 모든 기능에 대해 통합 테스트를 해볼 예정인데

처음으로 모의해킹이란 걸 겪어보면서 참 신기했다.

 

스프링 시큐리티를 나름 열심히 공부해서 적용하고 사용하고 있지만

사실 보안이라는 것에 대해 깊게 생각해본 적은 없었던 것 같다.

“어지간한 건 스프링 시큐리티가 알아서 막아주겠지~?” 라는 마인드였달까?

(변명이란 걸 해보자면 스프링 시큐리티 공식문서에 실제로 그렇게 쓰여있다…)

아무튼 이래저래 생각이 많은 날이었던 것 같다.

 


© 2022. All rights reserved.