土曜日, 12月 26, 2015

クレジットカードは安全?

以外と知らないクレジットカードの仕組み

 

クレジットカードをハッキングする「MagSpoof」って?



2015年11月末ごろ、クレジットカードのセキュリティに関するちょっとした話題があったので紹介する。

数々の騒動を起こした一方で、各種サービスや製品の脆弱性の発見など、ハッキングやセキュリティ関連の研究で知られるSamy Kamkar氏が11月24日、「MagSpoof」というデバイスを開発したとその概要を公表したのだ。 MagSpoofは10ドル程度の部品で組み立て可能なコイン大の装置で、クレジットカードの磁気情報を本体に記録し、磁気データを無線信号で送り出すことで、あたかも読み取り機にカードの磁気部分を通したかのように読み取らせることができる。Samsung Pay(Loop Pay)の「MST(Magnetic Secure Transmission)」を小型装置で実現したものだと考えてもらえばいいだろう。この装置の便利なところは、複数のクレジットカードを1つの小型デバイスに格納してしまえるため、持ち運びが楽な点だ。






このMagSpoofだけでも十分にすごいのだが、Kamkar氏の説明ページ後半には「Security Issues」、「American Express Card Number Prediction」という問題提起がなされており、実はこの部分が話のキモになっている。改めて検証は必要だが、とりあえず同氏の説明を少しわかりやすく解説するので、その真偽は各人が判断してほしい。

 

意外と知らないクレジットカードの仕組み


クレジットカードには「クレジットカード番号」、「有効期限」、「名前」が記されている。カードを裏返すと(もしくはカード番号の横)、そこに「認証番号(CVV/CVS/CID)」があることが確認できるだろう。これら主に4つが"カードで目視可能"な構成要素だ。これら情報を基にカード利用者を識別し、"利用者本人かどうかを確認しつつ"決済を行っている。



クレジットカードの各部名称

 




クレジットカード番号は最大19桁までの数字の列である「PAN(Primary Account Number)」で成り立っているが、一般にはJCB、MasterCard、Visaのようなメジャーなカードブランドでは16桁、American Expressでは15桁となっている(カードブランドによっては13桁や14桁のこともある)。このうち、最初の6桁は「IIN(Issuer Identification Number)」と呼ばれ、あらかじめ業界やカードブランドによって利用可能な番号が決まっている(ISO/IEC 7812で規定される)。例えば、最初が「4」で始まる番号は「Visa」、「5」で始まる番号は「MasterCard」といった具合だ。なお、MasterCardに予約されているのは2桁目の数字が「1~5」(つまり51~55)で、5で始まる残りの数字は「Maestro」向けのものだ。American Expressでは「34」または「37」で予約されており、たまにオンラインサイトでのカード番号入力の場面でカードブランドが自動選択されるのは、こうしたIINの予約番号で自動判別しているからだ。

PAN全体の13~19桁の番号のうち、最初の6桁を除いた残りが「個別の利用者番号」と「チェック・ディジット(パリティ)」となる。チェック・ディジットはLuhnアルゴリズムで一意に決定されるPAN全体のチェックサムで、1桁の数字で表される。PANの桁数によって異なるが、利用者個人に割り当てられる個別の番号は最大12桁となる。

ケースバイケースだが、たいていのオンライン決済では「クレジットカード番号」「有効期限」「名前」に加え、「認証番号(CVV/CVS/CID)」を入力すれば処理が完了するだろう(住所や連絡先を求められることもあるが......)。基本的には、決済時に相手に渡す必要がある情報がこの組み合わせとなる。これは"対面取引"といわれる店頭での決済でも同様で、クレジットカードを磁気部分を読み取り機に通す場合にも同じ情報がカードを処理するネットワークに対して送信されている。

つまり、磁気部分にはこれら情報が記載されているわけだが、カード裏面等に記載されている「認証番号(CVV/CVS/CID)」だけは記録されていない。そのため、仮に「スキミング」と呼ばれる行為で磁気データを丸ごとコピーされても、そのままではオンライン決済には利用できないという仕掛けだ。

一方で、カード裏面記載の番号とは別の「認証番号(CVV/CVS/CID)」が磁気部分には記録されており、一種のカードの整合性チェックとなっている。仮に磁気データの丸ごとコピーではなく、カードのエンボス等に記載されたPANや有効期限をメモしておいて、それを基に自身で磁気カードを起こしたとしても、このチェックで弾かれる。磁気情報で記録されている側を「CVV/CVS/CID」、カード裏面に記載されている側を「CVV2/CVS2/CID2」などと呼ぶこともある。

 

 

磁気データとMagSpoof

 

さて、本題はここからだ。実際にこの磁気部分にはどのように情報が記録されているのだろうか。Kamkar氏が自身のクレジットカードを酸化鉄の粉末をまぶして図説しているが、記録データは完全に2進数の世界だ。クレジットカードなどで利用される磁気カードの記録方式はISO/IEC 7813で定められており、「Track 1」、「Track 2」、「Track 3」の3種類がある。Track 3は実質的に使われていないため、「Track 1」または「Track 2」が一般だ。MagSpoof自体は3種類ともサポートしているという。

