現在UNIXシステムにおいて最も多く使われているであろうhttpdはApacheです。
Apacheの設定を行うファイルは、従来のバージョンではhttpd.conf, access.conf,
srm.confの3本に分かれていましたが、現在のバージョンではhttpd.confに一本化されています。
今回取り上げるバージョンは1.3.19です。
以前のバージョン(1.0.3以前)では、phfによってパスワードファイルを取得することができましたが、現在ではこれは出来ないようになっています。
phfとは、NCSA httpdやApacheに添付されていたCGICommon Gateway Interface)のスクリプトです。
実際に使用しなくとも非常に危険なスクリプトとされています。
なぜなら、このスクリプトを参考にして作成されたスクリプトにも同じ危険が潜んでいるからです。
phf攻撃は、phfがインストールされているサーバーに対し、いくつかのコマンドを記述したURLを送ることによって、相手のサーバがURLとして渡されたコマンドを実行してしまいます。これによって、パスワードファイルがWebクライアントに表示されるといったことがありました。
つまり、phf攻撃はURLにコマンドを記述することができる人であれば、
Webクライアントだけでパスワードファイルを閲覧することができたのです。
現在ではNCSA httpd, Apache共に、このファイルの添付は行っていません。
もし、従来からのOSやhttpdをアップグレードし続けたサーバであれば、cgi-binディレクトリにphfが存在しないか確認してください。
残っているようでしたら速やかに削除しログの確認等を行ってくだい。
特に、ログの中でGETメソッドのステータスコードが200の場合はパスワードファイルの取得が成功している可能性があるため、全ユーザのアカウントリセットなどを行うようにしてください。
httpdをセキュアな環境に設定するための第一歩は実行するユーザを正しく設定するということです。
これはhttpd.confの次の項目で設定します。
User nobody Group #-1デフォルトでユーザはnobodyに設定されています。 もし、nobodyが他に動かすものが無ければこのままで良いでしょう。
Webにおいてhttpdの動作に次いで重要なものがドキュメントディレクトリの設定です。
デフォルトではドキュメントルートが次のように設定されています。
このディレクトリの権限を正しく設定する必要があります。
もちろん、必要以上に権限を出してはいけません。
外部からの攻撃だけでなく、内部から誤ってデフォルトドキュメント(index.htmlなど)を書き換えてしまったという事故も有り得ます。特に最上位のデフォルトドキュメントは、組織のホームページとなる部分です。この部分を間違って書き換えてしまう、または外部から改竄されてしまうということのないように設定してください。
DocumentRoot "@@ServerRoot@@/htdocs"
次に、ドキュメントルートのオプションを確認します。
デフォルトでは次のように設定されています。
Options FollowSymLinksここには、絶対にIndexesを書き加えてはいけません。 なぜなら、何らかの理由でデフォルトドキュメント(index.htmlなど)をhttpdが認識しなくなったとき、ディレクトリ中の一覧を表示してしまいます。
Indexesを使用しなくとも、悪意を持ったユーザがファイル名を推測し取得しようとする場合があります。
このファイルは主に次の3つです。
.htaccessは、各ディレクトリごとにユーザが任意に動作を決めるもので、
アクセス制限等に使用される場合が多いようです。
その他の2つは、基本認証において使用されます。
これらは、Apacheが提供するデフォルトのファイル名を使用する場合が多く、
これらのファイルが第三者に取得されるケースが少なくありません。
あらかじめ、httpd.confや各.htaccessでアクセス制御を行っておくべきです。
|
<FilesMatch "^\.(htaccess|htpasswd|htgroup)$"> order allow,deny deny from all </FilesMatch> |
先に説明したFileMatchによってユーザの認証や参照できるネットワークなどを制限することができます。
ユーザの認証は基本認証(ベーシック認証とも呼ばれる)が使用されますが、
参照するクライアントが属するネットワークが限定されている場合、
IPアドレスやドメイン名で制限するほうが確実です。
なぜなら、基本認証を使用すると、ユーザ名やパスワードを盗聴される可能性があるからです。
たとえば、社外に出て一般のISPから接続する営業マンが居る環境では、不特定のネットワークから特定のユーザが接続することとなります。この場合は基本認証で行うしかありません。この場合はSSLなどを使用するべきでしょう。
ネットワーク単位で指定する場合は次のように行います。
192.168.0.0/24のネットワーク全体、およびipa-sec.com全体、そして172.16.0.1のホストが接続できるようにするためには次のように設定します。
|
<LIMIT GET POST> Order deny,allow Allow from 192.168.0. .ipa-sec.com 172.16.0.1 Deny from all </LIMIT> |
httpd.confにおいて、Optionと共に記述されたディレクトリごとの設定は、
httpd.confを書き換えることなく各ディレクトリにおいて.httaccessファイルを記述することによって任意に変更することができます。
しかし、各ディレクトリ内で変更させないということが行えます。
これには、以下の記述をhttpd.confに追加します。
|
<Directory /> AllowOverride None Options None allow from all </Directory> |
ApacheではSSI(Server Side Include)が利用できるようになっています。
しかし、これはイントラネットなどの限られた環境以外では無効にすべきです。
特に、SSIを使用したEXEC命令は各種の危険が伴います。
このため、IncludesNoExecを設定しておく必要があります。
|
Options IncludesNoExec |
Copyright(C) 2001 Information-technology Promotion Agency, Japan. All rights reserved.