Skip to main content

Kubernetesネイティブのツールでアプリケーションの脆弱性を表示する

container scans

2019年11月19日

0 分で読めます

Snyk Containerの新しいKubernetes機能を基盤に、脆弱性データをKubernetesエコシステムにさらに密接に統合する方法を試しています。Snykには充実したダッシュボードとレポート機能があり、セキュリティだけに注力する場合には最適です。しかし、Kubernetesでの作業中に別の画面へ切り替えたくない場合はどうでしょうか?Snyk Containerの豊富なAPIを使って、脆弱性情報をKubernetesにより近い場所で確認できるでしょうか?

kubectlと脆弱性CRD

Kubernetesを拡張する方法のひとつが、カスタムリソースです。これはKubernetesに新しいオブジェクトを追加し、Kubernetes APIを扱えるツールで操作できるようにする仕組みです。DeploymentやCronJobを管理するのと同じように、Kubernetesで新しいリソースを管理できます。カスタムリソース定義(CRD)を使って、脆弱性を記述してみましょう。

kubectl apply -f https://raw.githubusercontent.com/snyk-labs/ksnyk/master/ksnyk/commands/vulnerability.yaml

次のようにして、CRDが正しくインストールされたことを確認できます。

$ kubectl api-resources --api-group snyk.io                                                                            NAME SHORTNAMES APIGROUP NAMESPACED KIND
  vulnerabilities   vuln,vulns snyk.io    true Vulnerability

次に、SnykのデータをCRDに取り込む必要があります。Snyk Kubernetesインテグレーションは、クラスター内のワークロードを自動的にスキャンし、関連するイメージの脆弱性を特定します。この情報をSnyk APIから取得し、https://github.com/snyk-labs/ksnykにあるツールを使ってKubernetesに挿入できます。

情報を読み込んだら、任意のKubernetes APIクライアントを使って、名前空間で見つかった脆弱性を一覧表示できます。kubectlで確認してみましょう。


$ kubectl get vulns

NAME                             TITLE       PATH                 PACKAGE SEVERITY

snyk-linux-coreutils-104909      Improper Input Validation       replicationcontroller/example-rc:nginx coreutils medium
snyk-linux-coreutils-114540      Race Condition       replicationcontroller/example-rc:nginx coreutils medium
snyk-linux-expat-107842          Access Restriction Bypass       replicationcontroller/example-rc:nginx expat/libexpat1 medium
snyk-linux-expat-450908          XML External Entity (XXE) Injection    deployment.apps/snyky:docker.io/garethr/garethr_snyky   expat high
snyk-linux-expat-460765          XML External Entity (XXE) Injection    replicationcontroller/example-rc:nginx expat/libexpat1 high
snyk-linux-gcc8-447557           Out-of-Bounds       replicationcontroller/example-rc:nginx gcc-8/libstdc++6 high
snyk-linux-git-175991            Untrusted Search Path       deployment.apps/snyky:docker.io/garethr/garethr_snyky git high
snyk-linux-glibc-107098          Improper Input Validation       replicationcontroller/example-rc:nginx glibc/libc-bin medium
snyk-linux-glibc-121839          Resource Management Errors       replicationcontroller/example-rc:nginx glibc/libc-bin medium

出力には、深刻度、影響を受けるワークロード、イメージ内で脆弱性を含むパッケージなど、脆弱性の概要が表示されます。脆弱性を1件指定して問い合わせれば、詳しい説明を含む、より詳細な情報を取得できます。


$ kubectl get vulns snyk-linux-coreutils-104909 -o yaml                                                              
apiVersion: snyk.io/v1
kind: Vulnerability
metadata:
creationTimestamp: "2019-09-24T14:05:57Z"
generation: 1
name: snyk-linux-coreutils-104909
namespace: default
resourceVersion: "28382"
selfLink: /apis/snyk.io/v1/namespaces/default/vulnerabilities/snyk-linux-coreutils-104909
uid: 6e305adb-ded4-11e9-9bf7-025000000001
spec:
cvssScore: 6.5
cvssV3: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N
description: |
## Overview
chroot in GNU coreutils, when used with --userspec, allows local users to escape to the parent session via a crafted TIOCSTI ioctl call, which pushes characters to the terminal's input buffer.
## References

- [ADVISORY](https://security-tracker.debian.org/tracker/CVE-2016-2781)

- [http://www.openwall.com/lists/oss-security/2016/02/28/2](http://www.openwall.com/lists/oss-security/2016/02/28/2)

- [http://www.openwall.com/lists/oss-security/2016/02/28/3](http://www.openwall.com/lists/oss-security/2016/02/28/3)

disclosureTime: "2017-02-07T15:59:00Z"
image: nginx
isUpgradable: false
kind: replicationcontroller
language: linux
package: coreutils
packageManager: linux
path: replicationcontroller/example-rc:nginx
publicationTime: "2017-02-07T15:59:00Z"
resource: example-rc
severity: medium
title: Improper Input Validation
url: https://dev.snyk.io/vuln/SNYK-LINUX-COREUTILS-104909
version: 8.30-3

Octantのダッシュボードに脆弱性データを表示する

Octantは、VMwareが提供する新しいKubernetesダッシュボードです。リリースから間もないものの、すでにkubectl CLIの幅広い機能をカバーし、強力なプラグインモデルも備えています。

Snyk Octantプラグインのインストール手順と、Snyk APIから関連データをKubernetesに取り込む方法は、https://github.com/snyk-labs/ksnykで確認できます。このAPIを利用するには、Snyk Containerをご利用いただく必要があります。

以下のDeploymentダッシュボードをご覧ください。ステータス欄に脆弱性データが表示され、ワークロードに現在存在する深刻度が高・中・低の脆弱性の数を確認できます。

「Deployment / snyky」の設定とステータスを表示するKubernetesダッシュボード。レプリカ1つと重大度の高い脆弱性3件が表示されています。

Octantはカスタムリソースの情報表示にも優れています。そのため、前述の脆弱性CRDをインストールすると、表示中の名前空間にある各ワークロードの脆弱性情報がOctantに表示されます。

ワークロードの詳細、サービスアカウント、シークレット、vulnerabilities.snyk.ioのセキュリティ検出結果テーブルを表示するKubernetesダッシュボード

このプロトタイプで確認できるのは、Octantで表示可能な情報のほんの一部です。Octantのプラグインエコシステムが今後どう成長するか、またKubernetes内の脆弱性データをほかのカスタムリソースとどう組み合わせられるかも楽しみです。

まとめ

前述のとおり、ここで紹介したのは完成した機能ではなく実験段階のものですが、早期のフィードバックをお待ちしています。Snyk Containerをご利用のお客様は、https://github.com/snyk-labs/ksnykのツールを使って今すぐお試しいただけます。これらのユーティリティは、Kubernetesプラットフォームの拡張性と、活用の基盤となるSnykの優れたAPIの威力を示しています。

開発者ファーストのコンテナセキュリティ

Snykは、コンテナイメージとKubernetesワークロードの脆弱性を検出し、自動的に修正します。