1 / 36

セキュアかつ高性能な ウェブサーバの設計と実装

セキュアかつ高性能な ウェブサーバの設計と実装. 電気通信大学 情報工学科 原 大輔 中山 泰一. 概要. 共有型ホスティングサービス向けのウェブサーバシステムを提案 数百~数千サイト/サーバ 組み込みインタプリタは高速なのに、 mod_ruby, mod_perl サーバ内部のセキュリティのためにホスティングでは使えない!. ホスティングで組み込みインタプリタが使えるように!. 発表の流れ. 背景 設計 実装 評価 デモ 関連研究 まとめ. 背景. ウェブサイトを公開する人の増加 Weblog, Wiki, CMS

Download Presentation

セキュアかつ高性能な ウェブサーバの設計と実装

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. セキュアかつ高性能なウェブサーバの設計と実装セキュアかつ高性能なウェブサーバの設計と実装 電気通信大学 情報工学科 原 大輔 中山 泰一 第47回プロシン@箱根

  2. 概要 • 共有型ホスティングサービス向けのウェブサーバシステムを提案 • 数百~数千サイト/サーバ • 組み込みインタプリタは高速なのに、 • mod_ruby, mod_perl • サーバ内部のセキュリティのためにホスティングでは使えない! ホスティングで組み込みインタプリタが使えるように!

  3. 発表の流れ • 背景 • 設計 • 実装 • 評価 • デモ • 関連研究 • まとめ

  4. 背景 • ウェブサイトを公開する人の増加 • Weblog, Wiki, CMS • 共有型ホスティングサービスに人気集中 • 1台のサーバを数百~数千サイト規模で共有 風呂トイレ共同

  5. 背景 既存のウェブサーバの問題 • サーバ組み込みのモジュールとして提供されるプログラム(組み込みモジュール)をセキュアに利用できない • サーバプロセスが同一のユーザ権限(※)で動作することに起因 (※)ウェブサーバ専用ユーザ:www, apache, www-data などの名前が使われている

  6. 背景 既存のウェブサーバの問題(続き) • 組み込みインタプリタ (mod_ruby, mod_perl, …) • サーバプロセスにインタプリタを内包することにより、動的コンテンツを高速配信 • サーバを共有する別のユーザからファイルを盗視・改ざんされる危険性 ・・・サーバ内部のセキュリティ • “other”に許可が必要 (owner/group/other)

  7. 背景 サーバ内部のセキュリティ Aさんのサイト Bさんのサイト ID、パスワード 認証 認証コンテンツ Cさんのサイト Browser Server 認証を掛け、コンテンツの閲覧を制限できる ⇒ ウェブにも機密データが沢山!

  8. 背景 サーバ内部のセキュリティ(続き) Aさんのサイト Bさんのサイト • ファイルパーミッション • 公開ファイル: • rw-/---/r-- (604) • データファイル: • rw-/---/rw- (606) 認証コンテンツ Cさんのサイト しかし、 不正閲覧 Server サーバ内部からは認証なしにコンテンツを閲覧可能 (cp, rm)

  9. 背景 サーバ内部のセキュリティ(続き) ならば、POSIX ACLを用いて、 ウェブサーバ専用ユーザ (www) だけに許可を与える Aさんのサイト Bさんのサイト • ファイルパーミッション • 公開ファイル: • rw-/---/--- (600) • +www に読み取り許可 • データファイル: • rw-/---/--- (600) • +www に書き込み許可 認証コンテンツ Cさんのサイト 不正閲覧 Server CGI CGI も www の権限で動作

  10. 背景 サーバ内部のセキュリティ(続き) さらに、suEXEC を 用いて、CGI を各サイト 所有者の権限で実行 Aさんのサイト Bさんのサイト 認証コンテンツ Cさんのサイト 不正閲覧 Server PHP スクリプト 組み込みインタプリタも www の権限で動作

  11. 背景 Harache (文献[13][14]) • サーバプロセスをサイトごとに異なるユーザ権限で実行 root root ② ① userA ③ GET /~userA/ root ④ • A さんのサイトにリクエスト • userA にユーザ権限変更 • リクエスト処理 • レスポンスを返す Browser

  12. 背景 Harache (続き) • 組み込みモジュールをセキュアに利用できないという問題を解決 • 全てのコンテンツ(静的・CGI・組み込みスクリプト)のファイルパーミッションが所有者のみで OK • 組み込みインタプリタによる高速化を十分活用できていない • セッション毎にサーバプロセスを終了(= CGI) 一度ユーザ権限を変更したサーバプロセスが 別のサイトの処理を行なえない

  13. 目的 • セキュアかつ高性能なウェブサーバシステム、 の実現 • 共有型ホスティングサービスのような大規模環境を対象

  14. 設計 • セキュア:サーバ内の高セキュリティ → サーバプロセスをパーティション毎に異なる ユーザ権限で実行(=Harache) • 高性能:動的コンテンツの高速配信 → 組み込みインタプリタによる高速化に対応 ※パーティション・・・ウェブオブジェクトの分割単位 サイト、コンテンツ、QUERY_STRING など 異なるユーザ権限で動作するサーバプロセスを プールして再利用(≠Harache)

  15. Wiki Wiki Wiki Weblog 設計 パーティション:サイト Website A Website B Website C サーバプロセスをサイト毎に 異なるユーザ権限で実行 Weblog サイト毎に計算資源使用量取得 ・利用制限が容易に可能 Weblog CMS CMS Web Server OS

  16. 設計 パーティション:コンテンツ Website A Website B Website C Wiki Wiki Wiki サーバプロセスをコンテンツ毎に 異なるユーザ権限で実行 Weblog Weblog Weblog CMS CMS Web Server OS

  17. 設計 アーキテクチャ • リバースプロキシ型ネットワーク • dispatcher × 1 • worker × 沢山 • パーティション(サイト、コンテンツなど)毎にウェブサーバ (worker) を割り当て、それぞれ異なるユーザ権限で実行 • サーバ内の高セキュリティを実現 • SELinux などのセキュア OS との親和性が高い • worker をリクエストに応じて動的に起動・終了 • 問題:パーティション数分の worker がメモリを圧迫 • 目標:高性能・パーティション数に対する高スケーラビリティ

  18. 設計 パーティション数に対する高スケーラビリティ • メモリ使用量が性能に大きな影響を及ぼす(文献[13]) • いかにスラッシングを防ぐかが重要! • なるべくスワッピングを起こさないようにして、性能低下を防ぐ

  19. 設計 Content Access Scheduler • ウェブサーバレベルでのスケジューラ • worker プロセスの生成と終了を司る • 目標 • 高性能&高スケーラビリティ • 方針 • スワッピングを低頻度に抑える • 手段 • スワッピングが発生したと判断すると、最近リクエストされていない worker を停止する

  20. 実装 • OS: Linux OS • dispatcher • リバースプロキシサーバ • Apache 2.0.55 + mod_hisap • worker • Apache 2.0.55×1000 • ウェブサーバならなんでもOK • hisapd • Content Access Scheduler • worker の動的起動・終了

  21. UNIX Domain socket GET / HTTP/1.1 Host: www.C.net A C C A C A C 動作概略 HTTP worker Cを起動するよう要請 worker Cが アクティブか判断 Browser worker A へのリクエストがない hisapd dispatcher www root レスポンス www root 準備完了 リバース プロキシ worker A を 終了 worker C を起動 … B B リクエスト処理 B Server workers

  22. 実装 Content Access Scheduler のスケジューリング・アルゴリズム • worker killer 開始条件 • スワップイン&アウトが発生していること • メモリ使用量が99 % を越えていること • 終了する worker の選択条件 • 起動していること • Worker Request Log の最近10000 アクセスに記録されていないこと • 擬似 LRU

  23. 評価 • 基礎性能評価実験 • スケーラビリティ評価実験 • サーバ当たりのパーティション数に対するスケーラビリティ

  24. 評価 基礎性能評価実験 • 対象コンテンツ • phpinfo() を実行する PHP スクリプト • 比較対象 • 通常の Apache • suEXEC を有効にした Apache • ベンチマーク • httperf

  25. ベースとして用いた Apache と比較して、平均28.0 %、最大56.5 %の性能低下(リバースプロキシ分) • suEXEC と比較して、平均10.2倍、最大14.3倍の性能

  26. 評価 スケーラビリティ評価実験 • 対象コンテンツ • phpinfo() を実行する PHP スクリプト • 比較対象 • 1 vs 1 • パーティション毎にウェブサーバを用意 • ベンチマーク • Apache benchmark

  27. 1 vs 1 はパーティション数600でメモリ不足に陥り、 OS がハングアップ • 本システムはパーティション数増加による性能低下が小さい ⇒ スケーラビリティが高い

  28. 1 vs 1 はパーティション数に比例してメモリ使用量増加し、スラッシングが発生 • 本システムは Content Access Scheduler が働き、スラッシングを防止

  29. デモ • ユーザ権限確認 • 秘密の Wiki データ改ざん実験 • 比較対象:通常の Apache+mod_ruby

  30. 関連研究 • サンドボックス・VM • サーバソフトや OS を他と隔離して実行 • サンドボックス:jail • VM:Xen, VMware • サイト毎にサンドボックス/VM を割り当てればサーバ内の高セキュリティを達成 • サイト数に対するスケーラビリティが極めて低い

  31. 関連研究(続き) • PHP セーフモード • スクリプトにより操作できるファイルの制限 • 変更できる環境変数の制限 • 特定の関数・クラスの無効化 • サーバ内の高セキュリティを達成 • 他の組み込みインタプリタでは実現されておらず、標準的でない • 使いにくい

  32. 関連研究(続き) • Apache perchild MPM • サイト毎に異なるユーザ/グループ権限でウェブサーバを実行 • 仕様上はサーバ内部の高セキュリティを達成 • サーバ起動時に各サイト専用のサーバプロセスを固定数ずつ生成する必要があり、スケーラビリティが低い • 実験段階のまま開発終了

  33. ウェブサーバ実現方式の比較

  34. まとめ • 共有型ホスティングサービス向けのウェブサーバシステムを提案 • セキュアかつ高性能 • 現在、電通大情報工学科・情報工学実験においてセキュリティを評価中 • 今後、Content Access Scheduler を改良し、性能・スケーラビリティの向上を目指す予定 • http://www.hi-sap.net/

  35. 謝辞 • 本研究は、一部、独立行政法人情報処理推進機構(IPA) 「未踏ソフトウェア創造事業」の支援による • 貴重な御助言を下さった並木美太郎 PM に感謝致します

  36. おしまい ご清聴、ありがとうございました

More Related