Штрих-коды распространены очень широко, сейчас сложно себе представить, что когда-то товары распространялись без них. И именно популярность привлекает внимание злоумышленников к этой системе. Как показали специалисты по информационной безопасности, штрих-коды, если говорить о всей системе, включая считывающие устройства, довольно уязвимы.
Команда исследователей из Xuanwu Lab выступила на конференции PanSec 2015 в Токио, показав несколько типов атак с использованием «отравленных» штрих-кодов. Исследователи работали с несколькими типами сканеров, и все использованные системы оказались уязвимыми — при помощи специальным образом сформированных кодов сканирующую систему можно заставить выполнять практически любые действия, включая запуск шелла и выполнение ряда прочих команд. Сама атака была названа BadBarcode.
Команда Xuanwu Lab показала также, что атака такого типа является достаточно простой, а сказать, какие модели сканеров и сканирующих систем требуют обновления для закрытия уязвимости очень сложно.
«Мы не знаем, что могут сделать плохие парни. BadBarcode может заставить систему выполнить любую команду, или даже установить троян», — говорит Янг Ю, один из участников исследования. В прошлом году Ю с командой получил $100000 от Microsoft Mitigation Bypass Bounty.
Ю сказал, что взлом сканирующих систем возможен благодаря тому, что большинство штрих-кодов содержат не только цифры и буквы, но и ASCII-символы, в зависимости от того, какой протокол используется. Сканеры штрих-кодов, в большинстве случаев, это эмулятор клавиатуры. И если сканер поддерживает протокол Code128, где используются символы ASCII, злоумышленник может создать штрих-код, который заставляет компьютерную систему сканера выполнять сторонние действия, вплоть до установки трояна.
Составленные исследователями штрих-коды приводили к выполнению таких действий компьютером, как OpenFile, SaveFile, PrintDialog. Можно и запускать браузер или другие программы.
«Мы создали несколько типов атак», — сообщил Ю. «Ключевой принцип — добавление специальных контрольных символов в штрих-код, так что считывающая система будет выполнять сторонние действия. Создать эксплоит типа BadBarcode легко. Нужно только сгенерировать соответствующий штрих код и распечатать его на бумаге», — добавил Ю.
One of the demos of our talk "BadBarcode: How to hack a starship with a piece of paper". See you in PacSec 2015. pic.twitter.com/tu8XZjegHP
— Yang Yu (@tombkeeper) 9 ноября 2015
Исправить уязвимость не так и просто, поскольку речь не идет об определенных сканерах. Уязвимости подвержена вся индустрия штрих-кодов. Команда исследователей, разработавшая «отравленные штрихкоды» после своего открытия даже не знала, к какому производителю сканеров обратиться — все они были (и есть) уязвимы.
По мнению Ю, производители не должны включать работу сканеров с ASCII по умолчанию. Плюс ко всему, необходимо отключать «горячие клавиши» для систем, которые работают со штрих-кодами.
Комментарии (25)
DROS
16.11.2015 13:43+8Правило — «фильтруй все входящие данные» никто не отменял, будь то штрих-код, данные с RFID-меток и прочее-прочее. Странно, что только ща эти исследователи раскопали данную проблему.
bormotov
16.11.2015 15:13да бред же полный чувак несет.
У нас только при мне (уже 12 лет) везде сканеры штрихкодов, и раньше они втыкались в разрыв клавиатуры, а теперь это USB HID. И с одной стороны, конечно, на клавиатуре можно набрать команду загрузки трояна, с другой — поля ввода все валидируются, и если вместо идентификтаора чего-либо (числовой), набрать (считать сканером) 'drop table users' или что-то в этом роде. просто ничего не случится.vasimv
16.11.2015 15:36+1Ну а если там TAB нажать — оно переключится из поля вывода на какую-нибудь кнопку? ALT-F4? :)
Celtis
16.11.2015 15:47Не секрет, что обезопаситься от реакции на горячие клавиши мягко говоря несложно.
Если создатели вышеописаных терминалов этого не сделали, то либо в виду паталогической лени, либо в силу попыток руководства экономить на спичках.vasimv
16.11.2015 15:56Тут проблема в том, что на сканере штрихкода — клавиатура для управления-то есть. А разницы между этими двумя клавиатурами — никакой, с точки зрения софта (все ж plug&play, клавиатуры все одинаковые, только на разных портах). То есть, блокируя возможность управлять со штрих-ридера — мы блокируем возможность управлять устройством вообще.
bormotov
16.11.2015 15:52TAB, наверное переключится, Alt-F4 ничего не даст, даже если его получится засунуть в Code128.
И хочу обратить внимание, у нас ПО работает в «тепличных условиях», доступ имеет только персонал, который несет ответственность за всё, что происохдит внутри (примерно как кассир супермаркета, о котором говорят в соседних комментариях).
Если автор этого бреда говорил о терминалах, которые «на улице», то я не представляю, насколько левым должно быть ПО, без хоть какой-либо валидации ввода, насколько левыми должны быть требования к такому ПО, и процедуры приемки.
Если все эти очевидные меры защиты мало кого волнуют, я почти уверен — «дырка» в виде сканера штрихкодов, даже не в первой десятке проблем безопасности.vasimv
16.11.2015 16:05Не уверен, что программный интерфейс операционных систем вообще позволяет различить данные, поступающие с разных клавиатур. По-моему, там просто программе приходит сообщение о том, что на какой-то из клавиатур нажали «A» — как отличить где надо фильтровать (штрих-код), а где — не надо (управляющие клавиши)?
bormotov
16.11.2015 16:17а причем тут программный интерфейс операционных систем?
Да, разумеется, в систему всё то, что прочтут сканером, попадает «как будто набрали на клавиатуре». Но это, простите, не дырка в виде сканера, это фича способа подключения.
Еще раз акцентирую — у нас просто программа, которая запускается на рабочем месте. И эта программа, в каждом поле ввода проверяет, а что именно ей ввели. Я проверил, про Alt-F4 ничего не происходит, но Alt-F4 не получится засунуть в Code128.
Люди, которые разрабатывают терминалы, обычно отрывают в ОС всё (или прячут, вы, например, слышали, что бывает Windows 2000 embedded?), что не касается их прикладной программы, которая суть и есть терминал.
Так вот, моя ключевая мысль в том, что если эти люди «на следующем этапе, после USB-HID», не сделали ничего, то получения «неожиданного ввода» через сканер (суть через клавиатуру) — это проблема не из первого десятка важности.vasimv
16.11.2015 16:27Такое возможно только для очень ограниченного приложения, которое пользователем не управляется, а только принимает данные. Кассовый аппарат, например — уже в такие рамки не загонишь (так как имеется клавиатура кассира с «плохими кнопками», которые можно «нажать» через штрих-код, плюс еще — управляющие комбинации какие-то, для сервисных целей). Ну и, опять же, всякие magic-комбинации самой операционки — не отфильтруешь. То есть для сложной системы, где разработчик не заморачивается с вводом и самостоятельным распознаванием кнопок через какой-нибудь rawinput, а также настройкой самой операционки для отключения magic-комбинаций — дырка действительно существует.
bormotov
16.11.2015 16:39вы рассказываете очень странные вещи, которые совершенно не совпадают с моим реальным опытом.
У нас система сложнее, чем кассовый терминал.
На оборудовании, где я встречал Windows 2000 embedded, тоже вполне себе нормальные приложения, и если вдруг внезапно не застать экран загрузки, или не знать пароль выхода «в систему», то вообще никак не догадается, что там внутри Windows.
Вы уверены, что magic-комбинации не фильтруются?
Вы уверены. что magic-комбинации можон закодировать в штрихкодах?
А теперь идем и читаем в статье
И если сканер поддерживает протокол Code128, где используются символы ASCII, злоумышленник может создать штрих-код, который заставляет компьютерную систему сканера выполнять сторонние действия, вплоть до установки трояна.
Хочу Code128 штрихкод, в котором будет Alt-F4, хотя-бы или Win-R.
И еще раз выскажу свой тезис — если разработчик embedded-систмы (терминала), не заморачивается безопасностью — гнать в шею такого разработчика. А люди, которые таким «незамороченым» заказывают разработку, сами себе злобные, пусть их системы ломают через штрихкоды, пусть терпят миллионы убытков.
Celtis
16.11.2015 16:18+1Операционные системы — они разные бывают :)
Некоторые вполне себе позволяют получать ввод только из выбранного источника ( например /dev/usb0 ) или из нескольких, но обработку каждого вести отдельно.
Aclz
16.11.2015 14:43+3Статья изобилует жареными фактами, типа «отсканировал штрихкод — установил троян». Бегло ознакомившись с презентацией, оказывается, что сканер на поверку оказывается не опаснее клавиатуры, таким образом опасность представляется лишь для систем публичного доступа с тач-скрином без клавиатуры, но со сканером, типа терминалов экспресс-оплаты.
В EAN128 помимо ASCII-символов есть эмуляция некоторых горячих клавиш, типа Ctrl+P. Таким образом, вектор атаки направлен на, скажем, вызов диалога печати, через который иногда можно запустить оболочку, экранную клавиатуру и т. п… В реальности это легко подавляется на софтовом уровне. В драйверах же многих вендоров горячие клавиши по-умолчанию отключены. Плюс, сканер нужен не любой, а устанавливающийся в разрыв клавиатуры (PS/2), такие сканеры в терминалах экспресс-оплаты обычно не используются (в основном RS232/USB), а используются (впрочем, всё реже) на кассовых POS-теминалах, на которых вызов диалога печати ни к чему не приведет, т.к. за кассой стоит кассир (плюс, на которых, в свою очередь, часто вообще отключен скан формата EAN-128).
DrPass
16.11.2015 15:16Полагаю, все системы, в которых нашли уязвимость на уровне штрих-кодов, точно так же были уязвимы и на уровне клавиатурного ввода. Речь просто идет об отсутствии контроля над входными данными в целом, а не о какой-то особенности сканеров штрих-кодов. Которые в общем случае ничем от других устройств ввода не отличаются.
ragesteel
16.11.2015 15:19У меня сейчас на столе сканер от Metrologic. Прочитав его мануал, я понял что по USB его к терминалам самообслуживания лучше не подключать. По-умолчанию он эмулирет клавиатуру. Потом он ещё конфигурируется штрихкодами, в том числе его переключить с USB-клавиатуры на USB-serial и обратно.
bormotov
16.11.2015 15:55то есть до страницы, как поставить «пароль» на вход в режим конфигурации, и прочее ограничения вы не дочитали?
Видимо, те люди, которые сделали «уязвимые системы», с которыми столкнулась «команда исследователей», тоже не дочитали.qw1
16.11.2015 21:53Вы о чём? Там некуда вводить пароль, это простенький считыватель на USB-шнурке
Скрытый текстbormotov
16.11.2015 22:09мне казалось, что в какой-то из инструкций я читал, что можно защитить «вход в режим программирования», неким «паролем», который точно так же вводится, считыванием штрихкодов. Видимо, мне это только казалось.
Ок, вы правы, ваш сканер, а ровно как и другие ручные сканеры, нельзя оставлять без присмотра в чужих руках.
Промышленные сканеры, чаще всего подключаются на какой-либо Serial-порт (rs232), и через считывание специальных штрихкодов свои настройки не умеют менять.qw1
17.11.2015 10:35Можно оставлять, изменение режимов приведёт к невозможности нормальной работы, которую обслуживающий инженер быстро починит, отсканировав ШК сброса к заводским настройкм и серию ШК выбора нужного режима работы (они распечатаны подряд на одном листке).
Точно также нельзя «промышленный» сканер давать в чужие руки, т.к. злоумышленник может заклеить один из USB-контактов, что тоже приведёт к неработоспособности сканера.bormotov
17.11.2015 10:51Промышленные так ставят, что только считыватель доступен, остальное всё глубоко и недоступно.
Вопрос-то не столько в работоспособности, сколько в способе пробраться дальше сканера. В общем, как бы то ни было, я не считаю что какой бы сканер не был — это просто ввод, который мы по-большему счету не контролируем. И всё, что оттуда валится, нужно валидировать, отсекать лишнее, прикладывать к этому усилия, ни на кого не надеясь.
Иначе ни о какой безопасности речи быть не может.
3dtim
16.11.2015 16:55+2Где-то я читал про схожие методы… А, вспомнил: Пелевин «Зенитные кодексы Аль-Эфесби»
Celtis
vanxant
А никто не фильртрует инпут. похоже. И, так как это клавиатура, можно подать с неё последовательность win-r,c,a,l,c,.,e,x,e
vlivyur
А разве можно сканером передать нажатие и отпускание Win?
Odinokij_Kot
Вы посмотрите не реализации сканеров. Обычно они эмулируют клавиатуру и передают цифры-буквы как будто их ввели с клавиатуры. Тут то и открывается простор для творчества.