Drift Preventionにより攻撃を防ぐ #AquaSecurity #コンテナ #セキュリティ #ランタイム
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2020年3月19日に公開された「 Blocking Attacks in Runtime with Drift Prevention 」の日本語翻訳です。
Drift Prevention により攻撃を防ぐ
Drift Prevention は、クラウドネイティブ環境におけるマルウェア・ワーム・ゼロデイ攻撃に対する答えです。近年セキュリティの専門家の悩みの種の一つであるファイアウォール以降のセキュリティについての解決と言っても過言ではありません。「攻撃を止めきることはできないので、対策はやめよう」という敗北主義的なアプローチからの脱却です。率直に言って、私のようなセキュリティ専門家にとって憂鬱なものです。以下に、その理由を述べていきます。
リマインダー:なぜ我々はここにいるのか
「独自のプログラムを他の環境でも実行できるようにすること」は、ITインフラストラクチャへの攻撃のゴールへの第一歩です。攻撃者は、ウイルスを繁殖させたり、データを盗んだり、身代金のためにデータを暗号化したり、さらにはマイニングのために不正にリソースを使用したりします。これらを実現するために、何らかの形で不特定多数の環境で攻撃者のプログラムを実行する必要があります。
ITセキュリティの目的はまさにそれらを防ぐことです。物理的な制御・認証・承認・ファイアウォール・パッチ適用・ウイルス対策・脆弱性管理・ロギング・インシデント対応を実装する作業は、主に不正コードを実行する不正ユーザの不測の事態へ対処するため行われます。そして皆さんは年を重ねることで我々がこの作業に慣れるものと思われるでしょう。
ランサムウェア・クリプトマイニング・データの盗難等の攻撃が発生し続ける理由はたくさんあります。脆弱なセキュリティと人的エラーが主な要因です。しかし、本質は「セキュリティが負け戦に挑んでいる」ということです。ほとんどのITシステムの実態は非常に複雑です。多数の異なる場所にある相互接続されたシステムは、多くのシステム管理者によって変化し続けています。コンピュータは複数のタスクを同時に実行し、複雑に多層化されたアプリケーションを複数のユーザへサービス提供しています。「次世代」ファイアウォールを使用して外部の攻撃から保護したり、ログファイルから十分な情報を取得して、良いイベントと悪いイベントを分離できると期待するのは合理的ではありません。分散コンピューティングでアクセス許可をモデリングの試みもほとんど失敗に終わりました。侵入を効果的に防ぐことは、その複雑さゆえに、セキュリティが諦めかけていた課題でした。
クラウドネイティブの不変性はセキュリティへの贈り物
しかし、IT管理基本の1つの側面が変わりました。クラウドネイティブとは、アプリケーションの構造・開発・パッケージ化および展開を変更することを目的とした方法論です。また、人的リソースの大きな部分を削減できます。クラウドネイティブアプリケーションは独立したマイクロサービスで構成されます。各サービスは1つのことだけを行います。各サービスはビルドして初めて展開され、別のサービスまたはアップデートの際にはまたビルドし直します。一度リリースしたあと、サービスそのものの管理・人による人為的作業・サービスの稼働中の変更は許可しません。これが「不変性」の成しうる成果です。
ITセキュリティにとって、クラウドネイティブは天の恵みであり、頭痛の種ではありません。それは現実を単純化・予測可能・不変、そして何よりも防御可能にします。ワークロードが単一の機能を実行し、データをほとんど保持しないイメージ(コンテナイメージ・function・VM)からワークロードが発生する世界では、攻撃者はコードを隠す機会が限られています。アプリケーションのすべてのソフトウェアが事前に定義されていて変更できない場合、その定義に本来含まれていないものは容易に見つけることができます。実行中のワークロードにソフトウェアを追加できないとなると、そのソフトウェアがウイルス・クリプトマイニング・データ盗難プログラムであってもあまり問題ではありません。誰が追加しようとしているかも重要ではありません。実行時にクラウドネイティブワークロードへソフトウェアを追加しないでください、それだけです。
Drift Prevention とは?
上記の解決策として Drift Prevention を紹介します。ここでいう Drift とは、取得したイメージに内包されているソフトウェアの状態とそのイメージをもとに実行したワークロード上のソフトウェアの違いを意味します。Preventionとは、所属していないソフトウェアをすぐに防ぐことができることを意味します。防ぐことにより、コンテナ・function・またはアプリケーション全体に影響をあたえずに、本来そのイメージに属していないもののみをブロックします。署名照合・機械学習・リソースオーバーヘッドはありません。もしイメージになかったソフトウェアがワークロードに追加されても、実行ができません。非常に簡潔でシンプルです。
それが Aqua CSP の Drift Prevention の力です。これは Aqua CSP の1機能であり、Aqua ランタイム時の設定項目として Aqua CSP GUI から利用できます。Aqua CSP が環境に展開され Drift Prevention を有効とした場合、どの実行可能ファイルが元のイメージへ属す/属さないが明確に識別されます。属していないものは防がれます。私たちは事実上、不変性の高貴な原則を実施しています。
なぜこんなことが可能なのでしょうか? Aqua はワークロードを開始から実行時まで追跡し、現在のペイロードを元の状態と比較、すべての違いを識別しそれらの実行を外科的にブロックする能力があるためです。これは統計・経験則・または署名に依存しない決定論的な能力であり、当て推量ではなく知識に依存しています。
Drift Prevention は、イメージが管理している CI/CD パイプラインから利用されたものなのかをチェックしたり、イメージスキャンされていない実行中のコンテナを単に識別するために利用する機能ではありません。これは Aqua CSP によって提供される Image Assurance と呼ばれる基本的な機能により管理します。今ここで言及しているのは、コードインジェクションなどデプロイ時に承認されたコンテナに対する変更です。ホスト上のプロセスを検索するタイプのツールではこれを検出できません。コンテナ内で発生する変更を追跡する機能もありません。
実質、Drift Prevention はワークロードが脆弱性・ゼロデイ攻撃・または不正なシステム管理者から保護することを意味します。そうです、Drift Prevention は内部からの脅威も阻止します。
以下の例では、Kubernetes 環境で WordPress を動かしています。これには脆弱なプラグインが含まれており、任意のコードをリモートでダウンロードして実行するために使用できます。この脆弱性を悪用してクリプトマイニングを実行します。クリプトマイナーがダウンロードされるとすぐに、Aqua CSP はそれを元のイメージからのものではないソフトウェアとして識別し、その実行をブロックします。攻撃は阻止されました。問題は解決しました。この特定のマイナーが新しく、以前に見たことがない場合でも問題ではありません。重要なのはコンテナがデプロイされたイメージの一部ではなかったことです。また Aqua CSP はこの侵入の試みに関する貴重なデータを提供し、クリプトマイナーのダウンロードにつながった一連のイベントと生成されたネットワークアクティビティを収集します。
まとめ
すべての展開モデルで、トランザクション自体に侵入されないようにセキュリティを考慮してアプリケーションをコーディングする必要があります。すべてのインフラストラクチャには、DoS 攻撃への対策が必要です。脆弱性管理とセキュリティ運用は、全体的なリスクを下げるのに役立つ重要なサポート機能です。しかしクラウドネイティブのアプリケーションと環境に関しては、それらを保護するための努力をするなら、悪いことが起こらないようにすることを目標にしてください。攻撃者が望むものを取得することを防ぐ単一のツールで実施してください。
クラウドネイティブに関しては、意図したとおりにセキュリティを確保してください。
まずは Cloud Native における脆弱性管理を学びましょう