Difference between revisions of "RFID"
m (→Software Tools) |
m (→libnfc) |
||
Line 379: | Line 379: | ||
The library comes with examples demonstrating read, emulation & relay attack by exploiting a "hidden" raw mode of those chips. |
The library comes with examples demonstrating read, emulation & relay attack by exploiting a "hidden" raw mode of those chips. |
||
− | See also [http://code.google.com/p/nfc-tools/ nfc-tools] |
+ | See also [http://code.google.com/p/nfc-tools/ nfc-tools] and [http://code.google.com/p/micmd/ micmd] projects |
+ | ===[http://code.google.com/p/libndef/ libndef]=== |
||
+ | This is a C++ library for use in reading and writing messages based on NDEF (NFC Data Exchange Format) Specification. |
||
===[http://www.springcard.com SpringCard]=== |
===[http://www.springcard.com SpringCard]=== |
Revision as of 10:28, 28 January 2010
RFID readers
pcscd
Is the Linux daemon to access readers compatible with the PC/SC standard.
To dump the readers list supported by libccid of your pcscd install:
cat /etc/libccid_Info.plist|gawk '
/ifdVendorID/{
mode=1
}
/ifdProductID/{
mode=2
}
/ifdFriendlyName/{
mode=3
}
{
inarray=0
}
/<array>/{
i=0
}
/<array>/,/<\/array>/{
inarray=1
}
/string/&&inarray{
match($0,/<string>(.*)<\/string>/,a);
t[mode i]=a[1];
i++
}
END{
for (j=0;j<i;j++)
print t[1 j]":"t[2 j], t[3 j]
}'
Parallax
OpenPCD
ACR122U
Intro
based on PN532
- docs
- ISO/IEC18092 (NFC) compliant
- NFC Tags Access Speed = 212 kbps
- Support FeliCa card
- Support ISO 14443 Type A & B cards
- MIFARE® cards (Classics, DESFire)
- SAM Socket (optional)
- To get the Firmware version string in command line: (actual string here is "ACR122U203" as the last 2 bytes are not SW1/SW2 but part of the string)
$ opensc-tool -s FF00480000 Sending: FF 00 48 00 00. Received (SW1=0x30, SW2=0x33): 41 43 52 31 32 32 55 32 ACR122U2
You can also use scriptor:
$ echo ff00480000|scriptor No reader given: using ACS ACR122U PICC Interface 00 00 Using T=1 protocol Reading commands from STDIN > ff 00 48 00 00 < 41 43 52 31 32 32 55 32 30 33 : Error not defined by ISO 7816
If you get the following error:
Can't allocate Chipcard::PCSC::Card object: No smartcard inserted.
that's because you've a model without SAM support. Place a tag on the reader and try again, it should work.
So that's where a lot of confusion comes into play: the two models behave very differently! See below
Note that this site points out that it also corresponds to a difference of firmware versions
ACR122U-SAM
- With SAM slot
- Windows drivers & API docs
Usage:
- When there is a SAM inserted, ATR shown is the ATR of the SAM
- When there is no SAM inserted, ATR shown is a pseudo-ATR = 3B 00
- So for PCSC there is always a "card inserted"
- APDUs are sent to SAM
- To send APDUs to a contactless card, you must wrap them into pseudo-APDUs (FF 00 00 00 ...)
- To send special APDUs to the reader (to get fw or to control LEDs), just send them
Some more infos here about the Tikitag
Some more here
ACR122U PICC
- Without SAM slot
- Windows drivers & API docs
Usage:
- When there is a contactless card, ATR shown is the ATR of the card
- When there is no contactless card, no ATR
- So for PCSC there is a "card inserted" if there is a contactless card
- APDUs are sent directly to the contactless card, which makes this reader fully transparent in this mode
- To send APDUs to a contactless card, you can also wrap them into pseudo-APDUs (FF 00 00 00 ...)
- To send special APDUs to the reader (to get fw or to control LEDs)
- If there is a contactless card, just send the APDUs
- If there is no contactless card, the CCID Escape command must be used (*)
(*) Here is one small example how to use the Escape command:
#!/usr/bin/python
from smartcard.scard import *
hresult, hcontext = SCardEstablishContext( SCARD_SCOPE_USER )
hresult, hcard, dwActiveProtocol = SCardConnect(
hcontext, 'ACS ACR122U PICC Interface 00 00', SCARD_SHARE_DIRECT, SCARD_PROTOCOL_T0 )
IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE = SCARD_CTL_CODE(1)
CMD = [0xFF, 0x00, 0x48, 0x00, 0x00]
hresult, response = SCardControl( hcard, IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE, CMD )
if hresult!=SCARD_S_SUCCESS:
raise error, 'Failed to control: ' + SCardGetErrorMessage(hresult)
print ''.join([chr(i) for i in response])
This requires also to allow libccid to use the Escape command, you've to set bit 0 of ifdDriverOptions in /etc/libccid_Info.plist to 1:
<key>ifdDriverOptions</key> <string>0x0001</string> Possible values for ifdDriverOptions 1: DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED the CCID Exchange command is allowed. You can use it through SCardControl(hCard, IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE, ...)
In case libccid refuses with a
Firmware (x.xx) is bogus! Upgrade the reader firmware or get a new reader.
you can force it by setting the third bit (0x04) of ifdDriverOptions in /etc/libccid_Info.plist to 1
<key>ifdDriverOptions</key> <string>0x0005</string> Possible values for ifdDriverOptions 1: DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED the CCID Exchange command is allowed. You can use it through SCardControl(hCard, IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE, ...) 4: DRIVER_OPTION_USE_BOGUS_FIRMWARE Some reader firmwares have bugs. By default the driver refuses to work with such firmware versions. If your reader is rejected because of the firmware (log message: "Firmware (x.y) is bogus!") you can: - activate this option but you will have problems depending on the bug
Pegoda
- See http://www.nxp.com/#/pip/pip=[pfp=41960]|pp=[t=pfp,i=41960]
Arygon ADRA
based on PN531
Supported Standards:
- ISO18092 ( NFC transport protocol)
- Sony FeliCa
- NXP Mifare ® family
- compliant to ISO14443A, ISO14443A – 4 (T=CL)
Communication protocol:
- ARYGON (HL - high level language), TAMA (LL - low level language)
- To send TAMA frames, send an ascii '2' as first char, e.g. to get firmware of the PN531:
0x32 0x00 0x00 0xFF 0x02 0xFE 0xD4 0x02 0x2A 0x00 => 0x00 0x00 0xFF 0x00 0xFF 0x00 (TAMA ACK) 0x00 0x00 0xFF 0x04 0xFC 0xD5 0x03 0x02 0x02 0x24 0x00 (TAMA v=2.2)
echo 32 00 00 ff 02 fe d4 02 2a 00|xxd -p -r|socat - /dev/ttyUSB0|xxd -p 0000ff00ff000000ff04fcd50304022200
Baud rate (passive/active):
- 106 kBaud, 212 kBaud, up to 424 kBaud
- USB, seen as a serial port
PN531
- Official site: http://www.nxp.com/#/pip/pip=[pfp=53424]|pp=[t=pfp,i=53424]
- Short Form Specification, Near Field Communication PN531 µ-based Transmission module
The PN531 is capable of speaking directly USB so there exist readers consisting simply of the PN531 wired to your Pc via USB.
In that case, the vendorID/productID will be either 04CC:0531 or 054c:0193
Apparently the following products are like that:
PN533
- Official site: http://www.nxp.com/#/pip/pip=[pfp=53424]|pp=[t=pfp,i=53424]
The PN531 is capable of speaking directly USB so there exist readers consisting simply of the PN531 wired to your Pc via USB.
vendorID/productID may vary, e.g. 04CC:2533 or for SCL3711: 04E6:5591
The following products are embodiments of a PN533:
- SCL3711 by SCM Microsystems
Omnikey 5321
- datasheet
- ISO 14443 A/B and 15693 ( up to 848 Kbps in the fastest ISO 14443 transmission mode)
- APIs: PC/SC, Synchronous-API (on top of PC/SC), OCF (Open Card Framework) or CT-API
- contactless smartcards supported:
- HID: iCLASS®
- NXP: MIFARE®, DESFire®, SMART-MX and ICODE
- Texas Instruments: TagIT®
- ST Micro: x-ident, SR 176, SR 1X 4K
- Infineon: My-d (in secure mode UID only)
- Atmel: AT088RF020
- KSW MicroTech: KSW TempSens
- iCODE SLI, iCODE SL2 & LRI 64
- Contactless 2048 bit key generation in RSA mode (JCOP / SMART-MX)
Installing OmniKey reader under linux:
There are drivers here
But there is also a Debian package pcsc-omnikey
Warning! Don't install it or it will remove libccid!!
It's better to keep libccid if needed for other readers and install the missing RFID driver by hand: (here on a 64-bit platform)
aptitude download pcsc-omnikey dpkg -x pcsc-omnikey_1%3a2-4_amd64.deb . cp -a usr/lib/pcsc/drivers/ifdokrfid_lnx_x64-2.6.0.bundle /usr/lib/pcsc/drivers/
See here: you need also to recompile pcscd with libusb:
./configure --disable-libhal --enable-libusb
To do it by repackaging the Debian pcscd:
aptitude install libusb-dev apt-get source pcscd apt-get build-dep pcscd
--- debian/rules 2009-01-14 13:54:42.000000000 +0100
+++ debian/rules 2009-01-14 13:46:56.000000000 +0100
@@ -38,6 +38,8 @@
dh_testdir
# we add LDFLAGS="-lpthread" for bug #253629
./configure $(confflags) \
+ --disable-libhal \
+ --enable-libusb \
--sysconfdir=/etc \
--prefix=/usr \
--enable-usbdropdir=/usr/lib/pcsc/drivers \
Then
dpkg-buildpkg -uc -us
To launch the modified pcsc in foreground, showing ADPUs and debug info: (here pcscd was installed in /usr/local/bin/pcscd-libusb)
pcscd-libusb -f -a -d
Others
- Netronix: producer of RFID readers for Unique, Mifare, Q5,Hitag, I-code transponders.
- kit from Elektor and a user experience (fr)
- Proximity card reader kit by Velleman, supporting EM4100 protocol
- 100% home-made 125kHz reader
- iCarte 110: As a MFi (Made for iPod/iPhone) accessory attaching to the bottom connector of the iPhone, the iCarte™ turns the iPhone into an NFC phone as well as an RFID Reader/Writer
- Simplest RFID reader?, 125kHz, using a Propeller microcontroller card
Other Hardware Tools
RFID killers
- http://www.acbm.com/inedits/rfid.html (French)
- WEAPONS: The RFID zapper
- RFID-Zapper(EN) and a cool implementation
- Hoaxes?
- RFIDwasher
- TagZapper (dead link)
RFID skimmers
- Build Your Own RFID Skimmer
- How to Build a Low-Cost, Extended-Range RFID Skimmer
- RFIDDump
- Another low-cost RFID detector: using a BasicCard
- RFID sniffer, cheap hardware just to tell you if it's a 13.26MHz tag or not, can be bought here
RFID emulators
OpenPICC
- wiki
- Flashing:
Use ARM toolchain, e.g. [1], add arm/bin/ to the path
svn co -r432 http://svn.openpcd.org/branches/sniffonly/openpicc/ cd openpicc make
You may try later revision but at least r432 is compiling and working.
If you don't get a /dev/usbTTYx to flash the beast, load the driver by hand:
modprobe -r usbserial modprobe usbserial vendor=0x03EB product=0x6124
If ./at91flash_automatic openpicc.bin failed, edit at91flash => /dev/ttyUSB0 then
./at91flash openpicc.bin
Unplus & replug, you'll get a /dev/ttyACM0
- Using:
Whatever talking serial:
socat - /dev/ttyACM0,raw,echo=0,crnl,b115200
cu -l /dev/ttyACM0 -s 115200
screen /dev/ttyACM0 115200
h for help, f for field strength measure
To sniff raw data, you've to convert the hexadecimal stream if you want to display it, e.g. with
(echo r;cat)|socat - /dev/ttyACM0,raw,echo=0,crnl,b115200 |xxd
Note that you can still send commands to the OpenPICC, e.g. "r" to stop sniffing, CTRL-D to quit
To sniff and get decoded frames (from reader only, for tag you would need a OpenPCD)
svn co -r432 http://svn.openpcd.org/branches/sniffonly/host/ cd host make
Usage:
./openpicc-sniff-14443a /dev/ttyACM0
To get just the raw stream:
./openpicc-sniff-14443a /dev/ttyACM0|cut -c 50-|sed 's/\([0-9A-F]\+\) [01]!\? */\1/g'
- Using under Windows:
Plug it, let Windows finding the new hardware -> search software? -> no -> install from specific location -> search/include/browse -> svn/branches/sniffonly/openpicc/win32driver (OpenBeaconUSB.inf) -> continue anyway
To communicate, use whatever talking serial, e.g.
Start->Accessories->Communications->HyperTerminal -> new connection -> COM4 -> 115200/8/N/1/None -> try e.g. "h" -> File -> Save
- Debug
In case of trouble, you can get more lucky with the debug cable (115200/8/N/1 3v3)
- GND
- CTS# - shorted
- VCC - provided! not to be connected to external Vcc
- TXD
- RXD
- RTS# - shorted
Proxmark III
Originally created by J.Westhues: here, video in action here
- manual, see also this pdf
- forum
- files, require login
- can read, sniff & emulate
- 13.6MHz, 125kHz and 134kHz
- 20090306_proxmark_edo512 version of the firmware/client is currently the latest available, running on both Windows and Linux
- Some troubles under Linux in USB2.0 mode, better to force USB1.1: Plug the proxmark in an USB 1.1 hub or unload ehci_hcd kernel module
Extracting the reader datastream (to be compared with OpenPICC results)
cat dump |grep -v TAG|cut -c 21-|sed 's/!crc.*//;s/\([0-9a-f]\+\)[[:space:]]*/\1/g'|tr a-z A-Z
Getting both directions
cat dump |sed 's/: /+/;s/: TAG /-/'|cut -c 15-|sed 's/!crc.*//;s/\([0-9a-f]\+\)!\?[[:space:]]*/\1/g'|tr a-z A-Z
IAIK RFID DemoTag
Open RFID Tag
125kHz cloners and emulators
- Chris Paget's cloner: video, picture. Raw cloner
- Programmable HID
The design is currently capable of emulating any of HID’s 26-bit, 35-bit (Corporate 1000) or 37-bit card formats. - Verilog chip cloner
- AM-FSK explained
- Flexpass PSK explained + cloning
- RMX commercial products: emulators etc
- ProxPick is a highly versatile attack & defense tool for 125-134KHz RFID systems, about the size of a playing card. It is able to read, copy, and playback almost all Prox-type tags
- EM4001 emulator (pdf), by Michael Krumnikl, based on ATmega8. See a picture here
- Passive emulator based on ATtiny85 and a single self, emulates EM4001 and HID. See pictures here and here
Misc
- Universal Software Radio Peripheral
- RFID Guardian, see here what they want to come with for v4, which is currently in alpha stage, first hardware rollout.
- RFID Reader Detector and Tilt Sensitive RFID Tag
- Raisonance products: ProxiLAB (pdf), ProxiSPY (pdf), ProxiCARD (pdf)
- Ghost & RfidSpy
- Seeing RFID on the cheap on Makezine and my own attempt based on a slightly different technique
- Spirtech probe
- mikey card
- Sewed RFID antenna
Software Tools
librfid
librfid is a Free Software RFID library. It implements the PCD (reader) side protocol stack of ISO 14443 A, ISO 14443 B, ISO 15693, Mifare Ultralight and Mifare Classic. Support for iCODE*1 and other 13.56MHz based transponders is planned.
RFDump
RFDump is a backend GPL tool to directly interoperate with any RFID ISO-Reader to make the contents stored on RFID tags accessible.
RFIDIOt
RFIDIOt is an open source python library for exploring RFID devices
apt-get install python-pyscard $ ./mrpkey.py -L PCSC devices: No: 0 OMNIKEY CardMan 5x21 00 00 No: 1 OMNIKEY CardMan 5x21 00 01 $ ./mrpkey.py -r 1 CHECK mrpkey v0.1n (using RFIDIOt v0.1s) Reader: PCSC OMNIKEY CardMan 5x21 00 01 Device is a Machine Readable Document $ ./mrpkey.py -r 1 "EXnnnnnn<cBELyymmddcSyymmddc<<<<<<<<<<<<<<cc"
To fix reader number, edit RFIDIOtconfig.py
In MRZ passport number is coded with 9 chars. Belgian uses only 8 chars so some passport readers need a document number padded with char "<" ("EXnnnnnn<")
To use mrpkey under Windows you need:
python, pyscard, pyserial, pywin32, pycrypto, python imaging library
GNU Radio
GNU Radio is a collection of software that when combined with minimal hardware, allows the construction of radios where the actual waveforms transmitted and received are defined by software. What this means is that it turns the digital modulation schemes used in today's high performance wireless devices into software problems.
pwnpass
RFID tool by 3ric Johanson (get info from rfid on credit cards), presented at Shmoocon 2009
See also this video showing it demo'd
See here(pdf) a technical report of the vulnerabilities of RFID credit cards and here info on PayPass 3000 reader
libnfc
Open source library for Near Field Communication (NFC) using readers based on PN531/PN532/PN533 chips. The library comes with examples demonstrating read, emulation & relay attack by exploiting a "hidden" raw mode of those chips.
See also nfc-tools and micmd projects
libndef
This is a C++ library for use in reading and writing messages based on NDEF (NFC Data Exchange Format) Specification.
SpringCard
Offers a SDK for their reader but somehow compatible with e.g. the Omnikey 5321, see here especially the two PCSC-SDK
SCard SOFT
A Russian software company making stuff to explore smartcards
- Smart Card ToolSet PRO v3.4, a shareware to explore cards based on APDUs, seems rich of features
About ePassports
- See here
Specific applications
- ePassport
- Belgian ePassport
- EPassport#US_Passport_Card (which is not an ePassport...)
- MOBIB
- Cambio
- Cambio (at least in Germany) is using Invers COCOS-keymanager, according to this car-sharing technology overview and if RFIDjournal is right, this is a passive 125 kHz Hitag RFID inlay, manufactured by NXP Semiconductors
- Mifare Classic
- crapto1
- tk-libnfc-crapto1 & mfoc, does not work against MFC emulation on e.g. JCOP or Mifare Plus
Privacy
- Social patterns at conferences: the good and the bad ;-)
- Mining social contacts with active RFID, presentation and application of the SocioPatterns project
- Attendee Tracking/Networking, a commercial Big Brother application
- See privacy-related news on the blog
- Why it's important to consider privacy when designing a RFID infrastructure: acceptance!
- Privacy: cultural differences
- Recently Belgian Privacy Commission expressed its thoughts on the matter:
Misc documentation
- Forum setup by Chris Paget (aka foon)
- Proxmark forum, also with a lot of other information
- Security aspects of NFC on Wikipedia
- Research page of Gerhard Hancke, mainly about physical RFID attacks
- RFID Security & Privacy lounge by Professor Gildas Avoine, *the* bibliography of academic papers on those matters
- Radio Frequency IDentification and the Internet of Things, a page of the European Commission]
- Réflexions sur le warfidriving & experiments on skipass...
- RFID virus
- Les secrets des Pass de transports en commun by P. Gueulle
- Karsten Nohl on "Legic Prime" RFID chip
- Russian blog on hacking RFID