Несколько месяцев назад, занимаясь исследованием устройств, имеющих подключение к интернету, мы обнаружили нечто неожиданное и почти сразу поняли, что, вероятно, имеем дело с критической угрозой безопасности. Нам попался простой веб-интерфейс, который оказался связан с реальной заправочной станцией; мы предположили, что благодаря такой связи эту заправку можно удаленно взломать.
Мы с Амиханом Нейдерманом – на тот момент сотрудником компании Azimuth Security – исследовали находку. Когда наши подозрения подтвердились, мы связались с производителем и сообщили о проблеме.
Недавно об этой истории написало онлайн-издание Motherboard VICE, а в этом посте мы поделимся некоторыми техническими деталями. Более подробную информацию о нашем исследовании мы представим в начале марта на конференции Security Analyst Summit 2018 в Канкуне.
Исследуемое нами устройство оказалось не просто миниатюрным веб-интерфейсом. Это встроенный модуль, на котором выполняется блок контроллера на базе Linux, установленный вместе с компактным HTTPD-сервером.
Как сообщает производитель, ПО контроллера – это средство автоматизации, которое отвечает за управление всеми компонентами АЗС, в том числе топливораздаточной колонкой (ТРК), платежными терминалами и т.д.
Иными словами, контроллер является центральным узлом АЗС, и если злоумышленникам удается перехватить контроль над модулем, это может привести к катастрофическим последствиям. Еще одна тревожная деталь, которая выяснилась в ходе нашего анализа: многие экземпляры устройства были встроены в системы АЗС более десяти лет назад и все это время были подключены к интернету.
До начала исследования мы искренне полагали, что все без исключения системы АЗС изолированы от интернета и находятся под надлежащим контролем. Но мы ошибались: на деле оказалось, что злоумышленник, обладающий даже минимальными навыками, может, эксплуатируя данный продукт, получить контроль над системой АЗС из любой точки мира.
Игра в прятки
Как нам удалось установить, заправочные станции, использующие данный продукт, помечены определенным образом. Это позволяет обнаружить их, введя в поисковую систему всего одно ключевое слово. В течение нескольких секунд все подключенные к интернету АЗС выдают свое точное местоположение и доступные пассивные открытые соединения.
Используя данные, полученные в результате онлайн-поиска и из других источников, мы получили географическое распределение таких заправочных станций (отображено на карте ниже). Мы обнаружили более тысячи АЗС, к которым можно получить доступ с любого компьютера в мире. Стоит отметить, что в контексте взлома IoT-устройств, АЗС – мишень намного более опасная, чем, например, веб-камеры.
Страны с наибольшим числом АЗС, доступных из интернета (по данным Shodan и телеметрических систем)
Наше исследование в основном заключалось в изучении данных, доступных онлайн. Производитель опубликовал в интернете значительную часть технической информации об устройстве, сделав ее доступной для клиентов. В частности, опубликованы подробные руководства по эксплуатации, которые включают скриншоты, установленные по умолчанию учетные данные, описания различных команд и пошаговые инструкции для получения доступа и управления каждым интерфейсом. Эти сведения в принципе позволили нам собрать всю необходимую информацию, не написав ни единой строчки кода.
Мы стали понимать, насколько сильно устарело исследуемое устройство, когда увидели, что к нему можно получить доступ и управлять удаленно при помощи сервисов, которые в современных устройствах не используются. В руководствах по эксплуатации скрупулезно указаны используемые сервисы и сетевая архитектура. Для понимания принципов работы устройства в сети особых хакерских навыков не требуется.
Структура сети с указанием главного блока контроллера и его прав доступа
Учетные данные по умолчанию
Мы обнаружили, что установленные по умолчанию учетные данные неоднократно упоминаются в интернете. Имеются подтверждения того, что перечисленные в руководстве сервисы в какой-то момент времени были собраны поисковой системой. Поскольку она довольно новая, можно предположить, что эти сервисы в настоящее время доступны. Также мы нашли упоминания того, что протоколы 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 | Переполнение буфера, позволяющее удаленное исполнение кода |
Дорогой бензин? Сделаем его дешевым!