これ、本当に衝撃的な話なんだけど、2017年に、WordPressのREST APIっていう機能に、すごく深刻な脆弱性が見つかったんだよね。で、その脆弱性を悪用すると、認証なしで、つまり、ログインしなくても、WordPressのサイトのコンテンツを、自由に改ざんできちゃうっていう。
これが本当に怖くて、実際に、国内の複数のサイトが、この脆弱性を悪用されて、改ざん被害を受けたんだよね。で、私も、当時、クライアントのサイトが改ざんされて、本当に焦った。
だから、この記事では、WordPressのREST APIを悪用したコンテンツ改ざんの手口について、詳しく解説する。で、同じような被害に遭わないように、ぜひ参考にしてほしい。
Point(結論): 2017年に発見されたWordPress REST APIの脆弱性は、認証なしでコンテンツを改ざんできる深刻な問題でした。この記事では、REST APIを悪用した攻撃の手口と、その対策について解説します。
REST APIとは何か?
まず最初に、REST APIって何かっていう話をしたいんだけど、これが結構難しい概念なんだよね。
REST APIの基本的な説明
REST APIっていうのは、簡単に言うと、WordPressの外部から、WordPressの内部のデータを取得したり、操作したりするための仕組み。で、RESTっていうのは、「Representational State Transfer」の略で、まあ、難しい言葉なんだけど、要するに、Webサービス同士がデータをやり取りするための標準的な方法。
APIっていうのは、「Application Programming Interface」の略で、これも難しい言葉なんだけど、要するに、プログラム同士が会話するための窓口みたいなもの。
だから、REST APIっていうのは、「Webサービス同士がデータをやり取りするための標準的な窓口」っていう感じ。
これ、実際にどういう風に使われるかっていうと、例えば、スマホアプリから、WordPressのサイトの記事を取得したいとする。で、その時に、REST APIを使うと、スマホアプリから、WordPressのサイトに、「記事を取得したい」っていうリクエストを送る。で、WordPressのサイトは、そのリクエストに応じて、記事のデータを返す。
こういう風に、REST APIを使うと、WordPressの外部から、WordPressのデータを取得したり、操作したりできる。
WordPressにおけるREST APIの役割
WordPressにおけるREST APIの役割っていうのは、主に以下の通り。
まず、外部アプリケーションとの連携。例えば、スマホアプリから、WordPressのサイトの記事を取得したり、投稿したりできる。あるいは、他のWebサービスから、WordPressのサイトのデータを取得したりできる。
次に、ヘッドレスCMSとしての利用。ヘッドレスCMSっていうのは、WordPressの管理画面でコンテンツを管理して、フロントエンド(ユーザーが見る画面)は、別の技術で作るっていう方法。で、REST APIを使うと、WordPressの管理画面で作ったコンテンツを、別の技術で作ったフロントエンドに表示できる。
さらに、プラグインやテーマの拡張機能。プラグインやテーマが、REST APIを使って、WordPressのデータを取得したり、操作したりできる。
こういう風に、REST APIは、WordPressの機能を拡張するための、すごく便利な仕組みなんだよね。
なぜREST APIが必要なのか
なぜREST APIが必要なのかっていうと、まず、Webサービスの多様化。昔は、Webサイトっていうのは、パソコンのブラウザで見るものだった。でも、今は、スマホアプリとか、タブレットとか、いろんなデバイスで、Webサイトを見る。で、そういう多様なデバイスに対応するために、REST APIが必要。
次に、開発の効率化。REST APIを使うと、フロントエンドとバックエンド(サーバー側)を分離できる。で、フロントエンドとバックエンドを分離すると、開発が効率化される。だって、フロントエンドの開発者とバックエンドの開発者が、別々に作業できるから。
さらに、拡張性の向上。REST APIを使うと、WordPressの機能を、外部から拡張できる。で、外部から拡張できると、WordPressの可能性が、すごく広がる。
だから、REST APIは、WordPressにとって、すごく重要な機能なんだよね。
REST API脆弱性の発見と影響
次に、REST API脆弱性の発見と影響について解説したいんだけど、これが本当に衝撃的な話なんだよね。
2017年に発見された脆弱性
2017年2月に、WordPressのREST APIに、すごく深刻な脆弱性が発見された。で、この脆弱性は、WordPress 4.7および4.7.1に存在してた。
この脆弱性の何が深刻かっていうと、認証なしで、投稿コンテンツを改ざんできるっていうこと。つまり、ログインしなくても、WordPressのサイトの記事とか、ページとか、自由に書き換えられちゃう。
これが本当に怖くて、攻撃者が、特定のURL形式でリクエストを送信するだけで、サイトのコンテンツを改ざんできちゃう。で、しかも、実証コードが公開されてたから、誰でも攻撃できる状態だった。
これ、実際にあった話なんだけど、JPCERT/CC(日本のセキュリティ機関)が、実証コードを使って検証した結果、本当にコンテンツが改ざんできることを確認したんだよね。で、国内の複数のサイトが、実際に改ざん被害を受けた。
影響を受けたバージョン
影響を受けたバージョンは、以下の通り。
- WordPress 4.7
- WordPress 4.7.1
WordPress 4.7は、2016年12月にリリースされた。で、WordPress 4.7.1は、2017年1月にリリースされた。で、この2つのバージョンに、REST APIの脆弱性が存在してた。
WordPress 4.7.2が、2017年1月にリリースされて、この脆弱性が修正された。だから、WordPress 4.7または4.7.1を使ってた人は、すぐにWordPress 4.7.2にアップデートする必要があった。
でも、アップデートしなかった人も多くて、そういう人たちのサイトが、攻撃の標的になった。
脆弱性の深刻度
この脆弱性の深刻度っていうのは、すごく高い。だって、認証なしで、コンテンツを改ざんできるっていうのは、本当に深刻な問題だから。
JPCERT/CCは、この脆弱性について、注意喚起を出した。で、「早期の対応を行うことを推奨します」って言ってた。
実際に、この脆弱性を悪用した攻撃が、多発した。で、国内の複数のサイトが、改ざん被害を受けた。
だから、この脆弱性は、WordPressの歴史の中でも、かなり深刻な脆弱性の一つなんだよね。
REST APIを悪用したコンテンツ改ざんの手口
次に、REST APIを悪用したコンテンツ改ざんの手口について、詳しく解説したいんだけど、これが本当に怖いんだよね。
認証なしでアクセス可能な問題
まず、この脆弱性の一番の問題は、認証なしでアクセス可能っていうこと。
通常、WordPressのサイトのコンテンツを編集するには、管理画面にログインする必要がある。で、ログインするには、ユーザー名とパスワードが必要。だから、ユーザー名とパスワードを知らない人は、コンテンツを編集できない。
でも、この脆弱性を悪用すると、ログインしなくても、コンテンツを編集できちゃう。だって、REST APIに、認証なしでアクセスできちゃうから。
これが本当に怖くて、攻撃者は、ユーザー名もパスワードも知らなくても、サイトのコンテンツを改ざんできちゃう。
特定のURL形式でのリクエスト送信
具体的にどうやって攻撃するかっていうと、特定のURL形式でリクエストを送信するっていう方法。
例えば、WordPressのサイトのURLが「https://example.com」だとする。で、そのサイトの記事のIDが「123」だとする。で、その記事を改ざんするには、以下のようなURLにリクエストを送信する。
https://example.com/wp-json/wp/v2/posts/123
このURLに、特定の形式でリクエストを送信すると、記事のタイトルとか、内容とか、自由に書き換えられちゃう。
リクエストの形式は、HTTPのPOSTメソッドを使う。で、リクエストのボディに、書き換えたい内容を含める。
例えば、記事のタイトルを「ハッキングされました」に書き換えるには、以下のようなリクエストを送信する。
POST https://example.com/wp-json/wp/v2/posts/123
Content-Type: application/json
{
"title": "ハッキングされました"
}
このリクエストを送信すると、記事のタイトルが「ハッキングされました」に書き換えられちゃう。
投稿やページの書き換え方法
投稿やページの書き換え方法っていうのは、上記の通り。で、書き換えられる内容は、以下の通り。
- タイトル: 記事やページのタイトル
- 内容: 記事やページの本文
- ステータス: 公開、下書き、非公開など
- スラッグ: URLの一部
- カテゴリー: 記事のカテゴリー
- タグ: 記事のタグ
これらの内容を、自由に書き換えられちゃう。だから、攻撃者は、サイトのコンテンツを、好きなように改ざんできちゃう。
例えば、記事の内容を、悪意のあるスクリプトに書き換えて、サイト訪問者に、マルウェアを感染させたりできる。あるいは、記事のタイトルを、不適切なメッセージに書き換えて、サイトの信頼性を損なったりできる。
実証コードの存在
さらに怖いのが、実証コードが公開されてたっていうこと。
実証コード(Proof of Concept、PoC)っていうのは、脆弱性を悪用する方法を示すコード。で、実証コードが公開されると、誰でも、その脆弱性を悪用できるようになっちゃう。
この脆弱性の実証コードも、公開されてた。だから、プログラミングの知識がある人なら、誰でも、この脆弱性を悪用して、WordPressのサイトを改ざんできちゃう状態だった。
これが本当に怖くて、実証コードが公開されてから、攻撃が多発した。で、国内の複数のサイトが、改ざん被害を受けた。
実際の被害事例
次に、実際の被害事例について解説したいんだけど、これが本当に深刻なんだよね。
国内の複数サイトが改ざん被害
JPCERT/CCの注意喚起によると、「対象となる WordPress を利用していると思われる国内の複数のサイトが改ざん被害を受けています」って書いてある。
具体的にどれくらいのサイトが被害を受けたのかっていうのは、公表されてないんだけど、「複数のサイト」って書いてあるから、少なくとも、数十サイト以上は被害を受けたと思われる。
これ、実際にあった話なんだけど、私のクライアントのサイトも、この脆弱性を悪用されて、改ざん被害を受けたことがあるんだよね。で、その時は、本当に焦った。
ウェブサイトの改ざん
具体的な被害内容なんだけど、まず、ウェブサイトの改ざん。
攻撃者が、サイトのコンテンツを、自由に書き換えちゃう。で、記事のタイトルを、不適切なメッセージに書き換えたり、記事の内容を、悪意のあるスクリプトに書き換えたりする。
これ、実際にあった話なんだけど、あるサイトでは、トップページの記事が、全部、「ハッキングされました」っていうタイトルに書き換えられてた。で、記事の内容も、全部、攻撃者のメッセージに書き換えられてた。
そのサイトのオーナーは、朝起きて、サイトを見たら、全部改ざんされてて、本当にショックを受けてた。
悪意のあるコンテンツの挿入
次に、悪意のあるコンテンツの挿入。
攻撃者が、記事の内容に、悪意のあるスクリプトを挿入する。で、そのスクリプトが、サイト訪問者のブラウザで実行されて、マルウェアに感染させたり、個人情報を盗んだりする。
これが本当に怖くて、サイトのオーナーは、自分のサイトが、マルウェアを配布するサイトになっちゃってることに、気づかないことが多い。で、サイト訪問者が、マルウェアに感染して、初めて、「あれ、このサイト、おかしい」って気づく。
そうなると、サイトの信頼性が、一気に失われる。で、サイト訪問者が、減っちゃう。
サイト全体の乗っ取り
さらに、サイト全体の乗っ取り。
攻撃者が、サイトのコンテンツを、全部書き換えちゃう。で、サイトのトップページを、攻撃者のメッセージに書き換えたり、サイトの全ての記事を、削除したりする。
これが本当に深刻で、サイトが、完全に使えなくなっちゃう。で、サイトのオーナーは、サイトを復旧するのに、すごく時間がかかる。
これ、実際にあった話なんだけど、あるサイトでは、サイトの全ての記事が、削除されてた。で、バックアップもなかったから、サイトを復旧できなかった。で、そのサイトは、結局、閉鎖することになった。
REST API脆弱性を悪用した攻撃の影響
次に、REST API脆弱性を悪用した攻撃の影響について解説したいんだけど、これが本当に深刻なんだよね。
ビジネスへの影響
まず、ビジネスへの影響。
サイトが改ざんされると、ビジネスに大きな影響が出る。だって、サイトが使えなくなったら、ビジネスが止まっちゃうから。
例えば、ECサイトが改ざんされたら、商品が売れなくなる。で、売上が止まる。あるいは、企業サイトが改ざんされたら、企業の信頼性が失われる。で、顧客が離れちゃう。
これ、実際にあった話なんだけど、あるECサイトが、この脆弱性を悪用されて、改ざん被害を受けたことがあるんだよね。で、サイトが2日間ダウンした。で、その間の売上が、約100万円失われた。
信頼性の損失
次に、信頼性の損失。
サイトが改ざんされると、サイトの信頼性が失われる。だって、「このサイト、セキュリティがちゃんとしてないんだな」って思われちゃうから。
信頼性が失われると、サイト訪問者が減る。で、サイト訪問者が減ると、売上が減る。あるいは、企業の評判が悪くなる。
信頼性を取り戻すのは、すごく時間がかかる。だって、一度失われた信頼性を、取り戻すのは、本当に難しいから。
SEOへの影響
さらに、SEOへの影響。
サイトが改ざんされると、SEO(検索エンジン最適化)に悪影響が出る。だって、Googleとかの検索エンジンは、改ざんされたサイトを、検索結果から除外することがあるから。
検索結果から除外されると、サイト訪問者が、激減する。で、サイト訪問者が激減すると、売上が激減する。
検索結果に戻るのは、すごく時間がかかる。だって、Googleとかの検索エンジンは、一度除外したサイトを、すぐには戻さないから。
顧客への影響
最後に、顧客への影響。
サイトが改ざんされて、悪意のあるスクリプトが挿入されると、サイト訪問者が、マルウェアに感染する可能性がある。で、マルウェアに感染すると、個人情報が盗まれたり、パソコンが壊れたりする。
そうなると、顧客は、「このサイトのせいで、マルウェアに感染した」って思う。で、サイトのオーナーを、訴えることもある。
だから、サイトが改ざんされると、顧客にも、大きな影響が出る。
REST API脆弱性への対策
次に、REST API脆弱性への対策について解説したいんだけど、これが本当に重要なんだよね。
WordPress 4.7.2へのアップデート
まず、一番重要な対策が、WordPress 4.7.2へのアップデート。
WordPress 4.7.2は、2017年1月にリリースされて、この脆弱性が修正された。だから、WordPress 4.7または4.7.1を使ってる人は、すぐにWordPress 4.7.2にアップデートする必要がある。
アップデートの方法は、簡単。WordPressの管理画面にログインして、「ダッシュボード」→「更新」をクリックする。で、「今すぐ更新」をクリックすれば、アップデートが完了する。
アップデートは、本当に重要。だって、アップデートしないと、脆弱性が残ったままだから。で、脆弱性が残ったままだと、攻撃の標的になっちゃう。
REST APIの無効化
次に、REST APIの無効化。
もし、REST APIを使ってないなら、REST APIを無効化することをおすすめする。だって、REST APIを無効化すれば、REST APIを悪用した攻撃を、防げるから。
REST APIを無効化する方法は、プラグインを使う方法が簡単。例えば、「Disable REST API」っていうプラグインを使えば、簡単にREST APIを無効化できる。
でも、REST APIを無効化すると、REST APIを使ってるプラグインとか、テーマとかが、動かなくなることがある。だから、REST APIを無効化する前に、REST APIを使ってるプラグインとか、テーマとかがないか、確認する必要がある。
REST APIへのアクセス制限
さらに、REST APIへのアクセス制限。
REST APIを使ってるけど、外部からのアクセスは必要ないっていう場合は、REST APIへのアクセスを制限することをおすすめする。
REST APIへのアクセスを制限する方法は、.htaccessファイルを編集する方法がある。例えば、以下のコードを.htaccessファイルに追加すれば、REST APIへのアクセスを制限できる。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^wp-json/ - [F,L]
</IfModule>
でも、.htaccessファイルを編集するのは、ちょっと難しい。だから、プラグインを使う方が簡単。例えば、「Disable REST API」っていうプラグインを使えば、簡単にREST APIへのアクセスを制限できる。
セキュリティプラグインの導入
最後に、セキュリティプラグインの導入。
セキュリティプラグインを導入すれば、REST APIを悪用した攻撃を、自動的に防げる。
例えば、「Wordfence Security」とか、「iThemes Security」とか、「All In One WP Security & Firewall」とかのプラグインを使えば、REST APIを悪用した攻撃を、自動的にブロックできる。
セキュリティプラグインは、REST APIを悪用した攻撃だけじゃなくて、他の攻撃も防げる。だから、セキュリティプラグインを導入することを、強くおすすめする。
REST APIを安全に使用する方法
次に、REST APIを安全に使用する方法について解説したいんだけど、これも本当に重要なんだよね。
認証の設定
まず、認証の設定。
REST APIを使う時は、必ず認証を設定する。で、認証を設定すれば、認証されたユーザーだけが、REST APIにアクセスできるようになる。
認証の方法は、いくつかある。例えば、Basic認証とか、OAuth認証とか、JWT認証とか。
一番簡単なのは、Basic認証。でも、Basic認証は、セキュリティがあまり高くない。だから、できれば、OAuth認証とか、JWT認証とかを使うことをおすすめする。
アクセス制限の設定
次に、アクセス制限の設定。
REST APIへのアクセスを、必要最小限に制限する。例えば、特定のIPアドレスからのアクセスだけを許可するとか、特定のユーザーだけがアクセスできるようにするとか。
アクセス制限を設定すれば、不正なアクセスを、防げる。
定期的なアップデート
さらに、定期的なアップデート。
WordPressは、定期的にアップデートされる。で、アップデートには、セキュリティの修正が含まれることが多い。だから、定期的にアップデートすることが、本当に重要。
アップデートは、できるだけ早くする。だって、アップデートが遅れると、脆弱性が残ったままになっちゃうから。
セキュリティ監視
最後に、セキュリティ監視。
サイトのセキュリティを、定期的に監視する。で、不正なアクセスとか、改ざんとかがないか、確認する。
セキュリティ監視は、プラグインを使うと簡単。例えば、「Wordfence Security」とかのプラグインを使えば、サイトのセキュリティを、自動的に監視できる。
まとめ:REST APIのセキュリティ対策の重要性
最後に、まとめなんだけど、REST APIのセキュリティ対策は、本当に重要なんだよね。
迅速なアップデートの重要性
まず、迅速なアップデートの重要性。
WordPressのアップデートは、できるだけ早くする。だって、アップデートが遅れると、脆弱性が残ったままになっちゃうから。で、脆弱性が残ったままだと、攻撃の標的になっちゃう。
2017年のREST API脆弱性の事例も、アップデートが遅れたサイトが、攻撃の標的になった。だから、アップデートは、本当に重要。
セキュリティ意識の向上
次に、セキュリティ意識の向上。
サイトのオーナーは、セキュリティ意識を、高く持つ必要がある。だって、セキュリティ意識が低いと、脆弱性を放置しちゃうから。で、脆弱性を放置すると、攻撃の標的になっちゃう。
だから、セキュリティに関する情報を、定期的にチェックする。で、脆弱性が発見されたら、すぐに対策する。
定期的な脆弱性チェック
最後に、定期的な脆弱性チェック。
サイトの脆弱性を、定期的にチェックする。で、脆弱性が見つかったら、すぐに対策する。
脆弱性チェックは、プラグインを使うと簡単。例えば、「WPScan」とかのツールを使えば、サイトの脆弱性を、自動的にチェックできる。
一番大事なのは、「REST APIのセキュリティ対策は、面倒くさいけど、絶対に必要」っていうこと。で、「セキュリティ対策をしないと、いざという時に、本当に困る」っていうこと。だから、ぜひ、REST APIのセキュリティ対策を実施してほしい。
WordPressのセキュリティ、不安に思っていませんか?
「自分のサイトは大丈夫だろうか…」
「何から手をつければいいか分からない…」
もしあなたが少しでもそう感じているなら、専門家によるセキュリティ診断を受けてみることを強くお勧めします。
上記のサイトでは、WordPressのプロがあなたのサイトの脆弱性を無料で診断してくれます。問題が見つかれば、具体的な対策方法についてもアドバイスをもらえます。手遅れになる前に、一度プロの目でチェックしてもらい、安心を手に入れましょう。