wordpress theme

WordPressの非公式テーマにはご用心・・でも、本当に危ないのは無知な自分

前にもWordPressのセキュリティを考えようという記事を書いていましたが、あの記事を読んで「Wordpressは危ないもの、怖いもの」といった勘違いをさせてしまったところがあったようなので、 最初にお断りだけさせていただきます。「Wordpress」は危険なものではありません むしろ、WordPressは素晴らしいことこのうえないものです
もっと大勢の人に使ってもらいたいと考えていますし、その素晴らしさをもっと体感してもらいたいと考えています。
なんだったら、誰も聞きたがらないであろうほどの僕のWordpress愛を存分にここで語り散らしたいほどです。(←)
ただ、非常に多くのリソースが出回っているからこそ、「中にはあまりよろしくないものも混じっている」ということを覚えておいていただきたいだけです。

では、前置きがちょっと長くなってしまいましたが、今回の本題。
前回のブルートフォースアタックとはちょっと「違った方向からの攻撃」についてのお話しです。

それが、今回のテーマ「Wordpressの非公式テーマ(特にフリーのもの)」によく混じっている「悪意のあるコード・プログラム」です。

Index

  1. 今回の事例
  2. サイトを改竄されると例えばどんな症状に?
  3. 中からの攻撃には、どんな鉄壁も無力
  4. どうすれば駆除できる?
  5. 本来そんなもの内側に入れない
  6. まとめ

攻撃は直接的なものとは限らない

前回はブルートフォースアタックという「直接管理画面のロックを破る」という攻撃方法についてのお話しと対処をお話ししましたね。 今回のものは「間接的な攻撃」と言えるパターンかなと思います。

なぜなら今回のケースはサイトにおけるマルウエア(コンピューターウイルスと思って下さい)のようなものだからです。
つまり、管理者(自分)自身が拾ってくるからです。

感染経路は至って単純。「テーマ」や「プラグイン」からです。

WordPressを使ったことが無い方にちょっと説明‥

wordpressTheme

WordPressは「テーマ」という外観(スキンみたいなものですかね)をインストールして使用します。(Wordpress自体はシステムを構築するプログラムの集合体だと思ってもらえるといいかなと。) そのテーマはデフォルトでもいくつか入っていますが

  • 自分で見つけて(ダウンロードして)インストール
  • 自分で作ったものをインストール

することでオリジナリティ溢れるサイトや自分好みのもの、用途にフィットしたもの、など様々なサイトを構築することができます。
※テーマ自体もphpというプログラムによってつくるので、その構造次第でサイトに様々な機能を付加できます。

同様に「プラグイン」という便利な機能を追加したり複雑な記述を代わりにやってくれたりしてくれる拡張機能も豊富にあります。

このWordpressテーマ、プラグインには有料・無料問わず優れたものが沢山公開されています。 フリーのものでも本当に素晴らしいものも沢山あります。

さて、この「テーマ」や「プラグイン」は Wordpressサイトの「テーマ検索」や「公式サイト」にいけば沢山見つかります。 wordpressTheme2

けれど、これ以外にも存在していますね?
公式サイト以外で、おのおののサイトでの自主配布や公式ではない配布サイトも沢山あります。 これらは「Wordpress Theme」で検索すれば沢山見つかるでしょう。

ところが残念なことに中には「悪意のあるコード」あるいは「悪意のあるプログラム」が含まれているものもあります。

こうした「悪意のあるコード」あるいは「悪意のあるプログラム」を埋め込まれているテーマをインストールすると、あなたのサイトはPCで言う「マルウエアに侵された状態」になってしまいます。

・・ただし、何度も繰り返しになりますが、これは外からはやってきません。あくまで自分が拾ってくるのです

今回の事例

wordpress theme

とあるWordpress関係の情報を発信している国内サイトで紹介されていたテーマをインストールすると、Wordpressにインストールされている『全』(!)テーマのfunctions.phpに悪意のあるコードが書き加えられます。