Track 1はアルファベットも利用可能な方式で、一方のTrack 2は0~9までの10の数字と「:」「;」「<」「=」「>」「?」の6種類の記号しかサポートしてない(これはASCIIコードの 0x30~0x3Fまでの並びに準拠している)。10+6=16で、つまり16進法表記だ。Track 2は、2進数でいえば1文字の表現に4ビットを必要としている。Track 1とTrack 2を比較した場合、一般にTrack 2のほうが記録密度が低く、記録ビットの有無である「0」と「1」の磁気情報が広い間隔で存在しているため、判別しやすくなっている。このように磁気情報を読んでいくと、Kamkar氏のサンプルでいえば「;42668413......」とPANの上8桁の数字が出現する。「;」はTrack 2における開始記号で、記録データは必ず「;」からスタートする。注意点としては、読み取り方向から順番に「下位ビット 上位ビット」と数字が並んでいるため、下の画像では一般的な数字の並びとは反転していることに気を付けてほしい。


酸化鉄粉末でクレジットカードの磁気部分を浮き上がらせたところ。2進数のビットの有無で記録情報が解読できるようになっている(Samy Kamkar氏のサイトより引用)






Track 2における文字列の並びは下記のようになる。

----
「;」+「PAN」+「=」+「有効期限(YYMM)」+「サービスコード(3桁)」+「認証番号(CVV/CVS/CIDなど)」+「?」+「LRC(Longitudinal Redundancy Check、チェックサムの一種)」
----

お気付きかもしれないが、Track 2では名前が記録されておらず、「PAN」+「有効期限(YYMM)」+「認証番号(CVV/CVS/CID)」の3種類の組み合わせのみで利用者を判別している。これはアルファベットが仕様上記録できないためとみられる。

MagSpoofでは、この磁気情報の並びを記憶しつつ、磁気カード読み取り機に近付けることでアンテナが反応して適切な順番で磁気情報を吐き出す。これを読み取り機が認識して、実際に"カードが通された"と判断して処理を行う。

「Coin」という、1枚のクレジットカード型装置に複数のカードを記録し、適時切り替えて利用できるという製品がある。Coinにカード情報を記録する際には、ペアリングしているスマートフォンに専用の"ドングル"を挿して磁気カード情報を読み取らせ、それを転送する形で利用する。MagSpoofに記録されたカード情報を、スマートフォンに挿したドングルに読み取らせてCoinに転送し、Coinに転送されたカード情報を使って決済を行うというデモも、Kamkar氏は紹介している。

 

 

クレジットカードのICチップを無効化する

 

ただ同氏によれば、Coinには1つ難点があるという。例えば、ICチップ付きクレジットカード(EMV)をCoinで読み取らせると、カード決済時にCoinを磁気カード読み取り機に通してもレジで受け付けてもらえず、ICチップが付いたカードをEMV対応の読み取り機に挿入し、4桁数字のPINを入力してICチップのロックを解除してやる必要がある。これは、発行されたカードがICチップ対応であり、特定の条件下(例えばレジがEMV対応の場合)で磁気情報ではなくICチップでの決済を要求するためだ。

そこでKamkar氏が注目したのが、Track 2の情報に含まれる「サービスコード」の部分だ。サービスコードは3桁の数字で表現され、その組み合わせでカード(あるいはレジにおける決済)の挙動を決定している。カードが国外で利用できるのか、あるいは特定の条件下でのみ利用可能なのか、さらに決済時にPINコードを要求するのかも含め、情報が記載されている。


 

サービスコード(3桁数字)の内訳(Samy Kamkar氏のサイトより引用)

 





前述のICチップ利用の強制もサービスコードのパラメータで決定されており、設定しだいで「無効化」して、磁気カード決済も可能になるという。実はMagSpoofの本当のキモはここで、この設定を無効化してICチップ付きクレジットカードであってもMagSpoofですべて代替できてしまうのだという。本来はカード側の設定変更だけで対応できたり、あるいは改ざんが可能という点が問題なのだが、もしKamkar氏のいうように回避可能なのならば、ここがセキュリティ上の最初の問題となる。

 

 

American Expressの再発行/更新のカード番号を予測する

 

同氏がもう1つ問題提起しているのが、「カード番号予測」だ。紛失や盗難時に、クレジットカードを停止して再発行を依頼したことがある人は少なくないだろう。カード会社はすぐに再発行したカードを郵送してくるが、同氏は再発行されたカードの番号が以前の番号とそれほど差がないことから、何か法則性があるではないかと考え、過去にAmerican Expressで自身が発行してもらったカードと比較しつつ、さらにそれ以外の20以上のAmerican Expressのカードもサンプルにしたところ、具体的に次に届くカード番号を予測するパターンを発見したのだという。

もし元のカード番号が盗まれたり紛失したものだったとしても、(15桁の)番号が完全にわかっている状態であれば再発行番号が予測可能であるため、大きなリスクになるという。前述のように、クレジットカードの利用にはカード番号(PAN)以外に、「有効期限(YYMM)」と「認証番号(CVV/CVS/CID)」が必要だ。前者については法則性があるため、再発行を依頼した時点で次の有効期限を予測するのは問題ないという。

問題は後者だが、実は再発行されたカードでもこの番号は変化していないため、PAN予想アルゴリズムと元の番号、そして発行タイミングさえわかれば、悪意のある第三者がカードを不正利用し続けることが可能だとしている。なお、認証番号についてはKamkar氏の記事中ではCard Security Code(CSC:カードセキュリティコード)と記載されている。

磁気タイプのカード作成に必要な情報がすべてわかっているため、偽造カードの作成も可能だ。こうした理由からアルゴリズムの内容については公開せず、American Expressへの問題提起にとどめているとの文章で説明が締められている。

なお、同氏が参考とした資料の一覧や、MagSpoof作成に必要な回路図やソフトウェア情報はすべて公開されており、実力さえあれば誰でも作成することは可能だろう。カード自体の脆弱性の実際については継続的なウォッチが必要だが、何かの機会が改めてフォローしたい。