WordPressのプラグインのセキュリティについて、少し真面目な話をします。

2013.07.12 | 考える。
スポンサードリンク

a0001_000941

ども、最近でしゃばりすぎじゃないかという噂もあるブルーです。ヴァイオレットさんが書いた記事「なぜexec-PHPがモテるのか」も多少火種になりまして、TwitterやFacebookの観測範囲では、Exec-PHPプラグインについての様々な話題が挙がっていたように思います。このプラグインは、WordPressの投稿画面では、通常PHPのプログラムコードを入力してもセキュリティの観点から削除されますが、それを削除せず、表示の際にコードを実行するというプラグインです。

あえて個別を取り上げることはしませんが、個人的に気になったのは、危険性を啓蒙する記事の一方では、下記のような意見を持つ方も多そうだということです。

「上級者はセキュリティについてもよく分かってるっぽいし、自分自身で安全なプラグインを書くこともできるだろうから関係ないかもしれないけど、初心者にとっては便利なプラグインは代替えの効かないものだし、危険とは言っても、自己責任で使う分には自由じゃないか

「だいたい、ダメだダメだばかりで、代替案もなしに拒否されても、初心者はどうしたらいいのか分からない

どちらももっともな意見だと思います。一方では、簡潔に、このプラグインは使わないようにしよう、とだけ述べる方にも同情します。私自身も、WordPress使いならこれだけはやっておきたい本当のセキュリティ対策10項目という記事で取り上げましたが、詳しくは解説しませんでした。

セキュリティリスクについて、セキュリティに関心のあまりない方に説明するのはとても難しい。がんばってこのプラグインがいかに危険な用途に使われる可能性があるかを解説したとして、「なんだ、ボクはそんなことしないから使っても大丈夫」という風に受け取られる可能性もあります。であれば、余計なことは言わずに「とりあえず危険なのだから、よく分からないなら使うのは止めておいたほうがいいですよ」という言い方に留めておく、という判断はあると思います。

また、個別のプラグインを取り上げて良し悪しを細かく書いたところで、実際のところ似たような用途のプラグインはたくさんあり、中にはつい昨年作られたものもあります。使うのは危険だと考えている側ですので、名前を挙げることはしませんが、それらの新しいプラグインに比べて、実際はExec-PHPプラグインはかなりセキュリティに配慮されており、考えられる危険性は極力排除した実装になっています。

例えば、管理者以外がオーナーの投稿ではPHPが実行できませんし、他のプラグインが不正なコードを紛れ込ませて、管理者の入力した覚えのないPHPが勝手に実行されることが極力無いように、極力早いタイミングで処理を行うようにしていたり、不適切な設定をしている際は、セキュリティホールが発生しているというアラート表示まで行なっています。

でもね、これを「何か怖い英語のエラーメッセージが出るけど、この方法で消せます!」って書いてるブログ記事もまた散見されるのです。「何か変なん出てる〜」じゃなく、作者からのお知らせなのです。利用者であるあなたへの。「とりあえず英語は読まずに消す」というのはせっかくの作者の配慮を無にしてしまいます。

では、このプラグインの翻訳ファイルを作成して、全てのエラーメッセージを日本語にすればいいでしょうか。実は、Exec-PHPは日本での根強い人気に反して、開発が2009年の1月で止まっており、今後もサポートされる見込みはありません。わざわざ日本語に翻訳してさらにユーザーを増やすようなことをするよりは、そっと消えるのを待つのが得策だと思いますし、多くの方がそう思っておられると思います。そして、日本でブログで紹介されることが多いExec-PHPの危険性を指摘しつつ、その他のExec-PHPより新しく、かつExec-PHPよりセキュリティ的にマズいプラグインについては、掘り起こさずそっとしておこうと。

しかし、今回再びこのプラグインが陽の目を浴びるきっかけを当ブログも作ってしまいました。もう開発終了して4年以上経っているにもかかわらず、です!それを目の当たりにして、ああ、これは個別のプラグインをディスってても何も変わらないなと思いました。そのため、WordPressのプラグインのセキュリティについて、少しまじめに書いておこうと思った次第です。すみません、たいへん前置きが長くなりました。ここからはExec-PHPという単語は出しません。

安全なプラグインの選び方とは?

おそらく、セキュリティの話を聞いて、あるいは個別のプラグインが危険と聞いて、初心者の方が考えるのはこの問いではないかと思います。しかし、先にネタばらしをしてしまいますが、絶対安全なプラグインというものは存在しません。

例えば、WordPressのセキュリティに詳しいSucuri社のBlogでは、今年に入ってからでもこれだけのプラグインに対して危険性を注意喚起し、プラグインが修正アップデートを行うまでは使用を止めるように警告したり、すぐさまアップデートを行うよう勧告しています。

W3 Total Cache プラグインなどは有名ですし、使っている方も多いのではないでしょうか。みんなが使っているから安全、と言うこともないのですね。

また、WordPressの人気上位50プラグインの20%に何らかの脆弱性が発見された、という調査報告もありました。

WordPress 人気 50 プラグインの脆弱性

このように、有名なプラグインにも脆弱性は存在します。絶対安全なプラグインだけを選ぶ、ヤバいのは避ける、ということは現実的には難しいのです。これは、あなたが初心者だからではありません。上級者でも、あるいは人気プラグインの作者でさえも、あらかじめ完全に安全なプラグインを選ぶ、作るということはできないのです。

