かべちゃんのウェブサイト
セキュリティ

セキュリティ

Wyvern では、ウェブサーバのパフォーマンスの向上よりも、 セキュリティ重視の方針で可能な限りセキュリティに配慮した実装を行っています。 具体的には次のような対策をしています。

バッファオーバフロー対策

できるだけ動的にメモリを確保するように malloc(3),asprintf(3)などを積極的に利用。 また、境界チェックを行う strlcpy(3) などを利用し、バッファ溢れを防止しています。

クロスサイトスクリプティング対策

入力された URI 内のメタキャラクタ「< > & "」および 「' ( )」を出力時に 「&lt; &gt; &amp; &quot;」および 「&#39; &#40; &#41;」に変換します。 ただし、QUERY_STRING に相当する部分は変換していません。 本対策は、ウェブサーバ内部での使用時にのみ適用されます。

変換例その1

http://server/foo.html<script>悪意あるコード</script> は、 http://server/foo.html&lt;script&gt;悪意あるコード&lt;/script&gt; に変換されます。

変換例その2

http://server/foo.html%3Cscript%3E悪意あるコード%3C/script%3E は、 http://server/foo.html&lt;script&gt;悪意あるコード&lt;/script&gt; に変換されます。

変換例その3

http://server/cgi-bin/foo.cgi?<script>悪意あるコード</script> は、変換されません。 つまり、環境変数 QUERY_STRING には、 <script>悪意あるコード</script> がそのまま設定されます。

これは、CGIプログラム作成者の方でどのように QUERY_STRING を利用するかが、 想定できないためです。 CGIプログラム作成者は環境変数の利用には十分注意してください。

SSIにおけるシェルのメタ文字対策

SSI の <!--#exec cmd="〜"--> を利用すると、 ユーザはシステム内の任意のコマンドを実行できます。 Wyvern では、 &;`'\"|*?~<>^()[]{}$\n\r のシェルのメタ文字を含む命令は実行されません。 同時に、<security-log> で指定されたファイルにコマンドを記録します。

シンボリックリンクのチェック

デフォルトの設定では、シンボリックリンクファイルは <server-root> および <document-root><user-dir> 内のファイルに制限されています。 シンボリックリンクファイルにアクセスした場合は、 以下のように必ずセキュリティログに記録されます。

[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'

シンボリックリンクのチェックを行いたくない場合は、 <follow-symlinks> の値を「off」にするか、コメントアウトしてください。 また、設定ファイルである wyvern.conf がシンボリックリンクファイルの場合は、 wyvern 自体が起動できないので注意してください。

セキュリティレベルによる機能制限

設定ファイル(wyvern.conf)の <secure-level> で設定した値に応じてセキュリティレベルを設定します。 レベルは0〜7まで存在し、レベル0が一番脆弱でレベル7が最も安全です。 設定したレベルまでのすべての制約が適用されます。 デフォルトはレベル2です。

level0制限無し
level1root/wheel での起動を禁止します
level2 一時作業ディレクトリおよびログファイルの所有者とグループとパーミッションを <user>/<group>で指定した値に変更します
level3 すべてのシンボリックリンクファイルへのアクセスを禁止します
level4 動的にページを作成するモジュールの使用を禁止します
level5 <user-dir> で指定したユーザページへのアクセスを禁止します
level6 全モジュールの使用を禁止します
level7 バーチャルホストの使用を禁止します

セキュリティログ機能の実装

設定ファイル(wyvern.conf)の <security-log> で指定したログファイルに次の情報を記録します。

その他

その他のセキュリティ機能としては、次のような制限を設けています。