# Google App Engine ## 概要 Google App Engine は、利用者がアプリケーションコードをホストし、ネットワーク・マシン・OS を自ら管理することなく負荷に応じて自動スケールできるようにする Google のマネージド実行環境(PaaS)である。セキュリティ責任はレイヤーごとに分担され、アプリケーションコードの安全性は開発者が、Python/Java ランタイムと基盤 OS の安全性は Google が担う。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 8 Design for Resilience]] ch.8 §Google App Engine Analysis) ## サンドボックス設計 初期実装では、サードパーティの未信頼コードを他の Google 本番ジョブと同様に安全に実行するという課題があった。仮想マシンごとの分離はスケールに対して非効率と判断され、代わりに以下の多層防御が構築された。 1. **危険 API の除去・置き換え**: ネットワーク I/O やファイルシステム操作の組み込み API を除去し、他のクラウドインフラを呼び出す「安全な」版へ置き換えた。ユーザ提供のコンパイル済みバイトコードや共有ライブラリは禁止し、提供されたライブラリと許可されたランタイム限定のオープンソース実装のみ使用を許した。 2. **Native Client(NaCl)コンパイル**: 監査で見つけたメモリ破壊バグの修正だけでは防御漏れが残ると想定し、Python ランタイムを NaCl ビットコードへコンパイルすることで、メモリ破壊・制御フロー乗っ取り攻撃の多くのクラスを防いだ。 3. **`ptrace` サンドボックス層**: NaCl でも防ぎきれない場合に備え、`ptrace` による第2のサンドボックス層を重ね、予期しないシステムコールやパラメータを検知するとランタイムを即座に終了し高優先度アラートを発報した。 各層は前の層が見逃す弱点を補うよう設計されており、5年間の運用で外部のセキュリティ研究者による悪用が数件発見されたが、多層のサンドボックスが攻撃者の活動を設計上の範囲内に封じ込めた。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 8 Design for Resilience]] ch.8 §Runtime Layers) ## 関連 - ソース: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 8 Design for Resilience]] - 概念: [[多層防御]] ## 出典 - Heather Adkins et al. (eds.), *Building Secure and Reliable Systems*, O'Reilly Media, 2020, Chapter 8.