「ゼロトラストネットワーク」を読んだ

Posted on November 23, 2019 , Tags: Zero Trust Networks, Book Review

「ゼロトラストネットワーク」 を読んだので感想などを書く。

読んだ目的

今の会社はフルリモート環境ということで、各自自宅やカフェなどで普段作業を行っている。 そういった状況において、セキュリティを担保するためのよりよい方法が学べるのではないかと思い、この本を読んだ。

感想

この本の通りにゼロトラストネットワークを構築するのは大変そうだなと感じた。コントロールプレーンに認証、認可を集約させるような仕組みの構築や、信用スコアを用いた動的な認可の制御など、大掛かりになりそうなものが多い印象だった。
後半の一部にコントロールプレーンなしの簡易的なものの導入方法も触れられており、まずはここを目指せるとよいかと思う。
また、できるだけ信用を動的にするための仕組み、特に期限つきの認証・認可ができるような仕組みの導入はゼロトラストに近づくために重要そうだと感じた。

各章ごとの気になった点

1章 ゼロトラストの基礎

ここでは、なぜゼロトラストネットワークが必要なのかについて述べられていた。従来のネットワークの構成方法を「境界モデル」とよび、境界モデルの限界(内部に潜入さえしてしまえば、信用された状態になるなど)に触れられており、なるほど、と感じた。

2章 信頼と信用の管理

2章では、脅威モデル、公開鍵基盤などの説明をした上で、ゼロトラストの構成要素の説明がされていた。ゼロトラストではパブリックPKIよりプライベートPKIを推奨する、という一瞬驚く主張がされており、興味深かった。また、sudoのように必要なときだけ権限を取得する、最小権限の原則については、比較的手軽に実践できそうで、心がけたい点だ。
アメリカのクレジットカードスコアのように信用スコアに応じて権限がかわる、というモデルはここで導入されていて、とても面白い、かつリーズナブルな発想だな、と思った。

3章 ネットワークエージェント

エージェントとはユーザーとデバイスのデータの組み合わせことであり、ゼロトラストではこのエージェントの単位で認可を検証する。ある人がPCではGitリポジトリへのコミットを行うが、モバイル端末でアクセスするときはコミットはしない、などの特性によって認可制御ができるからである。この辺の話も原則的にはうなづけることが多く、どう実現するかは別として、その単位で認可の制御ができるのが理想だと感じた。
また、エージェントは認証には使用されず、認可には使用される、というのも興味深かった。
ゼロトラストネットワーク全体について言えることだが、まだ標準は決まっていないため、各自工夫が必要そうだ。

4章 認可の判断

4章ではゼロトラストネットワークでの認可アーキテクチャについて説明されていた。

  • エンフォーサ: 認可の問い合わせを行うクライアントのようなもの。ワークロードのできるだけ近くに配置。
  • ポリシーエンジン: 認可の可否を判断する。
  • トラストエンジン: リスク分析を行い、ポリシーエンジンに信用スコアを提供する
  • データストア: ポリシーエンジンやトラストエンジンから使用されるデータを格納する場所

5章 デバイスの信頼と信用

デバイスについての認証方法や認可についての留意点が書かれていた。
TPMについては不勉強で、この本ではじめて認知した。現時点ではTPMアクセスは煩雑で、効率がよくないため、X.509によるアイデンティティと認証も使い分けることが推奨されていた。
長期間使用されているデバイスはその分攻撃にも晒されやすいため、定期的なローテーションも推奨されていた。docker化などで実機への依存が少なくなっている今の時代では手軽にできそうだと感じた。
デバイスの認証を済ませた後でユーザーの認証を行うことでデバイスの地理情報などをユーザーの認証に使用できるのはうまい方法だと思う。

6章 ユーザーの信頼と信用

デバイスの認証が済んだら、今度は「デバイスを使っているのはどのユーザーなのか?」を認証しなければならない。
ユーザーの認証として、ここでは以下の3種類があげられていた。

  • ユーザーが知っているもの: パスワードなど
  • ユーザーが持っているもの: 期限つきトークンなど
  • ユーザー自身のもの: 指紋など

状況によってこれらを組み合わせて使用する。コラムにかかれていたが、ユーザーは物理的な暴力などで、こういった情報の提供を強要されるかもしれない。したがって、本当に重要なものを守るには複数人の認証(シャミアの秘密分散法)を必要とする、などの措置が必要となる。

7章 アプリケーションの信頼と信用

デバイスやユーザーが信用できるものでも、デバイスの上で動くコードに悪意のあるものが混じっている場合がある。7章ではそういった場合に備えたアプリケーションの信頼と信用について書かれている。
ソースコード自身、デプロイフロー、リポジトリなど、プロダクション環境でコードが動くまでに悪意が紛れこむポイントはいくつかある。最近はGitHubでも署名つきのコミットが表示されるようになっていたり、開発環境もよくなってきていると思う。
また、ファジングなど、動的な監視によって常に異常を発見できるようにしなければならない、と書かれていた。

8章トラフィックの信頼と信用

ここでは、ネットワークフローの認証と認可について書かれている。
ゼロトラストネットワークではVPNをトンネルモードで使用し、「信頼されているネットワーク」内の防御を手薄くしてしまうことを厳しく批判している。
対応端末など、現実的な問題を鑑み、トラフィックの認証では、クライアント-サーバ間はmTLS(相互TLS、ブラウザでアクセスする場合限定になってしまう)、サーバ-サーバ間はIPsecが推奨されている。mTLSは存在はなんとなく知っていたものの、あまり使用する場面がわかっていなかったため、また調べて導入できる場面があるか検討してみようと思う。
ゼロトラストネットワークではトラフィックのフィルタリングに送信者と受信者以外の第3者が使用されるべき、という「中間フィルタリング」というものが推奨されている。デバイス自体とフィルタリングを別立てにすることで、デバイスに侵入されたときもフィルタリングで被害を防ぎやすい。

9章 ゼロトラストネットワークの実現

実際にゼロトラストネットワークを実現するにあたり、何が必要なのか、どうやるのかの概要が述べられている。
個人的にはこれでもまだハードルが高いなと感じており、標準化が進み、サポートするツールが充実してこないとなかなか移行に踏み切れるチームは少ないのではと思う。

10章 攻撃者の視点

攻撃者からみたゼロトラストネットワークが書かれている。
ゼロトラストがカバーしない範囲について述べられていて、よかったと思う。特にゼロトラストネットワークでは機密性は保証されるがプライバシーは保証されない、つまりコミュニケーションの内容はわからないけどコミュニケーションが発生したことは観測可能である、とのことだ。
また、ゼロトラストネットワークではコントロールプレーンがかなり重要な役割を果たす。そのため、コントロールプレーン、特にポリシーエンジンのポリシーが改竄されるようなことはあってはならず、厳しい認証、認可を設定すべきである、と書かれている。