AquaでOpenShiftのセキュリティを高める

レッドハットでISVパートナーを担当している三島です。

Red Hat OpenShift(以下、OpenShift) の導入にあたっては、セキュリティについての検討も欠かせません。 今回、コンテナ自体のセキュリティを高める製品の一つであるAquaをご紹介をいたします。

OpenShiftには管理画面上からコンテナパッケージをデプロイ可能な機能として「Operatorhub」があります。今回はこのOperatorhubを使い、コンテナセキュリティ製品であるAquaのインストールから初期の設定の方法をご紹介します。 本記事は、クリエーションライン様にご協力をいただき、作成しております。 終わりに同内容の動画もありますので、合わせて御覧ください。

Aquaによるコンテナセキュリティ

AquaはAqua Security社(https://www.aquasec.com)が提供するコンテナセキュリティ製品です。国内ではクリエーションライン社(https://www.creationline.com/aqua)が総代理店となっています。 設計ポリシーとして、ホスト側に負担をかけないようデザインされています。Aquaは、リソースを逼迫させることなく軽快に動作します。 Aquaはコンテナイメージのスキャンを行い、脆弱性、マルウエアなどの検知や外部からの攻撃を検知し、コンテナを実行する際のセキュリティを向上します。機能の詳細は後述します。

OperatorHubを使用したAquaの構築

Aquaを使用するためには、Aquaとの契約が必要です。あらかじめAqua社と契約し、発行されたライセンスを入手しておく必要があります。 ※Aquaのライセンス取得方法については今回記載しておりませんが、こちらでご紹介されていますので、ご参照ください。 OperatorHubを使用してAquaを構築するのは簡単です。 以下の構築手順とAquaの簡単な紹介を、動画で公開されています。書き手順とあわせてご参照ください。

1. まずAqua用のプロジェクトを作成します。今回は「aqua」という名前にします。
2. OpenShiftの画面でOperatorHubを開き、Aquaを検索すると複数表示されます。

「Community」はGithub上に公開されている10.2です。「Marcketplace」は、ライセンスをサブスクリプションとする最新版の10.4です。無印のものがAquaのライセンスをBYOLで用意する10.4です。

f:id:tadashimishima:20210426184447p:plain

今回は無印のBYOL版10.4を選択します。 f:id:tadashimishima:20210426184617p:plain

INSTALLボタンを選択し、次の画面でSubscriptionを選択すると。AquaがOperatorHubにインストールされます。

f:id:tadashimishima:20210426184544p:plain

f:id:tadashimishima:20210426184827p:plain

3. これでOperatorHubから、AquaがOpenShift環境へインストールされました。

f:id:tadashimishima:20210426184930p:plain

AquaのYAMLファイルを確認し、デフォルトのデータベースのパスワード(password)やAquaの管理者ユーザのパスワード(Password1)を変更しておきます。 f:id:tadashimishima:20210426185002p:plain

4. AquaCSPをインストールします。

このとき、自動的にAquaDatabase/AquaServer/AquaEnforcer/AquaGatewayがインストールされます。

AquaServer
中央制御のコンポーネントで、ユーザがセキュリティに関する設定やステータスを確認できるようなWebベースのUIを提供します。

AquaDatabasease
Aqua ServerおよびAqua Gatewayで使用されるPostgresデータベースです。

Aqua Enforcer(enforcer)
Aqua Serverで設定されたポリシーに基づいて、仮想/物理ホスト上のContainerを保護します。Aqua Enforcerは保護を行うすべてのホスト上に配置が必要です

Aqua Gateway
Aqua Serverと各種Enforcer間の通信を処理します。管理対象Enforcer数が多数となる場合は複数配置することで負荷分散が可能です。

f:id:tadashimishima:20210426190050p:plain f:id:tadashimishima:20210426190108p:plain

5. 次に、AquaScannerをデプロイします。

Aqua Scannerは、イメージの脆弱性をスキャンし、その結果をAqua Serverに送信します。Aqua Server内蔵のスキャン機能も同様の機能を持ちますが、独立して別ノード(ビルドサーバなど)に配置することが推奨されます。 これでAquaのインストールは完了です。 f:id:tadashimishima:20210426193222p:plain

6.aquaプロジェクトの Network→Routerに、インストールしたAquaのWeb画面のURLが表示されているので、それをクリックします。

f:id:tadashimishima:20210426193416p:plain

7.ユーザ「administrator」、YAMLファイルに設定したパスワードを設定してログインします。

f:id:tadashimishima:20210426193449p:plain

8.初回のみ、Aquaとの契約時に発行されたライセンスを入力します。

f:id:tadashimishima:20210426193531p:plain

9.Aquaの画面にログインできました。RiskExplolerを見ると、OpenShiftのすべてのプロジェクト(namespace)が監視対象に入っているのがわかります。

f:id:tadashimishima:20210426193614p:plain f:id:tadashimishima:20210426193623p:plain Aquaを含めOpenShiftで動作しているコンテナは、インストール直後ではAquaで検査されていません。そのため、PodのリスクがすべてMedium(オレンジ)の評価となっています。

10.OpenShiftのdefault プロジェクトに、デフォルトで用意されている「hello-openshift」という新しいPodを作成します。

f:id:tadashimishima:20210426193713p:plain 新たに作成したPodはAquaでスキャンされた状態で起動されます。そのため、AquaのRiskExploler上でも安全なPodであることが表示されます。 f:id:tadashimishima:20210426193748p:plain

Aqua を導入するメリット

Aquaはコンテナセキュリティ製品です。設計ポリシーとして、ホスト側に負担をかけないようデザインされています。Aquaは、リソースを逼迫させることなく軽快に動作します。 AquaをOpenShiftなどのコンテナ環境に導入することで、以下の機能を実現します。

Imageの静的スキャン

指定したコンテナイメージについて、以下の項目を検知します。

NIST、ベンダースコアなどで登録された脆弱性
OSパッケージ(Red Hat Enterprise Linuxを始めとしたLinux/Windows Server)や、言語パッケージ(Java/Node.js/PHP/Python/Ruby)に含まれる脆弱性を検知します。

秘密鍵などのセンシティブデータ
RSAキーやSSLのセッションパラメータなど、コンテナに含まれるべきではないデータを検知します。

マルウェア
Virus Scanner によりマルウェアを検知します。

OSSライセンス
イメージに含まれるOSSライセンスを検知します。

スキャンによって得られた情報は、脅威度( CVSS v2.0/CVSS v3.0)によって分類可能です。深刻な脆弱性があっても、OSベンダーによって回避されている脆弱性もあります。 このイメージスキャンはCI/CDシステムと連携可能で、作成したコンテナイメージの定期的なスキャンが可能です。

ランタイム保護

実行時のコンテナに対する攻撃から保護します。以下のようなポリシーを定義し設定することが可能です。

  • 許可されない、もしくは(脆弱性など)特定の条件を満たさないイメージの実行禁止
  • プロセス・スレッド数の上限を制御
  • 許可されないプロセス・システムコールの実行防止
  • コンテナ間ファイアウォールによる不正な通信の防止
  • 機械学習による行動分析/ホワイトリスティング
    コンテナの挙動を学習して、ランタイム時に使用されているリソース/プロセスのホワイトリスト化、およびホワイトリスト以外の機能の実行防止
  • その他
    CIS、NIST、PCI DSS、HIPPA等に対応した、初期定義ランタイムポリシーを用意しているほか、独自のポリシーをユーザが新たに作成することが可能です。

これらポリシーに準拠しない動作を検知したときに、コンテナを再起動することなくポリシー違反の動作のみを抑制可能です。またランタイムに対するポリシーを変更しても、再起動の必要なく実行中のコンテナに変更したポリシーが反映されます。

Drift Prevention

Aqua独自の機能で、元イメージに無い実行ファイルの実行をブロックする機能です。これを有効にしておくだけでも攻撃を大半を防げるであろう、設定も容易で強力なランタイム保護機能です。

vShield

新たな脆弱性は日々発見されますが、その修正には時間がかかることがあります。vShield機能は、既知の脆弱性に対して仮想的なパッチを当てることで、その危険性を回避する機能です。vShieldによる仮想パッチは、脆弱性が発見されてから24時間以内に提供されます。 開発者が脆弱性に対応するまで、vShieldによって暫定的に脆弱性から保護することが可能です。

マルチアプリケーションRBAC

アプリケーションのあらゆる要素へのアクセスを制御するための、RBAC機能を提供しています。ロールに対して、各種ポリシーやアセット・イベント種別・システムコンポーネントに、編集・読み取り権限を設定可能です。ロールは、Active DirectoryやLDAPとマッピングできます。ロールを割り当てるスコープとしてアーティファクト(イメージ、Function)、インフラ(クラスタ、ホスト)、Workloads(プロジェクト、コンテナなど)を指定できます。 また、柔軟なセキュリティ階層を定義可能です。例えば下位チームに読み取り専用ポリシーを割り当てたり、複数のロールをユーザに割り当てることで部門間チームを有効にできます。

Risk Explorer

Risk Explolerは、コンテナ環境内のWorkloads(コンテナ)とそれに関連するセキュリティリスクを動的に表示します。RiskExplolerはすべてのプロジェクト(namespace)、Kubernets リソース(deployment、statefulset、job等)、コンテナに含まれる脆弱性などの脅威度、Pod間のネットワーク接続などを可視化できます。 視覚的に表示する際に脅威度ごとに選択してハイライトを行い、高い脅威度だけを表示することも可能です。Risk Explolerは、実行中のWorkloadsのみを表しています。デプロイされていないイメージは表示されません。

Dynamic Threat Analysis(DTA )

Aqua Dynamic Threat Analysis (DTA) は、コンテナイメージを実環境でコンテナとして実行する前に、コンテナイメージがもたらすリスクを動的に評価する業界初のコンテナサンドボックスソリューションです。DTAは、安全で隔離されたサンドボックス環境でコンテナイメージを実行し、悪意のある動作やネットワークアクティビティなどの動作パターンやIoC(Indicators of Compromise)を監視して、コンテナの権限昇格、マルウェア、クリプトマイナー、コードインジェクションのバックドア、その他の脅威を検出します。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。