기타

Spring Boot 취약점 체크리스트 초안을 만들며

수달정보보호 2025. 9. 29. 21:37

조직마다 개발을 할 때 애용하는 프레임워크가 있기 마련이다. 그런데 그런 프레임워크들에 대해서 취약점 진단을 할 때는 어떻게 해야 하는지 다소 어려움을 맞이하게 된다. 전자금융 체크리스트로 억지로 끼워 맞추면, WEB/WAS 항목을 적용할 수는 있겠으나, 실무와는 괴리감이 크다.

 

현재의 고객사는 Spring Boot를 애용하고 있고, 그래서 무언가 새로운 진단 항목을 만드는 것이 좋겠다는 생각이 들어 체크리스트를 만들어 보게 되었다. 개인적으로 새로운 기준을 들이밀 때 가장 중요한 것 중 하나는 담당자의 저항에 관한 것이다. '귀찮지만, 이 정도는 할 수 있지'라는 수준을 어림짐작하여 맞춰야 한다는 점이다. 너무 많은 진단 항목을 들이밀면 거부감이 커질 수밖에 없고, 보안이라는 것에 대해 반감만 커질 수 있다.

 

그래서 고민을 한 숫자는 10 정도였다. 그들이 담당하고 있는 다른 자산에 대한 취약 항목 숫자를 고려하면, 이 정도의 숫자는 처음으로 시작하기에 나쁘지 않다는 생각이 들었기 때문이다. 그러다가 조금 욕심이 나서 12개를 선정하게 되었는데, 마음 같아선 20개 정도를 하고 싶었지만, 이 정도로 협의를 봐야 했다.

 

내용은 다음과 같다.

 

① HTTPS 통신 적용: 스니핑을 통해 정보를 탈취 및 도용할 수 있으므로 데이터가 평문으로 전송되고 있는지 점검하기 위해 server.ssl.enabled=true로 설정되어 있는지 확인

② 접근 IP 제어: 허용할 호스트에 대한 IP가 적용되지 않은 경우, 불법적은 접근 및 시스템 침해사고가 발생할 수 있으므로, 허용할 호스트에 대한 접속 IP 주소 제한 및 포트 제한 설정 여부 확인

③ 최신 패치 적용: 주기적으로 보안 패치를 적용하지 않으면 서버 침해가 발생할 수 있으므로 최신 패치 적용 여부를 확인 

④ Actuator 관리 엔드포인트 노출 여부: 애플리케이션 환경변수, 빈 목록, 매핑 정보 등 민감한 내부 정보가 외부에 노출되면 공격자가 시스템 취약점을 분석하는 데 악용할 수 있으므로 엔드포인트 정책을 점검하기 위해 management.endpoints.web.exposure.exclude=* 설정이 되어 있고, 노출된 엔드포인트에 별도의 인증 적용 여부 확인

⑤ 중요정보 평문 저장: 소스코드 저장소나 설정 파일이 유출될 경우, 데이터베이스, 비밀번호, API 키 등 핵심 자격증명이 외부에 노출되어 시스템이 위협에 빠지는 것을 방지하기 위해 중요정보가 암호화 라이브러리를 통해 암호화되거나, 외부 환경변수를 통해 설정 파일에 평문으로 저장되는지 확인

⑥ 자바 직렬화 필터링: 외부에서 주입된 악의저긴 직렬화된 객체를 역직렬화할 때, 원격 코드 실행 공격에 노출될 수 있는 취약점을 방지하기 위해 허용된 클래스만 역직렬화되도록 필터링 로직이 적용되어 있는지 확인

⑦ 불필요한 메소드 제외: 웹 서버에 PUT, DELETE 메서드가 허용되어 있을 경우, 공격자는 파일 업로드, 서버 파일 삭제 등 서버를 인증 없이 조작할 가능성이 있으므로 취약한 웹 서버에 허용된 PUT, DELETE, PATCH 등 불필요한 메서드를 사용하고 있는지 확인

⑧ 메소드 접근제어: URL 접근 권한만으로 충분하다고 판단하여 중요 비즈니스 로직을 담은 메서드에 관한 검증 로직이 누락되면 인가되지 않은 사용자가 기능을 실행할 수 있으므로 메서드 접근제어가 설정되어 있는지 확인하기 위해 중요 비즈니스 로직 메서드에 PreAuthorize 등 권한 기반의 인가 어노테이션이 명확하게 적용되어 있는지 확인

⑨ 세션 쿠키에 Secure, HttpOnly, SameSite 설정: 세션 쿠키에 Secure 속성이 미적용되면 HTTP 통신 시 중간자 공격에 쿠키가 탈취될 수 있으며, HttpOnly 속성이 미적용되면 XSS 공격을 통해 세션 정보가 탈취될 수 있으며, SameSite 속성이 미적용되면 CSRF 공격에 취약해지므로 해당 속성들을 설정하고 있는지 확인 

⑩ CSRF 차단: CSRF이 설정되어 있는 경우, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청할 수 있으므로 Spring Security 사용 시에 CSRF가 enable 되어 있는지 확인

⑪ 로그 기록 및 정기적 검토: 정기적인 로그 점검을 통해 안정적인 시스템 상태 유지 및 외부 공격 여부를 확인할 수 있으므로 이를 위한 정기적인 절차와 증적자료가 있는지 확인

⑫ 의존성 취약성 점검: 스프링 부트는 수많은 외부 라이브러리에 의존하고 있으므로, 이중 알려진 취약점(CVE)을 포함하고 있다면, 애플리케이션 전체가 공격의 표적이 될 수 있으므로 알려진 취약점에 대한 검증을 하고 있는지 확인

이번에는 스프링부트의 관점에서만 작성을 했는데, 당연히 여러 프레임워크를 사용하는 경우가 대다수일 거고, Nginx, JBOSS 등등이 있을 것이다. 물론 보안담당자들이 해당 개발 프레임워크에 대해 이해가 떨어진다는 점이 이런 프레임워크의 진단을 구상하는 데 큰 단점이 될 수는 있으나, 그래도 시작해야 한다.

 

이렇게나 보안에 대한 이슈가 뜨거운 현재, 조직 내의 실무 환경에 맞는 진단을 수행하는 것은 그야말로 적기이기 때문이다.

 

 

728x90