第1回 松本勉強会 2012 05 11 - 公開版

23
Webサービスの高度化に耐えうる 基盤設計に関する研究(前半) 1松本勉強会 511京都大学 情報学研究科 松本 亮介 @matsumotory

Upload: ryosuke-matsumoto

Post on 28-May-2015

4.296 views

Category:

Documents


5 download

DESCRIPTION

自分のこれまでの研究成果とmod_process_securityについての復習。

TRANSCRIPT

Page 1: 第1回 松本勉強会 2012 05 11 - 公開版

Webサービスの高度化に耐えうる 基盤設計に関する研究(前半)

第1回 松本勉強会 5月11日

京都大学 情報学研究科

松本 亮介 @matsumotory

Page 2: 第1回 松本勉強会 2012 05 11 - 公開版

今日の発表

1. これまでの研究成果

– 2011年12月(FSとして発表)

– 2012年03月(京大として発表)

2. 3月の発表内容を説明

– mod_process_security

適宜、質問・指摘・アドバイス下さい!

Page 3: 第1回 松本勉強会 2012 05 11 - 公開版

1. これまでの研究成果

Page 4: 第1回 松本勉強会 2012 05 11 - 公開版

研究の背景

• Webサービスを介したシステムが普及 –ホスティングサービス(レンタルサーバ)

• 低価格化

• 高機能

– Webサービスの高度化(Twitter、Facebook等) • Webアプリケーションで情報の共有

• HTTPを介したプログラムの実行(Web API)

– インシデントも増加 • Webサーバの高負荷

• アプリケーションの脆弱性からWebサーバの権限奪取

Webサービスの高度化に耐えうる基盤が必要

Page 5: 第1回 松本勉強会 2012 05 11 - 公開版

研究概要

• Webサーバと関連するOSのアーキテクチャを研究

– セキュリティ • Webアプリケーションの脆弱性の被害を最小限にする

– Webサーバ上の任意アクセス制御

– 大規模(高集積) • 物理サーバにどれだけユーザ領域を積み込めるか

– プロセス数やfork()に注目

– パフォーマンス • アクセス集中時もパフォーマンス劣化を少なくする

– ソケットI/OやファイルI/Oに注目(C10k問題)

– 運用性 • 大規模Webサーバを効率良く運用する手法

– リソース割当のチューニング

• Webサーバに簡単に機能追加する手法 – mod_luaやmod_mruby

今日の発表

次回の発表

Page 6: 第1回 松本勉強会 2012 05 11 - 公開版

Goodにしたい

Page 7: 第1回 松本勉強会 2012 05 11 - 公開版

これまでの研究成果(去年の12月)

ストレージ ロードバランサ

クライアント

Webサーバ群

顧客領域追加でサービス即時反映

顧客領域 の追加

細やかな高負荷原因の調査と柔軟なリソース制限手法

1サーバで2,000仮想ホスト (単一のサーバプロセス方式)

1. 高集積 他の顧客領域やシステム領域を覗き見できないアクセス制御手法

2. セキュア

Ⅱ. リソース不足時 Ⅲ. 新規契約時 Ⅰ. 高負荷時

3. 高い運用性

大規模共有型Webバーチャルホスティング基盤の設計[1]

7

[1] 松本亮介, 川原将司, 松岡輝夫, 汎用性の高い大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善, インターネットと運用技術シンポジウム2011論文集, 2011,31-38 (2011-11-24). ※1 特許出願中.

サーバ追加で 即時リソース増強 効率良く負荷分散

Page 8: 第1回 松本勉強会 2012 05 11 - 公開版

これまでの研究成果(今年の3月)

• セキュリティとパフォーマンス向上 – 12月のシステムはパフォーマンスを重視していない – 高速かつ安全にWebサービスのプログラムを処理する設計

• 前提は高集積

• スレッド単位で権限分離を行うアーキテクチャを提案※1 ─ Webサーバ上の動的コンテンツを高速に処理可能

