Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NFC通信を覗いてみよう @ IoTSecJP#6

NFC通信を覗いてみよう @ IoTSecJP#6

IoTSecJP#6で話したときのスライドです。
NFCについて、libnfc/nfcpyなどによるSCL3711を用いた容易なアクセスや、
カード識別子(UID)しか確認しない実装があるよねという話、
Mifare Classicの既知脆弱性の紹介、
Proxmark3を用いたWebAuthn/FIDO2のAPDU(CTAP2)の話などを織り交ぜて
紹介します。
転じてNFCのデジタルキーの方向性の予想や、CCC(Car Connectivity Consortium)のデジタルキー1.0を少しだけ補足しました。

More Decks by 勝原達也(Tatsuya Katsuhara)

Other Decks in Technology

Transcript

  1. 勝原 達也/Tatsuya Katsuhara https://www.linkedin.com/in/kthrtty • 自動車セキュリティ(いま) • マネージャ業と車両セキュリティ評価 • 情報セキュリティ(すこし前)

    • IoTセキュリティ • Web/プラットフォーム脆弱性診断 • SIer(けっこう前) • デジタル・アイデンティティ • OIDC/OAuthな認証/API Platform構築 • 24/365のアプリ・インフラ障害対応
  2. おことわり • NFCは技適ではなく、総務省の高周波利用設備における「誘導 式読み書き通信設備」に該当する認識。 • リーダ/ライタは機器について明示的に認可が必要。 • パッシブなタグ(独立した電源を持たず電磁誘導でのみ駆動) は申請済みのものは存在しないように思われる。 •

    認可済みではない機器がリーダ/ライタとして振る舞う場合は、 当局に申請するか、とりまシールドボックスに入れましょう。 上記は許認可権を持つオーソリティに承認された解釈ではありません。
  3. とりあえずSONYの人のスライドみておけばオケ • 通信速度 212-424kbps • 搬送波 13.56MHz • ※125kHzのRFIDもあるが •

    電源 • カード:電源なし(電磁誘導) • リーダ/ライタ:電源あり(搬送波出す) • Global Interoperability • 正式なNFCでは、R/Wモードで TypeA/Bに加えてFelica(TypeF)も読み 書き出来なければならない。 • Form Factor Free • 形は自由自在 出所:https://www.slideshare.net/somafire/felicanfcandroid-6538882
  4. NFCの3モード • R/W Mode • R/W(電力あり&搬送波送出) • 相手はカード • スマホがカードを読み書きする場合もこの

    モード • Card Emulation • カード(電力なし&搬送波を受けてイベント駆 動) • スマホがカードのフリをする場合のモード • Peer-to-Peer • 双方向通信 • 他のプロトコルをバインドする • Bluetooth Secure Simple Pairing Using NFC • Android Beam(Q後は廃止。) R/W Mode Peer-to-Peer Mode Card or Card Emulation アプリケーション例 決済、交通、 Handover、SmartPoster、ID認証etc 相手 自分 出所:https://www.slideshare.net/somafire/felicanfcandroid-6538882
  5. NFC Stackをもう少し(Wikipedia) 物理特性 (part1) 無線 (part2) 衝突検知 (part3) 通信プロトコル (part4)

    アプリケーション データ表現 アプリケーション プロトコル 実装 独自プロトコル “Reader/Writer mode” or “Card Emulation mode” Peer-to-Peer 端子付きICカード、スマー トカードとの互換性のため、 セキュリティ規格を参照 公開されているコマンドでは 暗号化を扱えないため”non secure”と表記。契約必要! NDEF 自由度の高いNFC横断 のメッセージのハコ 標準スタック+APDUで任意 アプリを上位に載せられる MIFARE Classic(Standard/Ultralight)
  6. ISOは有料なのにJISは無料、そして・・・ • JIS X 6322シリーズ(ISO/IEC 14443シリーズに対応) • http://kikakurui.com/x6/X6322-3-2011-01.html (初期化と衝突防止) •

    http://kikakurui.com/x6/X6322-4-2011-01.html (伝送プロトコル) • ISO/IEC 7816-4およびJIS X6320-4(スマートカードセキュリティ) • http://kikakurui.com/x6/X6320-4-2009-01.html • Proxmark3のforkされたファームウェア開発者”iceman”のサイト • http://www.icedev.se/pm3docs.aspx
  7. ツール1:手軽にNFCを感じるためにオススメの機材 • “SCL3711”は万能NFCドングル。 • TypeA, B, Fの全てで少なくとも非暗号化フィールドはRW 可能。 • カードエミューレーション。

    • 2個あるとリレーシナリオも組みやすい。 • $38@Amazon US • 機器自体が総務省認可とっているのが素晴らしい • USからInternational Shippingしても日本で買うより安い • Linuxのlibnfcやnfcpyでも容易に呼び出し可能。 • Pasori記事でよく見かけたPCSC APIは・・・直接使 わなくてもだいたいの事ができるので未調査。
  8. SCL3711 + libnfcで超簡単にUIDを読んでみる 1 ISO14443A passive target(s) found: ISO/IEC 14443A

    (106 kbps) target: ATQA (SENS_RES): 00 04 UID (NFCID1): de ad be ef 1 Felica (212 kbps) passive target(s) found: FeliCa (212 kbps) target: ID (NFCID2): de ad be ef de ad be ef 1 Felica (424 kbps) passive target(s) found: FeliCa (424 kbps) target: ID (NFCID2): de ad be ef de ad be ef 1 ISO14443B passive target(s) found: ISO/IEC 14443-4B (106 kbps) target: PUPI: de ad be ef 某社の社員証(TypeA) iPhoneのモバイルSuica(Felica) 免許証(TypeB) パスモ物理カード(Felica) /# apt install libnfc5 libnfc-bin libnfc-examples /# apt install pcscd libpcsclite1 pcsc-tools /# modprobe -r pn533_usb pn533 /# nfc-scan-device -v nfc-scan-device uses libnfc 1.7.1 1 NFC device(s) found: - SCM Micro / SCL3711-NFC&RW: pn53x_usb:002:010 chip: PN533 v2.7 initator mode modulations: ISO/IEC 14443A (106 kbps), FeliCa (424 kbps, 212 kbps), ISO/IEC 14443-4B (847 kbps, 424 kbps, 212 kbps, 106 kbps), Innovision Jewel (106 kbps), D.E.P. (424 kbps, 212 kbps, 106 kbps) target mode modulations: ISO/IEC 14443A (106 kbps), FeliCa (424 kbps, 212 kbps), D.E.P. (424 kbps, 212 kbps, 106 kbps) /# nfc-list nfc-list uses libnfc 1.7.1 NFC device: SCM Micro / SCL3711-NFC&RW opened
  9. SCL3711 + nfcpyで超簡単にUIDを読んでみる • かざしている間だけFelicaのUID=IDmが出力されるだけだが、 とにかく簡単。 import nfc import binascii

    suica=nfc.clf.RemoteTarget("212F") suica.sensf_req=bytearray.fromhex("0000030000") while True: with nfc.ContactlessFrontend("usb:003") as clf: target=clf.sense(suica,iterations=3,interval=1.0) while target: tag=nfc.tag.activate(clf,target) tag.sys=3 idm=binascii.hexlify(tag.idm) print(idm.decode()) break
  10. 識別子の一致チェックをするだけのものも多い • 以下のような機器はだいたいUID/IDm「しか」みていない。 • かざすだけで登録/専用アプリなし≒利便性最優先と割り切ってリスク許容済み • セキュアエレメントを利用するような決済端末は次元の異なる高セキュリティを実現済み • 物理セキュリティ(監視カメラなど)との組み合わせが抑止力。 •

    本当に守りたいものは、セキュアエレメント利用や鍵情報との照合は必須。 • UID/IDmの長さに対して「対象に『かざす』ことで権限を得る人」が多い環境では、 ブルートフォース対策はしても良さそう。 • スキミング防止ケースも効果はあるが利便性が下がるので誰もやらない。
  11. • “Hacking Mifare ClassicCards” • https://www.blackhat.com/docs/sp-14/materials/arsenal/sp-14-Almeida-Hacking-MIFARE-Classic-Cards-Slides.pdf • Blackhat2014のスライド。 • “A

    2018 practical guide to hacking NFC/RFID” • https://smartlockpicking.com/slides/Confidence_A_2018_Practical_Guide_To_Hacking_RFID_NFC.pdf • 濃密な資料であり、今回のスライドはほとんど上に書いてあること。 UIDだけではなく、鍵を利用していれば大丈夫なの? ~Mifare Classicの場合~ 当初世界で最も流通していたMifare Classicには、 過去の研究で様々な脆弱性が発見された。 脆弱性への対策をしたMifare Plus/DESfireへ移行。
  12. Mifire Classic構造のイントロ • セクタ:16バイト4ブロック • セクタごとに鍵A/Bがあり、R/Wな どアクセス権に割り当て • ブロック番号はセクタ間で通番 •

    ブロック0はUIDが書き込まれてお り、通常リードオンリー ※UID Modifiableなタグ除く 出所: https://smartlockpicking.com/slides/Confidence_A_2018_P ractical_Guide_To_Hacking_RFID_NFC.pdf
  13. Mifare Classicは鍵が1つでも分かると脆弱 以下を元に書き直し。 出所: https://smartlockpicking.com/slides/Confidence_A_2018_Practical_Guide_To_Hacking_RFID_NFC.pdf デフォルトキーで検 索する 全鍵を特 定? ゴール

    Y N 1つは 特定? Hardnested攻撃 (数分) Y Nested攻撃 (数秒) N CardReader Attack (リーダへの攻撃) DarkSide Attack (数秒) 1つの鍵を特定 Hardened版 通常版 残りの 鍵を特 定 Hardened版 通常版 ツール3: Cameleon Mini RevE (省略!)
  14. ツール2:Proxmark3 • 総務省認可はないはず(送信する側に回 るときはシールドボックスへ) • NFC通信のsnoopログ取得(受信のみ) • NFC機器のエミュレーション(送受信) • RVD4が最新(写真はRVD2)

    • 最新ファームウェアでは、 RVD4だけに機能追加があったり • 今買うならRVD4オススメ • Mifare Classic解析機能 https://lab401.com/products/proxmark-3-rdv4
  15. Proxmark3で何ができるの? • 主に • 機能1:R/Wとカードの間のNFC通信「スヌープログ」取得 • 機能2:R/Wやカードのエミュレーション(NFCタグ書込み含む) • 機能3:Mifare Classicなど既知脆弱性があるNFCタグ解析

    • Command Cheet Sheet • https://github.com/RfidResearchGroup/proxmark3/blob/master /doc/cheatsheet.md • Proxymark3 Cheet Sheet • https://scund00r.com/all/rfid/2018/06/05/proxmark- cheatsheet.html
  16. 例えばデフォルト鍵探索 proxmark3> hf mf … (中略) |---|----------------|----------------| |sec|key A |key

    B | |---|----------------|----------------| |000| a0a1a2a3a4a5 | ? | |001| ? | ? | |002| ? | ? | |003| ? | b0b1b2b3b4b5 | |004| a0a1a2a3a4a5 | b0b1b2b3b4b5 | |005| a0a1a2a3a4a5 | b0b1b2b3b4b5 | (中略) |014| a0a1a2a3a4a5 | b0b1b2b3b4b5 | |015| a0a1a2a3a4a5 | b0b1b2b3b4b5 | |---|----------------|----------------| 知られている(漏れた)デ フォルト鍵群の探索だけ で普通に引っかかる。 |---|----------------|----------------| |sec|key A |key B | |---|----------------|----------------| |000| ffffffffffff | ffffffffffff | (中略) |015| ffffffffffff | ffffffffffff | |---|----------------|----------------| ちなみに、UID Modifiableな中華 製カードだと全セクタ0xff.. 割と普通の用途のカードを読んだ場合 中華製カードを読んだ場合
  17. 鍵の解析フローチャート 以下を元に書き直し。 出所: https://smartlockpicking.com/slides/Confidence_A_2018_Practical_Guide_To_Hacking_RFID_NFC.pdf デフォルトキーで検 索する 全鍵を特 定? ゴール Y

    N 1つは 特定? Hardnested攻撃 (数分) Y Nested攻撃 (数秒) N CardReader Attack (リーダへの攻撃) DarkSide Attack (数秒) 1つの鍵を特定 Hardened版 通常版 残りの 鍵を特 定 Hardened版 通常版 ツール3: Cameleon Mini RevE (省略!)
  18. 例えばHardnestedアタック proxmark3> hf mf … --target block no: 0, target

    key type:B, known target key: 0x000000000000 (not set), file action: write, Slow: No, Tests: 0 Using AVX2 SIMD core. time | #nonces | Activity | expected to brute force | | | #states | time ------------------------------------------------------------------------------------------------------ 0 | 0 | Start using 4 threads and AVX2 SIMD core | | 0 | 0 | Brute force benchmark: 804 million (2^29.6) keys/s | 140737488355328 | 2d 1 | 0 | Using 235 precalculated bitflip state tables | 140737488355328 | 2d 3 | 0 | Writing acquired nonces to binary file nonces.bin | 140737488355328 | 2d 4 | 112 | Apply bit flip properties | 107608563712 | 2min 5 | 223 | Apply bit flip properties | 5523137536 | 7s 6 | 333 | Apply bit flip properties | 2816809728 | 4s 7 | 445 | Apply bit flip properties | 1897010688 | 2s 8 | 556 | Apply bit flip properties | 1897010688 | 2s 9 | 668 | Apply bit flip properties | 1683357824 | 2s 9 | 778 | Apply bit flip properties | 1512586368 | 2s 10 | 887 | Apply bit flip properties | 1364387456 | 2s 10 | 998 | Apply bit flip properties | 1364387456 | 2s 11 | 1107 | Apply bit flip properties | 1364387456 | 2s 12 | 1217 | Apply bit flip properties | 1364387456 | 2s 14 | 1328 | Apply Sum property. Sum(a0) = 136 | 17133936 | 0s 14 | 1328 | Starting brute force... | 17133936 | 0s 14 | 1328 | Brute force phase completed. Key found: deadbeefdead | 0 | 0s 1つだけ鍵がわかっている状態からスタート 不明部分の鍵を特定
  19. 鍵の解析フローチャート 以下を元に書き直し。 出所: https://smartlockpicking.com/slides/Confidence_A_2018_Practical_Guide_To_Hacking_RFID_NFC.pdf デフォルトキーで検 索する 全鍵を特 定? ゴール Y

    N 1つは 特定? Hardnested攻撃 (数分) Y Nested攻撃 (数秒) N CardReader Attack (リーダへの攻撃) DarkSide Attack (数秒) 1つの鍵を特定 Hardened版 通常版 残りの 鍵を特 定 Hardened版 通常版 ツール3: Cameleon Mini RevE (省略!)
  20. セキュアエレメント実現手法が多様化し、NFCは土管化が進む? 出所: https://developer.android.com/guide/topics/conn ectivity/nfc/hce.html#HceServices • APDUやNDEFには任意データを詰め込む ことができる。 • AndroidのHCE(Host Card

    Emulation) により、上位レイヤにアプリを載せやす くなってきた。iPhoneもAPI公開が進む。 • 従来はSEにOS・アプリ・アプレットを搭載 (例:SIM、おサイフケータイ) • これからはHCEを利用するアプリが KeyStore/TrustZoneなどの代替手段を用い て自らセキュア通信を確保する機会が増える =設計/実装不備が増えるかも SE内にアプリを作 り込み ホストで動作する アプリケーション 自体がNFC通信の セキュリティを確 保するようになる
  21. 参考:Car Connectivity Consorsium(CCC) Digital Key Release 1.0では明らかにSEも含めて標準化を狙う USE CASES •

    Unlock the Vehicle – Smart device in vehicle’s proximity • Lock the Vehicle • Start the Engine – Smart device within a vehicle • User Authentication • Digital Key Provisioning • Digital Key Revocation • Selling the Vehicle • Digital Key Sharing – Remote & Peer-to-Peer • Digital Key Properties – Restricting (shared) key usage 出所:https://carconnectivity.org/wp-content/uploads/CCC-Digital-Key-White-Paper.pdf Secure Elementも含めて業界全体で世 界観を標準化する方へ向かう、、、 のか? (どうなる)
  22. まとめ • “UID”を見るだけの仕組みは世の中に溢れている。 • NFC通信の解析やエミュレーションの難易度が下がりつつあり、攻撃機会が増えるかも。 • 鍵を使っていたとしても、Mifare Classicのような脆弱な実装もまだま だ残っている。 •

    既知脆弱性のない方式に入れ替えていく and/or 他の物理セキュリティとセットで考える。 • NFCは思ったよりも簡単に読み書きできる≒攻撃者も悪用するかも • AndroidのHCEやlibnfc/nfcpyで、土管としてNFC通信を使うことができる。 • もはや看過できないアタックサーフェス。手間と時間をかけて対応している人たちは既にいる。 • 今後は、SEにアプリを作り込まずに、APDU上に独自プロトコルを載せ ることが増えるかも≒設計/実装不備による脆弱性の懸念 • セキュア通信チャネル over NFCとか。 • 「デジタル鍵」の向かう方向が一部で示されているが、そうなるかははっきりしていない。 https://tnc.network/hyundai-digital-key-fact-sheet/
  23. おまけ:Proxmark3のファームウェア更新 • 機能が増えていたりするのでファームウェア更新は有用。 • 特にRDV4は活発に新機能(新コマンド)が導入されている。 • ビルドしてイメージ作ってLinuxから更新 • https://github.com/Proxmark/proxmark3/wiki/flashing •

    LAB401のチュートリアルではWindowsからも更新可能 • https://lab401.com/blogs/academy/proxmark-3-using-custom- firmware • LAB401でビルド済みFW配布中 • https://lab401.com/proxmark/drivers/win32/iceman/latest/