ブログ管理

【ブログ運用】攻撃されてる気がしたのでWordPressのセキュリティを整備

きっかけは突然のハングアップ。「もしかしてサイバー攻撃?」

このブログは「WordPress」で作っているのですが、
先日編集中に画面が固まってしまうという現象が発生しました。

ブラウザ上の編集画面がウンともスンともいわないのです。

サーバーコンソールにアクセスしてみると、「メモリエラー」のアラートを吐き続けてどうにもならない状態。
自分が何もキー操作をしなくても、メッセージがぽんぽこ出てくるんですね。
ああ、これは困ったぞ…と思いながらも、すでに深夜で眠かったので寝ました

そして翌朝。メモリエラーは出なくなっていました。しかし肝心の原因はわからぬまま。
「もしかして…サイバー攻撃を受けてるんじゃ?」と心配になり、イロイロ調べてみることにしました。

調査開始

lastコマンドでアクセス履歴を確認

サーバのコンソールを使える状態で
まずは「last」コマンドを実行。サーバの接続者情報を確認します。
表示件数を絞り込む場合はハイフンを付けて数字。出力結果のイメージはこちらです。

user [$ last -14
user [IPアドレス001] Thu Dec 13 00:00 still logged in ※例1
user [IPアドレス001] Wed Dec 12 00:00 - 20:00
user [IPアドレス001] Sun Dec 9 00:00 - 17:00
user [IPアドレス003] Sat Nov 2 00:00 - 16:00
user [IPアドレス001] Fri Oct 26 00:00 - 15:00
user [IPアドレス001] Sat Oct 6 00:00 - 14:00
user [IPアドレス004] Mon Sep 3 00:00 - 13:00
user [IPアドレス001] Wed Aug 29 00:00 - 12:00
user [IPアドレス002] Mon Aug 13 00:00 - 12:00 ※例2
user [IPアドレス002] Wed Jul 18 19:00 - 20:00
user [IPアドレス005] Tue Jul 17 12:00 - 12:30 ※例3
user [IPアドレス002] Fri Jun 22 00:00 - 19:00
user [IPアドレス006] Tue Jun 5 11:00 - 13:00
user [IPアドレス002] Thu May 17 00:00 - 19:00

順番にみてみましょう。まずこちら。

user [user [IPアドレス001] Thu Dec 13 00:00 still logged in


user
というユーザIDで、IPアドレス001の端末から
12月13日の0時にログイン現在も接続し続けている、という意味になります。

user [IPアドレス001] Thu Dec 13 00:00 still logged in 
user [IPアドレス001] Wed Dec 12 00:00 - 20:00
user [IPアドレス001] Sun Dec 9 00:00 - 17:00
user [IPアドレス001] Fri Oct 26 00:00 - 15:00
user [IPアドレス001] Sat Oct 6 00:00 - 14:00
user [IPアドレス001] Wed Aug 29 00:00 - 12:00

出現頻度の高い「IPアドレス001」は管理人(私)の接続情報ですね。

user [IPアドレス002] Mon Aug 13 00:00 - 12:00 
user [IPアドレス002] Wed Jul 18 19:00 - 20:00
user [IPアドレス002] Fri Jun 22 00:00 - 19:00
user [IPアドレス002] Thu May 17 00:00 - 19:00

8月ごろまでは「IPアドレス002」が主でした。これは、自宅の固定回線として使っていたWimaxによるものでしょう。

user [IPアドレス003] Sat Nov 2 00:00 - 16:00
user [IPアドレス004] Mon Sep 3 00:00 - 13:00
user [IPアドレス005] Tue Jul 17 12:00 - 12:30
user [IPアドレス006] Tue Jun 5 11:00 - 13:00

気になったのは、ところどころで入ってくる謎の「IPアドレス003~006」。
IPアドレス検索で調べると、日本国外のIPアドレスっぽい。
ヤバイ、侵入されてる、終わった…
一瞬、吐きそうになりました。

でも冷静に考えてみたところ、心配なさそうでした。
これは、スマホのアプリからのアクセスでした。スマホのIPアドレスは固定ではなく、タイミングによって別のアドレスが割り当てられます。今日使ったIPは、明日は別の誰かのIPになりますが、その誰かが日本国内とは限らないようです。
実際、控えておいたスマホIPアドレスを後日検索したらメキシコに変わってました。

lastbコマンドでアクセス失敗履歴を確認

次にlastbコマンド。このコマンドはサーバログインに「失敗した」履歴が表示されます。
身に覚えのない履歴が出てきた場合、それは不正アクセスを試みた形跡と判断できます。

user [$ lastb
user1 [怪しいIP] Thu Dec 13 22:46 - 22:46 (00:00) ※例1
user2 [怪しいIP] Wed Dec 12 16:32 - 16:32 (00:00)
user3 [怪しいIP] Tue Dec 11 23:41 - 23:41 (00:00)
user4 [怪しいIP] Mon Dec 10 22:59 - 22:59 (00:00)
user5 [怪しいIP] Sun Dec 9 07:29 - 07:29 (00:00)

抜粋して説明。

user [user1 [怪しいIP] Thu Dec 13 22:46 - 22:46 (00:00)


user1
というユーザIDで、怪しいIPの端末から
12月13日の22時46分にログインしようとしたけど失敗したよ!という意味になります。

上の結果はイメージですが、実際けっこうな件数が出ました。一般的なユーザIDとパスワードを組み合わせて接続を試みていたようです。こういうの、辞書型攻撃っていうんですよね。
lastコマンドで怪しい接続はなかったので、ひとまずサーバに侵入された形跡はないと考えてよさそうです。
デフォルトポートの非解放、推測されにくいユーザ、パスワードの設定、公開鍵認証 と
色々気を付けていますが、少なくともポート番号に関しては突破されていたということなので、気持ちが悪いですね。

Apacheアクセスログとエラーログを確認

次はブラウザ経由での不正アクセスがなかったかを確認します。
Apache のログフォルダに移動して、まずはエラーログ「error_log」を確認。

user [$ view error_log
[Thu Dec 13 00:01:59 2018] [error] [client 怪しいIP] File does not exist: /etc/httpd/htdocs
[Thu Dec 13 00:01:59 2018] [error] [client 怪しいIP] File does not exist: /etc/httpd/htdocs
[Thu Dec 13 00:01:59 2018] [error] [client 怪しいIP] File does not exist: /etc/httpd/htdocs
[Thu Dec 13 00:01:59 2018] [error] [client 怪しいIP] File does not exist: /etc/httpd/htdocs
[Thu Dec 13 00:02:03 2018] [error] [client 怪しいIP] File does not exist: /etc/httpd/htdocs
[Thu Dec 13 00:02:03 2018] [error] [client 怪しいIP] File does not exist: /etc/httpd/htdocs

「File Not found」のエラーがどっさり。これは、Webページ内に存在しないアドレス(URL)にアクセスが試みられたということ。
このときのIPアドレスをコピーして、今度はアクセスログから詳細を確認します。

ここには通常の閲覧者様の正常ログと、不正アクセスを試みた輩のログが一緒に表示されます。
先程コピーした、怪しいIPアドレスで絞り込んでみます。

user [$ cat access_log | grep "怪しいIP"
怪しいIP - - [09/Dec/2018:00:01:59] "GET /help.php HTTP/1.1" 404
怪しいIP - - [09/Dec/2018:00:01:59] "GET /_query.php HTTP/1.1" 404
怪しいIP - - [09/Dec/2018:00:01:59] "GET /test.php HTTP/1.1" 404
怪しいIP - - [09/Dec/2018:00:01:59] "GET /db_cts.php HTTP/1.1" 404
怪しいIP - - [09/Dec/2018:00:02:03] "GET /db_pma.php HTTP/1.1" 404
怪しいIP - - [09/Dec/2018:00:02:03] "GET /logon.php HTTP/1.1" 404

こちらも、PHPファイル名を推測指定して何かしてやろうという試みのようです。
「404」というエラーが返っているのでまともなアクセスはできていないということですが、心配であればさらに
「grep -v "404"」をパイプで繋いでやれば、404以外のリターンがあった履歴を見ることができます。結果がなければひとまずOK。

$ cat access_log | grep "怪しいIP" | grep -v "404"

ちなみに404(File Not found )のエラーが起こった場合、「ファイルが存在しません」というページが表示されます。
当方では何も設定していないので、WordPressかSTORKのデフォルト機能なのだと思います。
このページを表示するためにサーバリソースを割くのもシャクなので、どうせなら読んでいきやがれっとばかりに404エラーをトップページにリダイレクトするよう変更しました。
逆にリソース食いそうな気もするけど…

実施した対策

中国からのアクセスを遮断。

怪しいアクセスはほぼすべて中国IPからのものでしたので、こちらのページを参考にiptablesの設定を行いました。
接続自体を拒否するので、怪しいアクセスがあったかどうかもわかりません。
効果のほども測りかねるのですが、一応そのままにしています。

ログインページURLを変更。


「WordPress管理画面」へのログインパスワードは推測されにくいものを使用しているものの、
万が一ということもあります。そのため、パスワード入力画面に辿りつきづらくするようにしました。
初期状態では、サイトURLのあとに「wp-login」などと付けるとログイン画面が表示されますが
こちらのページを参考にURLの変更を行いました。

当然ながら、サイドバーなどに管理画面へのリンクをつけたりしたら本末転倒ですよ。

PHPのバージョンを更新

まあ、新しいバージョンの方がセキュリティも強くなっているだろうという安易な考えから、
PHPのバージョンを最新化しました。副次効果として、サイトの表示スピードが大幅にアップしました。
編集ページのレスポンスも爆速。変えてよかった。

対策後の状況とまとめ

上記対策を施した状態で1ヶ月近くWordPress使っています。
いまのところ、lastコマンドで確認できる「不正接続」は発生していません。

lastbコマンドで確認できる「不正接続失敗」は1日だけ発生しました。
約30分に渡って、さまざまなユーザーIDでの接続が試みられています。
あまり続くようならポート番号の再変更も検討します。

apacheログで確認できる「存在しないURLへのアクセス」はほぼ毎日発生しています
中国IPをブロックする程度では防げないようですね。
これは、ブログを運営している以上しかたないことなのかもしれません。

というのが現在の状態です。

セキュリティについて考えるきっかけとなった「メモリエラー」が、不正アクセスによるものだったのかは定かではありませんが、良い勉強になりました。
サイトの表示レスポンスを向上できたのは予期せぬ収穫でした。

COMMENT

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください