ハクソク

世界を動かす技術を、日本語で。

クレジットカードはブルートフォース攻撃に対して脆弱である

概要

  • PCI DSSは、クレジットカード情報の取り扱いにおける業界標準
  • 最小限のセキュリティ対策しか実装されていない現状。
  • マスクされたカード情報でも推測・悪用のリスクが存在。
  • 実際の被害事例を通じて、標準の限界と攻撃手法を解説。
  • 改善策や消費者が取るべき注意点についても言及。

PCI DSSとクレジットカード情報の現状

  • PCI DSS:クレジットカード等の機密データ保護を規定する国際標準。
  • 表示可能な情報:
    • **PAN(カード番号)**の最初の6桁+最後の4桁(マスク表示)
    • カード名義人
    • 有効期限
    • サービスコード
  • 表示禁止の情報:
    • フルPAN
    • カード認証コード(CVC2/CVV)
    • PINやトラックデータ
  • 企業は認証取得のためのみ基準を満たす傾向。
  • 実際には最低限の対策のみ実装、指摘されても改善しない企業が多い現状。

実際に起きた被害事例

  • 2FA(3D Secure)搭載のバーチャルカードを有名ECサイトでのみ利用。
  • SMSで不正利用の試み通知、即時パスワード変更・限度額減額など対応。
  • 6時間後、3D Secure未対応の加盟店で複数回にわたり全額引き出し被害。
  • eウォレット経由で現金化され、高度な手口に驚愕。
  • チャージバック申請により最終的に返金。

攻撃者の手口と技術的な詳細

  • 攻撃者はアカウント侵害後、購入を試みカード情報の一部を取得。
  • マスクされたPAN(最初の6桁+最後の4桁)と有効期限、銀行名を把握。
  • PANの構造(ISO/IEC 7812):
    • IIN(発行者識別番号):6〜8桁
    • 口座識別子:最大12桁
    • チェックディジット(Luhnアルゴリズム)
  • 16桁中10桁が未知だが、チェックディジットで候補は約10万通りに絞れる。
  • 一部の銀行・ゲートウェイはカード番号だけで決済可能な場合も存在。
  • 決済APIのレスポンスが詳細すぎる(例:「CVVが不正」「有効期限切れ」等)ため、ブルートフォースが容易。
  • 攻撃者は複数のAPIを利用し、6時間でカード情報を特定
  • プロキシ利用でIP分散、リクエストレートも分散し検知困難。
  • 3D Secure非対応加盟店の存在が被害拡大の要因。

PCI DSSの限界と現実

  • 最低限の基準しか満たしていないと、実質的な安全性は低い
  • 物理レシートにも同様のリスク(マスク情報でも推測可能)。
  • 被害後の対応:チャージバックで返金は可能だが、根本的解決にはならない。
  • 加盟店やECサイトの対応:基準通りで問題なしと主張、実質的な改善意識なし。
  • 業界内でも問題の認識は広まっているが、抜本的対策は進んでいない。

消費者・開発者へのアドバイス

  • 強固なパスワード管理・使い回し禁止の徹底。
  • レシートやカード情報の廃棄時は裁断等で物理的破壊
  • 3D Secure対応加盟店のみ利用推奨。
  • カード利用明細の定期的な確認
  • 開発者・運用者は、PCI DSSの基準以上の対策(例:APIレスポンスの簡素化、CVCブルートフォース対策の強化)を検討。

まとめ

  • PCI DSSは最低限の基準であり、実際の攻撃手法には無力な場面も多い。
  • マスク情報やAPIレスポンスの扱いが攻撃の突破口となる現実。
  • 消費者自身の自衛策と、業界全体の意識改革が必要不可欠。

Hackerたちの意見

