Беспроводная связь ближнего радиуса действия (Near Field Communication, NFC)

Беспроводная связь ближнего радиуса действия (Near Field Communication, NFC)

Технология NFC или Near Field Communication («коммуникация ближнего поля») – это набор стандартов для организации связи между двумя устройствами (например, смартфонами), которые находятся на очень близком расстоянии друг от друга (менее 4 сантиметров).

Авторы: Субхо Гальдер (Subho Halder) и Адитья Гупта (Aditya Gupta) (@sunnyrockzzs и @adil391)

Введение

Что такое NFC?

Технология NFC или Near Field Communication («коммуникация ближнего поля») – это набор стандартов для организации связи между двумя устройствами (например, смартфонами), которые находятся на очень близком расстоянии друг от друга (менее 4 сантиметров).

Коммуникационные протоколы таких устройств основаны на RFID-стандартах, включая ISO I4443. Эти стандарты были разработаны и получили массовое распространение при содействии некоммерческой ассоциации NFC Forum, которая была основана в 2004 году такими известными компаниями как Sony, Nokia, Philips, Samsung и т. д.

Рабочая частота протокола составляет всего лишь 13,56 МГц (+/- 7 МГц), что является очень низкой величиной. Это дает определенные преимущества, позволяя обойтись небольшими энергоресурсами батареи при внедрении этого протокола в портативное устройство.

Режимы коммуникации

Существует два режима связи между устройствами, которые поддерживает NFC-стандарт.
  1. Пассивный: в этом режиме пассивные NFC-метки (NFC «tags») считывается любыми NFC-совместимыми устройствами. Инициатор коммуникации (NFC-устройство) при помощи электромагнитного излучения питает метку, которая потом возвращает хранимые данные (по сути, метка является ретранслятором).
  2. Активный: в этом режиме оба устройства излучают электромагнитную энергию и могут передавать и принимать данные между собой. Такое взаимодействие в некотором роде похоже наP2P-протокол, когда можно легко передавать бинарные и мультимедийные файлы.

Стек протоколов NFC

На схеме проиллюстрирован базовый формат стека протоколов NFC.

В этой статье мы коснемся уровня протокола (protocol layer), который отвечает за начало коммуникации, и прикладного уровня (application layer), который отвечает за передачу данных между устройствами.

Уровень протокола

Этот уровень подразделяется на несколько типов. Мы рассмотрим четыре наиболее распространенных стандарта: Type I (Topaz), Mifare Classic, Mifare Ultralight и LLCP (P2P).

Type I (Topaz)

Метки Type I работают в формате, который иногда называют протоколом Topaz. Если размер памяти у метки менее 120 байт используется статическая модель памяти, иначе – динамическая модель. Чтение/запись байтов метки происходит при помощи следующих команд: RALL, READ, WRITE-E, WRITE-NE, RSEG, READ8, WRITE-E8, WRITE-N8.

Mifare Classic

Метки Mifare Classic - устройства хранения данных с простыми защитными механизмами, которые позволяют разграничивать доступ. Для аутентификации и шифрования используется протокол безопасности, который был разработан и запатентован компанией NXP. Алгоритм шифрования был исследован и взломан в 2007 году.

Mifare Ultralight

Метки Misfare Ultralight схожи с Topaz-метками. В случае если объем памяти меньше 64 байт используется статическая модель памяти, иначе – динамическая модель. В первых 16 байтах хранятся метаданные: серийный номер, права доступа, формат хранимых данных (capability container). Остальные байты отведены под данные. Для доступа к памяти используются команды Read и Write.

LLCP (P2P)

Предыдущие протоколы работают по принципу источник-приемник, когда инициатор коммуникации читает/записывает информацию в целевое устройство. В случае с протоколом управления логическим звеном (Logical Link Control Protocol, LLCP) оба устройства являются активными и могут, как читать, так и передавать данные.

Прикладной уровень

Прикладной уровень отвечает за формат передаваемых данных между NFC-устройствами или NFC-устройством и метками.

Для этой цели используется простой бинарный формат сообщений NDEF (NFC Data Exchange Format), который был утвержден ассоциацией NFC Forum в качестве стандартного формата передачи данных. Существует несколько типов сообщение: текст, url и т. д.

Для примера рассмотрим кодирование текстового сообщения:
0000: 03 17 D1 01 13 54 02 65 6E 68 65 6C 6C 6F
0001: 20 63 6C 75 62 68 61 63 6B 20 21 FE
Теперь разберем, что означает каждый байт:
03 – начало NDEF-сообщения
17 – размер сообщения
D1 – состоит из отдельных битов: MB = 1, ME = 1, CF = 0, SR = 1, IL = 0,
TNF = 001 (NFC Forum well-known type)
01 – длина типа, в данном случае = 1
54 – тип сообщения, в данном случае = “Т” (текст)
65 6E – код языка сообщения, в данном случае = “en”
68 65 … 21 – текст “hello clubhack”
FE – конечный байт (NDEF Terminator)

