クレジットカード決済のセキュリティについて学ぶ(情報漏洩対策とPCI DSS)
クレジットカード決済を利用したシステムを開発している時に、この実装で大丈夫なのか??この処理はこのままで大丈夫なのか??と思うことがたびたびあったので、クレジットカード決済まわりについてWEB+DB PRESS Vol.76 のWeb決済入門を読んだ。
TL;DR
- 新しくクレジットカード決済を使用するサービスを開発する時はPCI DSS の要件を確認して仕様を検討する必要がある
- PCI DSS に準拠することで、情報漏洩等のリスクを抑えられる
- PCI DSSの要件を確認して仕様を決めることでPCI DSS準拠のコストを抑えられる
クレジットカード漏洩時の損害
国際カードブランドから課される罰金
- MasterCardやVISAなどの国際カードブランドから課される罰金
- PCI DSSへの不遵守が発覚した場合は1回の事故で15,000ドルから100,000ドルの罰金
- 漏洩したカード情報の件数に応じて対応にかかる費用
クレジット所有者に対する保証
- クレジットカードが漏洩すると、そのカードは再発行になる
- 再発行費用の負担
- 顧客対応にかかるコスト
ブランド価値の低下
- 失ったブランド価値によってビジネス機会を逃す
- 一度傷ついたブランドを回復するには多大な努力が必要
守らないといけない情報
- 特に重視されているのはクレジットカード番号
- 有効期限や所有者名、住所等が漏洩しても番号が漏洩しなければ2次被害を防げる
情報漏洩が起きる3大リスクポイント
保存
クレジットカード情報をそのままDBに保存 → SQLインジェクションで番号を抜き出されるなど
- データを保存しない
- トークン決済
- 決済代行サービスが提供しているクレジットカードのトークン化機能を利用
- 保存する場合
- ネットワークのセグメント化
- インターネットにアクセスするサーバとカード番号を保存するDBを別のネットワークに分離
- データベースの暗号化
- ネットワークのセグメント化
処理
処理部分に悪意のあるコードを仕込まれる可能性がある
- 遷移型の決済ページを利用する
- 決済代行サービスの決済ページを利用して決済をおこなう
- クライアントサイドでのトークン化
- クレジットカード情報をクライアントサイドでトークン化、トークンのみをWebサービスに渡す
伝送
中間者攻撃で通信が傍受されたり、第三者のサーバに送信されたりする
- SSLでの通信の暗号化
- クライアントサイドでのトークン化
PCI DSS
- セキュリティ基準のまとめとして PCI DSS(Payment Card Industry Data Security Standard) がある
- American Express, Discover, JCB, MasterCard, VISA の5大ブランドが共同で設立したPCI SSC(PCI Security Standards Council)によって策定
- 現在だとバージョン3.0まで出ている
PCI DSSの12の要件
12の大きな要件と288の詳細な項目で規定されている。 PCI SSCのWebサイトからPDFをダウンロードして閲覧できる。 https://ja.pcisecuritystandards.org/onelink/pcisecurity/en2ja/minisite/en/docs/PCI_DSS_v3.pdf
運営するWebサービスやアプリケーションの準拠カテゴリタイプによって準拠すべきPCI DSSの項目数が異なる。最大で288の項目に準拠しないといけない。