そもそも、セキュリティにおいて「絶対」はありません。というか、世の中のほぼ全てのものごとには絶対はないでしょう。絶対に負けられない戦いがそこにあってもチームは負け、永遠を誓った愛も冷めていくのです。まあ、例えは冗談ですが、セキュリティにおいてはいかにリスクをコントロールするか、という考え方になります。

脆弱性とは何か

徳丸本では、脆弱性とは「悪用できるバグ」と紹介されています。WordPressにおける悪用の例を考えてみました。

  • 管理者が意図した内容とは異なるコンテンツを表示する
  • 管理権限を乗っ取り既存の投稿内容を勝手に変更する、あるいは削除する
  • サイトを閲覧したユーザーのPCをマルウェアに感染させる
  • サイトを閲覧したユーザーをフィッシングサイトに転送する
  • 迷惑メールの踏み台としてWordPressで勝手にメールを送信する

これらの行為は全てサーバーで、またはブラウザで、不正なプログラムを実行しようとする行為といえます。そして、WordPressに限らず、ウェブアプリケーションでは、アプリケーション以外のプログラムコードが勝手に実行されないように設計されています。

ユーザーが登録したコンテンツはテキストや画像など無害なものであるか、プログラムコードが不正に紛れ込ませていないかどうかチェックされますし、そのコンテンツを適切な方法で表示します。コンテンツが勝手に変更されないよう、ログインの仕組みが整備され、外部から不正なプログラムコードが紛れ込まないようなしくみになっています。また、ログイン中は常に正規のログインかどうかをチェックし、不正なログインによって管理権限を奪われないような対策が行われています。

それでも、攻撃者は何とかそのような対策の隙を突いてターゲットとなるサイトでプログラムコードを実行しようとしているわけです。プログラムコードであることを分かりにくくして、何とかバレないようにプログラムコードを実行させようとしてきます。でも、もし投稿画面で誰でもPHPのコードが実行できたら。そのような対策が無意味になってしまいます。実際、投稿画面やウィジェットでPHPのコードを実行できるということは、上記の悪用の例が全て実行可能です。というか、最悪WordPress自体を消し去ることも簡単にできてしまいます。

昔のWordPressでは代替手段がなく、仕方なかった面もありますが、その後ショートコードなどの便利な手段がWordPressに実装され、投稿画面でPHPを書かなくても、様々な動的な要素を、安全に表示できる手段が整備されました。確かに少し手間は増えるかもしれませんが、もしあなたがよりWordPressについて知り、クライアントに責任をもってサイトを納品したいと考えているのであれば、WordPress本体が推奨しメンテナンスしている手段を使いましょう。

Exec-PHP愛好家向けショートコードプラグインの作り方

じゃあ、WordPressって危険なものなの?

たいへん安全です。しかし、絶対は無いということです。

例えば、直近にリリースされたWordPress3.5.2は、複数のクロスサイトスクリプティングなどの脆弱性の修正を含むアップデートです。つまり、3.5.1までは存在した脆弱性を塞いだということです。そして、それで脆弱性がゼロになったわけではありません。

脆弱性のないシステムは存在しません。ただし、見つかったものを常に修正し、さらに脆弱性がないか調査を続けることで、それをおこなっていないシステムよりは安全になります。実際に、WordPressは多くの政府機関・行政系のウェブサイトで採用されています。

WordPress リード開発者が行政向けワークショップで語ったセキュリティの基本

「システム管理者にはつまらなすぎると思うけど」と前置きして政府機関向けの WordPress セキュリティについてネイシンが挙げているのは、

  • コア・テーマ・プラグインをマイナーリリースを含め最新版に保つこと
  • 専門家によるセキュリティ監査を検討する
  • 管理画面からのファイル変更をできなくする(アップグレードは管理画面からではなくバージョン管理システム利用を推奨)
  • 管理画面へのアクセスを制限する: SSL/VPN/プロキシ/BASIC 認証/IP 制限など

といった点。

管理画面からファイルを変更できるのはたしかに便利ですが、よりセキュリティを高めるには、テーマの修正・変更の機能をオフにし、FTPでのアップロードではなく、Gitなどのバージョン管理システムとの連動を検討しましょう。

WordPress Codex 日本語版 – wp-config.php の編集 – プラグイン/テーマエディタを無効にする

ぜひ、オープンソースソフトウェアであるWordPressがセキュリティに対して行なっている努力に思いを馳せてみてください。そして、前回のセキュリティ記事と同じまとめになりますが、最大のセキュリティリスクはWordPressを使っていることではなく、あなた自身、なのです。まずは関心を持つことが大事だと思います。そこには初心者も上級者もありません。

ただ、WordPressのフォーラムの常連回答者は、フォーラムに投稿されるハッキングされたという被害や、セキュリティ的にまずい書き方のPHPを日々目にしています。なので、何とかしなければという気持ちがどうしても強くなってしまいます。

wordpress.org/search/改ざん

なので、上級者をそっと見守ってくださいというのも変に聞こえるかもしれませんが、セキュリティについて強く発言しているWordPressユーザーを見かけたら、こういう投稿を日々目にして危機感を募らせているんだなという風に暖かく見てもらえると嬉しいなと思ったりします。でも、やっぱり伝え方には気をつけようね。

こちらからは以上です。