Apacheの脆弱性対策

Apacheをそのままの設定で使うことは、脆弱性対策の観点からお勧めできません。

主な脆弱性対策方法を紹介します。

Webサーバーとしての設定

  • Traceメソッドの無効化

Traceメソッドが使用可能であると、XSTという攻撃に晒されます。 httpd.confや、それが参照する設定するファイルに、以下のように追記します。

TraceEnable Off
  • Apacheのバージョンを非表示にする

404のページや、レスポンスヘッダーなどにApacheのバージョンがのっていると、それを基準に脆弱性を突かれる可能性があります。攻撃者に対してできる限り情報を隠すという面でもバージョンは秘匿するべきです。 httpd.confを以下のように変更してください。

- ServerTokens OS
+ ServerTokens Prod

設定反映は以下のどちらかで行えます。

systemctl restart httpd
systemctl reload httpd

SSL/TLS関連

SSL/TLS関連の設定を行なっていきます。

  • 強固な暗号化を実現するため、TLS1.2,TLS1.3以外無効化
SSLProtocol -All +TLSv1.2 +TLSv1.3
  • 弱い暗号を使用しないようにする
SSLCipherSuite TLSv1.3 "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256"

SSLCipherSuite "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8"

なお、暗号の強弱はIPOのドキュメントより判断しました。

  • サーバー側で暗号を選ぶようにする
- #SSLHonorCipherOrder on
+ SSLHonorCipherOrder on

HSTS

httpsのバーチャルホストを立て、httpで接続してきたらhttpsの方へリダイレクトさせる、というような設定がされているものとします。 以前の常時SSLの記事を参考にしてください。

HSTSを簡単に説明すると、ブラウザに対しhttpsのバーチャルホストがあることを記憶させ、次またhttpでアクセスしようとしても、ブラウザがhttpsにリクエストを変えるといったことを実現する標準規格です。

ssl.confなどにある、httpsを受け持つバーチャルホスト内で設定します。

<VirtualHost *:443>
...
+ Header add Strict-Transport-Security "max-age=15768000"
...
</VirtualHost>

これにより、HSTSが有効になります。max-ageというオプションは、ブラウザがキャッシュを保持する時間(秒)です。

その他の脆弱性

Header append X-Frame-Options SAMEORIGIN
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options nosniff

X-XSS-Protection、MIME-Sniffing、ClickJacking対策になっています。 X-XSS-Protectionは、時代的にあまり推奨ではなくなってきているため、個人の判断で導入ください。

X-Frame-Optionsは、クリックジャッキング対策です。透明のボタンなどを配置されないようにするためです。

X-Content-Type-Optionsは、MIMEタイプが外に漏れないようにするものです。