WordPress のセキュリティ設定
最近、ペネトレーション関連に興味が出てきた事もあって、WordPress のセキュリティ設定を見直してみた。
リバースシェルが実行される可能性を調べる
リバースシェルで実行される事が多い関数は次のとおりです。
system(), proc_open(), proc_close(), proc_get_status(), proc_nice(), proc_terminate(), exec(), shell_exec(), passthru()
次のコマンドで調査を行う。
# find /var/www/html/ -name '*.php' -exec grep -H 'system(' {} \;
# find /var/www/html/ -name '*.php' -exec grep -H 'proc_open(' {} \;
# find /var/www/html/ -name '*.php' -exec grep -H 'exec(' {} \;
# find /var/www/html/ -name '*.php' -exec grep -H 'shell_exec(' {} \;
# find /var/www/html/ -name '*.php' -exec grep -H 'passthru(' {} \;
# find /var/www/html/ -name '*.php' -exec grep -H 'popen(' {} \;
結果は「exec()」が「ImageMagick エンジン プラグイン」がバージョンを確認するコマンドを実行していたので、プラグインを削除、「wp-admin/includes/class-wp-debug-data.php」が「gs –version」(Ghostscriptのバージョン確認)に使用していたが、デバッグ関連らしいので無視、「wp-includes/class-snoopy.php」が「/usr/local/bin/curl」があれば実行する(普通は「/usr/bin/curl」か「/bin/curl」にある)のでコレも無視。
「shell_exec()」は「wp-includes/Text/Diff/Engine/shell.php」で「diff」コマンドを実行していた。名前から察するにテキストの違いを見つけるためだけに使用しているみたいだったが、呼び出し元が見つからなかったので無視。
「popen()」に関してはメール送信で「sendmail」コマンドを使用していたが、リバースシェルには使用出来ないと思われるので許容する事にした。
その他の関数は使用が見つけられなかったので、「/etc/php.ini」の「disable_functions」を以下の様に設定した。
disable_functions = system, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, exec, shell_exec, passthru
また危険と思われる次のフラグも「Off」にした。
allow_url_fopen = Off
allow_url_include = Off
これでリバースシェルの脅威は無くなったと思われる。
また、PHPが実行できるディレクトリを減らしたかったので、「open_basedir」を次の様に設定した。
open_basedir = /usr/share/:/var/www/html/:/var/lib/phpMyAdmin/:/etc/poweradmin/
ソースなどから見る WordPress は、過去の残骸らしき箇所が多い様に思う。
SELinux による規制の強化
CGI を無効にする。
# setsebool -P httpd_enable_cgi off
CGI 関連のディレクトリやファイルのチェック
# find / -context "*:httpd_sys_script_t:*" 2> /dev/null
SELinux の規制逃れをしているファイルのチェック
# find / -context '*unconfined_exec_t*' -print 2> /dev/null
「/var/www/」ディレクトリのチェック(httpd_sys_rw_content_t が Apache からの書き込みが可能)
※ WordPress のバージョンアップやプラグインのインストールの関係で、「/var/www/html」は書き込み許可が必要。
# ls -lZ /var/www/
合計 0
drwxr-xr-x. 1 root root system_u:object_r:httpd_sys_script_exec_t:s0 0 10月 20 2023 cgi-bin
drwxr-xr-x. 1 apache apache system_u:object_r:httpd_sys_rw_content_t:s0 682 4月 20 09:56 html
drwxr-xr-x. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 52 4月 7 15:59 wsgi
セキュリティプラグインのインストール
「security」で検索してプラグインをインストールする。
このサイトでは「Wordfence」をインストールして、様子を見る事にした。