Компания
302,30
рейтинг
22 декабря 2014 в 16:00

Разработка → Уязвимости публичных терминалов: как взломать велопрокат и поликлинику

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

image

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

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

image

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

image

К настоящему времени часть подобных лазеек закрыта. Но далеко не все! Посмотрим на ситуацию с позиции программиста. Что он может упустить из виду?

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

Атака на велопрокат


Приложение в терминале велосипедной парковки красиво оформлено, ввод символов оттестирован… Но было в нем одно нехорошее «но». Помимо формы для регистрации пользователя в интерфейсе присутствует справочный раздел с картой. На ней есть много полезной информации: где находится данный терминал и другие велосипедные парковки, как добраться до ближайших кафе, кинотеатров и прочих «точек интереса». Карта реализована на базе стандартного виджета Google. Там и спряталась ошибка.

Если присмотреться, то в правой нижней части виджета можно увидеть ссылки «Сообщить о проблеме», «Конфиденциальность» и «Условия использования». Нажимаем на любую из них — и появляется стандартное окно Internet Explorer.

image

Окно браузера можно было открыть по-другому: кликая кнопку «Подробнее» при выборе местоположения тех или иных объектов.

image

Полдела сделано.

Справочный раздел в Internet Explorer позволяет добраться до всех элементов и системных программ ОС. Немного уличной магии, и мы оказываемся в «Центре специальных возможностей» панели управления, откуда запускаем экранную клавиатуру.

image

Можно и напрямую добраться до клавиатуры: выйти в «Проводник» последовательным выбором свойств браузера Internet Explorer — вкладки «Общие», кнопки «Параметры», «Просмотреть объекты» — и нажав на приложение Osk.exe в папке C:\Windows\System32.

Вооружившись виртуальной клавиатурой, набираем cmd.exe и запускаем командную строку, где с помощью команды WHOAMI проверяем статус в системе. У нас оказались права администратора, так что можно надевать малиновые штаны и хозяйничать.

image

Сценарии эксплуатации


Полноценный выход в интернет в терминале был доступен, несмотря на строгие рекомендации по ограничению доступа во внешнюю сеть для таких устройств. Нарушитель мог отправиться на тот же exploit-db, скачать вредоносные приложения на жесткий диск устройства и запустить их, а также извлечь пароль администратора с помощью известных программ для взлома пароля (mimikatz, WCE, Fgdump, pwdump). Стоит добавить, что у разных велопаркоматов с большой долей вероятности могли быть одинаковые пароли администратора.

Что еще мог бы сделать кибервзломщик? Подменять файлы в системном каталоге, повышать привилегии, дампить пользовательские данные. Откровенные недостатки конфигурации оставляли нарушителю пространство и для совсем головокружительных маневров. Сконструировать на базе захваченных терминалов ботнет, пул для майнинга, уютную баннерную сеть со своей рекламой… Помимо обычного перехвата вводимых персональных данных с помощью кейлогера, злоумышленник мог отправить приложение парковки себе по сети, внести в него изменения (к примеру, добавить поле с требованием указывать трехзначный код CVV/CVV2) и установить обратно. Пользователи вряд ли ,s сразу что-нибудь заподозрили, вот только поездка на велосипеде обошлась бы им недешево…

Коварное окно печати


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

image

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

image

А если копнуть глубже


Автор этой статьи и его коллеги только за последний год сталкивались с небезопасной работой инфоматов «Электронного правительства», инфокиосков в одном из российских аэропортов, систем развлечений самолета, удаленных терминалов АСУ ТП (SCADA), а также запускали Angry Birds на банкомате. В последнее время российские поликлиники активно оснащаются терминалами, в которых любой желающий может записаться на прием к врачу. Без должного внимания к безопасности терминалов мы рискуем стать свидетелями массовых утечек сведений, составляющих уже и врачебную тайну.

image

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

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

Что делать


Основная беда публичных терминалов с сенсорными экранами — сворачивание главного приложения и попадание нарушителя в интерфейс Windows. Разработчикам необходимо заблокировать всплывающие меню при долгом нажатии на экран (как при нажатии правой клавиши мыши) и исключить вызов окна печати, откуда можно проникнуть в панель управления Windows. Рекомендуем также использовать embedded сборки ОС, которые лишены ряда недостатков безопасности стандартных версий — в частности, не используют рабочий стол (но все равно, правда, не защищают от открытия того же IE).

