脆弱性診断で指摘されがちな項目と対策方法をまとめる(CentOS+Apache+php)


はじめに

AWSでEC2インスタンスを立ち上げた後に、セキュリティ系の対策をしない状態で脆弱性診断をするという機会があったので、その場合に指摘される項目と対策をまとめました。
セキュリティ対策初心者なのでご指摘あればコメントをお願いします。

想定される環境

  • CentOS 7系
  • Apache 2.4
  • php 7.2

指摘事項

TRACEメソッドが有効になっている

/etc/httpd/cond/httpd/confに以下を追記する

/etc/httpd/cond/httpd/conf
TraceEnable off

SSL/TLSに脆弱性が存在するプロトコルが使われている

/etc/httpd/conf.d/ssl.confに記載されているSSLProtocolにTLSv1.2を設定する

/etc/httpd/conf.d/ssl.conf
#SSLProtocol all -SSLv3 //コメントアウト
SSLProtocol -all +TLSv1.2 //TLSv1.2のみを許可

あまりに古いOSやブラウザの場合はTLS1.2に対応していない可能性があるので注意が必要です。

SSL/TLSにおいて非推奨の暗号アルゴリズムが使用されている

/etc/httpd/conf.d/ssl.confに記載されているSSLCipherSuiteを設定する。
<VirtualHost>タグ内に記述すると設定が効きませんでした。デフォルトのサンプルがタグ内に書かれているので躓きやすいです。ファイルの一番最後などに追記しましょう。

SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+a
RSA !CAMELLIA !SEED !3DES !RC4 !aNULL !eNULL !LOW !MD5 !EXP !PSK !SRP !DSS"

SSH通信において非推奨の暗号アルゴリズムが使用されている

/etc/ssh/sshd_configの最後に追記する。

/etc/ssh/sshd_config
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr

推奨の暗号化アルゴリズムはmozillaの推奨設定などで確認する。

apacheのバージョンが公開されている

/etc/httpd/conf/httpd.confのServerTokensをProdにする

/etc/httpd/conf/httpd.conf
#ServerTokens OS //コメントアウト
ServerTokens Prod

phpのバージョンが公開されている

php.iniの場所を確認する。

php --ini
//Loaded Configuration File: /etc/php.ini

php.iniのexpose_phpをOffにする。(viなら/exposeで検索をかけるとはやい)

php.ini
expose_php=Off

ファイル一覧ページ(Index of)が公開されている

<Directory "/var/www/html">内のOptionsからIndexesを削除する。

.htaccess
<Directory "/var/www/html">
    ~
    #Options Indexes FollowSymLinks //コメントアウト
    Options FollowSymLinks
    ~
</Directory>

Apacheのテストページが表示されている

/etc/httpd/conf.d/welcome.confの<LocationMatch "^/+$">部分をコメントアウトする

/etc/httpd/conf.d/welcome.conf
#全体をコメントアウト
#<LocationMatch "^/+$">
#    Options -Indexes
#    ErrorDocument 403 /.noindex.html
#</LocationMatch>

最後に

設定ファイルを書き換えた後は再読み込みする。

systemctl restart httpd // /etc/httpd/の中身を書き換えたとき
systemctl reload sshd // /etc/ssh/の中身を書き換えたとき

再読み込みを行ったときにエラーが出た場合はjournalctl -xeでエラー内容を確認するといいです。

journalctl -xe
#いろいろ出てきますがSyntaxエラーなら以下のように書いています。
#1月 10 10:00:00 ~~~ httpd[1234]: AH00526: Syntax error on line 362 of /etc/httpd/conf/httpd.conf:

参考