FeliCaを偽装してみました その1
まずは、この写真をご覧ください。EdyViewerの残高照会画面のキャプチャです。この写真には通常ありえない現象が写りこんでおります。何かがおかしいのですが・・・わかりますか?業界の人ならわかるはずですが・・・。わからないあなたは似非業界人です。
答えは、残高がおかしいのです。
Edyの最高チャージ額は5万円ですが、1億円になってます!!!
これは、ソフトをクラックしたり、レタッチして表示をいじってるわけではありません。
1億円チャージされたEdyカードの残高情報(の電波波形)を偽装し、読取装置(リーダ・ライタ)に送信し、ソフトを騙しています。残念ながら、実際にチャージできてるわけではありません。
ちなみに金額だけでなく、EdyNoも偽装しています。偽装しているEdyNoは私のカードです。下4桁は消してありますが、同じNoが表示されています。
右、中段にEdyViewerと同じEdyNoが表示されてます。ちなみに、本カードのチャージ金額は0円・・・です。
さて、どうしてこのようなことができるのでしょう。
FeliCaには、暗号領域と非暗号領域が存在しますが、その名が示すとおり、非暗号領域のデータは、カードの中のデータを勝手に読み取ったり、逆に、カードになり済ましてリーダにデータを読み取らせたり(偽造)することができます。
なんと、危険な!!と思われるかもしれませんが、これはFeliCaの脆弱性ではなく、運用負荷を軽くするためにあらかじめ用意された仕組みです。
暗号領域は、電子乗車券や電子マネーに応用できる高度なセキュリティーを備えている一方で、利用までに面倒な手続きが必要だったり(ごめんなさい)、利用費用がかかったり(まあ当然か)、読み取り装置が高価(もっと安くして)であるなどのデメリットもあります。
こうした運用上のデメリットなどを避けるために非暗号領域は存在します。例えば、本人確認を必要としない簡易的な会員証やクーポン券(偽造されてもかまわない)などを運用する仕組みとしては暗号領域は少々オーバースペック気味で、逆に使いづらいといったことになります。そのため、ある程度自由に運用できる仕組みが提供されているわけです。ネットワーク運用におけるグローバルIPとローカルIPの関係に似ています。
IPアドレス同様、運用を考慮し、注意して利用すれば、問題になることはありませんが、第三者に読み取られたり、偽装されたりするリスク、特に偽装されるリスクは十分に考慮するべきです。
巷でよく見かけるのは、FeliCaの製造番号であるIDmを利用した認証システムなどですが、IDmは、Edyの情報よりずっと簡単に偽装することができるため、クリティカルな用途への利用は避けるべきです(ソニーさんのセキュリティーガイドラインにIDmを使うな!と書いているのはこんなことがあるからです)。
FeliCaシステム開発の現場では、非暗号領域のリスクについての話はよく出るのですが、一般の人は、実際に偽装された状態を見たことが無いため、比較的開発費の安く済む非暗号領域を利用した安易な実装になる傾向にあります。そういう意味では、この書き込みが参考になればと思います。
最後に、、、
今回の実験では(私のサイフの中にEdyカードしかなかったため)Edyを利用しましたが、他の電子マネーでも基本的には同じです。なお、偽装に際してはEdyViewer2.Xを利用しましたが、最新のEdyViewer3.Xからは、残高参照処理がオンライン化され、カード認証機能が強化されており、このような偽装はできません。私のような不謹慎な輩に対する対応がしっかりと成されております。
EdyViewer3.Xでは、このように怒られます。
その他、いろいろと面白い?ネタはありますが、それはまた次の機会に。