HTTPサーバーを作る

大学の課題でHTTPサーバーを2週間で作れという課題がでた。BASIC認証もついでに。
ただ動くだけのサーバーを作るなら簡単だけれど、課題の要件の

できるだけセキュリティホールを作るな

がかなり難しい。バッファオーバーフローを防げばOKなどと思っちゃだめですよ〜。

ざっと考えつく範囲で、注意すべきポイントを書いておきます。

  1. 当然バッファオーバーフローはあってはいけない。
  2. パーミッションの管理を厳重に。
    1. サーバーをrootで動かさない。専用のユーザ/グループを用意。
    2. .htaccessなどのファイルをウェブルート以下に置かない。
    3. これはサーバーの実装というか動かす際の設定の問題だけれども。
  3. 入力のチェック。
    1. ディレクトリトラバーサルとか。
  4. DoS攻撃

他にもいろいろあるけれども。

パーミッションの設定に問題がなければ多くの問題は大丈夫なのだけれど、プログラム側でパーミッションがちゃんと設定されているという前提に立ってしまうのは良くないです。チェックできるところはチェックしましょう。

一般的には、サーバープロセスが書き込みと読み込みを行う箇所それぞれについてどういう事がセキュリティ上の問題になるかをひとつずつ考えれば良いです。
たとえば自分が攻撃者なら、真っ先にディレクトリトラバーサルを試すと思います。/etc/shadowとかを狙って。
後はブラウザの更新を連打してGETを大量に送りつけるとか。

あとHTTPサーバーを実験するときは、ケーブルを引っこ抜いてローカルでやるようにした方が良いです。