評価とテスト SUSE® Security

サンプルアプリケーション

SUSE® Security コンポーネントをデプロイした後、提供されたサンプルテストアプリケーションを使用して評価できます。これらは、docker hub の 'nvbeta リポジトリにあります。

典型的な Kubernetes ベースのテスト環境には、マスターノードと 2 から 3 のワーカーノードがあります。アプリケーションポッドと SUSE® Security コンテナがマスターノードにデプロイされるかどうかを制御できます(デフォルトではオフ)。

Kubernetes テストプラン

Nginx、Nodejs、および Redis を使用してマルチティアアプリケーションをデプロイするには、以下のサンプルを使用してください(以下の順序に従って)。これらは、OpenShift、Rancher およびその他の Kubernetes ベースのツールでのデプロイのために編集する必要があるかもしれません。

デモネームスペースを作成する

kubectl create namespace demo

以下のサンプルは、Kubernetes 1.16+ に必要な apiVersion: apps/v1 を使用しています。

この yaml を使用して Redis サービスとデプロイメントを作成します:

apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: demo
spec:
  ports:
  - port: 6379
    protocol: "TCP"
    name: "cluster-tcp-6379"
  clusterIP: None
  selector:
    app: redis-pod

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-pod
  namespace: demo
spec:
  selector:
    matchLabels:
      app: redis-pod
  template:
    metadata:
      labels:
        app: redis-pod
    spec:
      containers:
      - name: redis-pod
        image: redis

この yaml を使用して Nodejs サービスとデプロイメントを作成します:

apiVersion: v1
kind: Service
metadata:
  name: node
  namespace: demo
spec:
  ports:
  - port: 8888
    protocol: "TCP"
    name: "cluster-tcp-8888"
  clusterIP: None
  selector:
    app: node-pod

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-pod
  namespace: demo
spec:
  selector:
    matchLabels:
      app: node-pod
  replicas: 3
  template:
    metadata:
      labels:
        app: node-pod
    spec:
      containers:
      - name: node-pod
        image: nvbeta/node

この yaml を使用して Nginx サービスとデプロイメントを作成します:

apiVersion: v1
kind: Service
metadata:
  name: nginx-webui
  namespace: demo
spec:
  ports:
    - port: 80
      name: webui
      protocol: TCP
  type: NodePort
  selector:
    app: nginx-pod

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-pod
  namespace: demo
spec:
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx-pod
        image: nvbeta/swarm_nginx
        ports:
        - containerPort: 80
          protocol: TCP

Nginx-webui サービスに外部からアクセスするには、NodePort によってポート 80 にマッピングされたランダムポートを見つけます:

kubectl get svc -n demo

次に、Kubernetes ノードのいずれかのパブリック IP アドレス/ポートに接続します。例: http://(public_IP):(NodePort)

SUSE® Security をデプロイした後、デモアプリケーションを通じてテストトラフィックを実行し、ホワイトリストルールを生成した後、すべてのサービスをモニターまたはプロテクトモードに移行して、違反や攻撃を確認できます。

Kubernetes でのネットワーク違反の生成

Nodejs ポッドから違反を生成するには、ポッドを見つけます:

kubectl get pod -n demo

それでは、いくつかの違反を試してみてください(ノードポッド名を置き換えます):

kubectl exec node-pod-name curl www.google.com -n demo

また、以下の例のように、172.30.2.21のような別のノードポッドの内部IPアドレスを見つけて、ノード間で接続します:

kubectl exec node-pod-name curl 172.30.2.21:8888 -n demo

脅威/攻撃を生成する

攻撃をシミュレートするために、コンテナにログインし、ping攻撃を試みてください:

kubectl exec -it node-pod-name bash -n demo

別のノードポッドの内部IPを使用してください:

ping 172.30.2.21 -s 40000

上記のすべてについて、SUSE® Security コンソールのネットワークアクティビティマップや通知タブでセキュリティイベントを確認できます。

プロセスおよびファイル保護テスト

コンテナにexecして、apt-get update、ssh、scpなどのコマンドを実行することで、さまざまなプロセスおよびファイルアクティビティを試してください。許可されていないプロセスアクティビティやファイルアクセスは、通知にアラートを生成します。

レジストリスキャンおよび入場制御

一般的なテストとして、Assets → Registries にあるレジストリでイメージスキャンを構成する、という方法が挙げられます。スキャンが完了したら、ポリシーで入場制御ルールを構成します。入場制御を有効にし、イメージに高い脆弱性がある場合は拒否するルールを設定してください。次に、高い脆弱性を持つイメージを選択し、Kubernetesにデプロイしてみてください。デプロイメントは保護モードでブロックされ、通知 → セキュリティリスクにイベントが表示されます。

より高度な入場制御テストは、ルール内の異なる基準を使用したり、基準を組み合わせたりすることで行うことができます。

別のアプリをデプロイする

KubernetesのゲストブックデモアプリケーションもKubernetesにデプロイできます。それを独自のネームスペースにデプロイすることをお勧めします。そうすれば、SUSE® Security コンソールでネームスペースベースのフィルタリングを確認できます。

Dockerネイティブテストプラン

SUSE® Security コンポーネントとサンプルアプリケーションをデプロイした後、実行中のコンテナを発見、監視、保護することができるようになります。以下のテストプランは、許可されたアプリケーションの動作のランタイム違反を生成し、コンテナの脆弱性をスキャンするための提案を提供します。

上記のリンクが機能しない場合は、パスワード nv1851blvd を使用して、私たちのウェブサイトから ダウンロード できます。

SUSE® Securityは、DDOS攻撃など、コンテナへの脅威を検出することもできます。コンテナに対してそのような攻撃を生成するツールを実行すると、これらの結果はネットワークアクティビティとダッシュボードに表示されます。

例えば、高いペイロードを持つシンプルなpingコマンドは、コンソールにPing.Death攻撃を表示します。これを試すには、コンテナのIPアドレス(コンテナの内部IP)に対して次の操作を行ってください。

ping <container_ip> -s 40000

Kubernetesでは、マスターを含む任意のノードからこれを行うことができます。他の環境では、コンテナが実行されているノードにログインする必要がある場合があります。