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を少しだけ補足しました。

Transcript

  1. NFC通信を覗いてみよう 2019.12.14 IoTSecJP#6 Tatsuya Katsuhara

  2. Near Field Communication

  3. お客様の中に、NFCの セキュアエレメントおよび アプリ/アプレット開発者は いらっしゃいませんか?

  4. 今日はその話はしません (私では語りきれません)

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

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

    認可済みではない機器がリーダ/ライタとして振る舞う場合は、 当局に申請するか、とりまシールドボックスに入れましょう。 上記は許認可権を持つオーソリティに承認された解釈ではありません。
  7. とりあえず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
  8. 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
  9. 非接触型ICカード規格と解析ポイント 出所:https://www.slideshare.net/somafire/felicanfcandroid-6538882 主な解析対象。 場合により色々 送ってみる。 例:wireshark, nfcpy, libnfc ありがたいツール 群におまかせ。

    例:SCL3711, Proxmark3
  10. 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)
  11. 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
  12. ツール1:手軽にNFCを感じるためにオススメの機材 • “SCL3711”は万能NFCドングル。 • TypeA, B, Fの全てで少なくとも非暗号化フィールドはRW 可能。 • カードエミューレーション。

    • 2個あるとリレーシナリオも組みやすい。 • $38@Amazon US • 機器自体が総務省認可とっているのが素晴らしい • USからInternational Shippingしても日本で買うより安い • Linuxのlibnfcやnfcpyでも容易に呼び出し可能。 • Pasori記事でよく見かけたPCSC APIは・・・直接使 わなくてもだいたいの事ができるので未調査。
  13. 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
  14. 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
  15. SCL3711 + nfcpyで超簡単にNDEFを読んでみる • nfcpyの公式ドキュメントに書いてあるコードで簡単に。 • https://nfcpy.readthedocs.io/en/latest/topics/get-started.html 簡単にNDEFでメッセージを受信で きた(HEXで分かりにくいですが) AppStoreにある

    “NFC Tools”で Felicaの上にNDEF経由でWrite
  16. NFC通信をプログラムから 制御することは結構簡単

  17. “UID”と聞いてすぐに思いつく攻撃シナリオ 「書き換えれば良くない?」 ぶつかってUID読み取る 背後からUID読み取る UIDを別のカードに書く (複製) スマートロック解錠 人の資料を印刷 ロッカー解錠 カードをシミュレートして

    総当りでUID当てにいく
  18. UIDって書き換えられないよね? UID is modifiable! • Read-OnlyなUID領域書き換え可能な Tag/カードが存在する。 • 調達は容易。 •

    しかも安い。
  19. 識別子の一致チェックをするだけのものも多い • 以下のような機器はだいたいUID/IDm「しか」みていない。 • かざすだけで登録/専用アプリなし≒利便性最優先と割り切ってリスク許容済み • セキュアエレメントを利用するような決済端末は次元の異なる高セキュリティを実現済み • 物理セキュリティ(監視カメラなど)との組み合わせが抑止力。 •

    本当に守りたいものは、セキュアエレメント利用や鍵情報との照合は必須。 • UID/IDmの長さに対して「対象に『かざす』ことで権限を得る人」が多い環境では、 ブルートフォース対策はしても良さそう。 • スキミング防止ケースも効果はあるが利便性が下がるので誰もやらない。
  20. • “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へ移行。
  21. 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
  22. 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 (省略!)
  23. ツール2:Proxmark3 • 総務省認可はないはず(送信する側に回 るときはシールドボックスへ) • NFC通信のsnoopログ取得(受信のみ) • NFC機器のエミュレーション(送受信) • RVD4が最新(写真はRVD2)

    • 最新ファームウェアでは、 RVD4だけに機能追加があったり • 今買うならRVD4オススメ • Mifare Classic解析機能 https://lab401.com/products/proxmark-3-rdv4
  24. 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
  25. 例えばデフォルト鍵探索 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.. 割と普通の用途のカードを読んだ場合 中華製カードを読んだ場合
  26. 鍵の解析フローチャート 以下を元に書き直し。 出所: 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 (省略!)
  27. 例えば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つだけ鍵がわかっている状態からスタート 不明部分の鍵を特定
  28. 鍵の解析フローチャート 以下を元に書き直し。 出所: 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 (省略!)
  29. ユースケースを鑑みて、必要ならば 利用するカード/Tagの移行もありうるかも。 (そもそも鍵を使っていなければ関係ないし、 現実的には許容可能なケースも多そう)

  30. 更にProxmark3はデバッグにも使える 素敵機能:スヌープログ • 例えば、iOS13.3で対応したiPhoneのSafariで、 WebAuthn/FIDO2を利用してgithubにログインするとき、Google TitanSecurity KeyとiPhoneのNFC通信ログが取得できる(誰得) NFC (APDU/CTAP2) WebAuthn

    FIDO2 Google TitanSecurity Key
  31. スヌープログからpcap作って解析もできる • WireSharkは何でも対応しているのですごい。 • Proxmark3でダンプしたトレースファイルに対し、ISO14443 でカプセル化した状態に加工する。 • text2pcapをかけてpcap化するとISO7816(APDU)が見える。 単発の「要求/応答」で終わらず、 複雑なアプリシーケンスがAPDUの上に乗ることもある。

  32. APDUを送信したくなるが、、、 SCL3711+nfcpyでカードやリーダ・ライタに送信するのも簡単 無線部分をほとんど意識せずにAPDU メッセージの送受信できる

  33. NFCがアタックサーフェスとして 悪用される可能性を看過すべきではない。 とはいえ、重要な用途では、恐らく徹底的に脅威分析して対策・ 検証するなど大変な手間と時間かけて堅牢化済みなはず

  34. セキュアエレメント実現手法が多様化し、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通信の セキュリティを確 保するようになる
  35. 例:NFCを利用したDigital Keyサービス https://tnc.network/hyundai-digital-key-fact-sheet/ NFC Controller HCE(Host Card Emulation) アプリケーションメッセージ セキュア通信チャネル

    over NFC Cloud HSM SE alternatives Traditional SE サービス/API
  36. 参考: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も含めて業界全体で世 界観を標準化する方へ向かう、、、 のか? (どうなる)
  37. まとめ • “UID”を見るだけの仕組みは世の中に溢れている。 • NFC通信の解析やエミュレーションの難易度が下がりつつあり、攻撃機会が増えるかも。 • 鍵を使っていたとしても、Mifare Classicのような脆弱な実装もまだま だ残っている。 •

    既知脆弱性のない方式に入れ替えていく and/or 他の物理セキュリティとセットで考える。 • NFCは思ったよりも簡単に読み書きできる≒攻撃者も悪用するかも • AndroidのHCEやlibnfc/nfcpyで、土管としてNFC通信を使うことができる。 • もはや看過できないアタックサーフェス。手間と時間をかけて対応している人たちは既にいる。 • 今後は、SEにアプリを作り込まずに、APDU上に独自プロトコルを載せ ることが増えるかも≒設計/実装不備による脆弱性の懸念 • セキュア通信チャネル over NFCとか。 • 「デジタル鍵」の向かう方向が一部で示されているが、そうなるかははっきりしていない。 https://tnc.network/hyundai-digital-key-fact-sheet/
  38. おまけ: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/
  39. Bricked!? • ファームウェア更新の最中の再起動で認識されるデバイス 名が変わるようなことがある。 • ”/dev/ttyACM0”が”/dev/ttyACM1”に変わったりと不安定。 • 仮想マシン側にUSB接続してた影響かもしれない。 • ttyACM0へのブートローダーの書込み途中にUSB瞬断で

    ttyACM1に変わってしまい書込み失敗、文鎮化。 • 聞くところによると日本では最低2名は文鎮化させてし まった模様。他にも犠牲者は増える可能性がある。
  40. 諦めないで! • 不幸にも文鎮化したらJTAGでROM焼き直し。 • JTAG用の更新手順はある。JTAG用のイメージも前述の LAB401のFW配布パッケージに同梱されている。 • https://github.com/Proxmark/proxmark3/wiki/flashing #jtag-recovery-procedure ピンヘッダつける

    FlasherARM + J-Link Commanderを使い ARMのJTAG経由でFW書込み 生き返った! ※Buspirate+OpenOCDなど他の ICEで代替できるか未検証
  41. Enjoy your NFC hackingdebugging life!

  42. ありがとうございました ご指摘、ご感想があればお気軽にご連絡ください kthrtty@gmail.com https://www.flickr.com/photos/alexristea/5636821732/