IBM Cloud Container Registry의 취약점 고문 확인

IBM Cloud Container Registry 개요



IBM Cloud는 컨테이너 이미지를 저장하는 서비스로 IBM Cloud Container Registry(이후, Container Registry)를 제공합니다.

Container Registry는 '무료' 플랜과 '표준' 플랜을 제공합니다. "무료"플랜은 스토리지 : 500MB, 월당 pull 트래픽 : 5GB라는 제약은 있지만 문자 그대로 무료로 사용할 수있는 것이 특징입니다. IBM Cloud Kubernetes Service를 사용해 볼 때 무료로 사용할 수 있는 것이 좋습니다.

한편, "표준"플랜은 완전한 종량 과금제로, 이용한 스토리지, pull 트래픽에 따라 과금됩니다. 매월 스토리지: 500MB, pull 트래픽: 5GB의 무료 프레임이 설정되어 있으며, 이를 초과한 분에 대해 요금이 청구되는 형태입니다.

Container Registry의 취약성 검사 기능



Container Registry에는 취약성 어드바이저(Vulnerability Advisor)라는 컨테이너 이미지의 취약성을 확인하는 기능이 있습니다.

취약성 어드바이저는 Container Registry에 이미지가 push된 등의 시점에서 취약성을 확인하고 컨테이너 이미지 내에서 취약성이 있는 패키지가 사용되고 있지 않은지 확인하거나 MySQL/nginx/Apache 포함된 경우 구성 설정에 문제가 없는지 확인합니다.

또한 취약성 어드바이저에서 취약점이 감지되면 IBM Cloud Kubernetes Service 등에 대한 배포를 자동으로 거부하는 Container Image Security Enforcement와 협력할 수 있습니다.

이 기사에서는 Container Registry의 취약성 어드바이저를 실제로 사용하고 싶습니다.

취약성 고문



Container Registry에 이미지를 푸시하고 어떤 취약점이 발견되는지 살펴보겠습니다.

IBM Cloud CLI 및 Container Registry 플러그인을 사용하므로 배포되지 않은 경우 IBM Cloud CLI 개요를 참조하여 배포하십시오.

IBM Cloud에 로그인합니다.
ibmcloud login -a cloud.ibm.com -r jp-tok

Container Registry 리전을 설정하고 로그인합니다.
# リージョンを設定
❯ ibmcloud cr region-set ap-north
地域は「ap-north」に設定されました。地域は「jp.icr.io」です。

OK

# ログイン
❯ ibmcloud cr login
「jp.icr.io」にログインしています...
「jp.icr.io」にログインしました。

OK

Container Registry에 네임스페이스를 만듭니다. 작성한 경우 네임스페이스 이름을 확인합니다.
# 名前空間の作成
ibmcloud cr namespace-add <名前空間名>

# 名前空間の一覧
ibmcloud cr namespaces

그러면 먼저 IBM의 Java 애플리케이션 서버인 WebSphere Liberty의 이미지를 점검해 보겠습니다.
# イメージをDocker Hubからpull
docker pull websphere-liberty

# Container Registryにpushするためタグを設定
# <Container Registryのホスト名>/<名前空間名>/<イメージ名>:<タグ>
docker tag websphere-liberty:latest jp.icr.io/<名前空間名>/websphere-liberty:1.0

# イメージをContainer Registryにpush
docker push jp.icr.io/<名前空間名>/websphere-liberty:1.0

취약성 검사 결과를 살펴보겠습니다.
Container Registry 이미지 목록 페이지로 이동합니다.

방금 푸시한 WebSphere Liberty는 '문제 없음'으로 표시됩니다.


이제 nginx의 이미지를 검사해 보겠습니다.
# イメージをDocker Hubからpull
docker pull nginx

# Container Registryにpushするためタグを設定
# <Container Registryのホスト名>/<名前空間名>/<イメージ名>:<タグ>
docker tag nginx:latest jp.icr.io/<名前空間名>/nginx:1.0

# イメージをContainer Registryにpush
docker push jp.icr.io/<名前空間名>/nginx:1.0

다시 Container Registry 이미지 목록 페이지로 이동합니다.
nginx의 검사 결과를 보면 7개의 문제가 있음을 알 수 있습니다.
자세한 내용을 보려면 '7개의 문제' 부분을 클릭합니다.


그러면 다음과 같은 페이지에서 이미지 검사 결과의 세부 정보를 볼 수 있습니다.
취약점은 0건으로 구성 문제가 7건 있다는 결과를 낳습니다.
nginx의 설정 내용을 확인하고 문제 부분을 지적해주고 있습니다.


또한 웹 화면과 유사한 결과를 CLI에서도 확인할 수 있습니다.
❯ ibmcloud cr va registry.jp.icr.io/<名前空間名>/nginx:1.0
「registry.jp.icr.io/<名前空間名>/nginx:1.0」のセキュリティー問題を確認中...

イメージ「registry.jp.icr.io/<名前空間名>/nginx:1.0」の最終スキャン時刻は Sun Aug 16 15:03:02 UTC 2020 です。
 スキャン結果は、イメージに 7 件の問題が検出されたことを示しています。

検出された構成の問題
==============================

構成の問題 ID                                               ポリシー状況   セキュリティー対策                                  解決方法   
application_configuration:nginx.ssl_protocols               アクティブ     Enables the specified protocols.                    ssl_protocols is not present in   
                                                                                                                               /etc/nginx/nginx.conf or   
                                                                                                                               /etc/nginx/sites-enabled/default.   
application_configuration:nginx.ssl_certificate             アクティブ     Specifies a file with the certificate in the PEM    ssl_certificate is not present in   
                                                                           format for the given virtual server.                /etc/nginx/nginx.conf or   
                                                                                                                               /etc/nginx/sites-enabled/default.   
application_configuration:nginx.listen                      アクティブ     The listen port and protocol.                       The site does not use SSL since listen parameter   
                                                                                                                               does not contain ssl keyword.   
                                                                                                                               File: /etc/nginx/conf.d/default.conf   
application_configuration:nginx.ssl_certificate_key         アクティブ     Specifies the private key file for server cert.     ssl_certificate_key is not present in   
                                                                                                                               /etc/nginx/nginx.conf or   
                                                                                                                               /etc/nginx/sites-enabled/default.   
application_configuration:nginx.ssl_ciphers                 アクティブ     Specifies ciphers used in TLS.                      ssl_ciphers is not present in   
                                                                                                                               /etc/nginx/nginx.conf or   
                                                                                                                               /etc/nginx/sites-enabled/default. Defaults may not   
                                                                                                                               be secure.   
application_configuration:nginx.ssl_prefer_server_ciphers   アクティブ     Specifies that server ciphers should be preferred   ssl_prefer_server_ciphers is not present in   
                                                                           over client ciphers when using the SSLv3 and TLS    /etc/nginx/nginx.conf or   
                                                                           protocols.                                          /etc/nginx/sites-enabled/default. The strong   
                                                                                                                               ciphers preferred by server may not be selected.   
application_configuration:nginx.server_tokens               アクティブ     Enables or disables emitting nginx version in       server_tokens is not present. Default value is   
                                                                           error messages and in the Server response header    off. nginx will send its version in HTTP responses   
                                                                           field.                                              which can be used by attackers for   
                                                                                                                               version-specific attacks at this nginx server.   

OK

이상과 같이 Container Registry를 이용하는 것으로, 이미지의 취약성도 아울러 체크하는 것이 가능하게 됩니다.

좋은 웹페이지 즐겨찾기