해당 스터디는 90DaysOfDevOps
https://github.com/MichaelCade/90DaysOfDevOps
를 기반으로 진행한 내용입니다.
Day 9 - Why should developers care about container security?
개발자로서 어플리케이션을 컨테이너화하기 시작하면, 새로운 문제들을 고려해야 한다.
과거에는 운영체제 패키지, 파일권한 같은 문제들을 운영팀이나 보안팀이 처리해주었으나, 이제는 해당 설정들이 Dockerfile이나 다른 설정 파일 (Manifest) 형태로 코드 바로 옆에 위치하게 된다.
문제는 대부분 개발자들은 어떤 운영체제 배포판이 더 보안적으로 우수한지, 특정 패키지가 왜 필요한지 전문적인 지식이 없다. 이로 인해 자신도 모르게 보안 취약점을 만들 수 있다.
따라서, 해당 강의에서는 Snyk과 같은 도구를 사용하여 개발 초기 단계에서 이를 탐지하고 수정하는 방법인 Shift-Left Security와 알려지지 않은 위협에 대비하기 위한 심층방어 (Defense-in-Depth) 전략을 제시한다.
해당 방식을 사용하기 위해 먼저 시나리오를 제시한다.
시나리오: 취약한 레거시 어플리케이션 해킹

이처럼 단순히 레거시 어플리케이션 버전을 사용함으로써 이미 인터넷에 존재하는 PoC를 통해 쉽게 컨테이너에 접근하여 해킹을 진행할 수 있다.
이러한 해킹 상황이 발생하기 전에, 개발자가 미리 막기 위해 Snyk라는 툴을 사용하여 로컬에서 빌드한 이미지를 스캔하여 보안적 취약점을 분석할 수 있다.
Snyk은 이미지의 모든 패키지를 분석하고 '구성 요소 명세서 (BOM)'을 만든뒤, Synk의 취약점 데이터 베이스와 비교한다.
# Snyk (보안 취약점 분석 도구)를 이용한 컨테이너 보안 취약점 확인 명령어
# java-goof 이름의 컨테이너 이미지를 분석
snyk container test java-goof --file=Dockerfile

해당 사진처럼, Snyk가 제공하는 수많은 단순 CVE (Common Vulnerabilites and Exposures) 목록과 함께 '실행 가능한 조언'이 출력으로 나온다. 이는 보안 전문가가 아닌 개발자도 문제를 명확히 인지하고 즉각적인 조치를 취할 수 있도록 돕는다.
해당 이미지 '실행 가능한 조언' 의미
"현재 베이스 이미지(tomcat:8.5.21)는 735개의 취약점을 가지고 있습니다. 하지만 tomcat:8.5.97 버전으로 업데이트하면, 심각/높음 등급의 취약점은 0개가 되고 총 취약점 수도 28개로 크게 줄어듭니다."
Snyk를 이용하여 베이스 이미지의 보안 취약점을 미리 알 수 있으며, 이후 Dockerfile에 베이스 이미지 버전을 업그레이드하여 다시 빌드하게 되면 취약점이 대폭 줄어든 것을 확인할 수 있다.
추가적으로, 해당 모든 과정은 GitHub 연동을 통해 취약점 수정 pull Request를 자동으로 생성하는 방식으로 자동화할 수 있다. CI/CD 파이프라인에 통합하면 코드가 푸시될 때마다 자동으로 보안 검사를 수행하여, 개발자는 코드에만 집중하면서도 높은 보안 수준을 유지할 수 있다
앞서 말한 Shift-Left Security 방식을 사용하여 개발자가 개발 초기에 베이스 이미지에 대한 취약점을 보완할 수 있고, 알려진 취약점 외에 Log4Shell 같은 제로데이 공격 (방어하는 쪽에서 해당 공격을 막을 수 있는 대응책이 나온날이 0일) 에 대비하기 위해 어려 계층의 방어막을 구축해야한다.
1단계: 이미지 강화 (Image Hardening)
2단계: 런타임 방어 (Runtime Defenses)
3단계: 쿠버네티스 보안 (Orchestrator Security)
결론적으로, 우리가 아직 알지 못하는 제로데이 공격에 대비하기 위해, 하나의 보안 솔루션이나 방법에만 의존하지 않고, 각기 다른 역할을 하는 여러 보안 장치를 쌓아올려, 공격자가 공격하기 최대한 어렵고 복잡하게 만들어야 한다.
컨테이너 환경에서 보안은 더이상 운영팀, 보안팀의 일이 아닌, 개발자의 핵심 책임이 되었다.
따라서, 개발자는 'Shift-Left' 접근법을 통해 Snyk과 같은 도구로 '개발 초기에 알려진 취약점을 빠르게 수정' 해야 한다.
동시에, 아직 알려지지 않은 위협에 대비하기 위해 이미지, 런타임, 쿠버네티스에 걸친 '심층 방어' 전략으로 견고하고 다층적인 보안체계를 구축해야한다.