ドキュメントルートに受領ファイルを置かない


保険業界は重要インフラ分野の一つとなり、当然セキュリティ対策にしっかり投資を行っている。

一方で保険業界には大小様々な代理店が存在しており、保険証券を扱う代理店は「セキュリティってな~に~」みたいなところが多く、保険証券のデータの保存先がコンシューマー用のNASであったり、保険の相談申込ページ(Webサーバ)に保険証券をアップロードさせてWebサーバ上に保険証券を保存するというびっくり運用が存在する。

そもそもの話として、今回はWebサーバで実施しておく基本的なセキュリティ対策(apacheベース)を整理しておきたい。

まず、認識しておかないといけないのは、Webサーバをデフォルトの状態で運用することは、「危険」な状態であるということです。

ウェブサーバは通常、インターネット上に配置され不特定多数からのアクセスが発生するため、デフォルトの状態で運用するということは、外出時に自宅に鍵をかけないどころか、ドアを全開放して「外出中です」と張り紙を出して外出するようなものです。

1.ディレクトリ内容一覧表示の無効化

apacheには公開しているディレクトリ内容を一覧表示するディレクトリリスティング機能が実装されています。

本機能が有効になっているディレクトリを表示すると、以下のようなインデックス画面が表示されます。

デフォルトでは、ドキュメントルートでこの機能が有効になっています。

この場合、Webサーバの公開ディレクトリに直接アクセスを行うと、ディレクトリ内に存在するファイルの一覧が表示され、ディレクトリ内のファイルの一覧を取得することが可能です。

つまり、冒頭で話した様な、保険証券を問い合わせフォームに添付してアップロードさせるようなケースの場合、保険証券のデータをこのドキュメントルートに保存すると、保険証券のデータは漏洩します。

ディレクトリでファイルの一覧が表示されることにより、外部に流出する情報として、他に以下のような内容が考えられます。

【ファイル一覧機能により、外部に流出する可能性がある情報】

□公開を意図しないファイル

□バックアップファイル

□一時ファイル

□隠しファイル(ドットで始まるファイル名のファイル)

□ファイルの命名規則

□設定ファイルによるサーバ設定情報

□スクリプトファイルによるサーバ内部処理情報



2.HTTP TRACEメソッドの無効化

まず、そもそもTRACEメソッドとは?から。

HTTP 1.1(RFC2616)で定義されている、8種類のメソッドの一つ。

GET、POST、HEADなどはおなじみのものですが、それ以外にPUT、DELETE、OPTIONS、TRACE、CONNECTの5種があります。

このうち、TRACEメソッドは、HTTPリクエストを「オウム返しに」HTTPレスポンスとして返すもので、以下のようにGET等の代わりにTRACEとしてWebサーバーにリクエストします。
TRACE /auth/index.php HTTP/1.1
Host: example.jp
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:18.0) Gecko/20100101 Firefox/18.0
Cookie: PHPSESSID=4lel0hml53u2tbhcd9pmo7pkc4
Authorization: Basic eWFtYWRhOnBhc3N3b3Jk
Connection: keep-alive
レスポンスの例を以下に示します。
HTTP/1.1 200 OK
Date: Tue, 22 Jan 2013 13:51:09 GMT
Server: Apache/2.2.14 (Ubuntu)
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: message/http
Content-Length: 198

TRACE /auth/index.php HTTP/1.1
Host: example.jp
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:18.0) Gecko/20100101 Firefox/18.0
Cookie: PHPSESSID=4lel0hml53u2tbhcd9pmo7pkc4
Authorization: Basic eWFtYWRhOnBhc3N3b3Jk
Connection: keep-alive
で、このTRACEメソッドが有効になっていると、Cross-Site Tracing(XST)攻撃と呼ばれる、XSS(Cross-Site Scripting)とTRACEメソッドを組み合わせた攻撃のリスクが発生する。(詳細はコチラ

そのため、TRACEメソッドを無効にすることでセキュリティを確保します。



3.X-Frame-Optionsヘッダの設定

クリックジャッキング攻撃の対策となるX-Frame-Optionsヘッダを設定します。

クリックジャッキングとは、ユーザが意図しない操作(ボタンやリンクのクリック)を実行させられる攻撃です。
(クリックジャッキングの詳細はコチラ

情報の公開・非公開設定がユーザの意図に反して気づかないうちに変更された結果、情報漏えい事故につながる等の被害が想定されるため、X-Frame-Optionsヘッダを設定します。



4.apache バージョンの非表示化

apacheのバージョン情報を取得することができる設定がデフォルトでは有効になっています。

バージョン情報の表示は直接の脆弱性とは関係ありませんが、利用しているapacheに脆弱性が存在する場合に脆弱性を突いた攻撃等を実施する手がかりとして利用される恐れがあります。

サービスへのアクセス時に表示されるこれらの情報はバナー情報と呼ばれ、バナー情報の隠蔽は攻撃者に攻撃の手がかりを与えないために有用な対策となるため、バナー情報はできる限り非表示とすることでセキュリティを向上できます。



5.SSL/TLSにおける安全性の低い暗号スイートの無効化

サーバ側のSSL/TLS設定において安全性の低い暗号スイート(プロトコル・暗号アルゴリズム、鍵長、ハッシュ関数)をサポートしている場合、安全性の低い暗号スイートが利用されることで、通信内容の盗聴につながる可能性が高まります。

安全性の低いプロトコル・暗号化アルゴリズム、鍵長、ハッシュ関数を無効化し、安全性の高いプロトコル・暗号化アルゴリズム、鍵長、ハッシュ関数のみをサポートすることでセキュリティを確保できます。

一般的に安全性の低い暗号スイートと呼ばれるものは、下記があります。

・MD5

・RC4

・3DES

・SSLv2

・SSLv3



6.SSL/TLSプロトコルのデータ圧縮機能の無効化

SSL/TLSプロトコルのデータ暗号化時の圧縮機能が有効になっている場合、SSL/TLSによって暗号化された通信内容の一部が漏えいする可能性があります。

暗号化前のデータ長(サイズ)の情報からデータ内容の総当たりによる推測が行われた場合、Cookie等のHTTPヘッダの一部が取得される脆弱性が存在するため、SSL/TLSにおけるデータ圧縮処理(Compression)機能は無効化します。

出典:攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント