目次
攻撃の概要
新しいWebサイトを作ろう!と思ってドメインを取得し、SSL/TLSを設定し、WordPressなどのCMSをインストールしていくとします。ここでは、レンタルサーバーサービスで提供される簡単にCMSをインストールできる機能などは使わずに設定した場合を考えていきましょう。レンタルサーバーなどにこの設定をしようとすると、まずドメインをコントロールパネルから追加します。そして、SSL証明書を購入するか無料のSSL証明書(Let’s Encrypt)を設定します。この時点で https://www.example.com/ のURLは開通しています。この後の手順は…
- WordPressをサーバー上にダウンロードします。
- WordPressで使うデータベースをセットアップします。
- WordPressのユーザー作成画面へアクセスします。
- ユーザーのID(メールアドレス)、パスワード、データベース情報を入力します。
- その情報を使ってダッシュボードへログインします。
といった流れになります。今回取り上げる攻撃は、2と3の間に実施されます。悪意のある第三者は無防備な状態のアカウント(ユーザー)作成画面へアクセスし、攻撃者のアカウントを作成すると、例えば www.example.com にインストールされたWordPressの管理者権限を得ることになり、不正なプログラムをドメイン配下に設置できるようになります。外部からリモート操作できる不正プログラムを設置した後、不正に作成したユーザを削除し、初期設定画面が表示されるようにすれば、WordPressをインストールしようとしていた人は気づかずに自分のサイトを設定してしまいます。
悪意のある第三者は、任意のタイミングで不正に設置したプログラムを操作することができるようになるわけで、DDoS攻撃の踏み台になったり、サイト全体を乗っ取ってしまうといった不正利用が可能になります。現在は外部からサーバーを遠隔操作できるスクリプトが設置される事象が報告されていますが、原理的にはどんなファイルでも置くことができるので、フィッシングサイトの公開、詐欺メールの送信等の被害も考えられます。
なんでドメインがバレちゃうの?
「いやいや、取得したばっかりのドメインがそんなにすぐに悪者にわかってしまうの??」と思う方もいらっしゃると思います。ここで、SSL証明書の仕組みの一つである「Certificate Transparency(以下、CT)」という監査方法の一つがトリガーになります。CTは、SSL証明書を発行したドメインを誰でも確認できるようにして意図しないSSL証明書が発行されていないか監査する仕組みです。認証局によってSSL証明書が発行されると、「CTログ」というリストのようなものにドメイン名を含めたSSL証明書の情報が掲載され、インターネットに公開されます。このリストを常に監視していれば、「新しくSSL証明書が設定されたドメイン」がわかることになります。かつて、所有者の知らないうちに google.com のような著名なドメインのSSL証明書が不正に発行されていた、という事件がありましたが、このような不正発行を検知する仕組みとして機能しています。
もちろん、そのドメインにWordPressを含む様々なCMSがインストールされているかどうかはCTログからはわかりません。ただ、「シェアの大きいWordPressがインストールされるであろう可能性」は高いということはわかります。
実際に検証したところ、SSL証明書を発行してCTログにドメインが記載された数分後からWordPressの初期設定画面への意図しないアクセスが発生しました。
無防備なインストール途中のCMS
WordPressを代表とするCMS(Content Management System)は、最初のセットアップ時に、「管理者のアカウントを作成する」という作業が必ず必要です。そして、この際には「いまアカウントを作ろうとしている人が本当にサイトの所有者であるかどうか」の確認が実施されないケースがほとんどです。つまり、そのアカウント作成画面にアクセスできる人なら、誰でも管理者アカウントの作成ができ、悪意のある第三者が不正なファイルを潜り込ませ、ファイルだけを残して初期設定画面に戻すこともできるわけです。
回避方法
さくらのレンタルサーバでは、WordPressのクイックインストール機能を提供しています。この機能ではサーバーコントロールパネル上でユーザーID、パスワードを入力し、バックエンドでWordPressのインストールとアカウント作成を同時に行います。要は、初期アカウント作成画面を作らずに直接IDとパスワードでログインできる画面を作ってしまうので、この攻撃の被害を受ける可能性がかなり低くなっています。
他社のレンタルサーバーでも、このようにサーバーコントロールパネルから直接アカウントを作成してしまう方法を使っていればこうした攻撃を回避することができます。ただ、さくらのレンタルサーバでも以前はデータベース情報だけを設定し、クイックインストール後、前述の手順3であるアカウント作成画面から設定作業をお願いする手順になっていました。この場合、この攻撃手法に対して脆弱になってしまうわけです。
※現在、当社ではこの形式のクイックインストール機能は提供していません。
では、クイックインストール機能などが提供されないVPSなどのサーバーサービスや、レンタルサーバーでもコマンドラインで直接WordPressをインストールする場合、どうしたらこの攻撃を回避できるのでしょうか。実際にSSL証明書発行からほとんど間をおかずに不正アクセスがある、かつ攻撃されたことが検知しにくいとすると、「手早くやる」という原始的な手段は通用しないことになります。となるといくつかやり方はあるのですが、事前に.htaccessなどで自分がアクセスしているIPアドレス以外からのアクセスを制限した上でWordPressをインストールし、セットアップを完了する、もしくはドメイン配下にBASIC認証をかけてしまうというのも有効です。wp-cliが使える、もしくはインストールできる環境なら、wp-cliでアカウント作成とインストールを行ってしまうのもリスク低減としては有効です。とにかく「SSL証明書発行後にアカウント作成画面がインターネットに公開されないようにする」ことが非常に重要になります。
WordPressやLet’s Encryptが悪いわけではない
こうした攻撃方法が知られるようになると、「WordPressは危ない!」「Let’s Encryptは所詮無料だからダメなんだ」といった誤解が広がってしまうことが多いのが実情です。今回の攻撃手法に関しては、WordPress以外のCMSも攻撃を受ける可能性はありますし、Let’s Encryptを含むほぼ全てのSSL証明書がCTログを利用している仕様上、Let’s EncryptではないSSL証明書を使っていたとしてもこの攻撃を受ける可能性があります。「誰でもアクセスできるアカウント作成画面が原因である」、「CTというSSL証明書全体の仕様によるものである」というそもそもの原理を知ることで、正しい対策が取れるようになることがとても大切です。
ただし、CMS側でもトークンを発行するなどして容易にアカウント作成画面に悪意のある第三者がアクセスできないようにするといった対策を行うことは可能なので、今後こうした対応が進む可能性はあります。まずは、セットアップの前にドキュメントルートフォルダにアクセス制限をかけていれば高確率で防げる攻撃ですので、手動でインストールする方は ファイルマネージャーでアクセス制限をしたい | さくらのサポート情報 こちらの記事も参考にしてください。