セキュリティを考慮したEC-CUBEのサーバー選び | EC-CUBE名古屋 vol.87
この記事は「セキュリティを考慮したEC-CUBEのサーバー選び | EC-CUBE名古屋 vol.87」の登壇資料です
EC-CUBE を運用する際、どんなサーバー(ホスティングサービス)を利用されていますか?
レンタルサーバー、VPS、クラウドなど、いろいろな種類のサーバーがあります。
それぞれ、メリット・デメリットがありますが、実は種類によってはセキュリティが低下してしまう場合があります。
今回は、セキュリティを向上させ、安全に運用するためにはどんなサーバーを選んだらよいかを解決していきたいと思います。
サーバーの種類
EC-CUBE を運営可能なサーバーは、主に以下のような種類があります。
- 共有レンタルサーバー
- さくらのレンタルサーバー、エックスサーバーなど
- VPS
- さくらのVPS、 ConoHa VPS など
- クラウド
- Amazon Web Service、Microsoft Azure、 Google Cloud Platform など
共有レンタルサーバーのメリットとデメリット
メリット
- サーバーの知識が乏しくても利用可能
- FTP の使い方さえ覚えれば何とかなる
- 保守はサーバー運営会社がやってくれる
- 安い
- 情報が多い
- FTPユーザーの権限と同じ権限でWebサーバーが動いているので、パーミッションの設定が楽
デメリット
- 勝手にPHPがバージョンアップされる場合がある
- 他のユーザーとサーバー資源を共有している
- 性能を上げたければお引越しが必要になる
- FTPユーザーの権限と同じ権限でWebサーバーが動いているので、厳密なパーミッションの設定ができない
VPS のメリットとデメリット
メリット
- サーバーの知識があれば自由に構築できる
- ロングサポートのOSを利用可能(2030年くらいまで保守される)
- 安い
- 厳密なパーミッションの設定が可能
デメリット
- セキュリティパッチの適用は自力でする必要がある
- 性能を上げたければお引越しが必要になる場合がある
- 自力でパーミッション設定が必要
クラウドのメリットとデメリット
メリット
- サーバーの知識があれば自由に構築できる
- ロングサポートのOSを利用可能(2030年くらいまで保守される)
- お引越しをせずに性能を上げ下げできる
- 厳密なパーミッションの設定が可能
デメリット
- セキュリティパッチの適用は自力でする必要がある
- ちょっと高いのから、めっちゃ高いのまである
- 自力でパーミッション設定が必要
- コントロールパネルの敷居が高い
パーミッション設定の重要性
EC-CUBEを利用中のクレジットカード漏洩事故の多くは、以下のような流れで発生しています。
- 同居しているCMSや、カスタマイズ時に生じた小さな脆弱性を攻撃
- 小さな脆弱性から、EC-CUBEのファイルアップロード機能を利用して悪意のあるファイルをアップロード
- 悪意のあるファイルでテンプレートを変更
詳しくは徳丸さんの動画をご覧ください
本日お伝えしたいこと
・皆さんXSSをなめていませんか?
・ECサイトの管理画面にXSSがあるとカード情報を盗めることをデモで示します
・管理画面にIPアドレス制限があっても防御されません
よく、 管理画面のURLを変更したり、IP制限をしましょう! と言われますが、攻撃方法によってはこのように迂回できてしまうため、根本解決にはなりません。
ここで重要なのは、 Webサーバーのユーザー権限で悪意のあるファイルをアップロードしたり、テンプレートを変更している ことです。
つまり、 Webサーバーのユーザー権限で書き込みができなければ、攻撃成立しません。
また、WAF を使用することでも、これらの攻撃の多くは回避可能です。WAF の導入も併わせてご検討ください。
パーミッションの設定例(EC-CUBE2系)
不正アクセス防止のため、必要最低限のディレクトリのみ apache ユーザーに書き込みを許可します。
EC-CUBE における不正アクセスの多くは、同居しているCMSやカスタマイズ時に生じた XSS、 CSRF の脆弱性を利用し、管理画面のファイルアップロード機能を悪用します。
特に XSS による攻撃の場合は、管理画面の URL 変更や、IP制限も無意味です。
以下の点を念頭に、厳密なパーミッション設定をすることで、万が一 XSS や CSRF の脆弱性があった場合でも被害を最小限に抑えることが可能です。
- ファイルの書き込みを最小限にしておく
- Apache ユーザーに PHP ファイルや shtml ファイル、CGI などの動的実行可能なファイルを生成させないこと
- デザイン管理画面は使用せず、機能自体を閉鎖する。ファイルの追加・編集は SSH(FTP) ユーザーで行う
- コンテンツ管理>ファイル管理機能は、普段は閉鎖しておき、必要なタイミングのみ利用可能にする
- コンテンツ管理>デザイン管理機能は、普段は閉鎖しておき、必要なタイミングのみ利用可能にする
- オーナーズストア>プラグイン管理機能は、普段は閉鎖しておき、必要なタイミングのみ利用可能にする
ディレクトリごとのパーミッション設定
プラグインや決済モジュールの中には、apache ユーザーでファイルの書き込みが必要なものもあります。
apache ユーザーでファイルの書き込みが必要な場合は、その都度 apache ユーザーの書き込みを許可し、設定が完了したら書き込みを拒否する運用とします。
(すべてのディレクトリの) .htaccess ファイル
- SSH(FTP) ユーザー、グループの所有とします
- ファイルパーミッション 444
- 改竄を防ぐため、必要なタイミングのみ書き込みを許可する運用とします
html ディレクトリ(html/upload 以外)
- SSH(FTP) ユーザー、グループの所有とします
- ファイルパーミッション 644
- ディレクトリパーミッション 755
html/upload 以下のディレクトリ
- apache ユーザー、グループの所有とします
- ファイルパーミッション 644
- ディレクトリパーミッション 755
- サーバー設定ファイルにて、 PHPファイルの実行を無効化しますん
- サーバー設定ファイルにて、
AllowOverride None
とします
data/config ディレクトリ
- SSH(FTP) ユーザー、グループの所有とします
- ファイルパーミッション 444
- ディレクトリパーミッション 755
- 改竄を防ぐため、必要なタイミングのみ書き込みを許可する運用とします
data/logs ディレクトリ
- apache ユーザー、グループの所有とします
- ディレクトリパーミッション 755
data/upload ディレクトリ
- apache ユーザー、グループの所有とします
- ディレクトリパーミッション 755
data/cache ディレクトリ
- apache ユーザー、グループの所有とします
- ディレクトリパーミッション 755
data/Smarty/templates_c ディレクトリ
- apache ユーザー、グループの所有とします
- ディレクトリパーミッション 755
上記以外の data ディレクトリ
- SSH(FTP) ユーザー、グループの所有とします
- ファイルパーミッション 644
- ディレクトリパーミッション 755
- 改竄を防ぐため、必要なタイミングのみ apache ユーザーの書き込みを許可する運用とします
パーミッションの設定例(EC-CUBE4系)
EC-CUBE 4 開発者向けドキュメント: 本番環境でのパーミッション設定 をご覧ください。
EC-CUBE4.2からはファイルアップロード可能な機能を制限することができるようになります
Discussion