ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

Orca Security はルートテーブルを理解できない?

フォージビジョン Orca Security のサービスサイト がオープンしました。

ForgeVision - Orca Security サービスサイト

こんにちは、Orca Security 担当の尾谷です。

昨年 8 月に、以下調査を行ったことがあります。

Orca Security はルートテーブルを見ていないじゃないか? パブリック IP アドレスが付与されているというだけで、Internet Facing と判断していないか?

調査の結果、Orca Security はルートテーブルを正しく理解できませんでした。
ただ、それから半年が経過して、Orca は Attack Path の改修や、Blast Radius の追加などエンハンス開発が行われました。

当時は存在しなかったアセットディテールページには Graph 機能が強化されています。
Graph 機能では、より正確にクラウドのリソースマップを描画できるようになっています。

Graph サンプル

本ブログでは、昨年の 8 月に調査した課題が解消されているのか?
再検証した結果をアウトプットします。

このサーバーはインターネットに接続できますか?

まずはみなさんに質問させていただきます。以下の図をご覧ください。
みなさんは、以下のサーバー (Instance) がインターネットに接続できると思いますか?

もし AWS に詳しい方でしたら、結果がお分かりなるかと思うので、本ブログの下部にあります ここまでのまとめ まで読み飛ばしてください。

VPC 内のインスタンスがインターネットに接続するための条件

AWS が提供する Amazon VPC は仮想ファイアウォールの役割をします。
そのため、条件をクリアしないとインターネットに接続ができません。

条件 1. インターネットゲートウェイ

VPC にはインターネットゲートウェイという出口をアタッチする必要がある。

上図ではインターネットゲートウェイがアタッチされているので、条件 1 はクリアーできています。

条件 2. サーバーがパブリック IP アドレスを持つ

サーバー (Instance) には一つのネットワークインターフェース (NIC のようなもの) が必ず自動でアタッチされる。 アタッチされたネットワークインターフェースには、プライベート IP アドレスが必ず割り当てされるが、同時にパブリック IP アドレス (= グローバル IP アドレス) がアタッチされていないとインターネットに接続できない。これは、Elastic IP アドレス (固定) でも自動パブリック IP アドレスでも良い。

上図では、Elastic IP アドレスがアタッチされているので、条件 2 もクリアーできています。

条件 3. サブネットにインターネットに接続するためのルートテーブルが必要

サーバーはサブネットに起動するが、サブネットには一つのルートテーブルが必ずアタッチされる。ルートテーブルに、インターネット向けのルーティングが記載されていないとインターネット上にパケットが流れず、結果、インターネットに接続ができない。インターネット向けのルーティングがないサブネットはプライベートサブネットと呼ぶ。

上図では、サーバーがプライベートサブネットに起動しているので、インターネットに接続できません。

以上より、上図の構成ではサーバーはインターネットに接続できません。

Orca Security は上図の構成を Internet Facing と誤って理解する

昨年 8 月に調査をしたとき、Attack Vector は確かにインターネットに接続できる線を描画していました。
当時のスクリーンショットがありましたので貼り付けます。
SideScanning の初動で正しくメタデータを読み込めていないことが原因だと推測されます。

これが改善されているか、実際に環境を用意して確認してみたいと思います!

VPC を起動

  1. [VPC ダッシュボード] を選択して、表示された [VPC を作成] ボタンをクリックします。
  2. [VPC を作成] 画面に遷移するので、
  3. アベイラビリティゾーン (AZ) の数を 1 にして、パブリックサブネットの数を 0、プライベートサブネットの数を 1 にします。
  4. NAT ゲートウェイも VPC エンドポイントもアタッチしません。 [VPC を作成] ボタンをクリックします。

一発で VPC ができました。

サブネットにアタッチされたルートテーブルには、「0.0.0.0/0 → インターネットゲートウェイ」の外に出るためのルーティングがありません。プライベートサブネットになっています。

こんな感じです。

最初の図に合わせるため、インターネットゲートウェイだけ手動でアタッチします。

ナビゲーションペインから、インターネットゲーウェイを選択して、[インターネットゲートウェイの作成] ボタンをクリックします。

任意の名前をつけて、[インターネットゲートウェイの作成] ボタンをクリックします。

[アクション] ボタンから [VPC にアタッチ] を選択してアタッチします。

サーバー (EC2 インスタンス) を起動する

上記 VPC に EC2 インスタンスを起動しました。本題と逸れるので EC2 の起動手順は省略しますが、確かにパブリック IP アドレスが付与されています。

さらに、Elastic IP アドレスもアタッチしておきました。

これで、図の状態が出来上がりました。

セキュリティグループも全世界に開放しています!

ここまでのまとめ

長々と記載してきましたが、一旦まとめます。

  • プライベートサブネットに EC2 インスタンスを起動した。
  • Elastic IP アドレスも付与して、パブリック IP アドレスを付与している。
  • セキュリティグループも 22 ポートを全世界に開放した。
  • 一見、リスクを孕むように見えるがインターネットには接続できないので安全。

Orca Security のスキャン結果

スキャンが完了しました。

残念ながら、Internet Facing は Yes となりました。

また、インターネットから 22 ポートが繋がるという判定になりました。これも誤っています。

まとめ

残念ながら、Orca Security は、未だルートテーブルを考慮した Attack Vector の描画ができないと分かりましたが、検証した環境はそもそも、正しく AWS を利用できていないので、アーキテクチャの見直しを行うべきだと感じました。
また、その気づきになるのは良いと感じました。

以上、最後までお読みくださりありがとうございました。