kusanagi analyze で KUSANAGI 環境を分析する

片倉洋一

「KUSANAGI 9」に新コマンド「kusanagi analyze」が追加されました。このコマンドは、KUSANAGI環境を分析し、ディスクの圧迫、設定ファイルの不備、攻撃対象になり得るファイルなどを検知・改善アドバイスを表示します。この機能はKUSANAGIの有償版で利用可能で、セキュリティリスクを早期に把握するための一環として導入されました。分析対象や通知レベルにより、対応の深刻度が変わるため、サイトの安全な運用に役立つツールとなります。

3/7 から KUSANAGI 9 に新しいコマンドが追加されました。
今回紹介する kusanagi analyze コマンドです。

kusanagi analyze コマンドは KUSANAGI の環境を分析して、ディスク圧迫、設定ファイルの不備、攻撃の対象になりうるファイルなどを検知、改善のアドバイスを表示するコマンドで、有償版「KUSANAGI Business/Premium Edition」で利用できます。

kusanagi analyze コマンドを実装した経緯としては、 現在自社内では KUSANAGI Cloud という仕組みで KUSANAGI を管理しているのですが、この中に kusanagi analyze に似た分析機能があります。
この機能を広くユーザーに使えるようにして、様々なリスクをいち早くユーザー自身が感知できるようにするのがより良いと考え、実装することにしました。

kusanagi analyze の実行して環境を分析する

kusanagi analyze の実行は、kusanagi analyze と入力する事で実行できます。
では、実際に実行してみましょう。

# kusanagi analyze
[全体]
(レベル:alert)
1年以上前のダンプファイルがあります。削除してください。
対象ファイル:
/home/kusanagi/kusanagi_html_20220301.dump


[プロファイル名:kusanagi_dp_test]
(レベル:alert)
ドキュメントルート内にセキュリティ上問題となるファイル(.zip, .tar, .gz, .log, .sql, .dump, .php.xxx)が確認されました。削除するかドキュメントルート外に移動してください。
対象ファイル:
/home/kusanagi/kusanagi_dp_test/DocumentRoot/index.php.bak


[プロファイル名:kusanagi_html]
(レベル:alert)
uploadsのパーミッションが適切ではありません。ファイルオーナーはhttpd.www、パーミッションは0775に修正してください。

(レベル:notice)
ドキュメントルート内に phpinfo を含むコード、または phpMyAdmin が検出されました。クラッキングのセキュリティリスクがあり ますので、公開している環境では特に該当コード、ツールの利用を控えてください。
対象ファイル:
/home/kusanagi/kusanagi_html/DocumentRoot/phpinfo.php


(レベル:info)
wp-config.phpがドキュメントルートの中にあります。
/home/kusanagi/kusanagi_html/DocumentRoot/wp-config.php を /home/kusanagi/kusanagi_html/wp-config.php に移動してください


analyze completed.
#

このように、検知内容とアドバイスが表示されたことが分かります。
では、1つずつ内容を見ていきます。

kusanagi analyze の実行結果の見方

分析対象

ブラケット[]で囲まれているのは、分析対象を指し示しています。

:
:
[全体]
:
:
[プロファイル名:kusanagi_dp_test]
:
:
[プロファイル名:kusanagi_html]
:
:

[全体]とある場合は VM 全体に関わる内容です。

[プロファイル名:...]とある場合は kusanagi provision でプロビジョンしたプロファイルごとの内容です。

通知レベル

括弧()で囲まれているのは、通知レベルを指し示しています。

:
:
(レベル:alert)
:
:
(レベル:notice)
:
:
(レベル:info)
:
:

通知レベルには3段階あります。

alert(警告) > notice(注意) > info(情報) ※左に行くほど深刻度が高い。

alert(警告) には即時対応、 notice(注意) には早目の対応、 info(情報) は可能なら対応が望ましいです。

分析結果

:
:
1年以上前のダンプファイルがあります。削除してください。
対象ファイル:
/home/kusanagi/kusanagi_html_20220301.dump
:
:

分析対象と通知レベルと共に分析結果が表示されます。
分析結果には検知した内容とその改善のアドバイスが表示されます。

分析結果の詳細(抜粋)

それでは、ここで実際に出力される分析結果の詳細を、一部抜粋ですが記載します。

全体

通知レベル : alert

マウント位置の利用率が89%を超えています。不要ファイルの削除、肥大化したログのローテートを講じた上で、改善の見込みがないようであれば、ディスクの拡張を行ってください。

理由:VM上に置いてあるファイルサイズの合計がディスク領域の89%を超えています。このままではディスク領域を使い切り、VMがダウンします。
対策:不要なファイル、古いログファイルなどをrmコマンドでなど削除してください。難しい場合は、ディスク領域の拡張を行ってください。


