ホーム > mixiニュース > IT・インターネット > IT総合 > 「クレジットカード情報の非保持化は、脆弱性があれば意味がない」――徳丸浩氏が指摘

「クレジットカード情報の非保持化は、脆弱性があれば意味がない」――徳丸浩氏が指摘

0

2019年02月18日 05:12  @IT

  • チェックする
  • つぶやく
  • 日記を書く

@IT

写真 EGセキュアソリューションズ 代表取締役 徳丸浩氏
EGセキュアソリューションズ 代表取締役 徳丸浩氏

 日本PHPユーザ会は2018年12月15日にPHP Conference 2018を開催した。本稿では、EGセキュアソリューションズ 代表取締役 徳丸浩氏の講演「安全なWebアプリケーションの作り方2018」の内容を要約してお伝えする。



【その他の画像】



 徳丸氏は、割賦(かっぷ)販売法の改正や、経済産業省が推奨する「クレジットカード情報の非保持化」を紹介。重大なセキュリティリスクを無視した場合、クレジットカード情報(以下、カード情報)を非保持化するシステムでも、カード情報を盗まれる可能性があると指摘する。



●クレジットカード周りのセキュリティ対策の動向



 徳丸氏は、カード情報に関連する法律の動向として、割賦販売法改正と経済産業省の実行計画を抜粋して紹介。割賦販売法とは、クレジットカードなどによる信用取引に関する法律だ。2018年6月1日に改正され、クレジットカードを取り扱う事業者に対して、カード情報を漏えいさせないための適切な保護が義務付けられた。



 「カード情報保護のため、具体的にセキュリティ対策を義務付ける初の法律だろう。割賦販売法の条文にある『経済産業省令で定める基準』とは、経済産業省の取りまとめによれば、クレジット取引セキュリティ協議会の『実行計画』をセキュリティ対策指針として位置付けている。その実行計画では、『クレジットカード情報の非保持化』を推奨している。従って、カード情報を取り扱う際には、サーバにカード情報を保存させない実装(非保持化)が求められる」



●第三十五条の十六---



 クレジットカード番号等取扱業者(次の各号のいずれかに該当する者をいう。以下同じ。)は、経済産業省令で定める基準に従い、その取り扱うクレジットカード番号等(包括信用購入あつせん業者又は二月払購入あつせんを業とする者(以下「クレジットカード等購入あつせん業者」という。)が、その業務上利用者に付与する第二条第三項第一号の番号、記号その他の符号をいう。以下同じ。)の漏えい、滅失又は毀損の防止その他のクレジットカード番号等の適切な管理のために必要な措置を講じなければならない。



出典:割賦販売法 条文(e-Gov法令検索)



---



●加盟店におけるカード情報の非保持化の推進について---



 本協議会は、加盟店におけるカード情報保護のための第一の対策として非保持化を基本とした取組を推進する。非保持化はPCI DSS 準拠とイコールではないものの、カード情報保護という観点では同等の効果があるものと認められるため、実行計画においては、PCI DSS 準拠に並ぶ措置として整理する。



(中略)



 特に、EC 加盟店の中には、自社サイトにカード情報を含む決済情報等のログが蓄積される等のシステム的課題を認知できていないケースもあることから、これら加盟店に対する注意喚起を行い、さらに、カード情報を保持しないシステム(カード情報非通過型)への移行を強く推奨していくものである。



出典:クレジットカード取引におけるセキュリティ対策の強化に向けた実行計画2018(クレジット取引セキュリティ協議会)



---



 実行計画の指針では、カード情報を保持しない決済方法として、JavaScript型とリダイレクト型の2種類を紹介している。



 JavaScript型は、ECサイトにある入力画面でカード情報などを入力すると、JavaScriptを用いて、決済代行事業者のサーバにカード情報を送信する。送信された情報を基に決済し、その結果をトークン(乱数文字列)でECサイトに返す。これにより、ECサイトサーバにカード情報を保存せず決済する。



 一方、リダイレクト型は、カード番号の入力画面が決済代行事業者側にある方式だ。ECサイトで購入する商品などを決め、決済代行事業者の画面に遷移してカード情報を入力して決済する。



 「リダイレクト型の方が安全なイメージだが、人気がない。その理由は、クレジットカード番号を入力しようとするとドメインや画面のデザインが変わり、不審に思ったユーザーが購入をやめてしまうからだ。ECサイトでは、ユーザーに誤解を招かせないよう、JavaScript型を用いていることが多い」



 徳丸氏は、JavaScriptを用いてカード情報を保存させない非保持化が、「カード情報保護という観点ではPCI DSS準拠と同等の効果があるものと認められる」という実行計画の記述に違和感を持ったという。PCI DSS(Payment Card Industry Data Security Standard)とは、カード会員情報の保護を目的とした国際統一セキュリティ基準のことだ。



