image

В этом году конкурсная программа Positive Hack Days пополнилась соревнованием по взлому элементов системы smart grid — «MeterH3cker». В распоряжении участников был макет двух домов, по задумке организаторов солнечные батареи обеспечивали дома электроэнергией, а возникающие излишки энергии можно было продавать в общую электросеть по специальному тарифу. Задачей атакующих было любыми возможными способами нарушить нормальный процесс учета электроэнергии и повлиять на денежный баланс в биллинговой системе.

Стенд


image

Стенд MeterH3cker

Современные дома, оснащенные солнечными батареями, могут как потреблять электроэнергию, так и отдавать излишки генерации обратно в сеть. Эта модель и легла в основу стенда MeterH3cker.

Стенд представлял собой макет двух современных жилых домов с реальным оборудованием, в которых реализованы элементы технологии smart grid. В каждом доме были установлены контроллеры солнечной батареи, умные электросчетчики и энергопотребители. Оба дома были подключены к макету электроподстанции, на которой было установлено устройство сбора и передачи данных (УСПД); оно опрашивало счетчики и подстанционный счетчик.

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

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

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

Для визуализации результатов мы написали собственный биллинговый сервер, который собирал данные с УСПД. Само УСПД, в свою очередь, опрашивало счетчики несколькими способами:

  1. счетчик в доме № 1 — по открытому вендорскому Modbus-подобному протоколу;
  2. счетчик в доме № 2 опрашивался устройством VR-007.3 по открытому вендорскому Modbus-подобному протоколу, а затем УСПД получало данные с веб-сервера VR-007.3 по HTTP;
  3. счетчик подстанции — по протоколу Modbus TCP.

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

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

image

Отображение текущих значений для каждого дома: баланс лицевого счета, потребленная и отданная в сеть энергия, тариф

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

image

Внутренний портал

Условия участия


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

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

День первый: отборочный тур


Желающих попробовать свои силы во взломе оборудования было много. Отметим, что некоторые из них серьезно подготовились к конкурсу и имели с собой необходимое программное обеспечение. В их числе были участники из Японии, которые с первых часов конкурса внимательно изучали стенд, что позволило им добиться значительных результатов во второй день.

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

image

Участники конкурса

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

Юный хакер тоже не отставал от взрослых: он научился вызывать непрерывную перезагрузку УСПД, тем самым реализовал атаку «отказ в обслуживании» и нарушил опрос счетчиков.

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

За час до окончания отборочного тура к стенду подключился участник по имени Олег. Несмотря на то, что у него было мало времени в запасе, он успел провести успешную атаку и попасть в турнир, который проводился на следующий день.

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

image

Результаты атак участников на счетчики. На правом нижнем графике видно, что был изменен коэффициент трансформации счетчика, на левом нижнем — что была проведена успешная атака «отказ в обслуживании» на счетчик ПСЧ-4ТМ

День второй: турнир и финал


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

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

image

Турнирная таблица

В финале конкурса развернулась нешуточная битва. В начале раунда преимущество было за Сатору Такeкоши, который уже на первых минутах смог успешно провести атаку и сильно увеличить баланс своего счета. Второй участник — Алексей Кузнецов — также смог в начале раунда провести атаку и увеличить баланс своего счета, но в значительно меньшем объеме. Разрыв в показаниях сгенерированной энергии был 25 ГВт·ч против 5 ГВт·ч. На протяжении большей части раунда счет не менялся. Вероятно, чтобы не повторить печальный опыт первых участников, которые атаковали в неподходящее время, Алексей вел себя осторожно и отслеживал смену режимов. Во второй половине раунда ему удалось провести успешную атаку на счетчик электроподстанции и сделать отрыв от соседа минимальным, но суммарный счет все равно не позволял ему победить. На последних секундах Алексей опять атаковал свой счетчик и успешно увеличил его показания, что позволило ему вырвать победу у лидера. Таким образом, Алексей победил, увеличив свой баланс до 92 млрд у. е., а с учетом его успешной атаки на счетчик электроподстанции, его суммарный счет позволил ему безоговорочно победить.

image

Состояние лицевых счетов на последних секундах, после финальной атаки

Итоги


Итак, победители: 1-е место занял Алексей Кузнецов, 2-е место ушло Сатору Такeкоши, замкнул тройку Никита Ступин. Специальный приз, за 4-е место, получил юный взломщик Юрий Гришин.

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

Однако никто из участников не смог провести успешные атаки на УСПД и подменить собираемые данные непосредственно на нем. Потенциально эти атаки могли привести к полному контролю данных, передаваемые в биллинговый центр и увеличению своего счета на произвольное значение. За все два дня мы зафи��сировали всего лишь одну подобную попытку атаки, которая, по всей видимости, завершилась неудачей.

Также никто не атаковал контроллер, управляющий системой отопления и кондиционирования. Предполагалось, что атакующий подключится к устройству и сможет управлять оборудованием, используя существующие сигналы управления. Главной сложностью для атакующих оказалось сопоставить открытые порты и название оборудования, чтобы, например, запросить информацию по протоколу FOX. Для атаки на данное оборудование не обязательно было использовать специализированное ПО. Подсказка тоже не помогла, потому что атакующие не воспользовались ею, а ведь всего-то нужно было подменить заголовок User-Agent у себя в браузере для успешного соединения.

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

image

Разгар первого дня

Нас порадовало, что хотя наш конкурс — новичок на форуме, пришло много зрителей, которые не собирались участвовать, но интересовались работой стенда, успехами конкурсантов. Свободные пуфики перед стендом быстро закончились!

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

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

Разборы других конкурсов Positive Hack Days 8: