Команда специалистов по влажной уборке городов рассказывает об участии в соревновании «CityF: противостояние», прошедшем в рамках Positive Hack Days 2016.
Прошли недели с окончания конференции Positive Hack Days 2016. Ты, наверное, уже видел статьи и заметки в блогах о том, как доблестные защитники не дали хакерам получить контроль над городом в состязании под названием «CityF: противостояние». Поэтому расскажу, как команда Evil Dwarfs, состоящая из трех человек, несколько раз таки провела влажную уборку макета населенного пункта.
Первый день соревнований почти у всех команд закончился безрезультатно, так как были проблемы с доступом к сервисам. Например, иногда доступа не было вовсе. Поэтому на внутрикомандном совещании решили принести на следующий день роутер — подробнее о нем в конце заметки.
Стоит отметить некоторые весьма «интересные» шаги команды защиты для обеспечения безопасности серверов. Например, блокирование POST-запросов и использование белого списка для URL. В результате атакующие не могли ни использовать уязвимые параметры в POST-запросах, ни брутить пароли для интерфейса администратора. К нашему сожалению, после таких мер, проблемы с доступом возникли и у администраторов сервисов ;). В итоге организаторам соревнований пришлось вмешаться, и они смогли убедить защитников использовать менее «эффективные» методы.
Второй день начался с открытия доступа к игровым стендам. Обнаружив контроллеры релейной защиты и автоматики SIPROTEC4 фирмы Siemens, мы при помощи команд MMS (стандарт МЭК61850) проанализировали структуру каждого устройства. Нашлось несколько устройств в составе магистральной подстанции, которые управляли коммутационными аппаратами. Мы сопоставили полученную информацию со схемой стенда (она была изображена на самом стенде) и нашли соответствие между контроллерами управления и коммутаторами. Используя стандартный клиент MMS, мы стали отправлять управляющие команды. Это привело сразу к нескольким авариям:
- отключение понижающего трансформатора привело к потере электропитания городской подстанцией и соответственно обесточиванию города;
- включение заземляющего ножа шин 500 кВ под напряжением, то есть замыкание на землю работающих шин. От этого выгорело несколько элементов подстанции;
- отключение работающего генератора ГЭС от электросети, что потребовало резкого экстренного его останова.
Хакер #305. Многошаговые SQL-инъекции
Таким образом, мы смогли помыть город первый раз. Собственно, этот момент и был зафиксирован многими участниками конференции в своих блогах.
Далее нами был обнаружен ПЛК S7-1500 фирмы Siemens, у которого оказался поднятым веб-сервис. Зная, что в веб-интерфейсе присутствует возможность управления тегами на контроллере, мы незамедлительно приступили к подбору пароля. Это, увы, ничего нам не дало, так как интерфейса управления тегами не было.
Пришлось ломать сам контроллер. Вдоволь наигравшись с протоколами, мы скачали сервисное ПО под названием Tia Portal. Для корректной работы в нем необходимо создать правильную модель контроллера. Когда SCADA атакуют удаленно, с этим могут быть связаны проблемы. В нашем же случае достаточно было подойти к стенду и подсмотреть макет контроллера.
На ПЛК находится программа, которая управляет работой окружающих его устройств. То есть, получив контроль над ним, ты получаешь контроль над ГЭС. Но когда мы подключились к ПЛК, механизм аутентификации помешал нам сделать что-либо кроме запуска или остановки программы. Впрочем, и это уже неплохо: мы остановили программу в тот момент, когда на ГЭС были открыты заслонки для сброса лишней воды. Само собой, они не закрылись после сброса необходимого количества воды, и мы помыли город еще раз.
На этом этапе стали появляться другие команды хакеров, которые добрались до ПЛК. Поэтому после подбора пароля мы не просто заменили пароль на свой, но и выставили самые секьюрные настройки, которые не позволяли делать с ПЛК что-то плохое.
Мы получили полный доступ к контроллеру — можно выдыхать и пораскинуть мозгами. Первая появившаяся у нас мысль — написать программу, в которой всем тегам присваивается единичка, и загрузить ее на ПЛК. Но мы решили этого не делать и за два часа до окончания соревнований обратились за помощью к тем людям, что сидели за стендами. Мы хотели не устраивать в городе полный хаос, а культурно провести еще одну влажную уборку. В результате была написана программа, которая открывала все заслонки для сброса воды.
Здесь уже эпического потопа не получилось, так как много воды было израсходовано в прошлые разы. Нам пришлось довольствоваться небольшим ручейком. Тем не менее наша команда получила полный контроль над ГЭС, и, как можно судить по публикациям, это осталось незамеченным.
Никто не обратил внимания и на наш «стелс»-роутер, который мы на второй день установили в сеть со стендами. Его не обнаружили даже несмотря на то, что мы сканировали сеть, перехватывали и подменяли трафик.
В итоге нашей команде очень понравились соревнования в этом году, даже несмотря на безрезультатный первый день. Мы выражаем благодарность организаторам, а также тем, кто занимался сопровождением стендов. Особенно Илье Карпову и Максиму Никандрову. Респект! А с вами были Лёша, Дима и Боря. До новых встреч!