문제 상황
2023년 11월경 모니터링 시스템 구축을 위해 Spring Actuator를 통해 서버의 메트릭 정보를 엔드포인트로 노출시켰었습니다.
Spring Actuator란?
그런데 관련된 config 설정을 include: * 로 지정하여 서버의 모든 메트릭 정보가 퍼블릭으로 노출되는 일이 발생했습니다.
때문에 /actuator/heapdump 엔드포인트도 열리게 되었고, heapdump 정보가 공개되는 사고가 발생했습니다.
heapdump는 application.yml의 credential한 설정값들을 포함하여 모든 힙 메모리 정보가 담겨있는 파일이기 때문에 심각한 문제였습니다…
대응방안
다행히도 해커들이 heapdump 정보를 볼 수 있는 엔드포인트는 해킹 시도를 하지 않았어서 사고가 일어나지는 않았지만, 우선 신속하게 다음과 같은 대응을 했습니다.
•
heapdump 파일을 얻을 수 있는 경로를 포함한 보안의 문제가 있는 경로를 비활성화 후 재배포
•
application.yml에 들어있는 모든 credentials한 키 값 교체
최종 해결
최종적으로 사고 재발 방지를 위해 다음과 같은 해결책을 적용하였습니다.
•
화이트리스트 방식으로 메트릭 enable & expose
•
보안그룹 설정을 통해 모니터링 서버에서만 private IP를 통해 actuator 엔드포인트에 접근할 수 있도록 수정
느낌점….
“보안은 프로젝트의 마지막 단계가 아닌 첫 단계이다.” 라는 개발 명언이 떠오르네요.
공식 문서에도 이런 주의사항이 나와있는데, 당장 적용에만 신경쓰느라 이런 부분을 꼼꼼하게 확인하지 못했네요.
보안과 관련된 부분을 개발 이후에 신경쓰거나, 고려하지 못하는 경우가 종종 있었는데, 새로운 기술을 배워서 적용할 때는 보안적인 문제는 없는지 고려하는 게 0순위라는 걸 몸소 깨달았습니다…
DevOps 직무를 희망하면서 이런 사고를 친 것이 너무 부끄럽고 팀원들한테 죄송하네요 ㅠㅠ..
보안의 중요성이 강조되면서 DevSecOps 라는 포지션이 생긴 것도 이런 이유 때문이 아닐까 싶습니다…!