SCADA? Цель для гада

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

Промышленные системы управления все чаще становятся мишенью для злоумышленников и киберармий. На смену отдельным червям Stuxnet (2010) и Flame (2012) пришли более изощренные схемы многоступенчатых атак. Так, для распространения трояна Havex в 2014 году хакеры взламывали сайты производителей ПО для управления промышленными предприятиями (SCADA) и заражали официальные дистрибутивы SCADA-систем, которые затем устанавливались на предприятиях, что позволило злоумышленникам получить контроль над системами управления в нескольких европейских странах.

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

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

Для начала немного истории.

RS232

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

Что такое RS485?

Чтобы разрешить проблемы с RS232, был введен новый стандарт – RS485. Как и RS232, все устройства по-прежнему должны определять общую скорость передачи данных, хотя RS485 может работать со скоростью до 10 мегабит в секунду. По стандарту RS485 требуется, чтобы передающие устройства “молчали”, когда данные не отправляются, а это означает, что сразу несколько устройств может быть подключено к одному проводу. А значит, все устройства-получатели также должны “прослушивать” один и тот же провод, что делает RS485 полудуплексным. Этот, в целом, небольшой недостаток целиком и полностью компенсируется преимуществами возможности подключения множества устройств к одной и той же проводной линии. Существуют и схемы в которых подключают две шины RS485 параллельно к одним и тем же устройствам достигая этим своего рода дуплексного режима.

Многим читателям это напомнит старый Ethernet, когда соединение 10 мегабит в секунду осуществлялось коаксиальными кабелями, позволяющими подключать сразу несколько компьютеров к одному кабелю. RS485 имеет много общего со старым Ethernet, но в некоторых отношениях предлагает большую гибкость.

Если вспомнить, для старого Ethernet требовалось, чтобы на концах кабеля были установлены нагрузочные резисторы, называемые по другому терминаторы. В случае с RS485 резисторы необходимы только для высокоскоростной работы. На более низких скоростях резисторы не нужны. Снижение скорости в канале позволяет соеденительному кабелю быть более чем в 10 раз длиннее 10-мегабитного, то есть вместо 100 м – 1 км.

В RS485 есть и еще одно ограничение: к одной шине не может быть подключенно более 32-х устройств.

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

В отличие от Ethernet, RS485 позволяет единовременно передавать байты только от одного устройства всем остальным. То есть, одно «говорит», а все остальные – «молчат». В этом стандарте нет MAC-адресов, обнаружения коллизий, пакетов данных или других функций Ethernet. В случае RS485 все это реализуется в программном обеспечении протокола более высокого уровня, например, как это было в случае с RS232. RS485 – это поток байтов и вам решать, чем будут эти байты. И будут ли они «правильными». Значительный «шум» в “линии” может повредить данные. Для нормального функционирования в RS485 необходимо определить набор правил для всех устройства на шине. Если два устройства передают данные одновременно, результат будет искажен. Поэтому, в первую очередь нужно придумать протокол.

MODBUS

Часто, в RS232 контроль за передаваемыми байтами выполнялся по протоколам высокого уровня, таким как SLIP или PPP. В RS485 очень распространенным протоколом контроля, делающим то же самое, является Modbus.

Разработанный в далеком 1979 году, Modbus очень прост по сегодняшним стандартам. Однако с этой простотой приходит надежность, и многие современные промышленные устройства все ещё используют этот протокол. Modbus является открытым стандартом, в то время как многие конкурирующие (и зачастую превосходящие) стандарты, например, такие как BACnet, являются платными и проприетарными.

Чтобы предотвратить коллизии, Modbus работает в режиме master-slave(ведущий-ведомый). В Modbus на шине RS485 есть только одно ведущее устройство, которое запрашивает данные от остальных подчиненных устройств. После того, как ведущий инициирует запрос к одному из ведомых устройств, этому ведомому разрешается передавать свой ответ. Это гарантирует, что только одно устройство передает одновременно. Код CRC в каждом сообщении защищает от искажения из-за шума в линии.

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

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

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

Порядок байтов(endianess) – это направление битов в байте — перечисляются ли они от меньшего к большему 12345678 (big-endian, большее в конце) или же от большего к меньшему 87654321 (little-endian, меньшее в конце). Сложно? Просто представьте вокзал — нумерация вагонов с головы или с хвоста поезда.

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

Иногда два регистра объединяются для хранения более длинного, 32-битного или 64-битного значения (в виде целого числа или числа с плавающей запятой). Здесь также необходимо следить за порядком байтов, то есть в каком порядке находятся два регистра, причем уже вместе взятые. Значения регистров записываются непосредственно в память микроконтроллера устройства. Обычно регистры с определенным порядком байтов объединяются с регистрами в таком же порядком для получения 32- или 64-битных значений. Но, бывает, встречаются устройства, которые объединяют регистры в одном порядке байтов, а возвращают значения регистра в другом порядке. Это очень неудобно, но иногда приходится мириться. Карта регистров вам в помощь, ох, если бы она всегда была…