1年以上前のダンプファイルがあります。削除してください。
対象ファイル:
(以下に対象ファイルが出力される)

理由:古いダンプファイルがディスク領域を圧迫しています。
対策:rmコマンドなどで対象のファイルを削除してください。

プロファイルごと

通知レベル : alert

ドキュメントルート内にセキュリティ上問題となるファイル(.zip, .tar, .gz, .log, .sql, .dump, .php.xxx)が確認されました。削除するかドキュメントルート外に移動してください。
対象ファイル:
(以下に対象ファイルが出力される)

理由:ドキュメントルート配下は不特定多数のユーザーが参照できる領域で、そこに.zipファイルなど置くとそのファイルが参照できてしまいます。
対策:rmコマンドなどで対象のファイルを削除するか、mvコマンドなどでドキュメントルート外に移動してください。


uploadsのパーミッションが適切ではありません。ファイルオーナーはhttpd.www、パーミッションは0775に修正してください。

理由:uploadsディレクトリはユーザーからのアップロードファイルが置かれる領域で、不適切な権限を設定すると悪意のあるユーザーに利用される恐れがあります。
対策:chownコマンドとchmodコマンドでuploadsディレクトリの権限を修正してください。

通知レベル : notice

ドキュメントルート内に phpinfo を含むコード、または phpMyAdmin が検出されました。クラッキングのセキュリティリスクがありますので、公開している環境では特に該当コード、ツールの利用を控えてください。
対象ファイル:
(以下に対象ファイルが出力される)

理由:phpinfo 、 phpMyAdmin ともサーバーのPHPの状態を確認できる便利なツールですが、不特定多数のユーザーに見られてしまうので、悪意のあるユーザーがその情報を利用する恐れがあります。
対策:rmコマンドなどで対象のファイルを削除してください。


wp-config.phpに自動更新設定 FS_METHOD, FTP_HOST, FTP_USER, FTP_PASS のいずれかが見付かりませんでした。
次の値に設定してください。
FTP_METHOD:ftpext
FTP_HOST:localhost
FTP_USER:kusanagi
FTP_PASS:kusanagi initで--passwdに指定した値
未設定項目:
(以下に未設定項目が出力される)

理由:wp-config.php に各値が設定されていないと WordPress の自動更新が行えないので、セキュリティリスクが高まります。
対策:viコマンドなどで wp-config.php にそれぞれ指定の値を設定してください。

通知レベル : info

wp-config.phpがドキュメントルートの中にあります。
(例:/home/kusanagi/example/DocumentRoot/wp-config.php を /home/kusanagi/example/wp-config.php に移動してください)

理由:ドキュメントルート配下に置くと wp-config.php が参照される恐れがあります。
対策:mvコマンドなどでドキュメントルートの1つ上のディレクトリに移動してください。


wp-config.phpにデータベースへの接続情報DB_HOST, DB_NAME,DB_USER,DB_PASSWORDが見付かりませんでした。
次の値に設定してください。
DB_HOST:localhost
DB_NAME:kusanagi provisionで--dbnameに指定した値
DB_USER:kusanagi provisionで--dbuserに指定した値
DB_PASSWORD:kusanagi provisionで--dbpassに指定した値
未設定項目:
(以下に未設定項目出力)

理由:wp-config.php に各値が設定されていないと WordPress が作動しません。
対策:viコマンドなどで wp-config.php にそれぞれ指定の値を設定してください。

分析結果のアーカイブ化 –output-archive オプション

kusanagi analyze は kusanagi analyze --output-archive [アーカイブ出力パス] と入力する事で実行結果をアーカイブで出力できます。
なお、アーカイブ出力パスに指定するファイルの拡張子は .tar.gz としてください。

# kusanagi analyze --output-archive /home/kusanagi/analyze.tar.gz
analyze completed.
# ll /home/kusanagi/analyze.tar.gz
-rw-r--r--. 1 root root 19583 Mar 14 23:54 /home/kusanagi/analyze.tar.gz
#

このように、分析結果が圧縮されて出力され、現状の分析結果を保持できる機能となります。
今後、この分析結果のファイルを元に新しい機能を実装する予定です(kusanagi analyze はまだまだ進化中です)。

これからの時代において安全なサイトの運用は必須といえますが、とても労力のかかるものです。
kusanagi analyze はその手助けとなる仕組みですので、ぜひ活用してみてください。

<< kusanagi ratelimit で行うDoS攻撃対策解説新しく実装されたkusanagi containerコマンドで複数のPHPバージョンを一つのサーバで運用してみる >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解