クレジットカード情報を盗もうとする攻撃が増加中…

EC-CUBEではクレジットカード情報を盗もうとする攻撃が増加しています。
仲良くさせて頂いているお客さんも攻撃を受けてしまい、その対応にバタバタしていました。

概要

攻撃は購入フローにあるクレジットカードの登録ページや、マイページにあるカード情報の編集ページで行われます。
seleniumのようなブラウザの自動操作ソフトウェアやフォームへの自動入力ソフトウェアを組み合わせて、
総当りでカード情報を自動入力し、決済代行会社へ登録リクエストを送信します。
登録リクエストが成功するとそのカード情報は有効なものと判断でき、カード情報が盗まれてしまいます。

クレジットカード情報というのは、結構推測が簡単だったりします。
カード番号というのは14〜16桁で構成されています。
はじめの6桁は採番ルールが決まっていて、公開もされています。
https://gist.github.com/matsubo/2c91c9cbedf17a490dca

また、カードの有効期間というのは大体5年程度となっており、
有効なカード情報を盗もうと思うのであれば、現在から5年後までの60通り(1年12ヶ月なので、それが5年分)しかありません。
そのため、名義人やセキュリティコード、3Dセキュアで認証しないECサイトであれば、
比較的少ない試行回数で有効なカード情報を盗めてしまうのです。

対策

決済代行会社側の協力が必要なものと、そうでないものとの2つに分けられます。

決済代行会社側の協力が必要なもの

  • 名義人の認証
  • セキュリティコードの認証
  • 3Dセキュアを使った認証

こういった個人を認証する仕組みを入れることで、カード情報を盗むことを技術的に困難にします。

決済代行会社の協力なしに対策できるもの

  • reCAPTCHAの実装
  • カード情報の登録リクエストにリトライ制限を設ける
  • 不正なリクエストを送信しているIPのアクセスを制限する

reCAPTCHAはよく入力フォームで見かける「私はロボットではありません」というチェックボックスです。
カード登録に失敗する(=有効なカード情報ではなかった)度に、リクエストを送信することに手間がかかるようになり、
結果的にリクエスト送信の試行回数を減らすことができます。

また、普通に利用する上では何度もカード登録に失敗することなんてないわけですから、
それを逆手にとって、カード登録を複数回失敗するとそのユーザのカード登録リクエストを一定期間禁止する。という上記2点目の方法もあります。
一定期間しか禁止しないのは、カード情報を盗む気がないのに偶然複数回カード登録に失敗してしまった。という人への救済措置です。

3点目は不正なリクエスト内容を決済代行会社から得られる場合があります。
その際のIPを使って、ECサイトにアクセスできなくする方法です。
悪意のあるアクセスというのはIPを複数使ってくるため、効果としては大きいものではありませんが、
それでも一定の効果は得ることができます。

上記を踏まえ、今回のお客さんではreCAPTCHAの実装を行うことで対策しました。
現在はそれで落ち着いてきたので様子を見ていますが、これでもひつこく不正リクエストが送られてくるのであれば、2点目、3点目を対策していく予定です。

こういった案件はいつも急な対応を求められるので、大変ですね…
常に片手は空けておきたいと思う、今日このごろでした。

ABOUTこの記事をかいた人

フリーランスとして働く、フルスタックエンジニア 初崎 匠のサイト。仕事のことから趣味のアニメーション制作、英語学習など、様々なことを通じて、少しでも多くの人が幸せになれるような価値を提供できるよう挑戦し続けます。