web-dev-qa-db-ja.com

カーネルモードのWebサーバー:巧妙な最適化またはセキュリティの悪夢?

私は ハッカーニューススレッド を読んでいました。ここで、1人のユーザーが2011年のリンクを投稿して IISははるかに高速です 他のほとんどの(* nix)Webサーバーよりも説明しています。別のユーザーは、IISに HTTP.sysと呼ばれるカーネルモジュール を使用することでその利点が得られることを説明します。私の知る限り、2015年に他のほとんどの一般的なWebサーバーはこの。

カーネルモードのWebサーバーを作成したくありません。セキュリティの悪用を防ぐために自分自身を信頼することができなかったからです(低い保護リングでの実行ではそれほど深刻ではありません)。

ソフトウェアエンジニアの観点から(Webサーバーの顧客とは対照的に)、カーネルモードで実行するのは賢いパフォーマンス決定ですか?アプリケーション開発において、カーネルモードサーバーを消費者にとっての純利益にするまで、セキュリティの懸念を軽減できますか?

28
James Mishra

Http.sysは、プロキシフォワーダーとしてのWebサーバーではありません。 Windowsボックス上で多くのWebサーバーが共存できるように設計されているため、IIS Webサイトを実行できますが、http/RESTまたはSOAPインターフェース、すべて標準ポート80上(これが、ちょっとした揺れなしにWindowsでApacheを実行できない理由です。Apacheは動作するように 変更されていません この登録システムでは、アプリケーションに対する透過性が高まらず、フックするにはかなり複雑な変更が必要です)。

それが機能する方法は、URLを対応するアプリケーションに登録し、http要求がポート80で作成されると、http.sysはそれを受け入れますが、そのURLターゲットを処理するために登録されているアプリケーションに要求を渡します。


カーネルモードのWebサーバーが意味をなさないと思います-ソケットのパフォーマンスをこのように改善できたとしても、有用な作業を実行するために、アプリケーションロジックはユーザー空間で実行されるため、常に移行が行われます。呼び出しスタックに沿って少しシフトしました。

24
gbjbaanb

Http.sysは、利用可能な唯一のカーネルモードのWebサーバーではありません。Linuxの下には Tux もあります。正しく特定したように、これらの種類のサーバーではセキュリティが懸念されるため、TuxがメインラインLinuxカーネルに含まれていません(そして、最新のカーネルバージョンでは更新されていないと思います)。

より良いソリューションは、ハードウェア保護に依存しないオペレーティングシステムを使用して、プロセスのセキュリティを強化することです。 Microsoftの特異点:このようなシステムでは、セキュリティリスクなしにカーネルモードサーバーの効率を向上させることができます。残念ながら、2015年の時点では、この原則に基づいた運用準備の整ったオペレーティングシステムは利用できず、AFAIKはどちらも真剣に取り組んでいません(Singularityプロジェクトはキャンセルされました)。

14
Jules

Http.sysはサードパーティが提供する対応策を実行できないため、リスクが低いです。

Http.sysはいくつかのタスクを実行します。

  • プロキシフォワーダーとして機能するため、複数のプロセスがHTTP名前空間のさまざまな部分への要求に応答できます。 gbjbaanbの回答はこれをうまくカバーしています。

  • Windowsファイルキャッシュから直接静的ファイルを提供します。コンテキストの切り替えがないため、静的ファイルのサイズが小さいファイルの速度が大幅に向上します。

  • HTTPリクエストを転送するアプリケーションからの出力をキャッシュし、キャッシュされた結果を返します。アプリケーションは、(もしあれば)キャッシングの持続時間を完全に制御します。

Http.sysは、他のすべてをユーザー空間のプロセスに渡す一方で、単純なタスクを非常に高速に実行するように設計されています。

コメントへの返信

「サードパーティから提供されたコードを実行できないため、リスクが低い」-それは彼らがいつも言っていることであり、ほとんど真実ではありません。

問題は、この質問をするために複雑なカーネルコードを書くようにMicrosoftを信頼する必要があることです。そうでない場合は、WebホスティングにWindowsをまったく使用しないと決定します。Http.sysは、カーネルバグのリスクをほとんど追加しませんとにかくカーネルがどれほど複雑か。

「低レベル」のWebサービスとアプリケーションコードの下にそのような明確な分離があるため、Http.sysがリスクを軽減します。

適切に設計されたセットアップでは、Webサーバーを実行するマシン(または仮想サーバー)は、リスクの高いターゲットであるため、ネットワークの他の部分へのアクセスが非常に制限されます。カーネルまたはユーザーモードのWebサーバーがハッキングされた場合、サーバーはネットワーク上にこれ以上の「権限」を持っていないため、Webサーバーのユーザーモードプロセスがその作業を実行する必要があります。

10
Ian