参考記事:5分で絶対に分かるPCI DSS



 徳丸氏は、「非保持化を実施するECサイトが安全といえるのか疑問に感じていた」とし、ECサイトで起きたカード情報漏えい事件の中から、2018年10月に判明したタオル専門店「伊織」のネットショップにおけるカード情報漏えい事件のケースを説明する。



 伊織ネットショップでは通常、商品を購入する際に「支払い選択画面」「注文内容確認画面」「カード入力画面」が順に表示される。しかし、不正アクセスによるファイル改ざんで、支払い選択画面の次に、偽のカード入力画面が表示されていたという。結果、偽の画面にカード情報を入力したユーザーのカード情報が外部に漏えいした。



 「伊織ネットショップのケースでは、遷移する一連の購入画面に、別ドメインにある本物と酷似した偽のカード入力画面が追加され、カード情報が漏えいした。サーバにカード情報を記録させない非保持化を進めていても、攻撃者は手法を替えてカード情報を盗む可能性がある」



●偽の決済画面を追加する手口とは



 徳丸氏は「伊織ネットショップの手口がこれかどうかは分からない」と前置きした上で、Webアプリケーションセキュリティの改善活動を行う非営利団体「The Open Web Application Security Project」(OWASP)が発行した「OWASP Top 10 2017」で、Webアプリケーションの重大リスクに挙げられた「安全でないデシリアライゼーション」(CWE-502)を用いる方法を説明する。



 安全でないデシリアライゼーションとは、シリアライズ化(直列化)されたオブジェクトの復元処理(デシリアライズ)における脆弱性のことだ。外部から受け取ったクッキーやセッション変数など任意のオブジェクトを、デシリアライズ関数を用いて復元するようなコードがあった際に、攻撃者が任意のコードを実行できる恐れがある。



 「PHPのようなオブジェクト指向言語では、メモリ内にさまざまなオブジェクトが生成される。複雑なデータ構造をデータベースなどに保存する場合、データ構造はシリアライズ関数(serialize)を用いて直列化し、保存されたデータを復元(unserialize)する。どういったオブジェクト(クラス)が生成されるかは、保存されたシリアライズデータに依存するため、最悪の場合、攻撃者が仕込んだプログラムが実行される恐れがある」



 デモでは、クッキーを受け取る際にデシリアライズするようなECサイトを用意し、「Web経由でサーバコマンドを実行できる『Webshell』を外部からダウンロードする処理」をシリアライズ化してクッキーで送信。クラス実行終了時に呼び出されるデストラクタ関数を介して、その処理を実行させ、WebShellからECサイトサーバ内にあるトランザクションログを出力して、カード情報を盗めることを確認した。



 「WebShellのようなバックドアを追加すれば、Web経由でコマンドを実行してサーバ内のファイルを探索し、カード情報を含む重要な情報を盗むことができる。また、カード情報が保存されていないサーバだとしても、今回説明した手口を利用すれば、攻撃者が所有するドメインにリダイレクトする決済画面を追加できる。また、カード情報を入力すると『エラーです』と表示され、次に本物の決済画面が表示される仕組みにすれば、改ざんしたことを検知されづらいようにもできる」



 徳丸氏は、安全でないデシリアライゼーションの対策方法とまとめを述べて、説明を終えた。



 「PHPを利用するアプリケーションにおける『安全でないデシリアライゼーション』の対策は、外部から受け取るデータをserialize/unserialize関数ではなく、json_encode/json_decode関数で処理することだ。カード情報保護対策の一つに、カード情報を保存させない非保持化があることは確かだが、アプリケーションに脆弱性があれば、カード情報を盗まれてしまう。カード情報の非保持化にも取り組むべきだが、まず、カード情報を盗まれないために、アプリケーションに脆弱性を残さないという基本的なセキュリティ施策が求められるだろう」


    あなたにおすすめ

    ランキングIT・インターネット

    前日のランキングへ

    ニュース設定