ウェブサーバのパフォーマンスの向上よりも、 セキュリティ重視の方針で可能な限りセキュリティに配慮した実装を行っています。 具体的には次のような対策をしています。
できるだけ動的にメモリを確保するように malloc(3),asprintf(3)などを積極的に利用。 また、境界チェックを行う strncpy(3) などを利用し、バッファ溢れを防止しています。
入力された URI 内のメタキャラクタ「< > & "」および 「' ( )」を出力時に 「< > & "」および 「' ( )」に変換します。 ただし、QUERY_STRING に相当する部分は変換していません。 本対策は、ウェブサーバ内部での使用時にのみ適用されます。
http://server/foo.html<script>悪意あるコード</script> は、 http://server/foo.html<script>悪意あるコード</script> に変換されます。
http://server/foo.html%3Cscript%3E悪意あるコード%3C/script%3E は、 http://server/foo.html<script>悪意あるコード</script> に変換されます。
http://server/cgi-bin/foo.cgi?<script>悪意あるコード</script> は、変換されません。 つまり、環境変数 QUERY_STRING には、 <script>悪意あるコード</script> がそのまま設定されます。
これは、CGIプログラム作成者の方でどのように QUERY_STRING を利用するかが、 想定できないためです。 CGIプログラム作成者は環境変数の利用には十分注意してください。
SSI の <!--#exec cmd="〜"--> を利用すると、 ユーザはシステム内の任意のコマンドを実行できます。 Wyvern では、 &;`'\"|*?~<>^()[]{}$\n\r のシェルのメタ文字を含む命令は実行されません。 同時に、SecurityLog で指定されたファイルにコマンドを記録します。
Wyvern では、現在、Basic認証機能しか提供していませんが、 認証データを MD5 符号化し、dbm により管理しています。 通常の crypt() を使った符号化とテキストファイルによる管理よりは、 安全性が向上します。また、SSL による暗号化通信も利用可能なので、 Basic認証でも SSL と組み合わせれば従来の方法よりも、 安全なユーザ認証が可能となります。
CGIコマンドなどの外部プログラムを呼び出して実行する場合、 Wyvern では CGI プログラムの所有者権限で実行する SuExec 機能を提供しています。 これにより、セキュリティ上の危険を軽減することが可能となります。
デフォルトの設定では、シンボリックリンクファイルは ServerRoot および DocumentRoot と UserDir 内のファイルに制限されています。 シンボリックリンクファイルにアクセスした場合は、 以下のように必ずセキュリティログに記録されます。
[Sun, 27 Jan 2002 06:47:54 GMT] request URI '/mrtg.html' is an unsecure symbolic file '/usr/local/share/doc/mrtg/index.html'. [Sun, 27 Jan 2002 06:53:19 GMT] request URI '/top.html' is a symbolic file 'cover.html'
シンボリックリンクのチェックを行いたくない場合は、 FollowSymLinks の値を「off」にするか、 コメントアウトしてください。 また、設定ファイルである wyvern.conf がシンボリックリンクファイルの場合は、 wyvern 自体が起動できないので注意してください。
設定ファイル(wyvern.conf)の SecureLevel で設定した値に応じてセキュリティレベルを設定します。 レベルは0〜7まで存在し、レベル0が一番脆弱でレベル7が最も安全です。 設定したレベルまでのすべての制約が適用されます。 デフォルトはレベル2です。
level0 | 制限無し |
level1 | root/wheel での起動を禁止します |
level2 | 一時作業ディレクトリおよびログファイルの所有者とグループとパーミッションを User/Group で指定した値に変更します |
level3 | すべてのシンボリックリンクファイルへのアクセスを禁止します |
level4 | 動的にページを作成するモジュールの使用を禁止します |
level5 | UserDir で指定したユーザページへのアクセスを禁止します |
level6 | 全モジュールの使用を禁止します |
level7 | バーチャルホストの使用を禁止します |
設定ファイル(wyvern.conf)の SecurityLog で指定したログファイルに次の情報を記録します。
その他のセキュリティ機能としては、次のような制限を設けています。