모의 해킹? 취약점 검사?
개발일기
회사에서 내 프로젝트를 모의해킹이란 걸 외주로 맡겼다.
그러고 나서 XSS에 취약점이 있다고 리포트를 받았는데
사실 스프링 시큐리티에서 CSRF Filter
를 Disable
해놓긴 했다.
개발할 때 너무 번거로워서….😣
그리고 귀찮은걸 떠나서 두 가지 근거가 있긴 했다.
완전 내부망이었다.
로그인 페이지를 제외한 어떤 페이지도 외부로 노출되지 않았다.
암튼 그래서 CSRF Filter
를 Disable
해뒀는데 모의해킹을 하니까 XSS 공격에 취약하다고 온 셈이다.
리포트를 면밀히 보니까 심지어 슈퍼계정
으로 XSS 공격을 했더라…😭
아무튼 고쳐야 된다고 하니 울며 겨자 먹기로 작업에 들어갔다.
곰곰이 내가 이 취약점을 보완하기 위해 해야 할 작업은 크게 세 가지였다.
CSRF Filter
를 적용한다.모든
View
에서CSRF Token
을 같이 보내게 한다.XSS Filter
를 적용해서 스크립트 공격을 막는다.
CSRF Filter
는 스프링 시큐리티에서 코드 한 줄만 제거하면 끝났다.
http.csrf().disable()
View
에서 CSRF Token
을 사용하는 것은 공통 헤더 파일에 코드 두줄을 삽입해서 끝냈다.
마지막으로 XSS Filter
가 문제였는데
스프링 시큐리티에 XSS Filter
가 당연히! 있을 줄 알았는데 없더라…? 🤷♂️
“응? 이게 대체 왜 없지?” 싶어서 직접 만들어야 하나 고민하면서 한참 서칭을 하는데
네이버 형님들이 XSS Filter
를 하나 만드셔서 오픈소스로 뿌려주셨더라 (정말 감사합니다 센빠이… 😭)
lucy-xss-servlet-filter
라는 물건인데.
XSS 공격에 사용되는 <
, >
같은 문자들을
Http Request Body
에서 필터링하여 <
, >
등으로 바꿔주는 필터다.
📜 lucy-xss-servlet-filter GitHub
문서도 깔끔하게 잘 적혀있어서(심지어 한글이다..!) 쉽게 쉽게 금방 적용해봤다.
그리고 테스트를 해보는데 잘 적용된 듯싶다가 좀 이상한 부분이 있었다.
RestController
쪽에서는 제대로 동작하지 않는 것처럼 보여 관련 글들을 또 서칭 해봤다.
위 글을 보면서 적용해보니 해당 문제도 해결된 듯했다.
내일부터는 본격적으로 모든 기능에 대해 통합 테스트를 해볼 예정인데
처음으로 모의해킹이란 걸 겪어보면서 참 신기했다.
스프링 시큐리티를 나름 열심히 공부해서 적용하고 사용하고 있지만
사실 보안이라는 것에 대해 깊게 생각해본 적은 없었던 것 같다.
“어지간한 건 스프링 시큐리티가 알아서 막아주겠지~?” 라는 마인드였달까?
(변명이란 걸 해보자면 스프링 시큐리티 공식문서에 실제로 그렇게 쓰여있다…)
아무튼 이래저래 생각이 많은 날이었던 것 같다.