WordPressを攻撃されたサーバーのログ解析をしました。その考察をシェア。
解析した内容は、
- mysqlのquery log
- access log
特にquery logを確認できたことは本当に重要だった。どういった情報がデータベースから抜かれた可能性があったか、も調べられたから。
wp-adminへの侵入は、おそらくどこかからパスワードが漏れたようで、passwordを推測してアタックしたようなログはなかった。そして、特にデータを抜かれたこともなかった。しかし、悪意のあるコードは埋め込まれていた。
攻撃は機械的に行われていたので、最低限ロボット向けの対策をしておくべきだ。
対策
参照: http://codex.wordpress.org/Hardening_WordPress
* 基本
table prefixは必ず”wp_”から変える
adminは使わない、SALTをちゃんと設定する。
なぜSALTをちゃんと設定するべきかについてはこちら:
http://codeseekah.com/2012/04/09/why-wordpress-authentication-unique-keys-and-salts-are-important/
WordPressのバージョンは明かさない
wp_enqueue_scriptやwp_enqueue_styleなどを使う際には、4つ目の引数をnullとする
readme.html, readme-ja.htmlを消す
# 以下は、あくまでrobotによる攻撃への耐性
* admin権限アカウントの名称を探す
/?author=1 などをして管理人アカウントのidを取得していた形跡があったので、nicknameを設定しておく、authorページを無効にする、idを表示しない、などの対処が有効と思われる。ユーザー名 “admin”は使わないようにする
* wp-login.php へアクセス、パスワード推測
CAPTCHAを入れる 例)http://wordpress.org/plugins/si-captcha-for-wordpress/
→ 連続失敗した場合の対応 http://wordpress.org/plugins/limit-login-attempts/
→ id:adminは使わない、passwordは推測されないようなものを使う
→ Google Authenticatorなどを使う
→ WPをインストールする時点で、ディレクトリをかえておく?
参照: http://wpdocs.sourceforge.jp/Giving_WordPress_Its_Own_Directory
* wp-admin内に入ろうとする
→ wp-admin にBASIC認証などを入れる
* wp-adminにアクセスされたら
プラグインをインストールするのを不可にする
→ ftp/sftpのパスワード入力を必須にする
ftp/sftpなどでファイルをアップしている場合は、apacheとは別でuserを作る。そうしないと、ファイルのpermissionを644にしても、theme editorで書き換えられてしまう
* wp-adminアクセス後の一般的な攻撃
プラグインのなかで、書き換えられるファイルがあるかを一通り試す
→ 使わないプラグインは消しておく
→ permissionは644と755。777とかアリエナイヨ
→ 一切編集を不可にする
define('DISALLOW_FILE_EDIT', true);
レンタルサーバによっては、パーミッション変更できなかったり、変更したら色々不具合があったりするのがある(ロリ○とか)ので、気になるのであればDISALLOW_FILE_EDITを設定しておくか、別のサーバーにしましょう。
* テーマのなかで、書き換えられるファイルがあるかを一通り試す
→ 使わないテーマは消しておく
→ permissionは644と755。777とかアリエナイヨ
※ twentytenなど、デフォルトで入っているであろうテーマから攻撃された形跡あり。不要なら消しておく
* wp-config.php を探す
wp-configにはデータベース情報が入っているので、これを取られるとWP部分以外にも被害が及ぶ可能性がある
→ wp-configをWPの一個上の階層に置いておく(この効果については諸説あり)
→ wp-load.php でwp-config.phpのファイルを指定できるので、名前や場所を変えちゃうのも可能
まあ基本的に、wp-adminに入られたら、もう負けです。
やられた後の処理
改竄されたファイルを調べる。テーマ、プラグインだけでなく、インストールしたWordPress全体について調べておく。Diffmergeなどでちゃんと確認しておくこと。
データベースの中身も書き換えられているかもしれないので、確認しておく。
色々解析させていただき、勉強になりました。