正確にはfunctions.phpの最後の行に[ include_once(‘custompost.php’) ]というコードが書き加えられます。

●functions.php
WordPressテーマの定義やオプションについて記述するファイル。そのテーマを適用しているサイトを読み込んだ際にどんな処理をするか、などに関わっている。
●include()
phpの関数の一つで、何かを「外部から呼び出して一つにまとめる」というもの。()内に入った外部ファイルを出力させる、といった使い方をする。

たいていの場合、参照されているファイルが存在しない為にエラーになるだけのようですが
どうもファイルパーミッションまで書き換えられたっぽいんですよね・・ パーミッション400でガチガチにしてたwp-configや同じく書き込み禁止にしていた.htaccessのパーミッションが644(オーナー以外でも書き込み可能)になってました。 (他のファイルのパーミッションは特に変わっていなかった←全部調べるあたりがバカですよね

■発覚の経緯

ウチのサイトは「セキュリティプラグイン」も入れているので、怪しい動きのプログラムや何かしらの不審な挙動にはエラーや警告を吐きだしてくれます。 で、その吐きだした「このコードおかしいですよ!」というエラーを見て、そんなもの書いた覚えないぞ??ってところから発見しました。

僕が使っているのは「自作のテーマ」なので、基本そこに書き込んであるコードは覚えています。 なので、『改竄された』ということがすぐに分かりました。 (そもそもWordpressには専用のインクルードタグが沢山用意されていて、そちらのほうが便が良い+推奨されているだけにinclude()ってあんま使わないでしょうから、テーマ作成をしたことがある人ならすぐ気付くと思います。こと、公式基準に則ったテーマ作成を心がけている方なら尚のこと。)

これはやられた、と情報をネットでサーチするとフォーラムですぐに発見。 どうやら同様の症状に遭った人がおり、その全員が同じテーマをインストールしていたということ。 そしてその事例や対処例などもあった。

■対策

  1. 一度全テーマの削除→(テーマの)クリーンインストール
  2. コアファイルもクリーンインストール(念のため)
  3. データベースチェックにバックアップデータをインポート(データベースに感染するタイプも結構あるため)
  4. サイトスキャン(Googleウェブマスターツールに加えてWordpressのプラグインでも行いました。)
  5. 復旧

どこに何を仕込まれてるか分かりませんから、念のためです。
もしかすると、ただのイタズラ的なものなのかもしれませんが、「セキュリティマネジメントは最悪の状況を仮定して行動すること」が鉄則だと考えています。

ちょっとした「はずみ」がこれだけの「大掃除」をしなければならなくなる(ことがほとんど)、ということをしっかり覚えておいて下さい。

なぜクリーンインストールを?

マルウエアというものは、活動を開始すると自分の分身やパーツを様々なファイルに分散して仕込ませます。そして、その一部でも残っていると再生・復元するようにプログラムされていたりするケースが多くあります。
つまり、完全に消し去らなければ何度でも復活してくるのです。Wordpress(に限らず多くのCMS)ではデータベースを利用してページのデータや商品、ユーザーデータを管理しています。このデータベースに潜伏するタイプのものも存在しています。(当然テーマやコアファイル(本体)のプログラムを削除しても別の場所に分かれているデータベースに残っていれば復活してきます)

サイトを改竄されると例えばどんな症状に?

代表的なもので言うと以下のようなものがあります。

  • 自分のサイトに設置した覚えの無いものが表示される(広告やリンクなど)
  • アクセスしたら別のサイトへ飛ばされる(最悪なパターンではマルウエアやスパイウエア配布ページなど←閲覧した人が感染します)
  • サイトデータの破壊(サイトが閲覧できなくなったり使用できなくなったり)
  • データベースの情報を攻撃者へ自動で送信する(ショッピングサイトだったら顧客情報やクレジットカードの暗証番号まで引っこ抜かれることも・・)
  • フィッシングサイトになってしまう(自分のドメイン、サイトそのものがマルウエアになる)

・・はい、どれもこれも凶悪ですね。
今回のケースで言えば、includeされていたファイルが存在しなかったので不明ですが1,2,4の可能性があるパターンです。 といっても、これは表面上の偽装で、バックエンドでデータベースに侵入しているかもしれない。(このテーマにもデータベースにデータを書き込むプログラムがある。※注:データベースへのデータ書き込みはまっとうなテーマでも多く使う手法です

前述の「なぜクリーンインストールを?」のところで述べたように、対策をきっちり講じていなければ、場合によっては延々こんなことをしでかすサイトになってしまうかもしれません。

中からの攻撃には、どんな鉄壁も無力

前回の「WordPressのセキュリテイを考えよう」で色々な防御方法をお伝えしていましたが、これはあくまでも「外からの攻撃に対してのみ有効な手段」でした。 例えるなら、自分のまわりを外壁で覆って身を守っている状態です。 壁の内側へ一度入ってさえしまえば自由に動け、内側から外へは自由にものを持ち出せるのです。

その記事の中で「もし、ファイルを改竄された形跡を発見したならクリーンインストール(Wordpress本体とテーマファイルを新品のものと完全に入れ換えてしまいましょう。)」と書いていたかと思います。

これは侵入を許した際に、バックドアを仕掛けられたりマルウエアを残されていては外からの守りを固めていても何の意味も持たなくなる為です。
前述の通り、一旦「壁の内側」に入ってさえしまえば、誰もが自由に動けるのです。その壁に穴を空けることも、出入り口をつくることも、その出入り口を使って中から良くないものを外へまき散らすこともできるのです。

●バックドア
攻撃者が侵入した際によく取り付ける自由に出入りできる専用の扉。たいていの場合、そのログインの履歴や痕跡も残さないようにしてある。

「悪意のあるコード・プログラム」はこのバックドアになったり、マルウエアとして機能します。

なので、前述の「対策」が必要になります。

どうすれば駆除できる?

このバックドアにしろマルウエアにしろ、極論すればどちらもプログラムかデータな訳です。 それらが活動・生存する為には何かしらの媒介となるデータやプログラムが必要です。

なので、それらを見つけて削除すれば存在できなくなります。
しかし、複雑なサイトであればあるほどそれを見つけるのは困難になります。(多数のファイルが存在するなら、その多量のファイルの中から対象を探し出さねばなりませんし、元々あるファイルの中身の一部を改変される場合、多量のファイルの中のそれぞれの文字列の中から該当箇所を見つけ出さなければなりません。色々なファイルに飛び火していることも考えれば、その困難さたるや想像に難くないでしょう。)

マルウエア(に限らずですが)などのプログラムやデータは自分用のデータファイルをつくる。(とはいっても元々システムに存在するデータやプログラムの内容を書き換えてしまって自分の媒介にするタイプがほとんどではないだろうか。)
このどちらに対しても有効なのが、「これらのプログラムに感染する前の状態に戻す」という方法。つまり「クリーンインストール」(感染データを全削除して新品orバックアップのデータで全部上書き)
注:データベースを媒介にするものも結構あるっぽいのでデータベースもバックアップファイルに置き換えるほうが良い。

・・と、簡単に言いましたが
このリカバリーは結構な労力と時間を要します。また無事にリカバリーさせるには専門的な技術と知識も必要です。(失敗すれば全データが消滅することもおおいにある)
つまり、外注するとしてもそこそこな費用がかかるケースになるかと思います。

なので、ここで覚えておいていただきたいのは「対応としては、こう」というところであって、本来そんなものを内側に入れないようにするべきなのです。

本来そんなもの内側に入れない

こと、インストールするには、

  1. 「自分で見つけて」
  2. 「ダウンロードして」
  3. 「インストールする」

というすべて自分の意思のもと行う行動です。 自動で勝手にインストールされることはありません。

使う側の「私たちが」意識を高める必要があるということです。

僕もたまにテーマ作成のヒントとして他の方が作ったテーマをダウンロードして中身を覗かせてもらったりしています。今回、ちょっとポートフォリオサイトを作成しようとしていて、間に合わせにフリーのテーマを適当に見つくろってとりあえず公開しよう・・と、よく観に行っているブログの中でこのテーマを見つけたので「お、いいな」と思い公式サイトで検索するも出てこない。 「…非公式か……」とちょっと一瞬思いとどまったものの「まぁ、大丈夫だろう」なんてインストールしましたら・・これでした。苦笑

実際問題、「非公式テーマ(特にフリー)は危ない」的なことは以前から結構言われていましたが まぁ、大丈夫だろう・・なんて「安易な判断」と、なんか紛れ込んでいてもどうにかできるだろう、という「慢心」です。

そう、結局どちらも管理者自身にある問題。人為的なものでしかありませんね?

「最悪クリーンインストールすればどうとでもなるかな」なんて甘えですね。
(クリーンインストールなんてそうそうするものじゃありません。)

でも、この著者さんが悪い訳でもなく、後でちょっと調べればこの類の情報はわんさか出てきました。
ちゃんと事前に情報を仕入れていなかった「自分自身」の責任です。
探せばすぐに、いくらでも出てくるんですから。

WordPressテーマをググって探すのは超ハイリスクなので気をつけよう!(※リンク切れ)

しかも、結構昔にこういうことを書かれている方がちゃんといらっしゃったんですよ・・。 つくづく無知というのは罪だ。。

僕は結構しらみつぶしに情報をあたるタイプなので、特定の分野のことについて何か調べる、となるとそこに関連する情報を様々仕入れている「つもり」でした。「慢心」です。

えらそうなことを言っておきながら、まだまだですね。もっともっとアンテナを広げておかないといけません。

まとめ

ちょっとタイトルからは離れた内容になってしまいましたね・・
これは「Wordpressの」というより、「サイト運営者の心得」的な話になっていました。。

この記事にまとめるにあたって、問題の根本は「何か」が危ないのではなく、「自分(の考えや行動)」が危ないということをやっぱり強調すべきではないかと考え直したのです。

結局のところ、「このテーマを使うとこんなことになりますよ!」ということだけを伝えても、これに限ったことではなく何の解決にもならないですし、非公式のテーマでも本当に良いものがあるのも事実です。僕の反省も含め、どういった思考からヒューマンエラーが起こるのかを交えたこうした内容にさせていただきました。

かく言う僕も、いくらいくつも案件を手掛けさせていただいているとはいえあくまでもデザイナーであり、ノンプログラマーではあります。 本職のプログラマーさんから見れば記述やセキュリティ的に甘い部分も多々あるでしょう。だからこそ、これからももっともっと学んでいかなければなりませんし、もっと多くのことを知っていかなければならないという自省の意味合いもこめて、記事として綴ることで省みるようにしようと思います。

この「内側からの攻撃」を許すのは完全に「自分自身の」人為的ミスによるものです。 こういった、自分で選んでダウンロード・インストールをするタイプのものはどう転んでも、その「本人のしたこと」であるがゆえに、プログラムや機械からすれば「最高責任者の絶対命令」なのです。
逆らいません。

忘れないでいただきたいのは、自分はそのポジションであり、どれだけ強靭で堅固な守りの最新鋭のシステムで守ってもらっても、使う自分自身がまったく意識もせず、知識も得ようとしなければ、たったワンクリックでさえ簡単にそのシステムを壊せてしまいまうということなのです。

それだけに多くの開発者やセキュリティ管理者などは、運営者をシステムのコアから隔離します。(管理者権限を持たせないなどして設定に触れなくする)
けれど、隔離されたところでどうにか色々としたくなるのも人間というものではないでしょうか?
結果、開発者が禁止しているものをキャンセルするプラグインなどを見つけてきてシステムに大穴をあけたりするのではないかとも思うのです。
ならば、少し、視点を変えてコアを開放して正しい扱い方や知識を得ていってもらうことのほうが抜本的な解決になるのではないだろうかと。もちろん、伝えるには大変な労力もいりますし、肝心の運営者が興味を持たなければ得てはくれません。なので、地道ながらもこうしたことを伝えていくのが今の段階なのではないかと考える次第です。

また、著名なまとめサイトや著名な人が紹介しているからといってその安全性まで保障されている訳でもなく紹介した人も責任はもちません。(企業名義や名前で売っている方などなら別かもしれませんが)
盲信せずに、ちゃんと「情報はその真偽の裏付けをとる」

大人なんです、全部自己責任です。

また、公式テーマなら、あるいは有料なら絶対安全な訳でもなく(絶対なんて存在しませんし)、非公式だからといって全部危ないとはいいません。中には本当に素晴らしいものもあります。

危ないものには触れない、それも一つですが、危ないのは「知らないこと」であり、その「もの」ではないのです。知っていれば回避できるもの、対策できることのほうが多いのです。
逆に知らないでいる、知ろうとしないからこそ、危ないのです。

なんだか、ちょっとキツイ物言いになってしまった点はお詫びいたします。。
不愉快に感じられた方もいるかもしれません。 ただ、少し思うところがあり、あえてこういった口調で書かせていただいた次第です。

色々情報を仕入れているとあまりにも知らないことに対する危機感の無さと無責任な情報を垂れ流している方が目につき、その内容もあまりにも酷過ぎたので、ちょっと厳しめに言わせていただくことにしました。 また、今回の記事を書くにあたって、色々と固有名詞を避けさせていただきましたが ちょうど、この素晴らしい記事を書いた方の考えを目にした為です。

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

例えば「●●が危ない」などと流すと、結局その物事の根本的問題よりもその「●●」にあたる固有名詞のものだけが危ないと勘違いされ、そこにあてはまりさえしなければ大丈夫・・といった無茶苦茶な発想を生むこと。
そして、逆に特定の一つ、ないし何かをやり玉に挙げることは、その対論を生み、新たな無責任な情報を多く生み出す結果につながることもある・・そういった流れを生むということ。
物事の解決には一切ならず、結果的に逆効果になることが多いんですね。

実際問題、記述内容に何か問題があった際にせっかくセキュリティのためのエラーや警告文を表示しているのに、それが「英語でよく意味も分からないから邪魔だし消す」といったとんでもないことを平気でしでかす方も多いんです。何よりその消し方を得意満面にブログで掲載していたり・・・「その警告の意味読みましたか!?」と言いたくなるようなものが結構多いんですよね・・。

英語が分からなかったとしても、Google翻訳などへコピペすればだいたいの内容はちゃんと分かりますよ。。
その2,3秒程度の手間すらせず、知ろうとしない、何を意味しているか分かろうとしない。
この「思考」が重大な問題であり、「危機」のように思えてなりません。

僕はよく、「専門的」と受け取られるようなバックエンドの話を持ちだして話をします。個人的に、なんでもかんでも「分かる人」任せにするものではないという考えを持っている為です。

人に任せられるのはとても素晴らしいことですし、どんどんやるべきことだと僕も思います。 ただ、時と場合によりけりで、任せることで自分自身が成長しないのであればそれは良くない任せ方だと考えています。

何かをするには、そのしたいことに比例した「知っておかなければならないことがある」 そういうものではないでしょうか。

最後の最後になりましたが、一応

  • 出所が不確か(公式ではないもの)はなるべく使わない
  • やっぱり公式で配布されているもののほうが(まだ)安全性も保証されています
  • どうしてもそれが良ければ、まずそのテーマ名+ネガティブなキーワード(errorやwarrningなどを加えて)で検索をかけてみよう
  • ポジティブな情報だけで判断せず、ちゃんとネガティブな情報にも目を通すこと
  • 「黒」っぽくても使ってみたいなら、「最悪壊してもいい」ローカル環境でテストしてからにしましょう
  • でも、いちばん大事なのは自分が管理者である、ということをしっかり心に留めて軽率なことはしない

Comments

Add a Comment

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

認証コード * Time limit is exhausted. Please reload CAPTCHA.

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