В обязательный минимум мероприятий входит проверка всех ссылок полноэкранного приложения и сторонних виджетов. Если при переходе по веб-адресу открывается новое окно браузера, следует отключить такую возможность, отредактировав код виджета и удалив ссылки. Основное приложение терминала должно всегда находиться поверх всех окон Windows: в этом могут помочь различные утилиты (например, Window On Top).

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

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

P. P. S. Благодарю Дениса Макрушина за помощь в проведении исследования.

Автор: Станислав Мерзляков
Автор: @ptsecurity
Positive Technologies
рейтинг 302,30

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

  • +1
    А не проверяли вы режим киоска встроенный в windows 8.1 с каким ни будь Metro приложением?
    • +1
      Пока в практике ни одного киоска с восьмеркой не попадалось. Вообще, на YouTube можно найти проблемы и с Linux-терминалами, правда там ошибки немного другого рода — например, «дрова» сенсорного экрана кривые и при определенных нажатиях ОС получает SEGFAULT и уходит в ребут.
      • +25
        Если ось при падении киоск-приложения не показывает десктоп с вкусняшками и правами админа, а молча уходит в ребут и запускает киоск обратно — это хорошая, годная ось.
        • +7
          Вы не попадали в обидную ситуацию, когда засовываете >$1000 единоразово в банкомат, а он молча уходит в ребут, не дав ни чека, ни сделав зачисления на счёт. Разбирательство длилось несколько месяцев, в течение которых деньги не были потрачены на те цели, на которые выделялись и при этом потеряли в стоимости из-за инфляции. Ребут — слишком крайняя мера. Не мешало бы всем причастным больше думать головой при написании софта, чтобы до ребута не доводить и обрабатывать максимальное число ошибок корректно.
          • +7
            ОК, приложение УЖЕ упало. Если это хорошее, годное приложение, то оно перед падением записывало все свои действия в лог, и при перезапуске сможет этот лог поднять и завершить либо корректно откатить транзакцию. От ОС тут уже ничего не зависит.

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

            И в обоих вариантах наилучшим решением будет ребутнуться и запустить приложение обратно.
            • +1
              Поэтому ему нельзя дать упасть «УЖЕ». Я на этом заостряю внимание. ОС действительно не должна быть «при чём». А если всё так, как вы обозначили, то да — безусловно ребут.

              «А помрёт — так помрёт»
              © Виктор Цой
          • +2
            Удивляюсь, почему до сих пор в терминалах, в устройствах приема банкнот, не стоит памяти с минимальным контроллером. В такую память можно автономно записывать все введенные купюры, а затем, когда терминал завершил транзакцию, — по отдельной команде терминала ставить им флаг (своего рода «гасить»). Соответственно, не погашенные таким образом купюры легко отследить (удаленно и почти моментально), и сотрудникам техподдержки предпринять какие-либо меры (создать тикет, провести до конца платеж и т.д.).

            Сейчас же, по сути, купюроприемник лишь дает информацию терминалу, какого номинала бумажку в него вставили, а также ведет счетчик на случай переполнения ящика.
    • +2
      Пробовал. Забудьте как недоразумение все эти «режимы киоска» в винде. В восьмерке этот режим — это IE со всеми его дырами и доступной боковой панелью. Чтобы заюзать что-то свое — это там надо очень извратиться.
      В общем случае надо делать так (работает на любой версии Windows):
      1. Создаем ограниченного юзера.
      2. В реестре ему прописываем следующее:
      [HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
      «Shell»=«path\to\my\programm.exe»
      Вот теперь это будет настоящий режим киоска. Если приложение упадет — будет просто черный экран. Проводник можно запустить при подключении клавиатуры и далее Win+R / Ctrl+Alt+Del. Впрочем, можно и это отрубить — записав в ScancodeMap другие клавиши. По использованию браузеров в качестве оболочки: вполне можно использовать хром — там есть возможность отключения рамок и кнопок окна. Но в целом скудноват. Использую NodeWebkit: он как раз с настоящим режимом киоска и куда более широкими возможностями — nodejs со всеми её плюшками. Ну конечно он прекрасно работает в линуксе =)
      Хотелось бы отметить, что кроме винды, в кисоках могут быть баги и со стороны сборщиков/конструкторов железа — доступные сетевые или юсб порты, например.
      • 0
        Да, только подмена shell'а, только хардкор. Ещё есть замечательный раздел RestrictRun. А есть вообще интереснейший вариант, запуск приложения как службы, без выполнения входа в систему. Правда не все приложения таким образом работают корректно.
  • +34
    Основная беда публичных терминалов с сенсорными экранами — <пропущена неважная информация> Windows.

    Согласен
    • +4
      Если подходить объективно, то основная проблема — низкая квалификация администраторов/инсталляторов таких устройств. Можно и из Windows сделать весьма устойчивую к подобным взломам вещь, просто нужно иметь кое-какие знания и, главное, желание. А с подходом «тяп-ляп, и так сойдет» из любой ОС можно решето сделать.
      • +1
        Кстати да, на Windows CE и XP Embedded миллиарды промышленных устройств работают десятилетиями и проблем нет.
  • +1
    Спасибо, хорошая статья.

    В Украине стоят практически одинаковые терминалы, которые элементарно вскрываются по аналогичному алгоритму. Часто сталкивался, но на статью меня не хватило. А у вас — все здорово вышло.
  • +3
    А если это еще и платежный терминал, то можно поменять таблицу купюр или перепрошить купюроприемник.
    Вставляешь 10 рублей, ПО воспринимает ее как 5000, например. Но так делать нельзя.
    • 0
      да, именно платежных похожих терминалов я встречал не меньше сотни по Украине. И часто возникало подобное желание, но… Да, так делать нельзя.
      С другой стороны, возможно это как-то растормошит администратора.
      • +2
        «Органы» это точно растормошит. Хоть на Украине, хоть в России, хоть в Зимбабве, просто число необходимых тормошений от страны может отличаться )
  • +2
    Сам, периодически, пишу софт для киосков. Подобные косяки, как правило, всплывают при переходе с Windows XP (Embedded) на 7 и старше. Там добавили различные жесты, в т.ч. и долгое нажатие. Так что тут зависит уже от настройки системы, все эти свистелки сразу выключаю, но иногда не знаешь, куда поставят твою программу и кто будет настраивать. Поэтому пишу на WPF, там с такими манипуляциями сложнее.

    Рекомендуем также использовать embedded сборки ОС, которые лишены ряда недостатков безопасности стандартных версий — в частности, не используют рабочий стол
    Сколько сборок Embedded видел, везде рабочий стол на месте. :) Приходится ручками заменять в реестре shell с Проводника на свою программу.
    • 0
      есть embedded linux ;-) ну и возможностей кастомизации на несколько порядков больше
      • 0
        сейчас по моему идеально для внедрения андройд коробки. Дешевые, маленькие, без вентиляторов, софт на выбор.
        • +2
          А драйвера для периферии?
        • 0
          ну как бы все коробки на Allwinner A10/20 и т.п. гарантированно работают в диапазоне температур 0-50+
          Тем более драйвера для таких железок есть и под linux и под android
          • 0
            Для работы на морозе вряд ли сгодятся
            • 0
              Телефон ведь на улице зимой работает?
              • 0
                Терминалы из статьи как раз таки часто на улице!
                • 0
                  А что там будет при минусе? Помоему только плюсы — сверхпроводимость) и охлаждение. Ну только разве что… конденсат может возникнуть да и только…
                  • 0
                    Сверхпроводимость!? Вы на пару порядков в числах наверное ошиблись?)

                    Википедия описывает диапазоны температур промэлектроники. Еще информация о температурных диапазонах и стендах для испытания. Также здесь уже была статья «Микроэлектроника для космоса и военных»

                    Что будет:
                    — ничего не произойдет, будет работать (в подавляющем большинстве случаев)
                    — параметры будут не соответствовать документации
                    — выход из строя

                    Окисление контактов и КЗ от конденсата, ну и не надо забывать о свойствах сплавов, припоев и т.п. «Оловянная чума»

                    Может DIHALT поделится своими знаниями по поводу рабочего диапазона температур электроники?
                    • 0
                      Оловянная чума это некорректный пример. Где вы чистое олово в электронике видели?
                      • 0
                        Согласен, что идиализированно. Лишь как пример изменения свойств припоя под действием низких температур
                • 0
                  Извините, я не совсем понял ваш ответ.
                  Если я правильно понял, то вы высказали опасение, что железо под управлением андроида не будет работать в минусовых температурах. Но ведь обычные андроидофоны работают зимой на улице в минус, так ведь? У них проблема только в расходе батарейки, что не является здесь критичным параметром.
                  • 0
                    Тут вопрос не к операционной системе, а к надежности работы электронной части. Смотрите комментарий

                    Не уверен что телефоны работают без проблем при -25 -30 достаточно долго. Компоненты, монтаж, конструктив, влагозащищенность… Вы много бесхозных работающих андроидфонов на морозе видели?)
  • +1
    Однажды удалось выйти в систему банально кликнув на сообщение об ошибке подключения к сети :)
  • 0
    Thinstation c загрузкой образа по pxe, или с flash. Всё кастомизируется — например Firefox + plugin kiosk. Правда не стоит забывать и о iptables. Без брандмауэра, элементарно в несколько кликов можно выйти на google и т.д.
    • 0
      У киосков обычно GPRS. Долго ж грузиться будет.
  • 0
    А как насчет лицензий Windows для терминалов? Что, лицензию берут что ли на все? И не проще было бы хотя бы из-за лицензии использовать GNU/Linux? Почему на терминалах Windows?
    • +2
      На .NET скорость разработки таких штук высока
      • +1
        Точно? А почему тогда интерфейс реализуется браузером?

        Да и .NET под линух GNU/Linux не проблема. А Mono вообще сто лет как есть.
        • 0
          Про эти терминалы не знаю. Я про платежные.
          Скорость, а не возможность.
  • +3
    Надо просто на терминалы и банкоматы ставить OS/2.
  • 0
    Помню еще году в 1997-1998 на Комсомолке стояла диковинка — похожий на нынешние платежные терминал с картой Москвы. Только там еще был встроенный принтер, на который теоретически можно было напечатать карту, но реально бумага в нем закончилась и больше ее не заправляли. Собственно, у него я открыл эту уязвимость в виде кнопки «Пуск», которая нащупывалась внизу экрана. Ощущал себя крутым хакером и казалось — вот сейчас как войду через этот терминал в сеть метрополитена! Детство-детство… Хорошо, что не поймали, «автоматчиков» тогда многих ловили, предварительно дождавшись, когда они на крупный размер наговорят, чтобы срок реальный влепить можно было.
  • +3
    Сейчас на ВДНХ проходит выставка «Механика чуда». Стоит штук 20 сенсорных панелей LG, на всех запущен обычный флеш плеер на весь экран. Все операции контекстного меню работают, клавиатура не отключена, интернет работает полноценно. Правда туда вход платный, поэтому не так много кулхацкеров.

    Потыкал одну панель, в журнале посещений IE, последние сайты — ВК, порнушка…
  • +2
    Когда мне понадобилось сделать подобный информационный киоск в 2008 году, сразу хотел отказаться от использования Windows на данных терминалах. И реализовал на основе Slax. Из-за нехватки времени, удалось урезать его всего до 300MB, но на тот момент USB флешки уже были как минимум на 1GB, так что ими и воспользовались. Slax очень хорошо подошла, там диски монтировались только на чтение, кроме одной папки. из которой бралась только информация о калибровке для драйвера тачскрина, и ссылка на наше веб приложение, работал терминал только внутри сети, без доступа в интернет. Запускались там голый X, который сразу запускал FireFox с плагином киоска, который урезал лишние возможности. Первый запуск с такой флешки, из-за отсутствия информации по калибровке, запускал калибровщик экрана, и после запускалось наше приложение. Старт соответственно был довольно шустрый, по железа того времени. Для тех кто обслуживал эти терминалы, был сделан простой виндовый установщик, который форматировал и записывал на нее загрузчик и все необходимое для запуска терминала. Оставалось только воткнуть флешку в USB и запустить. Проблема в дальнейшем была уже с добавлением других драйверов тачскрина, и принтера, когда решили еще и печатать.
  • 0
    Забавно, те же самые проблемы что и у компьютерных клубов лет десять назад. Стабильно минимум раз в месяц детишки находили новый способ обходить блокировки и играть на халяву.
    • 0
      Ага пока я не написал програмку свою, которая пресекала все попытки.
  • 0
    Тот неловкий момент, когда видишь знакомый интерфейс киоска, который когда то совместно с дизайнером вкорячивал… Интересно совпадение оформления или нет =)
  • +1
    В последнее время российские поликлиники активно оснащаются терминалами, в которых любой желающий может записаться на прием к врачу. Без должного внимания к безопасности терминалов мы рискуем стать свидетелями массовых утечек сведений, составляющих уже и врачебную тайну.

    По больничкам не знаю, год назад ставили терминалы в налоговые местные. Софт писала одна уральская контора. (Все под виндой, качество работы так себе).
    Но данных интересных там тупо нет. Максимум что можно получить — ФИО, дата на которую запланировано посещение (это если через интернет записываешься), причина посещения, номер окна. В поликлинике думаю тоже самое.
    • +1
      Этих данных более чем достаточно для социального инжиниринга. Представьте, что вам звонят якобы из поликлиники, при этом точно знают не только ФИО, но и когда, к кому и по какому поводу вы записаны на прием. Доверие будет стопроцентное, а что с этим доверием делать — уже вопрос задач злоумышленника.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка