Movable Type は、インターネット上で利用されるソフトウェアです。もちろん、ベンダーの責任として細心の注意を払って設計し提供していますが、必然的にセキュリティ問題とは無縁ではいられません。では、どうすればいいのでしょうか。Movable Type それ自体でできることだけでなく、ソフトウェア以外の部分でもできることがありますので、具体的に説明します。
1. 最新の Movable Type を利用する
最新のバージョンでは、新機能の追加や不具合修正だけではなく、脆弱性の修正や新しいセキュリティ対策も施しています。これは、当社内で発見したものだけでなく、利用者、セキュリティ専門家などにより発見され報告されたものも含まれています。
常に最新版にアップデートをし続けることは、手間が掛かりますが、既知の脆弱性を利用したセキュリティリスクを低減する上で、最も有効な方法です。
Movable Type では過去のバージョンのメンテナンスも一定の期間行っています。プロダクトライフサイクルを確認し、利用している Movable Type が最新版であることを確認してご利用ください。
開発・サポートが終了しているバージョンをご利用の場合は、アップグレードをご検討ください。各バージョンの開発・サポートのスケジュールについては「プロダクト・ライフサイクルポリシー」をご確認ください。
2. 管理画面に BASIC 認証をかける
Movable Type は管理画面を経由して、管理するウェブサイトに様々な操作を行うことができます。Movable Type それ自体のセキュリティ問題だけでなく、アカウント情報の漏洩やなりすましなどによるリスクを低減するために簡単に実施できる対策としては、管理画面に BASIC 認証を設定する方法があります。このとき、認証用の ID とパスワードは、Movable Type のユーザー名 、パスワードとは別の情報を用いた方が良いでしょう。
BASIC 認証を利用する場合は、SSL 通信も併せて有効にすることをおすすめします。
3. 管理画面を SSL 通信にする
Movable Type のアカウント情報や認証情報、操作内容のネットワーク上での盗聴や漏洩のリスクを低減するため、管理画面へのアクセスを SSL 通信にする事を推奨します。SSL通信を有効にする方法は、ご利用のウェブサーバーのドキュメントをご参照ください。
4. CGI スクリプト名を変更する
Movable Type の CGI スクリプト名は、標準では [mt.cgi] や [mt-upgrade.cgi] など、どの環境でも同じ名前です。BASIC 認証や、SSL 通信を利用できないサーバーをお使いの場合でも、CGI スクリプト名を予測しにくい名前に変更することで、第三者からの不正アクセスのリスクを低減できます。
Movable Type の CGI スクリプト名は、mt-config.cgi に設定する環境変数で変更できます。なかでも、Movable Type の管理画面やアップグレードに関わる [AdminScript] と [UpgradeScript] を変更することが重要です。この2つの CGI スクリプトは、アプリケーション側の CGI スクリプトなので、外部の第三者によるアクセスを許可する必要はありません。
変更出来る CGI スクリプトと環境変数
- AdminScript
- 管理プログラムの CGI スクリプトの名前を設定します
- UpgradeScript
- アップグレードス実行用の CGI クリプトを設定します
- CommentScript
- Movable Typeで利用するコメントスクリプトを設定します
- ActivityFeedScript
- ログフィードを取得するための CGI スクリプトの名前を設定します
- DataAPIScript
- Data API のアクセス用 CGI スクリプトを設定します
- CommunityScript
- コミュニティソリューションで使用する CGI スクリプトの名前を設定します
- CheckScript
- システム情報を確認するための CGI スクリプトを設定します
- TrackbackScript
- トラックバック受信用の CGI スクリプトを設定します
- AtomScript
- Atom API 用の CGI スクリプトを設定します
- SearchScript
- 公開サイトからの検索用 CGI スクリプトを設定します
- XMLRPCScript
- XML-RPC サーバー用の CGI スクリプトを設定します
5. 使わないCGIスクリプトの権限を変える
Movable Type には、前述のように様々な CGI スクリプトが提供されていますが、利用状況によっては、必要としない場合があります。そういった CGI スクリプトには、実行権限を与えないようにすることで安全性を高めることができます。
また、古いバージョンから上書きアップグレードを行うと、現在のバージョンには含まれていない CGI スクリプトがサーバに残っている場合があります。アップグレードにともない利用していなけければ、それらの実行権限を与えないことを推奨します。
※ PSGI 環境で利用している場合は、CGI ファイルの実行権限によらず利用可能になるため、本項の対応は有効にはなりません。PSGI 環境で利用可能な CGI スクリプトを制限する場合は、RestrictedPSGIApp 環境変数を指定してください。(Ver. 6.2 以上の場合)
Movable Type が提供する機能と CGI スクリプト
- Movable Type のコメント機能を利用していない
- mt-comments.cgi の実行権限を無くす
- トラックバックを受け付けていない
- mt-tb.cgi の実行権限を無くす
- Movable Type Data API を利用していない
- mt-data-api.cgi の実行権限を無くす
- ログフィード機能を利用していない
- mt-feed.cgi の実行権限を無くす
- 公開サイト側で Movable Type の検索機能を利用していない
- mt-search.cgi, mt-ftsearch.cgi の実行権限を無くす
- XMLRPC を利用して記事やウェブページの投稿をしていない
- mt-xmlrpc.cgi の実行権限を無くす
- Atom API を利用して記事やウェブページの投稿をしていない
- mt-atom.cgi の実行権限を無くす
- コミュニティ機能を利用していない
- mt-cp.cgi の実行権限を無くす
古いバージョンからのアップグレードで残っている可能性がある CGI スクリプト
- mt-add-notify.cgi
- mt-view.cgi
インストール後は利用しない CGI スクリプト
- mt-wizard.cgi
- mt-upgrade.cgi(ただし、Movable Type や プラグインのアップグレード時に必要です。)
6. パスワードの強度をあげる
単純な文字列や、短いパスワードを利用していると、ユーザーの乗っ取りが起きやすくなります。Movable Type 5.13 で導入された [パスワードの検証ルール] を使う事で、Movable Type のユーザーパスワードの強度を高くさせることができます。詳しくは、ドキュメントをご参照ください。
7. ロックアウトを設定する
Movable Type 5.13 で導入された [認証ロックアウト機能] を適切に設定することで、総当たり攻撃への対策ができます。
初期状態では、ユーザーが、30 分以内に、6 回以上パスワードを間違えるか、同一 IP アドレスから 10 回以上サインインに失敗した場合に、30 分間サインインを拒否します。詳しくは、ドキュメントをご参照ください。
8. Data API の設定
Data API を使うと、公開されているサイトの情報や、Movable Type に保存されている様々な情報を取得することができます。これは、Basic 認証で保護されているサイトであっても、Data API 経由で情報を取得できるということを意味します。
このような場合は、ウェブサイト・ブログ単位で Data API のアクセスを禁止することや、システム全体として Data API のアクセスを禁止させることができます。
また、Data API で取得できる情報についても項目を制限することができます。
※ 公開されていない記事の情報を参照することや、新しい記事を投稿するといった行為は、ユーザー認証と適切な権限を必要とします。
ウェブサイト・ブログ単位で、Data API のアクセスを禁止する
各ウェブサイトまたは、ブログ単位で Data API のアクセスを禁止することができます(バージョン 6.1 以降)。禁止されている場合でも、認証されたシステム管理者には Data API のアクセスが行えます。詳しくは、ドキュメントをご参照ください。
システム全体で、Data API のアクセスを禁止する
ウェブサイトやブログ単位で設定するのと同様に、システム全体として Data API によるアクセスを禁止するように設定することができます。この場合も、認証されたシステム管理者には Data API のアクセスが行えます。詳しくは、ドキュメントをご参照ください。
オブジェクト単位で、取得出来る項目を制限する
Data API で取得できる項目を制限するには、DisableResourceField 環境変数を設定します。詳しくは、環境変数のドキュメントをご参照ください。
9. サーバーのセキュリティの見直し
ウェブサーバーやソフトウェアのセキュリティのみならず、サーバー自体もセキュリティを考慮すべき点がいくつかあります。
アプリケーションを root アカウントで起動しない
ウェブサーバー、PSGI サーバーや データベースなどを root アカウントで起動すると、Movable Type やミドルウェアに未知の脆弱性が見つかった場合に、攻撃が成功する可能性が高くなります。各アプリケーションごとに専用ユーザーで起動することを強くお奨めします。
OS やパッケージを最新の状態に保つ
サーバー OS や、サーバーに導入されているパッケージについても、各 OS ベンダーからアップデートが随時提供されています。シェルや SSL の脆弱性をつく攻撃もありますので、適宜アップデートを行いましょう。アップデートの方法については、各 OS のドキュメントをご参照ください。
外部との通信に制限を加える
外部からの通信はもとより、内部から外部への通信に関しても特定の通信のみを許可するようにすることで、安全性を高めることが出来ます。
IPアドレス、ポートの制限
Movable Type の管理画面へのアクセスを 特定の IP アドレスからのみ受け付けるようにすることで、攻撃を未然に防ぐことが出来ます。また、不要なポートを開放しておくことは、セキュリティ上の重大な欠陥につながるため、ファイアーウォールなどで塞いでおきましょう。
不必要な通信は許可しない
サーバー内部から外部へ不要な通信を遮断することで、マルウェアを勝手にインストールするなどの攻撃を防ぐことできます。
ログを定期的に監視する
システムのログにはサーバーへのアクセスの記録や、サーバーの動作に関する様々な情報が記録されています。ログの自動監視ツールなどを用いることで、攻撃の検知や怪しい振る舞いを監視することができます。
不要なパッケージ、アプリケーションをインストールしない
ウェブサーバーや、データベースサーバーというように、サーバーには様々な役割がありますが、サーバーの動作に必要ないパッケージは極力インストールをしないことが望ましいです。
不要になったアプリケーションは放置せず削除する
上記項目とも重なりますが、不要となったアプリケーションは削除することをおすすめします。
アカウント情報を安全に保つ
アカウントのパスワードを第三者と共有することや、アカウント名とパスワードを目の付く場所に書いておくことは大変に危険です。
パスワードの送信は暗号化通信下で
ウェブサーバーやアプリケーションへのログインはもとより、FTP などでサーバーに接続する場合は、暗号化された通信を行うことをおすすめします。
パスワード認証を極力避ける (鍵認証を利用する)
外部からサーバーへシェルアクセスする場合は、パスワード認証方式ではなく公開鍵認証方式を利用することをおすすめします。また、特殊なケースを除き root 権限でのログインはなるべく行わないほうが良いです。
未使用のアカウントは削除する
未使用となっているアカウントは、極力すぐに削除を行いましょう。攻撃対象となるユーザーの数を減らすことができます。
Movable Type クラウド版 では、上記対策で触れている、SSL を有効にすることや、BASIC 認証の設定を Movable Type の管理画面からを簡単におこなう事ができます。また、Movable Type はもとより、OS などのパッケージについても、常に最新版が提供されますので、アップデートの煩わしさがありません。
システム管理者の負担を軽減されたい場合、もしくはシステム管理者が不在の場合などは、Movable Type クラウド版のようなマネージド・サービスのご利用もご検討ください。
なお、Movable Type クラウド版では、運用中のサイトをクラウド版へデータ移行するサービスもあります。