total_activ

도커 3주차 본문

도커

도커 3주차

INFOO 2022. 3. 18. 23:17

도커(DOCKER)

1.  뉴스 & 요약

https://securityaffairs.co/wordpress/111833/hacking/docker-hub-scan-analysis.html

 

사이버 보안 회사에서 800대의 컴퓨터에서 한달 동안 400만 공개 도커 컨테이너 이미지를 분석했고 취약점을 분석했다. 그 결과 놀랍게도 400만 이미지 중 51%가 하나 이상의 치명적인 결함이 있는 패키지 또는 앱 종속성이 포함되어 있었다. 그중 13%는 심각도가 높은 취약점이 있다고 한다. 보고서에서는 Docker Hub에서 호스팅하는 전체 컨테이너 이미지의 절반 이상이 하나 이상의 심각한 취약점을 포함하므로 잠재적으로 악용될 있다. 다른 위험은 공개적으로 사용 가능한 4백만 개의 이미지 6,432개가 악성 또는 잠재적인 이미지를 포함하고 있다라고 보고된다. , 우리가 신뢰하고 있는 Docker HUB 에도 수많은 잠재적인 취약점을 가지고 있고 언제든 마음만 먹는다면 악용될수 있다.

 

 

2.  조사한 자료 및 실행 과정

도커 컨테이너 보안

어제 컨테이너 보안에서 고려해야할 사항 5가지 중 리소스 할당량 활용 한가지에 대해서 다뤘다. 이번에는 나머지 4가지에 대해 설명하고자 한다.

 

< 고려해야할 사향 >

 리소스 할당량 활용

 도커 컨테이너가 루트로 실행되면 안되는 이유

리소스 자체를 제한하는 명령어를 활용한 리소스 할당량 활용과 비슷하게 이번것도 또한 최소 권한 원칙을 설정해야한다. 기본적으로 응용프로그램을 작성할때는 최소원칙으로 이끌어나가는 것이 최고라고 한다. , 응용프로그램 작동에 필요한 리소스만 접근을 제한하여 예기치 못한 접근으로부터 컨테이너를 보호하는것이다. 따라서 도커 컨테이너 보안에 있어서도 도커 기본 설정이 루트로 실행되도록 설정을 막는다.

 도커 컨테이너 레지스트리 보안

Docker Registry는 수많은 도커의 이미지를 저장하고 배포하는 표준방법이다. 이미지 덕분에  단순성과 이식성이 좋아졌지만 그만큼 이미지의 관리가 어려웠다. 이에 생겨난 것이 Docker Registry인것이다. 하지만 신뢰된 도커 레지스트리를 사용하지 않으면 보안에 취약해진다. 따라서 레지스트리에서 업로드 하거나 다운로드하는 것을 거부하는 과정을 걸쳐야하고 이 작은 불편을 무시한다면 위험해진다.

 신뢰할 수 있는 출처 사용

위와 비슷한 맹락으로 신뢰할수 없는 원본에서 가져온 이미지로 컨테이너 레지스트리 감염시켜자 보안을 취약하게 하지 않는 것이 좋다. 이제는 쉽게 이미지를 다운받고 사용할수 있지만 편리성을 제공하는 만큼출쳐를 검증하는 것이 그만큼 중요하다. 따라서 공용 컨테이너 레지스트리를 피하고 도커가 제공하는 레지스트리를 고수하는 것이 좋다. 또는 이미지 스캔도구(Anchore)를 사용하여 이미지 취약점을 검사하고 보호해야한다.

 코드 소스로 이동

가능하다면 다운받을 이미지내의 코드를 직접 확인하여 감염된 코드가 포함되어 있는지 확인한것이 좋다. 도커 이미지에는 외부 소스의 원본 코드와 패키지 조합이 있으면 신뢰할 수 있는 소스에서 파생되지 않을 수도 있다. 이때 소스 코드 분석 도구를 사용하면 좋다.

 

 

도커 컨테이너 보안 취약점 스캔 도구 Anchore

컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 컨테이너 오케스트레이션 솔루션에서 가장 보안이 취약한 곳중 하나가 컨테이너 이미지이다. 위에서 언급했다 싶이 도커 허브와 같이 도커가 제공하는 레지스티리에서 저장되서 배포되는 이미지가 상대적으로 좋다. 하지만 이러한 검증된 것 같아도 보안적으로 문제가 있는 이미지가 많다. 그래서 밴더에서 보안적으로 문제가 없도록 관리하는 베이스 이미지를 사용하는 것이 가급적 좋다고 한다.

 

< Anchore 특징 >

-  오픈소스

https://anchore.com/opensource/

-  이미지 분석

컨테이너 이미지의 심층 검사를 수행하여 모든 OS의 패키지, 파일 및 소프트웨어 아티팩트 (Ruby GEMs, JARs, Node Modules) Cataloging화 한다.

-  정책 관리

보안 모범 사례를 기반으로 정책을 정의하고 적용하여 위험한 빌드가 완료되지 않고 문제가 있는 이미지가 배포되지 않도록 한다

-  Continuous Monitoring

이미지가 업데이트되거나 CVE가 추가 또는 제거되거나 새로운 모범 사례가 설정 될 때 생성 된 문제를 파악하기 위해 정책을 지속적으로 관리한다.

-  CI/CD 통합

Anchore Engine CI/CD 파이프 라인에 통합하여 이미지가 사용자 지정 보안 및 요구 사항을 충족할 때만 성공적으로 빌드되도록한다.

-  커스터마이징

이미지 내부 Package, Whitelists, Blacklists, 설정파일, 보안, Manifest, 포트 등에 대한 취약점을 점검하기 정책을 유연하게 정의할 수 있다.

 

< Anchore 설치 실습 >

Anchore 배포 패키지를 직접 설치하거나, Docker hub에서 컨테이너를 pull 받아 설치 할수 있지만 pip 또는 git 소스에서 직접 설치했다.

 

1.  git clone https://github.com/anchore/anchore-engine

https://github.com/anchore/anchore-engine 해당 사이트를 git clone해서 설치하고자 했다. 해당 명령어를 /root아래에서 실행시켰다.

2.  cd anchore-engine/

이제 여기서 Docker Compose로 기동할 docker-compose.yaml 파일이 있어야하는데 그 yaml 파일이 없었다. 이 파일 없이 docker-compose up -d’ 명령어를 통해 docker-compose를 사용하여 Anchore Engine을 가동할 경우 아래와 같이 오류가 발생한다. 해석해보면 서포되는 파일인 docker-compose.yml 혹은 docker-compose.yaml이 없어서 발생한 오류라고 한다.

분명 참고한 사이트내에서는 git clone을 하면 안에 필요한 yaml 파일도 포함되어 있다고 했는데 없어서 황당했다. 처음에는 누락된건줄 알고 https://github.com/anchore/anchore-engine 사이트로 들어가서 직접 소스를 봤는데 yaml 파일 자체가 없었다. 해당 사이트에서 자세히 둘러보니까 아래 사진과 같이 해당 명령어를 확인할 수 있었고 이것을 통해 yaml 파일을 다운받을수 있었다.

3.  curl https://engine.anchore.io/docs/quickstart/docker-compose.yaml >

docker-compose.yaml

이 명령어는 무조건 /root/anchore-engine 아래에 실행해서 yaml 파일이 생성되어야한다.

4.  docker-compose up -d

yaml 파일이 생성되어 Anchore Engine을 기동했다.

5.  docker- compose ps

Anchore의 기동 상태를 확인하는 명령어 이다

 

6.  pip install anchorecli

이후서 부터는 Anchore CLI : Anchore에 명령을 전달하는 CLI 툴을 만들어준다. Anchore Clipip로 손쉽게 설치가 가능하다.

근데 아래 사진과 같이 anchorecli을 설치하는 과정에서 마지막에 오류가 발생된 문구가 나타났다. 그래도 설치는 된것같아서 anchore-cli 명령어를 실행해 봤는데 명령을 찾을 수 없다는 문구가 나타나면서 제대로 설치가 안됬음을 확인할수 있었다.

