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

Команда исследователей из Xuanwu Lab выступила на конференции PanSec 2015 в Токио, показав несколько типов атак с использованием «отравленных» штрих-кодов. Исследователи работали с несколькими типами сканеров, и все использованные системы оказались уязвимыми — при помощи специальным образом сформированных кодов сканирующую систему можно заставить выполнять практически любые действия, включая запуск шелла и выполнение ряда прочих команд. Сама атака была названа BadBarcode.

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

«Мы не знаем, что могут сделать плохие парни. BadBarcode может заставить систему выполнить любую команду, или даже установить троян», — говорит Янг Ю, один из участников исследования. В прошлом году Ю с командой получил $100000 от Microsoft Mitigation Bypass Bounty.

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

Составленные исследователями штрих-коды приводили к выполнению таких действий компьютером, как OpenFile, SaveFile, PrintDialog. Можно и запускать браузер или другие программы.

«Мы создали несколько типов атак», — сообщил Ю. «Ключевой принцип — добавление специальных контрольных символов в штрих-код, так что считывающая система будет выполнять сторонние действия. Создать эксплоит типа BadBarcode легко. Нужно только сгенерировать соответствующий штрих код и распечатать его на бумаге», — добавил Ю.



Исправить уязвимость не так и просто, поскольку речь не идет об определенных сканерах. Уязвимости подвержена вся индустрия штрих-кодов. Команда исследователей, разработавшая «отравленные штрихкоды» после своего открытия даже не знала, к какому производителю сканеров обратиться — все они были (и есть) уязвимы.

По мнению Ю, производители не должны включать работу сканеров с ASCII по умолчанию. Плюс ко всему, необходимо отключать «горячие клавиши» для систем, которые работают со штрих-кодами.

