🔥

EC-CUBE を Cloudflare で不正アクセスから護る

2023/12/15に公開

2023年もあと少し。この1年を振り返ってみると、EC-CUBEユーザーグループの勉強会でセキュリティの話ばかりしていた気がします。
クレジットマスター攻撃をはじめとした不正アクセスが激増し、本当に他人事ではない時代になってきました。

EC-CUBE4.2系には2要素認証やスロットリングをはじめとしたセキュリティ関連の新機能が追加されていってますが、2系や3系には追加されていません。
しかし、2系や3系から4系へのリニューアルは多額のコストや時間もかかり、現実的に難しい店舗も多いです。
また、最近はクレジットカードの加盟店審査も厳しくなり、セキュリティチェックリストの提出を求められる場合もあり、セキュリティ要件を満たせないために加盟店契約を断念せさるえないケースも耳にします。

現在EC-CUBE2系を運用中の店舗に Cloudflare を導入して、不正アクセスから保護するノウハウが蓄積されてきましたので、ご紹介したいと思います。

ちなみに、 Cloudflare の Freeプランは無料です。
Proプランは$20/月です。
Freeプランでも必要最低限の保護はできますが、大量の個人情報を扱うEC-CUBEでは Pro プランをおすすめします。
$20/月(現在のレートで約3,500円/月)の捻出を悩まれる方が多いです。
今まで大丈夫だったからという理由から導入を見送った店舗で、今年に入って不正アクセス被害が発生していたりします。
不正アクセス被害に遭うと、多くのお金・時間・信用が失われます。
保険だと思って、 Pro プランの導入をおすすめします。
(前置きが長くてすみません)

Cloudflare の登録方法はこちらを参考にしてください

導入にあたってセキュリティが大幅に強化されますが、悪質ではない通常のアクセスを誤認して、ブロックしてしまう場合がありますのでご注意ください。
設定方法がわからない場合は、技術者の方にご相談いただくか、この記事のコメント覧などでご連絡ください。

以下で紹介する方法は、EC-CUBE2系、3系のみではなく、4系でも有効です。
EC-CUBE4系になって、セキュリティに関連する様々な機能が強化されていますが、主に 「攻撃を受けても発動しない」 ようにする対策です。
Cloudflare は 「攻撃をサーバーに到達しない」 ようにする対策です。
EC-CUBE4系をご利用の方もEC-CUBE本体機能のみでは常に攻撃に晒されている状況です。
ぜひ Cloudflare をご活用ください。

各種設定方法

(Freeプラン) 30秒で reCAPTCHA(マネージドチャレンジ)を設定する

クレジットマスター攻撃対策として、reCAPTCHA を導入されるショップが増えています。
導入に際し、有料プラグインを使用するか、プログラム改修が必要なため、少々敷居が高いです。
Cloudflare を使用すれば、ノーコードでreCAPTCHA(マネージドチャレンジ)を実現できます。

セキュリティ → WAF → カスタムルールタブの ルールを作成 ボタンで、以下のルールを作成します。

  • ルール名: 購入/マイページ マネージドチャレンジ (など任意のルール名)
  • 受信要求が一致する場合
    フィールド オペレーター AND/OR
    URIパス 次を含む /shopping OR
    URIパス 次を含む /mypage
  • アクションを選択する: マネージドチャレンジ

この設定をすることで、購入フローやマイページで、 bot からのアクセスかどうかを判定する CAPTCHA が表示されます。

多くの場合は上記のバナーが一瞬表示されるのみで自動判定されるため、ショッピングの妨げになりません。
bot と疑わしい場合は、人間かどうかを判別するチェックボックスが表示されます。

Cloudflare を導入すれば、無料で30秒もあれば設置できます。
今すぐ設定しましょう!

(Freeプラン) EC-CUBE2系, 3系で2段階認証を実現する

