![]() |
https://forum.antichat.xyz/attachmen...1138592617.png
Ребята, давайте честно. SIS - это такой же программируемый логический контроллер (ПЛК). Часто - тот же Siemens, тот же ABB, тот же Honeywell, только воткнутый в другую стойку и прошитый под соусом «безопасности». Да, там есть дублирование, есть диагностика, есть специальные протоколы. Но это не магический артефакт. Это железка с прошивкой. А значит, у нее есть баги, у нее есть интерфейсы, и к ней, ****, есть доступ. Я не призываю вас сейчас бежать и отключать защиту на АЭС или на химическом комбинате (хотя, если ты это читаешь и работаешь на АЭС - напиши мне в личку, есть разговор). Я призываю посмотреть на это трезво. Мы не хотим, чтобы взорвалось, но мы обязаны знать, как можно сделать так, чтобы оно взорвалось - чтобы это предотвратить. В этой статье мы разберем SIS от железа до софта, от физики до логики. Я покажу те инструменты, которыми можно пощупать эту систему на прочность (в лабораторных условиях, естественно! А то знаю я вас...). Мы пройдемся по векторам атак, по типовым ошибкам проектировщиков и по «человеческому фактору», который закопан глубоко в прошивке. Дисклеймер: Вся информация ниже предназначена исключительно для специалистов по промышленной безопасности, пентестеров АСУ ТП и студентов, чтобы они понимали, с чем имеют дело. Если ты, прочитав это, решишь пойти подрывать завод - ты долбоеб, и проблемы у тебя будут исключительно твои. Мы тут за безопасность, а не за фейерверки. Что есть SIS на самом деле? Разрушаем мифы. Так, народ. В предыдущем посте я пробежался по верхам, но чувствую - надо копать глубже. Потому что тема SIS - это такая кроличья нора, где на каждом уровне тебя ждет либо просветление, либо жесткий фейспалм от того, как это все реализовано на реальных объектах. Давайте теперь разбирать первый уровень - аппаратуру и архитектуру - с микроскопом в руках и с паяльником наготове. Потому что без понимания того, из чего эти системы сделаны и как они связаны с остальным миром, любая дискуссия о безопасности - это просто сотрясание воздуха. 1.1. Аппаратная часть: Железо, которое выдает себя за неприкасаемое Давай сразу договоримся: SIS - это не какой-то там засекреченный военный компьютер в титановом корпусе, который питается от веры в безопасность. Это вполне себе серийная промышленная электроника. Часто - та же самая, что стоит в соседней стойке и управляет обычным технологическим процессом. Просто с двойным процессором, сертификатом и, самое главное, с другой логикой работы. 1.1.1. Архитектура процессорных модулей: 1oo2, 1oo2D, TMR и прочая математика Если ты когда-нибудь открывал документацию на safety-контроллер, ты натыкался на эти загадочные аббревиатуры. Давай расшифруем их на пальцах, без маркетингового буллшита. 1oo2 (One out of Two) - классическая схема для систем, где нужно, чтобы система не отказывала без необходимости (высокая доступность), но при этом была защита от поломок. Суть: стоят два одинаковых процессора (канала), которые делают одно и то же. Сравнивают результаты на каждом такте. Если результаты совпадают - выполняют команду. Если не совпадают - стоп, ошибка, система переходит в безопасное состояние. Это защита от сбоя одного канала. Но есть нюанс: если один канал сдох, система не может отличить, кто врет - живой или мертвый. Поэтому она просто падает. 1oo2D (One out of Two with Diagnostics) - эволюция. Тут к двум каналам добавили мощную самодиагностику. Каждый канал проверяет сам себя (тесты памяти, тесты тактового генератора и т.д.). Если один канал говорит "я сломался", второй берет управление на себя, и система продолжает работать. Это уже ближе к реальности. Такая схема используется в Siemens S7-400F/FH и в ABB 800xA High Integrity. TMR (Triple Modular Redundancy) - это уже для совсем упоротых, например, для Triconex (ныне Schneider Electric) или для авионики. Три канала, голосование 2 из 3. Если один канал сошел с ума, два других его переголосуют. Самый надежный, но и самый дорогой способ. На заводах средней руки такое редкость, разве что на особо опасных объектах типа FCC (Fluid Catalytic Cracking) установок или на атомных станциях. Вывод для хакера: Вся эта математика защищает от случайных отказов железа. От целенаправленной атаки на софт она не защищает вообще. Если мы сможем подменить данные в памяти обоих каналов (а они синхронизируются), то оба канала будут согласно врать. TMR тут поможет чуть лучше, но если атака идет на общую шину данных или на источник питания - все каналы лягут одновременно. 1.1.2. Модули ввода-вывода (I/O): Там, где цифра встречается с аналогом Вот тут, братцы, самое интересное. Процессор - это мозг. А руки и глаза - это модули ввода-вывода. Они стоят либо в той же стойке, либо вынесены прямо к объекту (удаленная периферия). Что мы видим в типовом шкафу SIS?
Мы уже говорили про зеркалирование портов. Теперь идем дальше. Если ты подключился к сети и увидел PROFINET, EtherNet/IP или Modbus TCP, это еще не все. Тебе нужно понять, какие данные передаются между процессором и удаленной периферией.
1.2. Архитектурные решения: Миф о "независимости" Самая любимая мантра проектировщиков и экспертов по безопасности: "SIS полностью независима от DCS". Звучит красиво. Но на практике это означает лишь то, что у них могут быть отдельные датчики и отдельные исполнительные механизмы. Все остальное - вопрос реализации и бюджета. 1.2.1. Полная независимость: Дорого и редко Представь себе идеал:
1.2.2. Функциональная независимость в одной стойке Самый распространенный вариант: SIS и DCS стоят в соседних стойках в одной серверной или в одном шкафу управления. Они питаются от одного UPS (ну ладно, от двух разных, но от одного вводного щита). Их сети сходятся в одном коммутаторе (пусть и в разных VLAN). Их инженерные станции - это один и тот же компьютер, просто запущенный с разными правами. Что это означает для нас?
Ладно, допустим, тебе дали доступ к сегменту сети. Как понять, где DCS, а где SIS?
1.3. "Независимость" датчиков и исполнительных механизмов: А если все-таки общее? Бывает архитектура, где датчики общие. Это называется "black channel" для данных. Один датчик давления стоит на трубе. Его сигнал (4-20 мА) идет параллельно: на вход DCS (для регулирования) и на вход SIS (для защиты). Это удешевляет проект. Технически это реализуется через пассивный разветвитель сигнала (часто - просто гальваническая развязка или повторитель). С точки зрения физики, один датчик питает две системы. В чем проблема? Если датчик врет (вышел из строя, засорился импульсный трубопровод, обрыв), он обманет обе системы сразу. DCS будет показывать неверное давление, и SIS будет видеть то же самое. Это называется "отказ по общей причине" (common cause failure). Для борьбы с этим применяют архитектуру "2oo3" (два из трех), где ставят три датчика и голосуют. Но это опять деньги. Практический инструмент №3: Мультиметр, токовые клещи и осциллограф. Если ты физически добрался до датчика:
В SIS критически важна скорость реакции. Обычный DCS может обновлять данные раз в секунду, и это норм. Для регулирования температуры в колонне это ок. Аварийная защита должна сработать за миллисекунды. Если давление растет со скоростью 100 бар в секунду, промедление в 200 мс - это взрыв. Поэтому в SIS используются:
Атака, направленная на задержку трафика (network latency injection), может быть фатальна для SIS. Если мы добавим 100 мс задержки в сеть PROFINET IRT, контроллер не получит данные от удаленной периферии вовремя. Он посчитает, что связь потеряна, и уйдет в безопасное состояние. Завод встал. DDoS на время. Практический инструмент №4: tc (traffic control) на Linux. Если у тебя есть Linux-машина, включенная в разрыв сети (bridge), ты можешь использовать утилиту tc для управления трафиком.
С сетями разобрались. Идем дальше вниз, на уровень так называемого «поля» (field level). Это датчики давления, температуры, расхода, задвижки с конечниками. Нам рассказывают про надежность датчиков, про их самодиагностику и защиту от дурака. А в реальности - это аналоговый мир, и он полон сюрпризов. 2.1. Аналоговый вход 4-20 мА: Классика жанра Большинство датчиков для SIS (и DCS) до сих пор работают по токовой петле 4-20 мА. Почему? Потому что это надежно, просто и позволяет передавать сигнал на километры. 4 мА - это всегда живой ноль (обрыв провода даст 0 мА, что сразу диагностируется как ошибка). Но давайте посмотрим на это глазами человека, который хочет проверить систему. Токовая петля - это аналоговый сигнал. Его можно исказить, если добраться до проводов. Практический инструмент №2: Аналоговый инжектор сигнала (Fluke 705 или китайский клон). Представь: ты на объекте. Ты нашел шкаф управления, где стоят клеммные ряды. На одной клемме висит датчик давления с маркировкой PIT-101 (Pressure Indicating Transmitter), который идет в SIS. Если у тесть доступ к этим клеммам, ты можешь:
А теперь представь, что уставка срабатывания защиты - 15 бар. Подаешь 20.5 мА (16.5 бар) - и вуаля! Система защиты думает, что давление выросло выше крыши. Если в логике SIS прописано «при превышении P > 15 бар открыть сбросной клапан и перекрыть подачу», то ты сейчас инициировал аварию, просто подав ток на клеммы. Конечно, умные люди ставят искробезопасные барьеры, гальваническую развязку. Но физику не обмануть: если ты имеешь физический контакт с проводом - ты имеешь контроль над сигналом. 2.2. Дискретные входы: Сухой контакт или есть потенциал? Задвижки, концевики, кнопки аварийного останова - это обычно «сухой контакт». Замкнуто/разомкнуто. В безопасных системах часто используется принцип «fail-safe»: нормально замкнутый контакт. То есть когда давление в норме, контакт замкнут, ток течет. Как только давление превысило уставку - контакт размыкается, ток пропадает, и система валится в аварию. Это защита от обрыва провода. Как это взломать?
Самый хардкорный инструмент. Залез в шкаф, нашел клеммы нужного клапана или датчика. Прозвонил цепь. Убедился, что это «сухой контакт». Если он в нормальном состоянии замкнут, ставишь свою перемычку параллельно. Система перестанет видеть размыкание этого контакта, даже если оно произойдет физически. Опасность? Еще какая. Эффективность? 100%. Это называется «атака на физическом уровне». И никакой киберзащитой тут не отобьешься, если злоумышленник имеет доступ в шкаф управления. Логика SIL и магия сертификатов Теперь переходим к самому интересному - к софту. Точнее, к логике, которая зашита в этот самый safety-контроллер. Тут мейнстрим любит рассказывать про сертификаты SIL (Safety Integrity Level). SIL 1, SIL 2, SIL 3. Чем выше уровень, тем меньше вероятность отказа при выполнении функции безопасности. Звучит как мантра. На деле, SIL - это про вероятности, про математику. Это не про "не взломаешь". Это про то, что железо само по себе сдохнет с вероятностью 1 раз в 1000 лет (для SIL 3, PFDavg от 10^-4 до 10^-3). Но никто не считает вероятность того, что программист-технолог нарежет в этой логике такого... что мама не горюй. 3.1. Человеческий фактор в FBD/LD SIS программируется на специальных языках - обычно это FBD (Function Block Diagram) или LD (Ladder Diagram). Это не C++ и не Python, это графические языки для инженеров-технологов. И вот тут начинается треш. Как выглядит идеальная логика безопасности? Код: Код:
IF (Pressure > High_High) THENА как выглядит реальная логика, которую я видел своими глазами на одном заводе? Там была конструкция из 15 таймеров, каких-то RS-триггеров, перекрестных связей и ручных кнопок-«заглушек», которые позволяли технологу "временной отключить защиту", если датчик "врет", чтобы "план горел". И вот это - золотая жила для атакующего. Не надо ломать криптостойкие протоколы. Надо просто найти этот "костыль". На инженерной станции открыть проект, найти эту логику и понять, как дернуть за нужную ниточку. Практический инструмент №4: Инженерное ПО (TIA Portal, Control Builder, CBF). Если ты на пентесте и тебе дали доступ к инженерной станции (часто на ней нет антивируса и стоит старый Windows 7) - это джекпот.
И вот тут мы подходим к главной иронии. Система безопасности, напичканная сертифицированным Siemens F-железом, с софтом, разработанным по всем методикам V-model, может быть отключена одним битом в Modbus-регистре, пришедшим из корпоративной сети через шлюз OPC. Сети и протоколы безопасности: PROFIsafe и другие сказки Теперь про сетевые технологии. Когда модные вендоры начали пихать полевые шины везде, встал вопрос: как передавать данные безопасности по той же сети, что и обычные данные? Чтобы SIS-контроллер мог пожать руку удаленной SIS-периферии (блоки ввода-вывода, установленные прямо у реактора) по той же витой паре, что и обычный I/O. Придумали "черный канал". Это когда безопасный протокол (например, PROFIsafe) заворачивается в обычный (PROFINET). Идея в том, что безопасный уровень добавляет свои контрольные суммы, таймауты и сквозное подтверждение. Даже если пакет исказится в "черном канале", безопасный уровень на приемнике это заметит и переведет выходы в безопасное состояние. Звучит надежно? Да, с точки зрения случайных ошибок - да. С точки зрения целенаправленной атаки? Есть нюансы. 4.1. Атака на время PROFIsafe (и его аналоги) использует так называемое "кросс-сообщение" и следит за временем доставки. Если пакет идет дольше, чем заданный watchdog timer - система падает в safety (отключается). То есть, если мы начнем задерживать трафик (атака типа "store and forward"), мы можем вызвать ложное срабатывание защиты. Не отключить ее, а именно вызвать аварию. Завод встал. Молодцы. Практический инструмент №5: Ethernet-адаптер с поддержкой режима "monitor" и Scapy. Scapy - это мощнейший инструмент для работы с пакетами в Python. Ты можешь написать скрипт, который будет:
https://forum.antichat.xyz/attachmen...1138621424.png HMI и оператор: последний рубеж или первая линия фронта? Мы спустились с небес на землю, прошлись по железу, софту и сетям. Кто же стоит на страже всего этого безобразия? Оператор. Бедный Вася, который смотрит на 20 мониторов 12 часов подряд, пьет кофе и мечтает о выходных. На HMI (Human-Machine Interface) оператора выводятся и сигналы от DCS, и сигналы от SIS. И тут вендоры любят рисовать красивые лампочки: зеленые - всё хорошо, желтые - предупреждение, красные - авария. Но как часто оператор проверяет, валидны ли эти сигналы? Он доверяет системе. А мы знаем, что доверие - главный враг безопасности. 5.1. Фейковые сообщения Если у нас есть возможность внедриться в SCADA-систему (а она часто на базе Windows и с кучей дырок), мы можем подменить сообщения для оператора.
Практический инструмент №6: Инструменты для реверс-инжиниринга SCADA-проектов. Разные SCADA (Wonderware, Citect, WinCC) хранят свои проекты в файлах определенного формата. Часто они не шифруются как следует, или используют простой XOR. Утилиты типа WinCC Explorer (для старых версий) или специализированные скрипты позволяют вытащить все теги и понять, откуда берутся данные для отображения. Если мы сможем подменить DDE/OPC сервер, с которого SCADA тянет данные, или просто найти точку внедрения в рантайм-память - мы сможем рисовать оператору любую картинку. Эпилог: Как защищаться, если ты на нашей стороне? Мы тут нафорсили тему, рассказали, как всё плохо. Теперь давай по-честному: что с этим делать? Как защитить SIS, если ты не злобный хакер, а инженер или безопасник, который реально хочет, чтобы завод работал и не взрывался? 1. Физическая изоляция (Air Gap? Ха-ха). Забудьте про "воздушный зазор". Его нет. Сеть SIS так или иначе связана с корпоративной для сбора архивов и отчетов. Значит, нужен Data Diode. Это железка, которая позволяет данным идти только в одну сторону. Из SIS-сети в корпоративную можно, обратно - нельзя. Никаких команд. Только read-only. 2. Сетевая сегментация по-взрослому. SIS-сеть должна жить в своем VLAN'е, с отдельными firewall'ами, которые режут всё, кроме строго необходимого. И никаких «а давайте мы тут порт откроем для тест-инженера, ему по RDP зайти надо». RDP в промышленной сети - это моветон. Используйте jump-серверы с двухфакторной аутентификацией и полным логированием. 3. Мониторинг целостности. Нужно следить, не изменился ли проект в контроллере. Современные системы (Siemens с его Certified Boot) позволяют проверять контрольные суммы прошивок. Если кто-то залил измененную логику - система должна орать благим матом. 4. Обучение (не тошнотворное, а реальное). Расскажите операторам и технологим, как работают атаки. Проведите учения. Пусть Вася поймет, что если ему на почту пришло письмо "Скачай обновление для CODESYS" - он долбоеб, если скачает. Человек - самое слабое звено. Но он может стать самым сильным, если его научить не доверять слепо и сообщать о странностях. 5. Аудит физического доступа. Шкафы управления должны закрываться не на "собачку", а на нормальные замки, и доступ туда должен быть по спискам. Каждый, кто открыл шкаф, должен оставить запись в журнале. Потому что перемычка на клеммах - это самый быстрый способ похоронить защиту. Заключение. Так, народ. Мы с вами пропахали огромный пласт. От транзисторов в модулях ввода-вывода до высокоуровневых протоколов типа PROFIsafe. Мы залезали в шкафы с мультиметром, слушали трафик Wireshark'ом, ковыряли логику в инженерном ПО и смотрели, как оператор скролит мнемосхемы. Но прежде чем мы разойдемся, я хочу, чтобы мы вместе посмотрели на всю эту картину целиком. Без розовых очков, без корпоративных регламентов, без этой дурацкой политкорректности, которая мешает называть вещи своими именами. 6.1. Главное разочарование: SIL - это не про безопасность от хакера Знаешь, что меня бесит больше всего? Когда какой-нибудь вендор или интегратор начинает впаривать заказчику железку, размахивая сертификатом SIL 3, и утверждает, что это "защитит от любых угроз". Ребята, давайте уже взрослыми станем. SIL (Safety Integrity Level) - это математическая вероятность того, что оборудование не сломается само по себе за определенное время. Это про отказ аппаратуры (random hardware failures). Это про то, что транзистор не сгорит, резистор не уйдет в обрыв, а память не перепутает бит от космического излучения. SIL - это НЕ про безопасность от злоумышленника (security). Это вообще разные вселенные. Можно иметь SIL 3-сертифицированный контроллер с сертифицированной SIL 3-логикой, но если на инженерной станции стоит пароль "12345" или висит доступ в интернет через 3G-модем для "удаленного мониторинга начальством", то вся эта SIL-защита рассыпается в прах. Злоумышленнику плевать на вероятность отказа железа. Он не будет ждать, пока транзистор сгорит. Он просто зайдет по RDP и отключит защиту программно. И вот тут мы подходим к главному парадоксу. Всё, что мы делаем для повышения надежности SIS (дублирование, резервирование, диагностика), может быть использовано против нас. Два канала вместо одного? Отлично, можно атаковать шину синхронизации между ними. Диагностика, которая постоянно проверяет линию связи? Прекрасно, можно вызвать ложное срабатывание диагностики, и система сама себя вырубит. Вывод: Не ведись на сертификаты. Смотри на систему в целом. SIL - это просто цифра в паспорте. Реальная безопасность - это когда ты понимаешь, как именно твоя система может быть скомпрометирована, и закрываешь эти дыры, даже если они не описаны ни в одном ГОСТе. 6.2. Признай, что ты уязвим Самое трудное для любого инженера или руководителя - признать, что его система неидеальна. Особенно если это SIS. Особенно если за нее плачены большие деньги. Особенно если на нее получены все сертификаты. Но давайте честно. У любой SIS есть как минимум три группы уязвимостей, которые невозможно закрыть на 100%: 1. Человек. Оператор Вася, который может перепутать кнопки. Инженер Петя, который может залить "кривую" прошивку. Начальник, который требует отключить защиту "на часок, чтобы план выполнить". Злоумышленник, который заходит под видом командированного. Человека не пропатчишь. Человека не обновишь по воздуху. С человеком можно только работать - учить, контролировать, мотивировать. И это самый сложный участок работы. 2. Физика. Если у злоумышленника есть доступ к проводам - он хозяин положения. Можно сколько угодно ставить файрволлы и IDS, но перемычка на клеммах концевика задвижки решит всё. Шкафы должны закрываться. Доступ должен быть строго по спискам. Кабельные трассы должны быть защищены от механических повреждений. Физическая безопасность - это база, без которой всё остальное бессмысленно. 3. Сложность. Современные SIS - это сложные системы. Тысячи строк кода (пусть и в графическом виде), десятки устройств в сети, интеграция с верхним уровнем. В такой сложности всегда найдется место для ошибки. Для недокументированной функции. Для "временного решения", которое стало постоянным. Для забытого порта. Для тестового аккаунта. Сложность - главный враг безопасности. Чем проще система - тем легче ее защитить. Но простые системы плохо продаются. 6.3. Как думает тот, кто хочет тебя сломать Мы с тобой, читатель, одной крови. Мы - технари. Мы любим, чтобы работало. Чтобы колонна грелась, насос качал, клапан открывался. Мы не хотим аварий. Но чтобы защитить систему, мы должны уметь думать как тот, кто хочет ее сломать. Вот как думает атакующий (не важно, злобный хакер или просто любопытный студент):
6.4. SOS: Что делать прямо сейчас (план действий для инженера) Ладно, теории было много. Давай конкретику. Если ты сейчас сидишь на объекте и отвечаешь за SIS, или просто хочешь проверить свою систему на прочность, вот тебе чек-лист. Пройди по нему - и сразу увидишь, где у тебя дыры. Шаг 1. Инвентаризация. Возьми лист бумаги (или Excel, если не хочешь пачкаться). Пройди по всем шкафам управления, которые имеют отношение к SIS.
Это больно, но надо.
Подключи ноутбук с Wireshark к зеркальному порту коммутатора, где сидит SIS. Посиди час-два, запиши трафик.
Надень каску, возьми фонарик и иди в поле.
Если у тебя есть доступ к проекту SIS (с разрешения начальства, конечно), открой его.
6.5. Прощание с иллюзиями: SIS - это не панацея, а инструмент SIS - это не волшебная палочка. Это просто еще один слой техники. Он может спасти, а может и подвести. Всё зависит от того, как его спроектировали, как эксплуатируют и как защищают от дурака и от злоумышленника. Мой тебе совет: относись к SIS с уважением, но без фанатизма. Не думай, что раз система сертифицирована, то она неуязвима. Проверяй ее. Тестируй. Ищи дыры. И главное - помни, что за любой автоматикой стоят люди. Операторы, технологи, инженеры, начальники. Они могут ошибаться. Они могут уставать. Они могут быть невнимательными. Твоя задача - сделать так, чтобы система прощала их ошибки и не позволяла ошибке превратиться в катастрофу. 6.6. Последний совет: Будь человеком Мы тут с тобой наговорили про хакеров, про атаки, про уязвимости. Это всё интересно, это драйвово. Но давай не забывать, ради чего всё это. За каждым манометром, за каждым клапаном, за каждой строчкой кода в SIS стоит реальная опасность. Высокое давление, ядовитые вещества, взрывоопасные смеси. Ошибка может стоить жизни. Не абстрактных "пользователей", а конкретных людей - твоих коллег, которые работают рядом. Поэтому, когда ты лезешь в SIS с мультиметром или с ноутбуком, делай это с холодной головой и с чувством ответственности. Не ради "понтов", а ради дела. Ради того, чтобы система работала надежно и безопасно. Ради того, чтобы вечером все разошлись по домам. Это про понимание. Про то, чтобы знать, как работает система, глубже, чем написано в инструкции. Про то, чтобы видеть скрытые связи и неочевидные последствия. Используй это знание во благо. Итог: SIS уязвимы. Это факт. Их можно взломать. Это факт. Последствия могут быть фатальными. Это факт. Но знание об этих уязвимостях дает нам силу. Силу защитить. Силу предотвратить. Силу сделать промышленность по-настоящему безопасной, а не безопасной "на бумажке". Так что включай голову, бери в руки инструменты и делай мир чуть более защищенным. Потому что кроме нас с тобой, это сделать некому. Вендоры будут продавать, начальники будут экономить, операторы будут уставать. А мы - мы будем думать. И проверять. И исправлять. |
| Время: 23:54 |