
WordPressのセキュリティ対策について改めて調べてみた
1. はじめに
お久しぶりです!2回目の投稿となります、エンジニアの片岡です。
早いもので、新卒として4月に入社してからもうすぐ1年が経とうとしています。
突然ですが私は『情報処理安全確保支援士試験』(旧情報セキュリティスペシャリスト試験)を取得しており、攻撃やその対策について興味があります。
今回はWordPressに存在するセキュリティ対策について改めて調べてみました。
2. WordPressって何?
WordPressはCMS(コンテンツ マネジメント システム)の1つで、サイトの作成やブログの作成などができます。プログラムを書けない人でもサイトの管理や記事の投稿ができるため、とても人気があります。
最近では世界のサイトの40%はWordPressで構築されているという調査結果が出たり(https://w3techs.com/blog/entry/40_percent_of_the_web_uses_wordpress)
ホワイトハウスのサイトリニューアルに、引き続きWordPressが選ばれたというニュースが入ったり(https://capitalp.jp/2021/01/21/whitehouse-stick-on-wordpress/)
何を隠そうこのサイトもWordPressで構築されているのです!
※WordPressを使って構築されたサイトはクラス名とかの付け方が独特なので、少し知っている人ならソースコードを見ればすぐわかったりもします
そんな人気のWordPress、当たり前ですがクラッカーからしてもいい的になります。
そこで今回はWordPressに存在する脆弱性、その攻撃方法・対応方法について、特に僕が面白いと思ったものについて抜粋して紹介します!
3. 脆弱性とその対策
管理画面のログインページがバレやすい
そのサイトがWordPressで構築されているかはソースコードを確認すればすぐにわかると書きましたね。実際に皆さんも「Ctrl+u」を押していただき「wp」で検索していただくとすぐにわかるかと思います。
ここで問題になってくるのが、WordPressでサイトが作られている=管理画面へのログインページが存在するということです。
そして多くの場合、WordPressサイトのトップページのURLに「/wp-admin」や「/wp-login.php」と書き足すことで簡単にログインページに行けてしまいます。
更に、WordPressは「〇回ログインに失敗したらロックする」という機能をそなえていないので、総当たり攻撃を仕掛けることでいずれ突破できてしまうというわけですね。
対策
対策方法はいくつかあるのですが、私のおすすめ順に紹介します。
wp-adminでログインページにリダイレクトされないようにする & ログインページのURLを変える
ログインページにBasic認証を導入する
管理画面のIDとパスワードを複雑でわかりにくいものにする
「wp-adminでログインページにリダイレクトされないようにする & ログインページのURLを変える」については、
「ログインページがバレやすいのがダメならログインページをわかりにくくすればいいのでは?」
という発想です。
そんな難しいこと言われてもやり方がわからない…という方も安心です。両方とも対応してくれるプラグインが用意されていますので、是非ご確認ください。
→SiteGuard WP Plugin(https://www.jp-secure.com/siteguard_wp_plugin/) ※広告ではありません
「管理画面のIDとパスワードを複雑でわかりにくいものにする」ついては基本なので必ず行ってください。
「管理画面のIDとパスワードを複雑でわかりにくいものにする」よりも「ログインページにBasic認証を導入する」をおすすめしている理由については、「総当たり攻撃を受けた際のサーバーへの負荷」にあります。
攻撃者がログインページに対して総当たり攻撃をしてきた場合、毎回DBを確認するのでとてもサーバーに負荷がかかってしまいます。対してBasic認証はDBアクセスをしないので比較的サーバーに優しいということですね。
もちろん全て行うに越したことはないので、可能な限り対策は行いましょう。
管理者のユーザーIDがバレてしまう
URLに「?author=1」を付け足してアクセスするとリダイレクトされ
「/author/○○○○/」というページになります。
これは○○○○さんの書いた記事一覧という便利な機能ではあるのですが、ログインIDが丸見えです。
更に「author=1」つまり最初のユーザーということで管理者のアカウントである可能性が非常に高いです。
管理者のアカウントのログインIDがわかれば上記の脆弱性と合わせてすぐに突破されることがわかるかと思います。
対策
function.phpファイルに下記のコードを追加することで解決です。
add_filter( 'author_rewrite_rules', '__return_empty_array' );
function disable_author_archive() {
if( $_GET['author'] || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){
wp_redirect( home_url( '/404.php' ) );
exit;
}
}
add_action('init', 'disable_author_archive');
プログラムはよくわからない??function.php編集するのは怖い???そうですよね。そんなあなたに、良い感じのプラグインを探してきました。
→Edit Author Slug(https://ja.wordpress.org/plugins/edit-author-slug/)※広告ではありません
私自身実際に使ったことはないのですが、一通り機能を見ている限りかなりよさそうなプラグインかなと思います。ぜひ活用してください。
脆弱性が見つかりやすい&狙われやすい
WordPressまたはプラグインで脆弱性が見つかったとなると、有名故にすぐに広がってしまいます。前述のとおり、WordPressで構築されているサイトであることはすぐにわかるので、攻撃者が公表された脆弱性をついてみたらまだ対策されてなくて突破できてしまった。(ゼロデイ攻撃と言います)なんてこともよくあります。
対策
WordPressやプラグインを常に最新版にしておきましょう。
WordPressやプラグインは日々脆弱性をなくすため更新されています。放置しておくと、脆弱性が修正されないまま残ってしまい、攻撃者にそこを突かれる恐れがあります。
中でも「任意のPHPを実行されてしまう」なんて脆弱性があったら気をつけましょう。
「wp_create_user()」関数を実行され、任意のユーザーアカウントを作られる→そのアカウントで管理画面にログインされる→DBを編集できるプラグイン(Adminerなど)を悪用される→攻撃者のアカウントが管理者になる…
ここまでいったらこのサイトはもう終わりですね。
そんなことがないよう、常に最新バージョンを保つことを意識しましょう。
4. さいごに
調べていたらテンションが上がってしまい長くなってしまいました。
他にも様々な脆弱性は存在しますが、WordPress自体が対応してくれていたり、プラグインで解決されていたりと、大体のものは更新しているだけで何とかなります。
もしWordPressサイトを運用されている方がおられましたら、すぐに最新版になっているか、上記の対策ができているか確認してみてくださいね。