EC-CUBE4.1より、管理画面で2段階認証の設定が可能となりました。
これをEC-CUBE2系、3系で実現する場合は独自カスタマイズが必要となり、多額のコストがかかります。
Cloudflare Zero Trust を使用すれば、無料(50ユーザーまで)かつカスタマイズなしで2段階認証を実現できます。

  1. Cloudflareにログインし、左のメニューから Zero Trust を選択します。
  2. (初回のみ) チーム名を設定します。 <チーム名>.cloudflareaccess.com といったドメインが割り当てられますので、お好みのチーム名を設定します。
  3. (初回のみ) プランを選択します。通常は Free プランで大丈夫です。
  4. 左のメニューから Access → Applications を選択し、 Add an application ボタンをクリックします。
  5. Self-hosted の select をクリックします。
  6. Application Configuration を以下のように設定します。 Subdomain、Domain、Path はご利用中のEC-CUBE管理画面を設定してください。
  7. その他の設定は、特に指定がなければデフォルト値で問題ありません。Next ボタンをクリックします。
  8. ポリシーを以下のように設定します。
    • Include > Selector > Emails でアクセス許可したいメールアドレスを設定します。 Email Ending in を選択すると、メールのドメイン名を設定できます。
    • Required > Selector > Login MethodsOne-time PIN を選択します。
  9. その他の設定は、特に指定がなければデフォルト値で問題ありません。Next ボタンをクリックします。
  10. CORS settings, Cookie settings, Additional settings は、特に指定がなければデフォルト値で問題ありません。Add Application ボタンをクリックします。

設定内容に問題がなければ、管理画面URLへアクセスした際に以下のような画面が表示されます。

Email の覧に 8 で許可したメールアドレスを入力し、 Send me a code ボタンをクリックすると、ワンタイムパスワードが届きます。

届いたワンタイムパスワードを入力し、 Sign in ボタンをクリックすると、EC-CUBE管理画面のログイン画面が表示されます。

Zero Trust では、ワンタイムパスワードの他、Microsoft 365、Google Workspace などのSSO(シングルサインオン)も可能です。

これらの認証プロバイダと連携することで、生体認証などの多要素認証も実現可能です。
IPアドレスの制限も可能ですので、より安全に管理画面を保護することができます。

EC-CUBE4.1系以降をお使いの方も、Zero Trust を組み合わせることで、より堅牢に管理画面を保護することができます。
もちろん、WordPress など他のCMSの管理画面も同様の方法で保護することが可能です。
.htaccess によるベーシック認証や、EC-CUBE管理画面機能のIP制限よりも、無料でより柔軟かつ安全に保護できますので、今すぐ設定しましょう!

(Freeプラン) 不正注文から護る

不正に入手したクレジットカード番号を使用して高額商品を購入される、不正注文に悩まれている店舗も多いと思います。
3Dセキュア2.0を導入することで、チャージバック保証を受けることができますが、未然に防ぐことができれば、それに越したことはないですよね。

経験上、不正注文の多くは AWS などのクラウドを利用しています。
AWS からのアクセスをブロック、またはマネージドチャレンジを設定することによって、不正注文を未然に防ぐことが可能です。

セキュリティ → WAF → カスタムルールタブの ルールを作成 ボタンで、以下のルールを作成します。

  • ルール名: AWS マネージドチャレンジ (など任意のルール名)
  • 受信要求が一致する場合
    フィールド オペレーター AND/OR
    AS Num 等しい 16509 AND
    URIパス 次を含まない /.well-known/acme-challenge
  • アクションを選択する: マネージドチャレンジ

1番目のフィールドの AS Num は、AWSのIPアドレス範囲(AS16509 AMAZON-02)を表す 16509 を設定します。
2番目のフィールドは、AWS からのアクセスであっても、通過させる URI パスを指定しています。ここでは無料SSL証明書サービスの Let's Encrypt が使用するパスを設定しています。

不正注文のほとんどは自動化された bot ですので、マネージドチャレンジで防ぐことができます。
しかし、人間による不正注文で、マネージドチャレンジを通過してしまう場合もあります。
マネージドチャレンジを通過してしまう不正注文が多い場合は、アクションをブロックに設定して様子を見ましょう。

