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. NFC通信を覗いてみよう
    2019.12.14 IoTSecJP#6
    Tatsuya Katsuhara

    View Slide

  2. Near Field Communication

    View Slide

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

    View Slide

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

    View Slide

  5. 勝原 達也/Tatsuya Katsuhara
    https://www.linkedin.com/in/kthrtty
    • 自動車セキュリティ(いま)
    • マネージャ業と車両セキュリティ評価
    • 情報セキュリティ(すこし前)
    • IoTセキュリティ
    • Web/プラットフォーム脆弱性診断
    • SIer(けっこう前)
    • デジタル・アイデンティティ
    • OIDC/OAuthな認証/API Platform構築
    • 24/365のアプリ・インフラ障害対応

    View Slide

  6. おことわり
    • NFCは技適ではなく、総務省の高周波利用設備における「誘導
    式読み書き通信設備」に該当する認識。
    • リーダ/ライタは機器について明示的に認可が必要。
    • パッシブなタグ(独立した電源を持たず電磁誘導でのみ駆動)
    は申請済みのものは存在しないように思われる。
    • 認可済みではない機器がリーダ/ライタとして振る舞う場合は、
    当局に申請するか、とりまシールドボックスに入れましょう。
    上記は許認可権を持つオーソリティに承認された解釈ではありません。

    View Slide

  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

    View Slide

  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

    View Slide

  9. 非接触型ICカード規格と解析ポイント
    出所:https://www.slideshare.net/somafire/felicanfcandroid-6538882
    主な解析対象。
    場合により色々
    送ってみる。
    例:wireshark,
    nfcpy, libnfc
    ありがたいツール
    群におまかせ。
    例:SCL3711,
    Proxmark3

    View Slide

  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)

    View Slide

  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

    View Slide

  12. ツール1:手軽にNFCを感じるためにオススメの機材
    • “SCL3711”は万能NFCドングル。
    • TypeA, B, Fの全てで少なくとも非暗号化フィールドはRW
    可能。
    • カードエミューレーション。
    • 2個あるとリレーシナリオも組みやすい。
    [email protected] US
    • 機器自体が総務省認可とっているのが素晴らしい
    • USからInternational Shippingしても日本で買うより安い
    • Linuxのlibnfcやnfcpyでも容易に呼び出し可能。
    • Pasori記事でよく見かけたPCSC APIは・・・直接使
    わなくてもだいたいの事ができるので未調査。

    View Slide

  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

    View Slide

  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

    View Slide

  15. SCL3711 + nfcpyで超簡単にNDEFを読んでみる
    • nfcpyの公式ドキュメントに書いてあるコードで簡単に。
    • https://nfcpy.readthedocs.io/en/latest/topics/get-started.html
    簡単にNDEFでメッセージを受信で
    きた(HEXで分かりにくいですが) AppStoreにある “NFC Tools”で
    Felicaの上にNDEF経由でWrite

    View Slide

  16. NFC通信をプログラムから
    制御することは結構簡単

    View Slide

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

    View Slide

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

    View Slide

  19. 識別子の一致チェックをするだけのものも多い
    • 以下のような機器はだいたいUID/IDm「しか」みていない。
    • かざすだけで登録/専用アプリなし≒利便性最優先と割り切ってリスク許容済み
    • セキュアエレメントを利用するような決済端末は次元の異なる高セキュリティを実現済み
    • 物理セキュリティ(監視カメラなど)との組み合わせが抑止力。
    • 本当に守りたいものは、セキュアエレメント利用や鍵情報との照合は必須。
    • UID/IDmの長さに対して「対象に『かざす』ことで権限を得る人」が多い環境では、
    ブルートフォース対策はしても良さそう。
    • スキミング防止ケースも効果はあるが利便性が下がるので誰もやらない。

    View Slide

  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へ移行。

    View Slide

  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

    View Slide

  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
    (省略!)

    View Slide

  23. ツール2:Proxmark3
    • 総務省認可はないはず(送信する側に回
    るときはシールドボックスへ)
    • NFC通信のsnoopログ取得(受信のみ)
    • NFC機器のエミュレーション(送受信)
    • RVD4が最新(写真はRVD2)
    • 最新ファームウェアでは、
    RVD4だけに機能追加があったり
    • 今買うならRVD4オススメ
    • Mifare Classic解析機能
    https://lab401.com/products/proxmark-3-rdv4

    View Slide

  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

    View Slide

  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..
    割と普通の用途のカードを読んだ場合 中華製カードを読んだ場合

    View Slide

  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
    (省略!)

    View Slide

  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つだけ鍵がわかっている状態からスタート
    不明部分の鍵を特定

    View Slide

  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
    (省略!)

    View Slide

  29. ユースケースを鑑みて、必要ならば
    利用するカード/Tagの移行もありうるかも。
    (そもそも鍵を使っていなければ関係ないし、
    現実的には許容可能なケースも多そう)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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通信の
    セキュリティを確
    保するようになる

    View Slide

  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

    View Slide

  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も含めて業界全体で世
    界観を標準化する方へ向かう、、、
    のか? (どうなる)

    View Slide

  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/

    View Slide

  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/

    View Slide

  39. Bricked!?
    • ファームウェア更新の最中の再起動で認識されるデバイス
    名が変わるようなことがある。
    • ”/dev/ttyACM0”が”/dev/ttyACM1”に変わったりと不安定。
    • 仮想マシン側にUSB接続してた影響かもしれない。
    • ttyACM0へのブートローダーの書込み途中にUSB瞬断で
    ttyACM1に変わってしまい書込み失敗、文鎮化。
    • 聞くところによると日本では最低2名は文鎮化させてし
    まった模様。他にも犠牲者は増える可能性がある。

    View Slide

  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で代替できるか未検証

    View Slide

  41. Enjoy your
    NFC hackingdebugging life!

    View Slide

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

    View Slide