mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
162 lines
14 KiB
Markdown
162 lines
14 KiB
Markdown
# Pentesting RFID
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## Introduction
|
||
|
||
**Radio Frequency Identification (RFID)** は最も一般的な短距離無線ソリューションです。通常、エンティティを識別する情報を格納・送信するために使われます。
|
||
|
||
RFIDタグは、埋め込みバッテリーのような**独自の電源を持つ(active)**ものと、受信した電波から**誘導される電流でリーダーのアンテナから電力を得る(passive)**ものがあります。
|
||
|
||
### Classes
|
||
|
||
EPCglobalはRFIDタグを6つのカテゴリに分けています。各カテゴリのタグは前のカテゴリに記載されたすべての機能を備えているため、下位互換性があります。
|
||
|
||
- **Class 0** タグは **passive** タグで、**UHF** 帯で動作します。ベンダーが製造工場で **preprograms** します。その結果、メモリに格納された情報は **変更できません**。
|
||
- **Class 1** タグは **HF** 帯でも動作できます。さらに、製造後に **一度だけ書き込み可能(written only once)** です。多くの Class 1 タグは、受信したコマンドの **cyclic redundancy checks (CRCs)** を処理できます。CRCはエラー検出のためにコマンド末尾に付加される数バイトです。
|
||
- **Class 2** タグは **複数回書き込み可能(written multiple times)** です。
|
||
- **Class 3** タグは環境パラメータ(例えば現在の温度やタグの動き)を記録できる **組み込みセンサー(embedded sensors)** を含むことがあります。これらのタグは **semi-passive** です。というのも、内蔵電源(統合バッテリーなど)を **持っている** が、他のタグやリーダーと無線通信を **開始できない(can’t initiate)** ためです。
|
||
- **Class 4** タグは同クラスの他のタグと通信を開始でき、**active tags** になります。
|
||
- **Class 5** タグは他のタグに **電力を供給** し、以前のすべてのタグクラスと通信できます。Class 5 タグは **RFID readers** として機能できます。
|
||
|
||
### Information Stored in RFID Tags
|
||
|
||
RFIDタグのメモリは通常、次の4種類のデータを格納します: タグが付属する **エンティティを識別する identification data**(このデータには銀行口座のようなユーザー定義フィールドを含む);エンティティに関する **追加情報を提供する supplementary data**;タグの内部 **構成に使用される control data**;およびタグの **メーカー情報(manufacturer data)**(タグの Unique Identifier(**UID**)や製造、タイプ、ベンダーに関する詳細を含む)。最初の2種類のデータは商用タグのすべてに見られますが、最後の2つはタグのベンダーによって異なる場合があります。
|
||
|
||
ISO標準は、タグが属する **オブジェクトの種類を示す** コードである Application Family Identifier(**AFI**)の値を規定しています。ISOで規定されるもう一つの重要なレジスタは Data Storage Format Identifier(**DSFID**)で、ユーザーデータの**論理的な構成**を定義します。
|
||
|
||
ほとんどのRFID **セキュリティコントロール** は、各ユーザーメモリブロックおよび AFI や DSFID の値を含む特別なレジスタに対する **読み取り/書き込み操作を制限する** 機構を持っています。これらの **ロック機構** は制御メモリに格納されたデータを使用し、ベンダーによって事前設定された **デフォルトパスワード** を持ちますが、タグ所有者が **カスタムパスワードを設定できる** ようになっています。
|
||
|
||
### Low & High frequency tags comparison
|
||
|
||
<figure><img src="../../images/image (983).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
## Low-Frequency RFID Tags (125kHz)
|
||
|
||
**低周波タグ(Low-frequency tags)** は、建物の入退室、インターホンキー、ジム会員カードなど、**高いセキュリティを必要としない** システムでよく使われます。レンジが長いため、有料駐車場で便利に使われます:ドライバーはカードをリーダーに近づける必要がなく、離れた距離からトリガーされます。一方で、低周波タグは非常に原始的でデータ転送速度が低いです。そのため、残高管理や暗号化のような複雑な双方向データ転送を実装することは不可能です。低周波タグは認証手段を持たず、短いIDのみを送信します。
|
||
|
||
これらのデバイスは **passive RFID** 技術に依存し、**30 kHz から 300 kHz** の範囲で動作しますが、通常は **125 kHz 〜 134 kHz** が使われます:
|
||
|
||
- **Long Range** — 周波数が低いほど到達距離が長くなります。EM-Marin や HID の一部のリーダーは最大1メートルまで動作します。これらは駐車場でよく使われます。
|
||
- **Primitive protocol** — 低いデータ転送速度のため、これらのタグは短いIDしか送信できません。多くの場合、データは認証されず、何ら保護されていません。カードがリーダーの範囲に入ると、ただIDを送信し始めます。
|
||
- **Low security** — これらのカードはプロトコルが原始的なため、簡単にコピーされたり、ポケット越しに他人のカードから読み取られたりします。
|
||
|
||
**Popular 125 kHz protocols:**
|
||
|
||
- **EM-Marin** — EM4100, EM4102。CISで最も人気のあるプロトコル。シンプルで安定しているため、約1メートルから読み取れます。
|
||
- **HID Prox II** — HID Global が導入した低周波プロトコル。西側諸国でより一般的です。より複雑で、このプロトコル用のカードとリーダーは比較的高価です。
|
||
- **Indala** — Motorola が導入し後に HID に買収された非常に古い低周波プロトコル。前述の二つよりも使用例は減少しています。
|
||
|
||
実際には、他にも多くの低周波プロトコルがありますが、物理層で同じ変調を使用しており、上記の変種と見なせます。
|
||
|
||
### Attack
|
||
|
||
これらのタグは **Flipper Zero** を使って攻撃できます:
|
||
|
||
|
||
{{#ref}}
|
||
flipper-zero/fz-125khz-rfid.md
|
||
{{#endref}}
|
||
|
||
## High-Frequency RFID Tags (13.56 MHz)
|
||
|
||
**高周波タグ(High-frequency tags)** は、暗号、双方向の大容量データ転送、認証など、より複雑なリーダー–タグ間の相互作用を必要とする場合に使用されます。\
|
||
銀行カード、公共交通機関、その他のセキュアなパスで一般的に見られます。
|
||
|
||
**13.56 MHz の高周波タグは一連の標準とプロトコルです**。通常は [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/) と呼ばれますが、それは常に正確ではありません。物理層と論理層で使われる基本プロトコルセットは ISO 14443 です。高レベルのプロトコルや代替標準(ISO 19092 のような)はこれに基づいています。多くの人はこの技術を 13.56 MHz で動作するデバイスを指す用語として **Near Field Communication (NFC)** と呼びます。
|
||
|
||
<figure><img src="../../images/image (930).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
簡単に言えば、NFC のアーキテクチャは次のように動作します:送信プロトコルはカードを作る会社によって選ばれ、低レベルの ISO 14443 に基づいて実装されます。例えば、NXP は独自の高レベル送信プロトコル Mifare を発明しました。しかし下位レベルでは、Mifare カードは ISO 14443-A 標準に基づいています。
|
||
|
||
Flipper は低レベルの ISO 14443 プロトコル、Mifare Ultralight のデータ転送プロトコル、そして銀行カードで使われる EMV と相互作用できます。Mifare Classic と NFC NDEF のサポート追加にも取り組んでいます。NFC を構成するプロトコルと標準の詳細な解説は別記事に値し、後ほど掲載する予定です。
|
||
|
||
ISO 14443-A 標準に基づくすべての高周波カードはユニークなチップIDを持ちます。それはカードのシリアル番号のように振る舞い、ネットワークカードの MAC アドレスに似ています。**通常、UID は4または7バイト長**ですが、稀に **最大10バイト** になることがあります。UID は秘密ではなく簡単に読み取れ、**場合によってはカード自体に印字されていることもあります**。
|
||
|
||
多くのアクセス制御システムは UID を用いて **認証とアクセス許可を行います**。時には RFID タグが **暗号化をサポートしている場合でも** UID に依存することがあります。そのような **誤用** により、セキュリティ面で **単純な 125 kHz カード** と同レベルになってしまいます。バーチャルカード(Apple Pay のような)は動的な UID を使用し、電話所有者が決済アプリでドアを開けてしまうのを防いでいます。
|
||
|
||
- **Low range** — 高周波カードはリーダーに近づける必要があるように設計されています。これによりカードが不正に操作されるのを防ぎます。私たちが達成した最大読み取り距離は約15cmで、これはカスタム製の高レンジリーダーを使用した場合でした。
|
||
- **Advanced protocols** — 最大 424 kbps のデータ転送速度は、完全な双方向データ転送を伴う複雑なプロトコルを可能にします。これにより **暗号化**、データ転送などが可能になります。
|
||
- **High security** — 高周波の非接触カードはスマートカードに比べても劣りません。AES のような暗号アルゴリズムをサポートし、公開鍵暗号を実装するカードも存在します。
|
||
|
||
### Attack
|
||
|
||
これらのタグは **Flipper Zero** を使って攻撃できます:
|
||
|
||
|
||
{{#ref}}
|
||
flipper-zero/fz-nfc.md
|
||
{{#endref}}
|
||
|
||
または **proxmark** を使用して:
|
||
|
||
|
||
{{#ref}}
|
||
proxmark-3.md
|
||
{{#endref}}
|
||
|
||
### MiFare Classic offline stored-value tampering (broken Crypto1)
|
||
|
||
システムが金銭残高を MiFare Classic カード上に直接保存している場合、Classic が NXP の廃止された Crypto1 暗号を使用しているため、多くの場合それを操作できます。Crypto1 は長年にわたり破られており、セクターキーの回復やカードメモリの完全な読み書きが一般的なハードウェア(例: Proxmark3)で可能です。
|
||
|
||
エンドツーエンドのワークフロー(抽象化):
|
||
|
||
1) 元のカードをダンプしてキーを回復する
|
||
```bash
|
||
# Attempt all built-in Classic key recovery attacks and dump the card
|
||
hf mf autopwn
|
||
```
|
||
これは通常、sector keys (A/B) を回収し、client dumps folder に full-card dump を生成します。
|
||
|
||
2) value/integrity fields を特定して理解する
|
||
|
||
- 元のカードに対して正規の top-ups を行い、複数の dumps を取得する(before/after)。
|
||
- 2つの dumps を diff して、balance や integrity fields を表す変化する blocks/bytes を特定する。
|
||
- 多くの Classic deployments はネイティブな "value block" エンコーディングを使うか、独自の checksums(例: XOR of the balance with another field and a constant)を使う。balance を変更したら、integrity bytes を再計算し、複製/補数化されたすべての fields が一貫していることを確認する。
|
||
|
||
3) modified dump を writable な “Chinese magic” Classic tag に書き込む
|
||
```bash
|
||
# Load a modified binary dump onto a UID-changeable Classic tag
|
||
hf mf cload -f modified.bin
|
||
```
|
||
4) ターミナルがカードを認識するように元の UID をクローンする
|
||
```bash
|
||
# Set the UID on a UID-changeable tag (gen1a/gen2 magic)
|
||
hf mf csetuid -u <original_uid>
|
||
```
|
||
5) ターミナルでの使用
|
||
|
||
カード上の残高と UID を信頼するリーダーは、改変されたカードを受け入れます。現場での観察では、多くの導入先がフィールド幅に基づいて残高を上限している(例:16-bit fixed-point)。
|
||
|
||
注記
|
||
|
||
- システムが native Classic value blocks を使用している場合、フォーマットを覚えておいてください: value (4B) + ~value (4B) + value (4B) + block address + ~address。すべての部分が一致する必要があります。
|
||
- シンプルなチェックサムを使ったカスタムフォーマットの場合、differential analysis が firmware をリバースしなくても整合性関数を導出する最速の方法です。
|
||
- UID-changeable タグ("Chinese magic" gen1a/gen2)のみが block 0/UID の書き込みを許可します。通常の Classic カードの UID は read-only です。
|
||
|
||
実践的な Proxmark3 コマンドについては、次を参照してください:
|
||
|
||
{{#ref}}
|
||
proxmark-3.md
|
||
{{#endref}}
|
||
|
||
### 携帯型 HID MaxiProx 125 kHz Mobile Cloner の構築
|
||
|
||
red-team engagements 中に HID Prox® バッジを収集するために、**長距離**、**バッテリー駆動** のソリューションが必要な場合、壁取り付け型の **HID MaxiProx 5375** リーダーをバックパックに収まる自立型のクローン機に改造できます。機械および電気の完全な手順は以下で入手できます:
|
||
|
||
{{#ref}}
|
||
maxiprox-mobile-cloner.md
|
||
{{#endref}}
|
||
|
||
---
|
||
|
||
## 参考文献
|
||
|
||
- [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/)
|
||
- [Let's Clone a Cloner – Part 3 (TrustedSec)](https://trustedsec.com/blog/lets-clone-a-cloner-part-3-putting-it-all-together)
|
||
- [NXP statement on MIFARE Classic Crypto1](https://www.mifare.net/en/products/chip-card-ics/mifare-classic/security-statement-on-crypto1-implementations/)
|
||
- [MIFARE security overview (Wikipedia)](https://en.wikipedia.org/wiki/MIFARE#Security)
|
||
- [NFC card vulnerability exploitation in KioSoft Stored Value (SEC Consult)](https://sec-consult.com/vulnerability-lab/advisory/nfc-card-vulnerability-exploitation-leading-to-free-top-up-kiosoft-payment-solution/)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|