(Proプラン) EC-CUBE2系, 3系でスロットリング/アカウントロックを実現する

EC-CUBE4.2.1から、EC-CUBE本体にスロットリング機能が実装されました。
ログインに何回か失敗すると、一定期間ログインができなくなる仕組みです。
こちらもEC-CUBE2系、3系で実現しようと思うと独自カスタマイズが必要になるのですが、Cloudflare の レート制限ルール を使用することで実現可能です。

セキュリティ → WAF → レート制限ルールタブの ルールを作成 ボタンで、以下のルールを作成します。

  • ルール名: ログイン (など任意のルール名)
  • 受信要求が一致する場合
    フィールド オペレーター AND/OR
    URIパス 次を含む /shopping OR
    URIパス 次を含む /mypage OR
    URIパス 次を含む /entry
  • レートが次の値を超えた場合
    リクエスト 期間
    5 10秒
  • 次に、アクションを実行します
    アクションを選択する レスポンスタイプあり レスポンスコードあり
    ブロック デフォルトのCloudflareレート制限レスポンス 429
  • 期間: 1時間

/shopping または /mypage または /entry で10秒間に5リクエスト以上あった場合は1時間ブロックする設定です。
制限が厳しすぎる場合は、10秒間15リクエスト等に緩和してみると良いと思います。
マネージドチャレンジを使用すれば大半の悪質な bot は防げるのですが、人力を使用してすり抜けてしまった場合を考慮して、このレート制限も設定しておくと良いでしょう。
Freeプランでも簡易的な設定はできますが、詳細設定可能なProプランをおすすめします。

(Proプラン) 悪質な bot から護る

Cloudflare のProプランには スーパーボットファイトモード という機能があります。
これは、Cloudflare の AI がGoogleのような安全な検索クローラーか、悪質な bot かを自動判別してくれるオプションです。

セキュリティ → ボットの スーパー ボット ファイト モードを設定する から有効にします。
以下のような設定がおすすめです。

  • 明らかに自動化によるもの: マネージドチャレンジ
  • 検証済みのボット: 許可
  • 静的リソースの保護: OFF
  • WordPress 向けに最適化する: WordPress を併用している場合は ON
  • JavaScript Detections: OFF

(Proプラン) 日々繰り返される不正アクセスから護る

Cloudflare のProプランの管理ルールには、強力な WAF ルールが付属しています。
Freeプランでは、特に深刻な脆弱性に対するルールしかありませんが、Proプランではより高度なルールセットや、資格情報の流出チェックが可能です。

セキュリティ → WAF → 管理ルールタブから、以下のルールをすべてONに設定します。

  • Cloudflare OWASP コア ルールセット
  • Cloudflare 管理ルールセット
  • Cloudflare の漏洩した資格情報のチェック

これで多くの脆弱性攻撃を防いだり、盗まれたID/パスワードを使ったブルートフォース攻撃をアカウントが乗っとられる前に検出可能です。

前出のスーパーボットファイトモードもそうなのですが、重要なのは 管理画面側もWAFの対象とする ことです。
EC-CUBEにおけるクレジットカード漏洩事故の多くは、管理画面側の機能を攻撃してファイルを改竄します。
2021年に発生した深刻な脆弱性も、管理画面にWAFを設定していればブロックすることができました。
最近は、管理画面URLを変更したり、IP制限をかけても、それを乗り越えて攻撃されますからね。WAFは重要です。

まとめ

ご紹介した設定をすることで、EC-CUBE2系、3系でも4系と遜色ないセキュリティ対策が可能です。
4系をお使いの方も Cloudflare を利用することで、日々繰り返される攻撃から護ることができます。
特に WordPress を併用されているショップは、WordPress 経由での攻撃が多発していますので、ぜひ Cloudflare の導入をおすすめします。

GitHubで編集を提案

Discussion