Комментарии (25)


  1. Celtis
    16.11.2015 13:40

    Как показали специалисты по информационной безопасности, штрих-коды, если говорить о всей системе, включая считывающие устройства, довольно уязвимы.
    Реализаций декодеров бар-кодов — тысячи. Да что там — создание простейшей читалки входит в список лабораторных работ 2-3 курса для студентов многих технических вузов. Как можно утверждать, что у любой программы этого типа, получающей на вход бинарную последовательность или картинку, а на выходе выдающей строку есть общий эксплоит?


    1. vanxant
      16.11.2015 19:36
      +2

      А никто не фильртрует инпут. похоже. И, так как это клавиатура, можно подать с неё последовательность win-r,c,a,l,c,.,e,x,e


      1. vlivyur
        17.11.2015 13:16

        А разве можно сканером передать нажатие и отпускание Win?


    1. Odinokij_Kot
      17.11.2015 00:11

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


  1. DROS
    16.11.2015 13:43
    +8

    Правило — «фильтруй все входящие данные» никто не отменял, будь то штрих-код, данные с RFID-меток и прочее-прочее. Странно, что только ща эти исследователи раскопали данную проблему.


    1. bormotov
      16.11.2015 15:13

      да бред же полный чувак несет.

      У нас только при мне (уже 12 лет) везде сканеры штрихкодов, и раньше они втыкались в разрыв клавиатуры, а теперь это USB HID. И с одной стороны, конечно, на клавиатуре можно набрать команду загрузки трояна, с другой — поля ввода все валидируются, и если вместо идентификтаора чего-либо (числовой), набрать (считать сканером) 'drop table users' или что-то в этом роде. просто ничего не случится.


      1. vasimv
        16.11.2015 15:36
        +1

        Ну а если там TAB нажать — оно переключится из поля вывода на какую-нибудь кнопку? ALT-F4? :)


        1. Celtis
          16.11.2015 15:47

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


          1. vasimv
            16.11.2015 15:56

            Тут проблема в том, что на сканере штрихкода — клавиатура для управления-то есть. А разницы между этими двумя клавиатурами — никакой, с точки зрения софта (все ж plug&play, клавиатуры все одинаковые, только на разных портах). То есть, блокируя возможность управлять со штрих-ридера — мы блокируем возможность управлять устройством вообще.


        1. bormotov
          16.11.2015 15:52

          TAB, наверное переключится, Alt-F4 ничего не даст, даже если его получится засунуть в Code128.

          И хочу обратить внимание, у нас ПО работает в «тепличных условиях», доступ имеет только персонал, который несет ответственность за всё, что происохдит внутри (примерно как кассир супермаркета, о котором говорят в соседних комментариях).

          Если автор этого бреда говорил о терминалах, которые «на улице», то я не представляю, насколько левым должно быть ПО, без хоть какой-либо валидации ввода, насколько левыми должны быть требования к такому ПО, и процедуры приемки.

          Если все эти очевидные меры защиты мало кого волнуют, я почти уверен — «дырка» в виде сканера штрихкодов, даже не в первой десятке проблем безопасности.


          1. vasimv
            16.11.2015 16:05

            Не уверен, что программный интерфейс операционных систем вообще позволяет различить данные, поступающие с разных клавиатур. По-моему, там просто программе приходит сообщение о том, что на какой-то из клавиатур нажали «A» — как отличить где надо фильтровать (штрих-код), а где — не надо (управляющие клавиши)?


            1. bormotov
              16.11.2015 16:17

              а причем тут программный интерфейс операционных систем?

              Да, разумеется, в систему всё то, что прочтут сканером, попадает «как будто набрали на клавиатуре». Но это, простите, не дырка в виде сканера, это фича способа подключения.

              Еще раз акцентирую — у нас просто программа, которая запускается на рабочем месте. И эта программа, в каждом поле ввода проверяет, а что именно ей ввели. Я проверил, про Alt-F4 ничего не происходит, но Alt-F4 не получится засунуть в Code128.

              Люди, которые разрабатывают терминалы, обычно отрывают в ОС всё (или прячут, вы, например, слышали, что бывает Windows 2000 embedded?), что не касается их прикладной программы, которая суть и есть терминал.

              Так вот, моя ключевая мысль в том, что если эти люди «на следующем этапе, после USB-HID», не сделали ничего, то получения «неожиданного ввода» через сканер (суть через клавиатуру) — это проблема не из первого десятка важности.


              1. vasimv
                16.11.2015 16:27

                Такое возможно только для очень ограниченного приложения, которое пользователем не управляется, а только принимает данные. Кассовый аппарат, например — уже в такие рамки не загонишь (так как имеется клавиатура кассира с «плохими кнопками», которые можно «нажать» через штрих-код, плюс еще — управляющие комбинации какие-то, для сервисных целей). Ну и, опять же, всякие magic-комбинации самой операционки — не отфильтруешь. То есть для сложной системы, где разработчик не заморачивается с вводом и самостоятельным распознаванием кнопок через какой-нибудь rawinput, а также настройкой самой операционки для отключения magic-комбинаций — дырка действительно существует.


                1. bormotov
                  16.11.2015 16:39

                  вы рассказываете очень странные вещи, которые совершенно не совпадают с моим реальным опытом.

                  У нас система сложнее, чем кассовый терминал.

                  На оборудовании, где я встречал Windows 2000 embedded, тоже вполне себе нормальные приложения, и если вдруг внезапно не застать экран загрузки, или не знать пароль выхода «в систему», то вообще никак не догадается, что там внутри Windows.

                  Вы уверены, что magic-комбинации не фильтруются?
                  Вы уверены. что magic-комбинации можон закодировать в штрихкодах?

                  А теперь идем и читаем в статье

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


                  Хочу Code128 штрихкод, в котором будет Alt-F4, хотя-бы или Win-R.

                  И еще раз выскажу свой тезис — если разработчик embedded-систмы (терминала), не заморачивается безопасностью — гнать в шею такого разработчика. А люди, которые таким «незамороченым» заказывают разработку, сами себе злобные, пусть их системы ломают через штрихкоды, пусть терпят миллионы убытков.


            1. Celtis
              16.11.2015 16:18
              +1

              Операционные системы — они разные бывают :)
              Некоторые вполне себе позволяют получать ввод только из выбранного источника ( например /dev/usb0 ) или из нескольких, но обработку каждого вести отдельно.


  1. Aclz
    16.11.2015 14:43
    +3

    Статья изобилует жареными фактами, типа «отсканировал штрихкод — установил троян». Бегло ознакомившись с презентацией, оказывается, что сканер на поверку оказывается не опаснее клавиатуры, таким образом опасность представляется лишь для систем публичного доступа с тач-скрином без клавиатуры, но со сканером, типа терминалов экспресс-оплаты.

    В EAN128 помимо ASCII-символов есть эмуляция некоторых горячих клавиш, типа Ctrl+P. Таким образом, вектор атаки направлен на, скажем, вызов диалога печати, через который иногда можно запустить оболочку, экранную клавиатуру и т. п… В реальности это легко подавляется на софтовом уровне. В драйверах же многих вендоров горячие клавиши по-умолчанию отключены. Плюс, сканер нужен не любой, а устанавливающийся в разрыв клавиатуры (PS/2), такие сканеры в терминалах экспресс-оплаты обычно не используются (в основном RS232/USB), а используются (впрочем, всё реже) на кассовых POS-теминалах, на которых вызов диалога печати ни к чему не приведет, т.к. за кассой стоит кассир (плюс, на которых, в свою очередь, часто вообще отключен скан формата EAN-128).


  1. DrPass
    16.11.2015 15:16

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


  1. ragesteel
    16.11.2015 15:19

    У меня сейчас на столе сканер от Metrologic. Прочитав его мануал, я понял что по USB его к терминалам самообслуживания лучше не подключать. По-умолчанию он эмулирет клавиатуру. Потом он ещё конфигурируется штрихкодами, в том числе его переключить с USB-клавиатуры на USB-serial и обратно.


    1. bormotov
      16.11.2015 15:55

      то есть до страницы, как поставить «пароль» на вход в режим конфигурации, и прочее ограничения вы не дочитали?

      Видимо, те люди, которые сделали «уязвимые системы», с которыми столкнулась «команда исследователей», тоже не дочитали.


      1. qw1
        16.11.2015 21:53

        Вы о чём? Там некуда вводить пароль, это простенький считыватель на USB-шнурке

        Скрытый текст


        1. bormotov
          16.11.2015 22:09

          мне казалось, что в какой-то из инструкций я читал, что можно защитить «вход в режим программирования», неким «паролем», который точно так же вводится, считыванием штрихкодов. Видимо, мне это только казалось.

          Ок, вы правы, ваш сканер, а ровно как и другие ручные сканеры, нельзя оставлять без присмотра в чужих руках.

          Промышленные сканеры, чаще всего подключаются на какой-либо Serial-порт (rs232), и через считывание специальных штрихкодов свои настройки не умеют менять.


          1. qw1
            17.11.2015 10:35

            Можно оставлять, изменение режимов приведёт к невозможности нормальной работы, которую обслуживающий инженер быстро починит, отсканировав ШК сброса к заводским настройкм и серию ШК выбора нужного режима работы (они распечатаны подряд на одном листке).
            Точно также нельзя «промышленный» сканер давать в чужие руки, т.к. злоумышленник может заклеить один из USB-контактов, что тоже приведёт к неработоспособности сканера.


            1. bormotov
              17.11.2015 10:51

              Промышленные так ставят, что только считыватель доступен, остальное всё глубоко и недоступно.

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


  1. NeoCode
    16.11.2015 16:35
    +5

    image


  1. 3dtim
    16.11.2015 16:55
    +2

    Где-то я читал про схожие методы… А, вспомнил: Пелевин «Зенитные кодексы Аль-Эфесби»