Учимся говорить на Modbus?

Найти переходник с USB на RS485 совсем не сложно. В системе они отображаются как «/dev/ttyUSB0» или «COM1:» в зависимости от вашей ОС.

Cуществует множество шлюзов Modbus, которые могут обеспечить взяимодействие между RS485 и сетью TCP/IP. Как правило, они будут висеть на 502-порту TCP, и после подключения байты, отправленные и полученные через TCP, будут идентичны байтам, отправленным по RS485. По этой причине большинство утилит для работы с Modbus позволяют указать либо порт, либо IP-адрес при подключении.

В мире есть огромное количество устройств, которые говорят на Modbus, однако, но поскольку многие из них являются промышленными, они могут стоить дорого. Поиск «(rs485, modbus) -usb» на AliExpress или аналогичном даст вам представление о том, что именно можно купить (это будет соответствовать всему, что содержит словосочетания rs485 или modbus, но игнорирует все, что содержит «usb», так что все USB-to-RS485 не загромоздят результаты поиска). Вы найдете устройства, как датчики влажности и релейные платы, однако, имейте в виду. Найти действительно промышленные устройства сложнее и иногда придется покопаться в описании устройства, чтобы найти то, что нужно.

Перед покупкой любого устройства Modbus убедитесь, что оно либо поставляется с картой регистров, либо что ее можно найти в интернете. Без карты регистров будет весьма затруднительно разобраться что за что отвечает.

Как использовать Modbus?

В большинстве случаев, программы существуют программы, предназначенные для определенных устройств, например, такие как NUT (Network UPS Tools), которые могут общаться только с определенными моделями источников резервного питания через Modbus. Но есть и общие программы, такие как «mbpoll», которые полезны для выполнения необработанных операций чтения и записи на Modbus устройства, подтверждающие, что вы правильно читаете карту регистров.

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

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

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

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

Так как же взломывают электросеть?

Cистема SCADA (Supervisory Control And Data Acquisitionдиспетчерское управление и сбор данных) это програмно-аппаратный комплекс, предназначенный для разработки или обеспечения работы в реальном времени систем сбора, обработки, отображения и архивирования информации об объекте мониторинга или управления. По-просту это системы управления производством. И не только.

Хотя Modbus является одним из протоколов, используемых в системах SCADA, существует ряд других, таких как PROFIBUS и BACnet. В частности, BACnet предоставляет гораздо больше информации о том, что означает и контролирует каждая точка данных, но даже эти данные еще не говорит само за себя.

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

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

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

В недавних известных атаках злоумышленники распространили вредоносное ПО на ПК, управляющие системами SCADA. То, как им удалось выяснить, какие IP-адреса слушают, какие протоколы использовать, какие регистры записывать и правильные значения записывать, остается загадкой. Ведь все, с чем им приходилось работать, – это симулированная среда, построенная на основе скачанных ранее схем.

Возможно, атака на энергосистему Украины была сорвана, потому что в последний момент команды были отправлены на неправильный IP-адрес, поэтому, возможно, устройство было заменено или перемещено. А может быть у злоумышленников была просто старая версия документации? В этом случае поможет только RTFM…

Всегда есть возможность поиграться с возможностями.

По информации xakep.ru приложения для SCADA просто кишат уязвимостями. Осалось только их найти.

Группа SCADA Strange Love опубликовала на GitHub проект под названием SCADAPASS. Данный список содержит более ста продуктов компаний ABB, B&B Electronics, BinTec Elmeg, Digi, Echelon, Emerson, Hirschmann, IBM, Moxa, Rockwell, Samsung, Schneider Electric, Siemens, Wago, Westermo и Yokogawa. В перечень вошло самое разное оборудование – промышленные роутеры, программируемые логические контроллеры, серверы, сетевые модули и так далее. Все эти решения используются системами для автоматизированного управления технологическим процессом (АСУ ТП) и объединены общим знаменателем: они поставляются с недопустимо простыми логинами и паролями, к примеру, root:root.

Иногда все так просто. И если вы думаете, что эта статья не так актуальна в 2020, как 10 лет назад — то заблуждаетесь. Да, админы стали бдительнее, но и системы стали куда сложнее. В любой сложной системе есть тонкие узлы. А там где тонко-там и рвется.

Этой статьей мы только начинаем наше повествование о промышленных системах и методах их защиты.

Вас ебали, ебут и будут ебать. Государство, хакеры, чиновники.
Остановить эту свингер-пати невозможно. Но мы научим предохраняться.
Следите за новостями на нашем канале @cybersecs или на сайте
cybersec.org