13 февраля 2018

Дорогой бензин? Сделаем его дешевым!

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

Мы с Амиханом Нейдерманом — на тот момент сотрудником компании Azimuth Security — исследовали находку. Когда наши подозрения подтвердились, мы связались с производителем и сообщили о проблеме.

Недавно об этой истории написало онлайн-издание Motherboard VICE, а в этом посте мы поделимся некоторыми техническими деталями. Более подробную информацию о нашем исследовании мы представим в начале марта на конференции Security Analyst Summit 2018 в Канкуне.

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

Как сообщает производитель, ПО контроллера — это средство автоматизации, которое отвечает за управление всеми компонентами АЗС, в том числе топливораздаточной колонкой (ТРК), платежными терминалами и т.д.

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

До начала исследования мы искренне полагали, что все без исключения системы АЗС изолированы от интернета и находятся под надлежащим контролем. Но мы ошибались: на деле оказалось, что злоумышленник, обладающий даже минимальными навыками, может, эксплуатируя данный продукт, получить контроль над системой АЗС из любой точки мира.

Игра в прятки

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

Используя данные, полученные в результате онлайн-поиска и из других источников, мы получили географическое распределение таких заправочных станций (отображено на карте ниже). Мы обнаружили более тысячи АЗС, к которым можно получить доступ с любого компьютера в мире. Стоит отметить, что в контексте взлома IoT-устройств, АЗС — мишень намного более опасная, чем, например, веб-камеры.

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

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

Структура сети с указанием главного блока контроллера и его прав доступа

Учетные данные по умолчанию

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

Страница авторизации начальника смены с ошибками, делающими возможным полный обход

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

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

Консоль начальника смены

Консоль выглядит достаточно многофункциональной. Учитывая уровень технических знаний, требуемый от начальников смены, доступные функции позволяют им изменять параметры настройки ТРК, в том числе действующие на АЗС цены на бензин, настройки принтера, отчеты смены и т.д. Риск связан с действиями возможного инсайдера — начальник смены может вносить изменения в отчеты по смене, кассовые чеки и в цены на бензин. По нашему мнению, такие права должны быть только у владельца АЗС. Кроме того, мы подозреваем, что в сети есть другие интерфейсы, позволяющие сотруднику АЗС с расширенными правами отслеживать данные из магазина при станции и с платежного терминала. На скриншоте, приведенном выше, нет никакого указания на то, что в системе установлено защитное ПО.

Начальнику смены доступна возможность менять цены на бензин

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

Первая находка

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

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

Учетные данные, прописанные в коде. Уязвимость нулевого дня зарезервирована под номером CVE-2017-14728

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

Наряду с зашитыми в код паролями, мы обнаружили множество участков небезопасного кода, делающего возможным удаленное выполнение кода. Анализируя один из этих компонентов (soWebServer::XMLGetMeansReportRowsNumber), мы обнаружили параметр имени, который контролируется конечным пользователем и уязвим для атаки на переполнение стекового буфера. На базе этой находки мы скомпилировали полностью действующее удаленное исполнение кода. Часть этого кода представлена ниже на скриншоте.

Код, реализующий удаленную авторизацию и переполнение стекового буфера

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

Эксплуатация геоданных

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

Мы нашли XML-компонент, который отвечает за создание ежедневных отчетов, а в нем обнаружили параметр, содержащий фактическое название и местонахождение АЗС. Мы написали простую программу-прототип, которая считывает значение этого параметра.

Код, считывающий данные о названии и местонахождении АЗС

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

Как изменить цены

Если в руки злоумышленника попадут прописанные в коде учетные данные для входа в веб-интерфейс SiteOmat и он получит возможность менять входные параметры компонента update_price.cgi, то он сможет менять цены на отпускаемый бензин. Чтобы предпринять попытку такого вмешательства, нужно в первую очередь извлечь данные топливораздаточной колонки в формате JSON — из них можно узнать, какие нефтепродукты продаются и по какой цене. Это можно сделать, используя один из XML-файлов, отвечающий за хранение цен на горючее, обновляемых в режиме реального времени, в локальной базе данных.

Фрагмент кода прототипа, изменяющего цены

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

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

Платежный терминал

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

Что может сделать злоумышленник

Итак, какие же возможности получает злоумышленник, получивший контроль над системой АЗС путем эксплуатации уязвимого устройства, которое мы обнаружили? Вот несколько возможных сценариев:

  • Выключение всех заправочных систем
  • Вызывание утечки топлива, с риском жертв
  • Изменение цен на бензин
  • Обход платежного терминала для кражи денег
  • Кража данных о номерных знаках машин и личных данных водителей
  • Прерывание работы АЗС и требование выкупа
  • Выполнение кода на блоке контроллера
  • Свободный доступ ко всей сети АЗС

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

В статье издания Motherboard Vice упоминался недавний инцидент в Москве, когда хакер, написав вредоносный код, помог красть бензин у клиентов. Однако этот случай не имеет отношения к нашему исследованию. Мы не обнаружили в России ни одной АЗС, где был бы установлен описываемый контроллер, и на недавней презентации нашего исследования в Москве мы не сообщали ни название продукта и его производителя, ни технические подробности обнаруженных уязвимостей.

MITRE получила отчеты об уязвимостях, обнаруженных в ходе нашего исследования; их приоритизация еще продолжается. Мы также отправили подробную информацию об уязвимостях в CERT-группы Израиля и США.

CVE обнаруженных уязвимостей

Зарезервированные CVE Описание
CVE-2017-14728 Учетные данные администратора, встроенные в код
CVE-2017-14850 Хранимый XSS
CVE-2017-14851 SQL-инъекция
CVE-2017-14852 Незащищенный канал связи
CVE-2017-14853 Инъекция кода
CVE-2017-14854 Переполнение буфера, позволяющее удаленное исполнение кода
Авторы
  • Идо Наор

    Старший исследователь безопасности, Kaspersky GReAT