7.   /usr/bin/python3 -m pip install upgrade pip

일단 WARNING을 해결하기 위해 해당 명령어를 실행했다.

 

8.  sudo -H pip3 install ignore-installed PyYAML

가장 해결해야하는 부분이 ERROR인데 구글링을 해보니까 아래 명령어를 실행해야한다고 했다.

9.  pip install anchorecli

7,8 과정 이후 다시 anchorecli를 설치하니까 이번에는 제대로 실행되었다.

10.  anchore-cli

이번에는 명령어를 찾지 못했다는 문구가 아니라 해당 명령어 설명에 대한 글이 나타났다.

 

< Anchore을 이용한 이미지 취약점 분석 실습 >

-   anchore-cli --u [USERNAME] p [PASSWORD] image add(COMMAND) [ARGS]

anchore-cli u admin p foobar image add docker.io/library/alpine:3.4

컨테이너 이미지를 anchore에 추가한다.

-   anchore-cli image list : 이미지 점검 상태 확인

-   anchore-cli image get [이미지]

anchore는 등록된 이미지를 자동으로 스캔한다.
다음 명령어를 이용하면 스캔 상태를 모니터링 할 수 있다.

-   anchore-cli image content [이미지] files

해당 이미지가 포함하고 있는 컨텐츠를 확인한다.

-   anchore-cli image vuln [이미지]

취약점 결과를 확인한다. CVE-xxx가 실제 취약점 검사 결과에 나타난 취약 항목이며, Vulnerability URL에서 상세 정보를 확인할 수 있다.

-   anchore-cli evaluate check [이미지]

스캔이 끝나면, 발견된 보안 취약점과 상세 내용을 확인할 수 있다. ( 이미지 검사 결과를 평가한다.)

근데 이미지에 적는 docker.io/library/alpine이 뭔가 싶어서 인터넷 URL에 입력하니까 DOCKER HUB 사이트 내에 이미지가 나타났다. 그래서 최근에 다운받아서 사용했던 httpd 도커 이미지도 스캔해 봤는데 그 결과가 fail이 나와서 놀랐다. 생각보다 검증되었다고 생각했던 널리 알려진 이미지도 보안에 취약하다는 것을 알았다.

 

< 명령어 정리 >

-   anchore-cli system status : anchore engine 기동 상태 확인

-   anchore-cli --debug image list : 이미지 점검 상태 확인

-   anchore-cli system feeds list : 취약점 점검 리스트(feed)를 확인하여 지원 가능한 리스틀 확인하고 점검 시 참고 가능한지 확인한다.

-   anchore-cli image add [이미지] : 취약점을 점검할 이미지 추가

-   anchore-cli image content [이미지] : 해당 이미지가 포함하고 있는 컨텐츠 확인

-   anchore-cli image content [이미지] os : 컨텐츠의 상세 정보 확인

-   anchore-cli image vuln [이미지] all : 취약점 결과 확인

-   anchore-cli evaluate check [이미지] : 이미지 검사 결과 평가

 

 

 

3.  계획

새로운 도커 보안에 대해 찾아보고 없으면 논문쪽도 확인해서 공부해 보고자 한다. 또한 원래 이번 주차에 할려고 했는데 도커 네트워크에 대해 공부해서 docker 이미지 httpd를 이용하여 가상 네트워크 사이트를 구상해볼려고한다.

 

4.  참고 자료 & 출처

https://hub.docker.com/_/debian

https://bcho.tistory.com/1309

https://www.youtube.com/watch?v=ozS9gFzS_N4&t=400s

https://github.com/anchore/anchore-engine/issues/1159

https://docs.docker.com/compose/install/

https://www.leafcats.com/159

https://ichi.pro/ko/anchore-grypeleul-sayonghan-docker-keonteineo-boan-115533489005721

https://waspro.tistory.com/606

https://bcho.tistory.com/1309

https://github.com/anchore/anchore-engine

'도커' 카테고리의 다른 글

[보안이슈] 악성 도커 이미지에 대한 취약점 분석  (0) 2023.05.18