はぐれメタルはにげだした

身近な趣味からテクニカルな話題まで幅広く取り扱っていきます

ブログ

wordpressにDoSの脆弱性が見つかった話(CVE-2018-6389)

投稿日:2018年2月22日 更新日:

この記事の所要時間: 926

2018年2月5日、Barak Tawily氏によってwordpressの新たな脆弱性が発見されました。

Barak氏によると、load-scripts.phpに大量のファイルをロードさせることでDoS攻撃(いわゆるF5アタック)のような高負荷をWebサイトに対してかけることができるとのことです。Barak氏はこの問題をwordpress運営に報告したそうですが、wordpress側の見解としては

「これはwordpressの欠陥じゃないからサーバやネットワーク側で対処してね」

ということらしいので、今のところ公式の修正パッチが配布される予定はありません。

一連の経緯はBarak氏のブログにまとまっているのでそちらを確認してもらうとして、当記事では、この脆弱性って何なの?ってところから簡単な対策方法まで説明します。

とりあえず解決方法が知りたい

難しいことは分からんから解決方法だけ教えてくれという方はここだけ読んでください。まずは自分のサイトでも問題が発生するかを確認してみて、発生するならアクセス制御する必要があります。

自分のサイトの確認

自分が普段使用しないIPからご自分のサイトにアクセスしてみてください。家族や友人のスマホを借りて、wifiを使わずにアクセスするのが簡単な確認方法です。

アクセスURLは↓です。ドメインは自分のものに変えてください。

http://ご自身のドメイン/wp-admin/load-scripts.php?c=1&load[]=common&ver=4.9

もし英字でズラズラ表示される場合、そのサイトは攻撃に対して無防備な状態です。

対策方法

対策方法は色々あるのですが /wp-admin/ 配下をアクセス制御するなりリダイレクトなりさせるのが安全です。当ブログでは、僕が使用しているIP以外でアクセスが来た場合はトップページにリダイレクトさせています。

https://e-book-info.com/wp-admin/load-scripts.php?c=1&load[]=common&ver=4.9

このへんのアクセス制御は .htaccess で出来ます。

また、AWSを使ってる場合はWordPressのセキュリティ保護をAWS WAFで設定するの記事でWAFの設定方法をまとめているので併せて参考にしてください。

.htaccessって何?

.htaccessとは、Webサーバの設定を部分的にカスタマイズすることができる設定ファイルのことです。

サーバに直接入って編集する場合は、wp-config.phpとかwp-cron.phpとかが置いてある階層と同じところに置かれていると思います。エックスサーバの場合は管理画面から編集できます。

エックスサーバの初期設定では.htaccessの中身はこうなってます。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

初期状態では、存在しないファイルへのアクセスをindex.phpにリダイレクトさせてるだけで特にアクセス制御とかはされていません。

こんな感じに追記して他人が管理画面にアクセスしてくるのを防御します。

@@ -2,6 +2,12 @@
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
+RewriteCond %{REQUEST_URI} ^/xmlrpc.php$ [OR]
+RewriteCond %{REQUEST_URI} ^/wp-login.php$ [OR]
+RewriteCond %{REQUEST_URI} ^/wp-config.php$ [OR]
+RewriteCond %{REQUEST_URI} ^/wp-admin.*$
+RewriteCond %{REMOTE_ADDR} !^XXX.XXX.XXX.XXX$
+RewriteRule ^(.*)$ /? [R=301,L]
 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d

XXX.XXX.XXX.XXXの部分はアクセス許可したいIPを指定するのでIPアドレス確認サイトで自分のIPを確認して入力してください。

今回の問題で保護すべきは /wp-admin/ のみなんですが、セキュリティを高める意味では他にも保護すべきパスがあるのでついでに守ってあげます。

これで、指定したパスに許可したIP以外からアクセスが来たらトップページに転送されるようになります。

動作確認

では動作確認してみましょう。

まずは許可したIPで正常にアクセスしてみて、いつも通り管理画面にログインできればOKです。できない場合はIPの記述が間違っています。

続いて、再度他人のスマホなり何なりから最初のURLにアクセスしてみてください。トップページにリダイレクトされれば成功です。

キャッシュが残ってるとリダイレクトされないので、ブラウザからキャッシュを削除してから再度読み込んでみてください。

解説

ここまでの内容を説明をしていきます。

load-scripts.phpって何?

wordpressの処理速度を向上させるプログラムです。cssファイルやjavascriptファイルをまとめて同時に読み込むことでパフォーマンスを向上させています。

