This is a simple intro to relay attacks using NFC payment data. I will add different types of relays during next year.
A NFC payment relay is an attack that could be described as extraction of data, using a bridge between a NFC smart card or mobile payment system and the Point of Sale System(PoS) or terminal in real time. Extracting the information and making a bridge while avoiding the latency are the most important and challenging parts.
I already post different introductory content about NFC technology:
- Intro to Analyze NFC Payment Methods & Contactless Cards
- NFC – Contactless Cards: Brute Forcing Processing Options
Eddie Lee presented in DEF CON 20 about how to design a NFC relay using two Android cellphones. The idea is to generate a bridge using 2 Android phones as you can see in the above image.
The phone 1 is close to the NFC card and the phone 2 is close to the terminal. When the phone 2 approaches the terminal, it mimics a NFC card and the terminal initializes the communication process. Any time when the terminal sends a command to the phone 2 asking about what type of card it is, the phone 2 sends that data over WiFi to the phone 1 and this phone “asks” the smart card the same question. The card answers and phone 1 takes that information and sends it back to phone 2 which responds to the terminal. Using this behavior throughout the communication process. Basically, phone 1 acts as reader and phone 2 as smart card. Simple right?
In DEF CON 25, Haoqi Shan and Jian Yuan presented Man in the NFC implementing two special boards with SDR(Software Defined-Radio) technology to established a dedicated connection to communicate the NFC information faster and with a better control than using cellphones in the same WiFi network.
The main difference between a relay attack and replay attack is that the relay attack has to be done at the moment when the attacker is extracting the data; in the other hand, the replay attack occurs when an attacker extract the information from a transaction and save it to replay it later using a third-party device.
With this in mind, we know that we need at least two devices to approach this project, and they could be from different technologies that support NFC:
- Raspberry Pis
Even we can combine them to make a relay. For the communication part, we have different options:
To understand the concept, I will start with a “local” relay using two Acr122u USB devices connected in the same computer by USB. One of them will act as PoS, and the second will mimic a smart card. All the connections will be handle by a Python script, and my laptop will be the bridge between them:
The idea of this concept is to understand how to design a simple NFC sniffer. To read, see and study the NFC tags. With this design, I can track the communication process without making a real transaction. However, be aware that the ATC(Application Transaction Counter) will increase during this process.
To accomplish this task, the easier and simpler software to use is the library of RFIDIot. Specifically, I will use the pn532mitm.py script. In its help section, we can find different examples to run the code when we have two or more Acr122 connected to our computer or even to run it remotely:
Use device no. 2 as the READER and device no. 3 as the EMULATOR:
python pn532mitm.py -r 2 3
Use device no. 2 as the EMULATOR and remote system on 192.168.1.3 port 5000 as the READER:
python pn532mitm.py -r 2 reader:192.168.1.3:5000
In this video, I run the command:
python pn532mitm.py -r 0 1
Being 0 the first reader and 1 the emulator:
We can play with the code to alter the data in real time which is one of the most useful things for relay attacks. Also, we can copy the APDU commands in a decoder to know the meaning of the tags using https://www.emvlab.org/tlvutils/