─ スレッドを利用することで性能劣化を少なくかつセキュアに動作

─ これまではプロセス単位で権限を分離

─ 複数あるアクセス制御手法を統一的に扱うアーキテクチャ

川原さんに謝辞しています

※1 • IEEE/IPSJ International Symposium on Applications and the Internet SAINT2012 で発表予定 • IA/IOT/SITE/ISMS合同研究会で発表済み 8

Page 9: 第1回 松本勉強会 2012 05 11 - 公開版

2. 3月の発表内容

Page 10: 第1回 松本勉強会 2012 05 11 - 公開版

Webサーバ上の動的コンテンツの扱い

CGI実行方式は性能が低い – 高速に動作するDSO実行方式を使いたい

– DSO実行方式とは?

Server Process

CGI Process

Program

Server Process

Program

CGI実行方式 DSO実行方式

インタプリタを組み込んでおく

ボトルネック

マルチテナント環境でもDSO実行方式を使って高速に処理したい

Page 11: 第1回 松本勉強会 2012 05 11 - 公開版

動的コンテンツに関する問題

従来のアクセス制御手法は不完全 – 従来のDSO実行方式のためのアクセス制御の問題

• プロセスの中で疑似的に権限を分離するアーキテクチャ

• 不完全な仕様(性能劣化が大きい・セキュリティが弱い等)

– CGI実行方式のためのアクセス制御の特徴 • プロセス単位で権限を分離するアーキテクチャ

• アクセス制御とは関係なくCGI実行方式そのものの性能が低い

– 実行方式毎にアクセス制御が存在していて煩雑 • 設定も複雑で開発者の敷居が高い

マルチテナント環境で動的コンテンツを扱うには・・・ – CGI実行方式を使わざるを得ない

– DSOを使うためには個別にデーモンやOSを起動して分離 ⇒ オーバースペックでリソース効率が悪い

Page 12: 第1回 松本勉強会 2012 05 11 - 公開版

execve()

子サーバプロセス (owner : apache)

CGI用 プロセス (owner : root)

index.php (owner: user1)

fork() execve() suexec-program

CGI用 プロセス (owner : user1)

setuid(), setgid()

terminate process

親サーバプロセス (owner : root)

ボトルネック

CGI実行方式 suEXECアーキテクチャ

Page 13: 第1回 松本勉強会 2012 05 11 - 公開版

execve()

親サーバプロセス (owner : root)

子サーバプロセス (owner : apache)

Set capability

index.php (owner: user1)

Set cap(Linux capability)

子サーバプロセス (owner : user1) Set capability

setuid(), setgid()

setuid(), setgid() terminate process

×

DSO実行方式 mod_ruid2アーキテクチャ

ボトルネック

Unset cap

Index.php経由で権限変更が可能 ×

Page 14: 第1回 松本勉強会 2012 05 11 - 公開版

提案するアクセス制御アーキテクチャ - mod_process_security -

• スレッドを利用してボトルネックを低減

–制御用スレッド単位で権限分離するアーキテクチャ

• 動的コンテンツのリクエスト時にスレッド生成

• プロセスの生成・破棄は不要

• スレッドの生成・破棄により処理効率が上昇

–実行方式で区別しない統一的アーキテクチャ

• CGIやDSOに個別のソフトウェアを組み込む必要無し

– Apacheモジュールで簡単に組み込み・設定可能

• 開発者が扱いやすい仕様

Page 15: 第1回 松本勉強会 2012 05 11 - 公開版

execve()

子サーバプロセス (owner : apache)

制御用スレッド (owner : apache)

index.php (owner: user1)

Create thread, set cap

制御用スレッド (owner : user1)

setuid・setgid, unset cap

destroy thread

親サーバプロセス (owner : root)

CGI実行方式 mod_process_security

CGI用プロセス (owner : user1)

terminate process

CGIの仕様

Page 16: 第1回 松本勉強会 2012 05 11 - 公開版