それが何で問題なの?

load-scripts.phpは普通に使ってる分にはほんの数個くらいのファイルを読み込む程度なので特に問題はありません。(多分)

しかし、Barak氏は、このload-scripts.phpを悪用して意図的に最大181個のファイルを読み込ませる方法を見つけました。このとき、サーバ側では1回あたり約4MB程度の読み込みが発生するため、同時アクセスされるほど大きな負荷がかかります。この攻撃はアクセス制御が施されていない全てのwordpressサイトに対して有効です。

なんでwordpressの運営は対応してくれないの?

load-scripts.phpに限らず、サーバの限界を超えるような同時アクセスを受ければどんなサーバでも落ちます。なのでサーバのリソース不足を全てアプリ側で対応していたらキリがありません。

今回の問題は /wp-admin/ 配下のみで発生するものであり、一般的なセキュリティ意識で考えればサーバ側でアクセス制御して当然な領域だとも考えられますので、わざわざ対応したくないんじゃないでしょうか。

なんでアクセス制御したら解決なの?

load-scripts.phpは、URLでいうと

https://ドメイン/wp-admin/load-scripts.php にアクセスすることで呼び出されます。

なので攻撃者が/wp-admin/にアクセスできないようにしてしまえば安全です。

リダイレクトさせるよりブロックした方がいいんじゃないの?

ブロックでもいいと思います。

RewriteRule ^(.*)$ /? [R=301,L]

RewriteRule ^(.*)$ - [R=403,L]

に変えたらブロックできます。

wp-admin以外にもいろいろアクセス制御したのは何で?

これら全部管理者のみが使用するパスであり、一般のサイト訪問者にはアクセスさせない方が良いからです。

パス 用途
xmlrpc.php wordpressのリモート更新用のパス
wp-login.php wordpressのログイン用のパス
wp-config.php wordpressの設定が書かれたパス
wp-admin wordpressの管理画面用のパス

.htaccessじゃなくてプラグインで制御したらダメなの?

ダメではないですけど、phpを無駄に走らせる(つまりメモリを無駄に使う)ことになるので、サーバ運用の観点から個人的にはあまりオススメしないです。とは言え、.htaccessなんて分からないよーという方もいると思うので、やりやすい方でいいと思います。

毎日バックアップとってるなら大丈夫?

今回の脆弱性は、サーバに高負荷をかけられてダウンさせられてしまうリスクを内包してるだけなので、バックアップはあまり関係ないです。仮にサイトが再起不能に陥ってバックアップから復元しても、同じ攻撃をされたらまた死にます。

そもそもこれって対応しといた方がいいの?

この脆弱性自体については別にそれほど緊急度は高くないとは思うんですが、管理画面へのアクセス制御は必ずやっとくべきです。侵入されてからでは遅いので。

侵入されるとどうなるの?

攻撃の目的によって様々ですが、記事を改竄されたり削除されることもあれば、自分のサーバ経由で他人のサーバを攻撃する「踏み台」として使われることもあります。

まとめ

当記事では、新しく見つかったwordpressの脆弱性の概要とその対策方法についてまとめました。

セキュリティ対策と聞くと難しく聞こえますが、余計な人に余計なところへのアクセス権は与えない、必要最小限の権限のみを与えるっていうのがセキュリティの基本です。サービスを危険に晒すような設定を野放しにしておくのも宜しくないので、守るべきところはしっかり守っておきましょう。

こんな記事も読まれてます

20代30代の客先常駐ITエンジニアが最速で年収を上げる方法

この記事の所要時間: 1456

この記事の所要時間: 約 14分56秒 もしあなたが以下の3つ全てに該当するエンジニアであれば、今すぐにでも転職をオススメします。 客先常駐型のエンジニアとして働いている 案件の途中で契約を切られるこ …

-ブログ
-, , , , ,

関連記事

ブログで指定した期日を過ぎたら自動で文章を更新させる方法

この記事の所要時間: 1117

この記事の所要時間: 約 11分17秒 さきほどtwitterを見てたらこんなツイートが話題になってました。 前回公開した記事の中で、実は残日数をカウントダウンさせるプラグインが入ってます。 残日数の …

プロフィール

プロフィール



はぐれん@フリーランサー

10代〜20代前半くらいまではガンガンいこうぜ。20代半ばで鼻っ柱を砕かれて一度はめいれいさせろの支配下に置かれかけたものの、いや逃げりゃいいんじゃんって気付いてからはまた違う世界が見えて来た。30代半ばに差し掛かった今、いろいろやろうぜ。