IT/JAVA
[취약점/보안] spring 전자정부 프레임워크(egov) 취약점 조치 모음
꾼헨
2023. 8. 10. 13:00
728x90
반응형
전자정부 프레임워크 프로젝트를 진행 도중 발생된 보안 취약점들과 조치 방법들을 정리해 보았다.
XSS
X-XSS-Protection
- 응답 헤더의 X-XSS-Protection'속성이 '1; mode= block'으로 설정되어야 함
- web.xml 에 HttpHeaderSecurityFilter 추가 후
- <init-param>요소를 추가 xssProtectionEnabled true
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>xssProtectionEnabled</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
X-Frame-Options
- 응답 헤더의 X-Frame-Options 속성이 'DENY' 또는 'SAMEORIGIN'으로 설정되어야 함
- web.xml 에 HttpHeaderSecurityFilter 추가 후(위와 중복)
- <init-param>요소를 추가 antiClickJackingOption SAMEORIGIN
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 조치 후 응답 헤더 확인 : 개발자 도구 > Network탭 > Headers에서 확인
multipart/form-data xss방지
- 네이버의 lucy-xss-servlet-filter 적용되어 있었으나 enctype="multipart/form-data" 인 form은 필터링 되지 않음
- multipartFilter를 추가하여 xss 방지
- web.xml에 다음과 같이 multipartFilter 를 추가해준다.
<filter>
<filter-name>multipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>multipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- {톰캣}/conf/context.xml <Context> 에 속성 allowCasualMultipartParsing="true" path="/" 추가
<Context allowCasualMultipartParsing="true" path="/">
...
</Context>
- 필터가 동작하지 않는다면 필터 선언 위치를 다른 필터의 위로 변경한다.
쿠키의 SameSite 속성 설정
- 쿠키의 SameSite 속성이 'Strict' 또는 'Lax'로 설정되어야 함
- {톰캣}/conf/context.xml <Context> 하위에 추가
<Context>
<CookieProcessor sameSiteCookies="Lax" />
</Context>
- 조치 후 개발자도구의 Application 탭 > Cookies 에서 확인
오류 발생 시 Apache Tomcat 관련 Stack Trace가 표시됨
- 오류 발생 시 stack trace(내부 정보)가 그대로 출력되어선 안됨
- {톰캣}/conf/server.xml <Valve> 하단 동일레벨에 추가
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false"/>
- 조치 후 확인 : 하단에 Stack Trace가 표시되지 않는다.
기타 보안 조치
- 비밀번호 5회 이상 오류 시 로그인 차단
- 로그인 도중 비밀번호를 5회 틀렸을 경우, 계정상태를 잠금처리하고 로그인을 차단한다.
- 관리자가 잠금 계정을 정상처리할 경우 비밀번호 오류 회수를 0으로 초기화하여 정상 로그인할 수 있도록 한다.
- 회원 수정 시 비밀번호 재인증
- 관리자 권한을 가진 사용자의 회원 정보 수정 시 비밀번호를 재인증하여 회원 정보 수정 페이지로 진입하도록 한다.
- 주기적 비밀번호 변경
- 비밀번호 설정 후 일정기간(예. 1달)이 지나면 로그인 직후 비밀번호 변경을 안내한다.
- 세션 타임아웃
- 로그인 후 일정 시간(예. 120분)이 지나면 세션 타임아웃으로 로그아웃되도록 한다.
- 최신 버전의 톰캣, OpenSSL, jQuery 및 jQuery UI Autocomplete, Dialog, Tooltip
- 최신 버전의 톰캣과 인증서, 라이브러리를 사용하도록 한다.
728x90
반응형