DevOps/Docker & kubernetes

Docker 보안 취약점 스케너 활용하기 .feat Trivy

치킨맛코드 2022. 8. 29. 11:26

클라우드 서비스 환경이 많이 사용됨에 따라 컨테이너 환경 및 관리 환경(k8s, docker)등이 있다. 이때 인프라를 구축할때 가장 중요한것이 보안일 것이다. 정부에서는 특히 이런 보안취약점을 정리하고 분석하여 가이드 삼을 수 있는 문서를 발간했다. 아래의 링크는 한국 인터넷 진흥원에서 발간한 "클라우드 취약 점검 가이드" 라는 문서이다.

https://ssv.skill.or.kr/Cloud-Security/docker-security-vulnerability

 

Docker 시스템 취약점 점검 가이드 - System Security Vulnerability

출처 : [2020.12] 한국인터넷진흥원 발간 내용 "클라우드 취약점 점검 가이드"

ssv.skill.or.kr

문서를 보면 알듯이 굉장히 내용도 많고 복잡하며, 머리아프기 딱 좋은 내용이다. 이런걸 일일이 사람이 관리한다면 얼마나 귀찮을까? 상상만해도 이 얼마나 끔찍한지 알 수 없다.

 

이런 귀찮음을 방지하고자 오픈툴들이 만들어지기 시작했다. 오늘은 이런 오픈툴 중에서 무료로 사용가능한 Trivy를 알아보고 활용해 보도록 하자. 아래의 링크는 Trivy의 공식 사이트와 githut 사이트이다.

https://www.aquasec.com/products/trivy/

 

Trivy Open Source Vulnerability Scanner | Aqua

Shift left using Aqua Trivy, the fastest way for DevOps and security teams to get started with vulnerability scanning and IaC scanning.

www.aquasec.com

https://github.com/aquasecurity/trivy

 

GitHub - aquasecurity/trivy: Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for

Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues and hard-coded secrets - GitHub - aquasecurity/trivy: Scanner for vulnerabil...

github.com

주로 컨테이너 이미지, 파일시스템, k8s환경에 대한 리소스 등에 대한 취약점 분석을 할 수 있다. 또한 OS, 알려진 보안 취약점, CVEs, 잘못 설정된 IaC, 민감한 정보 등을 스켄할 수 있다.

 

설치법은 간단하다. 먼저 githut에서 원하는 버전의 릴리즈 파일 링크를 확인한 후 os에서 설치하도록 하자.

본 페이지에서는 Centos7을 기준으로 설정하였다.

먼저 wget을 통해서 해당 파일을 내려받도록하자. wget이 없다면 yum install -y wget명령어를 통해서 wget을 다운받고 설치하도록 하자. 다양한 파일(tar.gz, deb ..)이 있으니 취사선택하면 된다.

이 후 받은 페키지 파일을 rpm명령어를 통해서 설치한 후 잘 설정되었는지 확인하면된다. 이때도 마찬가지 rpm이 없다면 설치하도록 하자. 

잘 설치된것을 확인할 수 있다.

기본적인 명령어는 아래와 같다.

$ trivy image "이미지 이름"
==> 이미 다운받은 이미지 파일을 스켄할 수 있다.

$ trivy image --input ruby-3.1.tar
==> tar 아카이브에서 컨테이너 이미지 스캔을 할 수 있다.

$ trivy fs .
==> 도커 컨테이너 파일(도커 파일, 컴포스 등의 스크립트 파일)에 대한 설정 확인을 할 수 있다.

$ trivy server
==> 서버모드로 실행할 수 있다.

$ trivy conf "디렉토리"
==> 이미지를 만들기위한 스크립트 파일을 분석할 수 있다.

아래의 화면은 trivy image 명령어를 통해 스켄이 완료된 화면이다.

 

총 124개를 스켄했으며, unknown(확인불가)0개, low(낮은 위협) 89개, medium(약간 걱정되는 위협)15개, HIGH(좀 많이 심각한 문제) 16개, Critical(즉각 수정해야하는 문제) 4개가 나타났다.

이것저것 실험용으로 사용하던 image라서 뭐가 많이 나온것 같다...

표를 읽는 순서는 Library(이름 정도로 생각하자), Vulnerability(취약점), severity(심각성) title(비고) 순서이다.

특히 title을 잘 읽어보면 어떤 문제점이 있으며, 왜 이런 규정을 지었는지를 확인할 수 있다.

e2fsprogs값이 high이기에, 이 값에 대한 문제를 확인하기위해 해당 링크에 접근해 보았다. 

이미 다운받은 이미지는 이렇게 분석할 수 있지만, dockerfile스크립트에 대한 내용을 분석하기 위해서는 dockerfile내부에 trivy를 만들고 실행하면 된다. 아래의 스크립트는 alpine이라는 작은 이미지 하나를 다운받고, 그 내부에서 trivy를 실행하는 내용이다.

FROM alpine:3.7
RUN apk add curl \
&& curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin \
&& trivy filesystem --exit-code 1 --no-progress /

명령어를 실행해 보자. 도커 파일을 실행하고, 이 내부에서 스켄을 하여, 취약점을 확인할 수 있도록 해 준다.