0. はじめに
WordPressを運営する上で、セキュリティを確保することは重要なテーマです。
以前、「エンジニアが選ぶWordPressのセキュリティ対策6選(基本編)」という記事を書きましたが、Wordpressのセキュリティ対策をするのと同時に、現在のサイトが安全であるかどうかを診断する事も非常に大切です。
世に出回っているWordpressのセキュリティ診断ツールはいろいろあります。
いろいろな診断ツールの比較記事を書こうと思ったのですが、検証の過程でこれらのツールでは検出できない脆弱性があるということが分かったので記事にしてみました。
今日は、実際にワラゴンが行った検証の方法を踏まえて紹介したいと思います。
1. 評価対象
今回、評価対象としたツールは、WPScans.com, Wordfence, Sucuri Securityの3つです。
どれも、それなりに名前も知られており、実績もあるツールです。
簡単に、ひとつずつ説明しておきます。
WPScans.comは、WPScanというツールをベースにしてしています。
名前はよく似ていますが、この2つは別サービスで、WPScanは昔からあるWordpress専用の脆弱性診断ツールで、非常に高い実績があります。
しかし、WPScanで診断を実行するにはツールをサーバにインストールするなど、少々技術的なハードルが高い部分がありました。
そんな中、WPScans.comが登場しました。
WPScans.comは、WebブラウザでWPScans.comにアクセスして、対象サイトのURLを入力するだけなので、とても簡単にスキャンを実行することができます。
Wordfenceと Sucuri Securityは非常に有名なWordpressのセキュリティプラグインで、どちらもスキャン機能が無料で提供されています。
2. 脆弱性を発見したいならソースコードを検査すべきだが、、、?
以下、能書きを垂れるので、お急ぎの方はこの項目を読み飛ばしてください。
通常、データベースを使用するWebサイトを構築する場合、Webエンジニアはセキュリティを意識して実装をする必要があります。
PHPが登場した当時は、書籍でもセキュリティを意識したコーディングについて解説されることは少なかったのですが、それももう昔の話です。
今どきのWebシステム構築を解説する書籍なら、Webでコーディングする上で、セキュリティを意識するのがどれほど重要かを解説しないものはないでしょう。
しかし、一般的に、Web独特のセキュリティを意識したコーディングができるようになるためには、非常に時間がかかります。
特に、新米プログラマにとっては、仕様に従って実装するのがやっとで、セキュリティを意識した実装までは手が届かないというのが現実なのではないでしょうか。
熟練のプログラマ達が制作しているWordpressでさえ、セキュリティに関する修正は定期的に実施されています。
それほどまでに、Web制作において脆弱性というものは簡単に混入してしまうものなのです。
さて、長くなりましたが、私がここで言いたいことは、「脆弱性というのは実装方法と密に関連しているので、本当に脆弱性を発見したいならソースコードを検査しなければならないハズ」ということです。
ソースコードを検査するといっても、ツールなどで機械的に検査ができるかというと、そうでもありません。
(どこかのすごい人が、ソースコードから機械的に検査できるツールを作っているかもしれませんが、、、)
そんな背景を踏まえた上で、世に出回っている診断ツールについて考えてみます。
WPScans.com, Wordfence, Sucuri Securityのいずれも特にサーバにツールをインストールしないタイプなので、ソースコードを検査しているわけではありません。
それではどのように検査しているのでしょう?
ソースコードを検査しないなら、考えられるのはWordpress本体やプラグインのバージョン情報を使うくらいしか方法はなさそうです。
これは個人的にはとっても面白いテーマです。
検証するしかないでしょう!!
3. 検証方法
今回、「これらのツールはWordpress本体、テーマ、プラグインのバージョン情報を検査している」という仮定を置いてみます。
この仮定が正しいとすれば、これらのツールは「独自のカスタマイズによって混入した脆弱性は検出できない」ハズです。
ですので、自分で脆弱性を作りこんで、それを検出できるかどうかを検証してみます。
そこで、今回は割と簡単に実装できる脆弱性としてXSS(クロスサイトスクリプティング)を採用しました。
(実際には、色々な理由からXSSの脆弱性を作り込むには少し苦戦しましたが。)
XSSを作り込んだ結果、以下の通りXSSがうまく動いていることが分かります(笑)。
↑
標準テーマであるTwenty Seventeenを使って、検索ボックスに<script>alert("hello")</script>と入力して検索すると、「hello」というダイアログが表示される。
もう、これ以上ないくらいに典型的なオレオレXSSができました。
そしてもう一つ。
参考までにWordpress本体、テーマ、プラグインのバージョン情報を検査していることの裏付けを取るためにも、脆弱性が発見されたプラグインを入れてみて、それを検出できるかどうかも検証してみました。
ここで重要なことは、脆弱性が発見されたバージョンを入れることです。
WPScanのWebサイトに行くと、Wordpress本体、テーマ、プラグインについて発見された脆弱性のデータベースを検索することができます。
(WPScanの脆弱性データベース)
このデータベースから適当なプラグインを選びます。
この検証を行った時点で最新のもののうち、今回は2018/8/17に公開された「Chained Quiz ver. 1.0.8のSQLインジェクション」を使ってみます。
脆弱性に関する詳細は以下を参照してください。
Chained Quiz <= 1.0.8 - Unauthenticated SQL Injection:
こちらも、再現させるには少しコツがいるのですが、以下のようにして、name="answer"というインプットタグにvalue="8 AND SLEEP(10)"をセットしてSubmitすると、10秒間待った後に画面が更新されます。
さて、これで準備ができました。
4. 結果
それでは結果を見てみましょう。
検証1: 独自に埋め込んだXSS脆弱性を検出できるか
どの診断ツールを使っても検出することができませんでした。
これだけ明白な脆弱性であるにもかかわらず、です。
まあ、予想通りではありましたが、やはり独自カスタマイズによって混入した脆弱性は発見できないことが分かります。
検証2: 脆弱性が公開されているプラグインを検出できるか
こちらはツールによって結果が異なりました。
WPScans.com・・・検出できた
Wordfence・・・検出できなかった(検証のあと、4,5日してからアラートメールが届く)
Sucuri Security・・・検出できなかった
WPScans.comが検出できたのは、WPScans.comはWPScanベースであることを考えると、まぁ納得ですね。
Wordfenceの方は、検証を行った時は検出できませんでした。
しかし、その後無事に検出し、通知メールが届きました。
8/17公開の脆弱性を、8/29に検出したので、レスポンス的には少し遅い感があります。
Sucuri Securityでは、全く検出することができませんでした。
現時点(2018/9/9)でも検出できていないので、いったい何を検査しているのか不明です、、、
5. まとめ
いかがだったでしょうか?
全体的に、ワラゴンの予想通りの結果となりました。
診断ツールが、独自にカスタマイズした部分の検査を行うことができない、ということが分かりました。
カスタマイズが大量に入っているWordpressサイトの管理者にとっては、好ましくない結果です。
残念ながら、独自カスタマイズ部分の脆弱性を効率よく検出する方法は、ワラゴンには分かりません、、、
やるとすれば、カスタマイズ部分のソースコードを専門家に見てもらうか、ペネトレーションテストを外部に委託するか、くらいでしょうか。
いずれの方法でも、非常にお金がかかるため、よほど予算のあるプロジェクトでない限り難しいのではないでしょうか。
また、WPScans.comの脆弱性データベースの鮮度は非常に高いということも分かりました。
おそらくWPScanのAPIを使っているのでしょう。
WPScanと同等の検査ができると期待してよさそうです。
しかし、逆に言えばWPScanのデータベースに登録されていない脆弱性は検出することはできません。
これは、ウイルスソフトが、定義ファイルに登録されていないウィルスは検出できないのと同じですね。
一方、Wordfenceでは検出までに少し時間がかかること、Sucuri Securityに至っては全く検出できないということが分かりました。
ツールを使えば手軽に脆弱性のテストはできますが、ツールが検出できる脆弱性には制限がある、ということを頭に入れておきましょう。