オンライン決済用に別のカードを持って、支払いに必要な分だけお金を入れておくべきだと思う。自分がちょっと naïve だって分かってるけどね :) 記事に戻るけど、弱点は3Dセキュアを使ってない別の業者に繋がるパスワードだったみたい。記事から見ると、悪い奴らは完全に自動化されたシステムを持ってるから、大手の業者は同じIPアドレスからの自動ログイン試行をちゃんと対処すべきだと思う。うちのWordfenceのログを見る限り、IPのローテーションはそんなに早くないから、いくつかの永久的なIPブロックで対処できるかも。
別カードには賛成だな。それが俺の別カードだったし、幸いにも金額はそんなに大きくなかったから。 >「弱点は3Dセキュアを使ってない別の業者に繋がるパスワードだった」 俺の意見だけど、パスワードが漏れたからって、クレジットカードのデータ全体が漏れるのはおかしいと思う。同じデータは市場で印刷される物理的なレシートにも載ってるし、時には4桁、時には10桁だってある。無人の物理的なレシートからブルートフォースで攻撃することも可能だしね。
関係ないけど、Capital OneのEnoバーチャルカードはこの目的にはうまく機能するよ。
正直、クレジットカードの詐欺は銀行がカバーしてくれるから、あんまり気にしてない。気になることがあったら、明細をチェックするだけ。
現在のシステムでのベストな解決策は、https://privacy.com だと思う。
Mercuryは今、個人用の銀行口座を提供してるよ。BrexやMercury、Rampみたいに、バーチャルデビットカードも作れるんだ。
前の銀行は、必要に応じてこのバーチャルカードサービスを提供してくれてた。特定の金額での単発購入用にカードを作るだけ。それだけなんだ。手頃な住宅ローンが受けられなくなったから、別の銀行に移ったよ。
なんで責任を負う必要があるの?現状で詐欺に対して責任がないなら。
以前、うちの会社に雇われた人が、ギフトカードにストアドバリューを追加する方法を見つけたって自慢してたことがあった。そしたら、その人がFBIに調査されてることが判明したんだ。しかも、その人は政府の契約者だったから、今まで見た中で一番大きなセキュリティガードが来て、彼を連れ出したよ。
「ギフトカードにストックされた価値を追加する」ってどういう意味?
決済処理業者は、カード番号をブルートフォースで試すこと、いわゆるカード列挙やカードテストを許可してないんだ [1][2]。カードスキームは、対策を講じない業者や決済処理業者に厳しいペナルティを課すからね [3]。 1) https://stripe.com/newsroom/news/card-testing-surge 2) https://stripe.com/blog/the-ml-flywheel-how-we-continually-i... 3) https://docs.stripe.com/disputes/monitoring-programs#enumera...
複数のカード検証APIを使うと、彼らが試みる率は非常に少なくなるよ。異なるPAN番号や異なるソースIPがあると、どう関連してるのか分からない。CVC2を単一のPANで列挙するのは別の話だね。
6年前までは、StripeはAPIログにカード番号を全く隠してなかったんだよね。
関連する話だけど、OPが赤いニシンを追いかけてたかもしれないね。最近、クレジットカードに小額の不正請求があった(FB/Metaに関する何か)。多分、誰かがカードを試してみて、誰かが気づくかどうかを見てたんだろう。クレジットカード会社に電話して、請求を取り消してもらって、カードをキャンセルして新しいカードを送ってもらった(5〜7営業日)。新品の未使用カード(新しいクレジットカード番号、新しい有効期限、新しいCVV)でも、不正な支払いが再開された(またFB/Meta)。どうしてこんなことが可能なの?理由はデジタルウォレット。クレジットカード番号などは、カードをキャンセルしてもデジタルウォレットを通じて転送されるんだ。再度、クレジットカード会社に電話して、今度はすべてのデジタルウォレットをキャンセルするように頼んだ(99個もあった!)。これをオンラインでやる方法はない。コールセンターの人と話さないといけない。すると、すべての更新される支払いがリセットされて、すべての業者と再設定しなきゃいけないっていう講義を受けることになる。「はい、分かってます。カードとすべてのデジタルウォレットをキャンセルしてください!」って言ったら、20分待たされた(なんで?何してるの?手動でデジタルウォレットをキャンセルしてるの?)。ここで学んだ教訓は、クレジットカードをキャンセルすることは思っているほど簡単じゃないかもしれないってこと。それに、定期的な支払いはすごく儲かるから、キャンセルすると大きな収益損失になるんだろうね。(文法を修正しました。)
自分の場合は、ほぼ確実だったよ。たまたまその日、使ってたカードは大手のeコマースサイトでしか使ってないバーチャルカードだったからね。もし他のところで漏れたなら、関係ないアカウントにログインするなんてことはしないと思う。
「デジタルウォレット」についてはよくわからないけど、新しいカードが発行された後にクレジットカードの情報を更新するっていう概念はあるよ。それはクレジットカード会社が提供しているサービスだし。Stripeのブログ記事: https://stripe.com/resources/more/what-is-a-card-account-upd...
デジタルウォレットってApple PayやGoogle Payのこと?私も似たようなことがあったんだけど、この二重請求についてどう思った?攻撃者は何をしたと思う?
privacy.comをチェックしてみて。自分のカードを作れるよ。サービスごとに1枚ずつでもいいし。
> もう一度クレジットカード会社に電話して、今度はデジタルウォレットをすべてキャンセルするように言ったんだ(99個もあった!)。オンラインでこれをする方法はないよ。これは銀行によるね。例えば、バンク・オブ・アメリカは、デジタルウォレットに追加されたカードをウェブサイトで確認して削除できるんだ。
同じく、Meta / FBから200ユーロの請求が来たんだけど、まだ新しいカードを待ってる。
もしそれが0ドルか1ドルの認証だったら、その会社があなたがまだ存在するか確認するための詐欺チェックの可能性が高いよ。デジタルウォレットの中にはサブスクリプションをサポートするものがあって、その認証が失敗したり、住所が一致しなかったり、間違った種類のカードだった場合、カードを更新するまでアカウントを無効にされることがあるんだ。
>消費者としては安全だと思ってた。億ドル規模のヨーロッパの商人にクレジットカードを保存したり、スーパーで買い物してレシートを無視したりしてたけど、現実はちょっと違った。>短期間でチャージバックでお金が戻ってきたから、詐欺対策の仕組みで守られてるって証明されたね。銀行が詐欺の損失を負担してくれて、こっちは元通りになった。結局、銀行システムは詐欺の損失を気にしてるし、詐欺を見つけるのがめちゃくちゃ上手い。カード決済システムを変更するのは非常に難しいんだ。システムの規模が大きいから、特定の変更が詐欺率に影響を与えるっていう十分な理由がない限り、銀行は変更をしない選択をするよ。
自分の経験では、銀行はやる気のあるチャージバックの相手には負けちゃうことが多い。特にeBay(盗まれたクレジットカード)での経験では、うまくいってたのにeBayが銀行に書類を送った途端、チャージバックが逆転されて、その後すぐに銀行口座も閉じられた。だから、チャージバックが戻ってきたからって安心できるわけじゃないよ。最初は相手に返答の時間を与えるためにそうなるんだ。eBayが書類で埋め尽くすのに30日くらいかかったと思うし、チャージバックが再び取り消されるまでの間に、銀行が自分を詐欺師だと非難するほど効果的だった。> 銀行が詐欺の損失を負担したっていうのは、100%正しいとは思えない。チャージバックを争う理由は、チャージバックを受けた側か、チャージバックをした側が損失を被るからだよ。銀行はその損失を負担してない。もし銀行がその損失を負担するなら、eBayがチャージバックに異議を唱えて、専門の人に調査させるなんてことはしないはず。
> 銀行は詐欺の損失を負担してくれたけど、あなたがその不正な請求に気づいた場合ね。
銀行は実際には損失を負担しないよ。むしろ、すべてのサービスに詐欺のコストをカバーするためのマークアップを確保してる。消費者全体が詐欺のコストを負担してるってこと。私たちはそれに気づかないだけで、請求書に具体的な項目として表示されないから、実際には買うものすべてにちょっと余分に払ってるんだ。
> 銀行が詐欺の損失を被ったことがあるよ。残念ながら、商人が詐欺の被害を受けることが多くて、これがちょっとした代理人問題を引き起こしてるんだ(発行銀行は取引ごとにインターチェンジを得るから、詐欺に対して責任を負わないなら、彼らのデフォルトのインセンティブはできるだけ多く承認して、後でチャージバックで何とかすることになる)。でも、3DSはその計算をかなり変えるんだよね。それに、対面決済も通常は発行銀行の責任だし。
バーチャルクレジットカードはもう何年も前からあるよね。15年以上前にバンク・オブ・アメリカやシティが提供してくれたのを覚えてる。確か、Javaアプリか、もしくはスタンドアロンのexeだった気がする。もっと広まらなかったのが驚き。Robinhoodはこれを完璧にやってる。今まで使った中で一番いいバーチャルクレジットカードシステムだよ。めちゃくちゃスムーズで、1回限りの使用、24時間、またはキャンセルするまで無制限で認証できる。UI/UXが素晴らしいね。
MBNA(チェースに買収されたところ)は2000年代初頭にFlashベースのバーチャルカードアプリを持ってたんだ。すごく使うのが楽しかったよ。特に今の「すべてがサブスクリプション」な世界で、どうして普及しないのか理解できない。期限や支出制限を設定できるのが大好きだったから、サブスクリプションを終わらせるための面倒な交渉を避けられたんだよね。
詐欺のコストを飲み込む方がシステムを維持するより簡単だったから、うまくいかなかったんだよね。消費者に優しいからってだけでは流行らなかった。
もし3Dセキュアがどこでも必須だったら、かなり助かるんだけど、私の理解が正しければ、アメリカではあまり使われてないんだよね。規模が大きいから、カード発行会社は非3Dセキュアのリクエストを許可せざるを得ないし、そうしないと顧客がカードを使えなくなっちゃう。だから、非常に優れた詐欺防止メカニズムが大きく制約されてる。ほとんどの国にとっては本当にイライラするよ。アメリカの市民は、ほんの少しの不便を感じるよりも詐欺に遭う方がいいのかな?詐欺の被害者でない人たちも、商人が詐欺のコストや保険をカバーするために商品価格を上げるから、結局は詐欺の代金を払ってるんだよね。
3Dセキュアで防げる詐欺による損失ってどれくらい?0.1%くらい?
> わからないんだけど、アメリカの市民ってちょっとした不便を感じるよりも詐欺にあう方がいいの?私たちがもっと安全じゃない支払い方法を求めてると思う?いや、「詐欺にあいたい」わけじゃないけど、こういうことはカード発行会社と商人との交渉の問題なんだよね。
いや、法律が違うからね。アメリカの方が消費者に優しい法律が多いから、消費者の行動も違うんだ。クレジットカードが始まった頃(アメリカでね)、アメリカ合衆国議会は1974年にフェア・クレジット・ビリング法を通して、消費者が不正請求のサイクルが終わってから60日以内にカードの紛失を報告すれば、最大50ドルの損失しか責任を負わないって法律を作ったんだ。当時は、クレジットカードの購入はすべて紙で、機械が「カチャン」って音を立てて、カードのカーボンコピーを転送してたから、すべてオフラインで行われてた。その法律は今も変わってないし、実際、ほとんどの銀行は50ドルを完全に免除して、報告されたことに対してカード保持者に責任を負わせないんだ(要するに、50ドルのことで顧客をイライラさせるのは銀行にとって得じゃないから)。インターネットのおかげで、カードが盗まれやすくなったし、悪用されやすくなったけど、銀行はサイクルの終わりから60日以内に報告された損失には責任を持つんだ。だから、アメリカの銀行はクレジットカード取引のリアルタイム監視にものすごい投資をしていて、いろんなことをして監視してる。結局、彼らが責任を持つからね。でも消費者はあまり気にしてない。これが、アメリカのカードが消費者目線でずっと緩い理由なんだ。銀行がバックエンドにもっと投資しているから、消費者はヨーロッパのカードとは違って、責任を負わない形になってる。全く別の話だけど、EUはカード会社が請求できるインターチェンジ手数料の上限を規制してるけど、アメリカには上限がない。だから、アメリカのカード保持者はカードを使うことでかなりのキャッシュバックを受けられる(特に富裕層の上位10%には特に当てはまる)。これは、インターチェンジ手数料に上限があるEU発行のカードでは実質不可能なことだ。今、商人が低手数料のカードだけを受け入れられるようにしようとする大きな訴訟が進行中なんだけど、標準のVISA/MC/AMEXの契約ではすべてのカードを平等に扱わなきゃいけないから、高いインターチェンジカードを推奨するインセンティブがある。訴訟がどうなるか見ものだけど、それまではアメリカの高額消費者はカードのリワードがずっと高くて、カードの使用を促進してるんだよね。EUのカードよりも摩擦が少ないんだ。
参考までに、HSBC USAのMastercardは、アメリカにいるなら3Dセキュアを使ってるよ。
> わからないんだけど、アメリカの市民はちょっとした不便を感じるよりも詐欺に遭う方がいいの?一般的な考え方は、あるセキュリティメカニズムのコンバージョン率の低下が平均的な詐欺率よりも高い場合、それを導入するのは経済的に意味がないってこと。だけど、業界全体で見ると、これはかなり古典的な調整問題で、コンバージョン率が下がるのは、全ての商人と銀行が同時に3DSを導入しない限り、まだ簡単な代替手段があるからなんだ。もし移行するための便利なものが何も残っていなければ、ユーザーは良くも悪くも新しい、より安全なものを学ばなきゃいけなくて、コンバージョン率は再び上がるよ。EUが多くの決済に3DSを義務付けたのはそのためだけど、そこでも規制当局は100%のカバレッジが逆効果だと認識していて、中間に甘いスポットがあるんだ。さらに同じ一般的な考えの証拠として、アメリカのクレジットカードにはPINがないんだ。なぜなら、個々の銀行がPINを導入すると、顧客はPINなしで競合のカードを使うから、使用率が大幅に下がるから。別の市場では、すべてのカードにPINがある(規制の介入やカードネットワークのインセンティブによるもの)けど、人々はそれに慣れているんだ。
確か、MasterCard SecureCodeやVisaのverified-by-visaは、アメリカでは10年か20年前にもっと普及してたんじゃないかな?NewEggやB&Hもその時点ではサポートしてたと思う。その後、みんなその機能を無効にしちゃって、外国のサイトで買い物をする時はほとんどの発行元がスルーしてくれるんだ。発行元のウェブサイトにリダイレクトされて、またオンラインショップに戻るだけで、何も入力したり確認したりしなくて済む。昔は、3DSアカウントに登録しなきゃいけなくて、それが通常のオンラインアカウントとは別だったり、別のパスワードを保持したりして、かなり面倒だったよね。それに、そのiframeウィンドウはフィッシングサイトにそっくりだったし。正直、そんなに大騒ぎすることじゃないよ。もし取引が疑わしいか詐欺の可能性があるなら、今はもうSMSや銀行のアプリでアラートが来るから。確認して、1分後に取引を再試行するだけで済む。これって対面取引でもリモート取引でも同じ流れで機能するけど、3DSはオンラインショッピングにしか対応してないからね。
最近、妻のカードで海外からの怪しい取引について、銀行からSMSが来たんだ。金額はなんとゼロUSDで、彼女が電話やコンピュータを使ってない時に来たから、最初はそのSMS自体がフィッシングかと思った。でもオンラインで確認したら、SMSの形式が合ってて、銀行のウェブページも情報を求めないって言ってたから、何も購入してないことを確認したんだ。銀行はすぐにカードをキャンセルして、新しいのを送ってくれた。最初は銀行の安全システムが過剰反応してるのかなと思ったけど、この記事に書いてあるようなことが実際に起こってて、銀行が早めに察知したのかも。
このブログでは、最も重要な部分である「決済」について触れてないね。銀行があなたの口座からお金を商人に移すことに同意する部分(この場合、カードの負債が増えること)は、承認とは完全に別なんだ。承認は、現代のEMV(「チップとPIN」)認証や、オンライン用のCVVなど、銀行が詐欺から自分を守るためのメカニズムで、場合によっては商人を守るためのものでもある。ネットワークは、アマゾンが「カード番号を渡すよ、私たちは400ドルを受け取るって言ってる」って言うのを全く問題にしない。それは単なる決済で、請求書に載るだけ。高度な暗号化もなければ、4桁のPINを覚えたり、母親の旧姓を思い出したりする必要もない。ただ「OK、信じるよ」って感じ。だから、消費者としてはクレジットカードの請求書をちゃんと読んで、認識できないものは異議を唱えないといけない。そうしないと、支払わされちゃうからね。ネットワークがあなたが騙されることに気を使うインセンティブはほとんどない。異議を唱えなければみんなハッピーだし、異議を唱えたら商人から取り戻すだけで、ネットワークには関係ないんだ。
> もしそうしたら、商人からその分を取り戻されるだけで、彼らの問題じゃないよ。これは非3DSのオンライン決済には当てはまるけど、対面決済や3DSを使ったオンライン決済には当てはまらない。そういう場合、発行元が通常は責任を負うんだ。
絶対そうだよ。面白い例として、数年前にRevolutが日本で立ち上がった時、移民コミュニティの中でかなり爆発的な成功を収めたんだ。その時期のほとんどのカードは同じ有効期限の月と同じIIN(日本特有だと思う)で発行されていて、エントロピーがほとんどなくて、3DSを必要としない商人を通じてブルートフォース攻撃が発生したんだ(Uberとか)。あるコミュニティ内(約1.5k人)で、カードが全く露出せずに侵害された100%確認済みのケースがいくつかあったよ(つまり、カードはオンラインでもオフラインでも使われていなかった)。すべてのケースでRevolutは迅速に請求を取り消して、最終的には日本市場向けにカードを完全に再発行したんだ(エントロピーの問題をどうやって解決したのかは不明だけど、もしかしたら有効期限をランダム化したり、IINをもう少し分散させたのかも)。