execve()

子サーバプロセス (owner : apache)

制御用スレッド (owner : apache)

index.php (owner: user1)

Create thread, set cap

制御用スレッド (owner : user1)

setuid・setgid, unset cap

destroy thread

親サーバプロセス (owner : root)

FCGI実行方式 mod_process_security

FCGI用プロセス (owner : user1)

FCGIの仕様

再利用

Page 17: 第1回 松本勉強会 2012 05 11 - 公開版

子サーバプロセス (owner : apache)

制御用スレッド (owner : apache)

Create thread, set cap

制御用スレッド (owner : user1)

setuid・setgid, unset cap

destroy thread

親サーバプロセス (owner : root)

DSO実行方式 mod_process_security

phpを直接実行

index.php (owner: user1)

DSOの仕様

Page 18: 第1回 松本勉強会 2012 05 11 - 公開版

実験

クライアント

CPU Intel Core2Duo E8400 3.00GHz

Memory 4GB

NIC Realtek RTL8111/8168B 1Gbps

OS CentOS 5.6

Webサーバ

CPU Intel Xeon X5355 2.66GHz

Memory 8GB

NIC Broadcom BCM5708 1Gbps

OS CentOS 5.6

Middle Ware Apache 2.2

• 1秒間に処理可能なレスポンス数を計測(response/sec) • クライアントからWebサーバに対して1秒間に複数リクエストを生成

• リクエスト数を変動させて、スループットが低下するか評価 • アクセス制御の適応有無でスループットに差がでるか評価

• phpinfo()を表示するプログラム(54KB)ベンチマークソフト(httperf 0.9.0)

Page 19: 第1回 松本勉強会 2012 05 11 - 公開版

導入方法

$ sudo cp mod_process_security.so /etc/httpd/modules/.

$ cat /etc/httpd/conf.d/ps.conf LoadModule process_security_module modules/mod_process_security.so

PSExtensions .php .cgi .py .pl .rb

# 静的コンテンツも動的コンテンツも適応したい場合は以下 # PSExAll On

$ sudo /etc/init.d/httpd restart

Page 20: 第1回 松本勉強会 2012 05 11 - 公開版

スループット比較

0

500

1000

1500

2000

2500

3000

Re

spo

nse

s/se

c

Requests/sec

DSO(mod_process_security) DSO(アクセス制御無し)

DSO(mod_ruid2) CGI(アクセス制御無し)

CGI(suEXEC) CGI(mod_process_security)

DSO(mod_process_security)はDSO(アクセス制御無し)と比較してスループット劣化は微小

DSO(mod_ruid2)は全てのRequestに対して、5前後のResponse/secでありスループット劣化が大きい

CGIのアクセス制御のスループット劣化は微小

CGI実行方式 (次スライドで拡大)

DSO実行方式

Page 21: 第1回 松本勉強会 2012 05 11 - 公開版

CGIに関するスループット比較

100

120

140

160

180

200

100 200 300 400 500 600 700 800 900 1000

Re

spo

nse

s/se

c

Requests/sec

CGI(アクセス制御無し) CGI(suexec) CGI(mod_process_security)

アクセス制御無し、mod_process_secuiry、suEXECの順に性能が高い。

Page 22: 第1回 松本勉強会 2012 05 11 - 公開版

考察 • mod_process_security採用によるスループット劣化は少ない

– アクセス制御を組み込まない場合と比較 • CGI実行方式の場合はsuEXECよりもスループット劣化が少ない

• DSO実行方式の場合はmod_ruid2よりもスループット劣化が少ない

実行方式 アクセス制御手法 アクセス制御無しと比較したスループット低下率(平均)

CGI suEXEC 2.13%

mod_process_security 1.48%

DSO mod_ruid2やmod_suid2 99.9%

mod_process_security 0.19%

Page 23: 第1回 松本勉強会 2012 05 11 - 公開版

ご清聴ありがとうございました