В этом примере длина сообщения укладывается в единичный байт. Если длина сообщения больше 255 байтов, используется более длинная форма NDEF (короткая/длинная форма сообщения управляется битом SR).

Стек протоколов NFC для платформы Android

На рисунке показаны библиотеки, из которых состоит стек NFC-протоколов для платформы Android

Стек подразделяется на три компонента: ядро, службы NFC и само устройство (или метка).

Ядро содержит NFC-драйвер libpn544_fw.so, который отвечает за взаимодействие с сигналами NFC. Служба NFC носит имя com.android.nfc и опирается на три основных драйвера: libnfc.so,libnfc_jni.so и libnfc_ndef.so. Каждый из этих компонентов включает функционал для работы с отдельными частями NFC-данных (JNI, NDEF и т. д.)

В реальной жизни, как только метка (или любое другое устройство) подносится к NFC-устройству на платформе Android, ядро libpn544_fw.so запускает службы NFC. После запуска служб идет прием, сохранение и разделение NFC-данных на соответствующие категории. Наибольший интерес представляет драйвер libnfc_ndef.so, который отвечает за обработку формата NDEF. Так, если допустить, что мы хотим вывести из строя NFC-драйвер, мы могли бы модифицировать NFC-сообщение, сделав некоторые изменения в шестнадцатеричных данных, или поменять значение длины сообщений, которые содержатся в NFC-компоненте.

Виды атак через протоколы NFC

Скимминг банковских карт

В тех странах, где банковские карты поддерживают протоколы NFC, возможно проведение транзакций, используя возможности этих протоколов. Как только устройство в банкомате обнаружило карту, считывается служебная информация, которая затем используется для совершения платежей.

Злоумышленник может установить еще один картридер, которое также будет считывать информацию с карт посредством NFC-протокола, а затем передавать ее «родному» устройству банкомата. Такая атака является одним из примеров MITM-атаки (Man in the Middle Attack). В конце дня злоумышленник может вернуться к банкомату, снять устройство считывания карт и получить информацию обо всех картах, которые использовались в течение дня. В дальнейшем он может использовать эту информацию в преступных целях.

Скимминг NFC-постеров

Еще один вид атаки - использование электронных афиш совместимых с NFC протоколом. Такие постеры могут использоваться, например, для рекламы. Принцип их действия следующий: NFC-устройство прикладывается к определенному месту плаката, а затем скачивается информация. К примеру, подобным образом известный артист может рекламировать свои новые треки. В моем случае, после подключения к афише, я заполнил регистрационную форму и скачал музыкальное видео. Однако довольно часто в телефоне могут храниться персональные данные и злоумышленник, используя электронный плакат, может установить на ваш телефон вредоносную программу.

Атака с использованием ретрансляции (NFC Relay Attack)

Этот вид атаки ставит под угрозу безопасность компаний, которые используют NFC-карты для идентификации клиентов и сотрудников.

К примеру, такие карты могут использовать для прохода в здание. Злоумышленник может считать информацию с карты и сделать ее копию или же просто использовать свой телефон для проникновения в помещение.

От таких атак могут пострадать не только компании, но и рядовые граждане. Незнакомец может поднести NFC-устройство к вашей дебетовой (или кредитной) карте и считать информацию (само собой, если карта поддерживает протокол NFC), а затем использовать ее для кражи денег.

Использование NFC для атаки на Android-системы

Для известных видов меток, приложения запускаются напрямую, минуя com.android.tag, например:
  • www-данные запускают браузер
  • протокол mailto: запускает почтовый клиент
  • некорректные значения формата NDEF выводят из строя NFCService.java

Вредоносы для NFC

Эти вредоносные программы могут проксировать запросы прежде, чем они дойдут до целевого приложения. Например, при получении адреса ресурса (url), который хранится в метке, происходит разбор строки, а затем запускается вредонос вместо браузера.

Приложение можно найти по адресу: https://github.com/subho007/HTTProxy

USSD-атака через NFC

Широко известна USSD-уязвимость в телефонах Samsung Galaxy, используя которую без ведома пользователя можно сбросить настройки телефона, набрать номер или открыть браузер.

Пожелания, замечания, найденные ошибки и исправления сообщайте на почту security@xysec.com

Ссылки

  1. http://developer.android.com/guide/topics/connectivity/nfc/index.html
  2. http://media.blackhat.com/bh-us-12/Briefings/C_Miller/BH_US_12_Miller_NFC_attack_surface_WP.pdf
  3. http://nakedsecurity.sophos.com/2012/09/24/android-nfc-hack-lets-subway-riders-evade-fares/
  4. http://blackwinghq.com/assets/labs/presentations/EddieLeeDefcon20.pdf
  5. http://www.slideshare.net/the_netlocksmith/defcon-2012-nearfield-communicationrfid-hacking-miller
  6. http://www.mulliner.org/nfc/feed/nfc_ndef_security_ninjacon_2011.pdf

Если вам нравится играть в опасную игру, присоединитесь к нам - мы научим вас правилам!

Подписаться