Metasploit широко известен как мощный инструмент для проведения тестов на проникновение и взлома традиционных IT-систем, но мало кто знает, что он также обладает возможностями в менее известном, но всё более важном секторе SCADA/ICS. Информационная безопасность SCADA/ICS — это новый рубеж в нашей отрасли!
Если вы хотите узнать больше о безопасности и взломе SCADA/ICS, ознакомьтесь с моим разделом о взломе SCADA, доступным здесь.
Системы SCADA/ICS используют совершенно иные протоколы, чем традиционные ИТ-системы, использующие TCP/IP. Эти протоколы разнообразны и обычно разрабатывались для передачи данных по последовательному интерфейсу (RS485). В результате уязвимости в отрасли SCADA/ICS имеют совершенно иную природу.
Metasploit портировал ряд вспомогательных и эксплойтных модулей для SCADA/ICS. Полный список см. в этой статье в разделе «Взлом SCADA».
В этом руководстве мы сосредоточимся на самом распространённом протоколе SCADA/ICS — Modbus. В Metasploit есть несколько модулей, специально разработанных для исследования и эксплуатации этого наиболее распространённого протокола. В качестве объекта исследования я буду использовать работающую SCADA-систему. Это не лаборатория и не виртуальная машина. Это случайная система, выбранная из интернета. Я удалил её IP-адрес, чтобы защитить наивных и непосвященных. Никакого ущерба не было, и все настройки были возвращены в исходное состояние.
Шаг №1: Поиск модулей Modbus
Для начала давайте воспользуемся функцией поиска в Metasploit, чтобы найти модули Modbus .
msf > поиск modbus
Как видите выше, мы обнаружили пять (5) модулей, все из которых относятся к категории вспомогательных. Иногда эти вспомогательные модули в Metasploit действительно обладают возможностями, похожими на эксплойт, как мы увидим далее.
Давайте загрузим модуль с уникальной разведывательной функцией под названием modbusdetect . Как следует из названия, он способен определить, используется ли на сайте протокол Modbus . Это станет первым шагом разведки и, в конечном итоге, эксплуатации уязвимости.
msf > использовать вспомогательный/сканер/scada/modbusdetect
Для этого модуля пользователю необходимо только задать IP-адрес целевого устройства как RHOST. Порт по умолчанию для Modbus — 502, поэтому RPORT по умолчанию установлен на 502.
При запуске этого модуля он подключается к порту 502 целевой системы и отправляет запрос, чтобы определить, использует ли она Modbus. Как видно выше, он подтверждает, что наша цель использует Modbus, и теперь мы можем продолжить разведку и эксплуатацию уязвимости на основе Modbus.
Шаг №2: Найдите идентификаторы объектов
Теперь, когда мы убедились, что целевое устройство действительно использует протокол Modbus, следующим шагом будет перечисление идентификаторов устройств (Unit ID) подключённых устройств. Это похоже на пинг в TCP/IP, но результаты немного менее надёжны. Modbus допускает до 254 подключённых устройств. Для управления любым устройством Modbus или связи с ним нам необходим его идентификатор (UNIT ID) , что аналогично использованию IP-адресов в TCP/IP.
msf > используйте auxilary/scanner/scanner/modbus_findunitid
Опять же, для этого модуля единственная переменная, которую нам нужно установить, — это RHOST .
msf > set RHOST <IP-адрес>
msf > эксплуатировать
Как видите, этот модуль успешно обнаружил идентификаторы каждого из подключенных устройств. Эти идентификаторы критически важны для чтения и записи данных, как мы увидим далее.
Шаг №3: Чтение и запись устройств Modbus
Наш следующий модуль Modbus — это modbusclient . Он позволяет считывать и записывать данные как с катушек, так и с регистров этих SCADA-систем. Чтение данных может привести к утечке информации, но запись данных ещё более опасна, поскольку может изменить различные настройки на предприятии и вызвать сбой (будьте бдительны, кибервоины!).
Давайте загрузим этот модуль.
msf > использовать вспомогательный/сканер/scada/modbusclient
Для этого модуля требуется задать несколько переменных. Наиболее важной из них является ACTION . Эту переменную можно задать следующим образом:
1. ЧТЕНИЕ_РЕГИСТРОВ
2. ЗАПИСЬ_РЕГИСТРОВ
3. ЧТЕНИЕ_КАТУШЕК
4. ЗАПИСЬ_КАТУШЕК
Также обратите внимание, что значение по умолчанию для UNIT_NUMBER равно 1, а для NUMBER — 1. Это означает, что по умолчанию действие будет выполняться только для первого идентификатора UNIT ID и только для первого устройства. Чтобы увеличить количество устройств, на которые будет действовать ACTION, просто измените переменную NUMBER. В данном случае я установил переменную NUMBER равной 100. Это означает, что действие начнётся с идентификатора UNIT ID 1 и будет прочитано 100 регистров.
Как видно на снимке экрана выше, нам удалось прочитать значения из первых 100 регистров.
Теперь попробуем записать данные в катушки. В терминологии SCADA/ICS катушки — это сетевые устройства, которые могут быть либо включены, либо выключены. Их настройки — 1 или 0. Изменяя значения катушки, вы включаете или выключаете её.
Во-первых, нам нужно изменить ACTION на WRITE_COIL .
msf > set ACTION WRITE_COIL
Затем установите DATA равным 1 (допустимыми значениями являются только 1 или 0).
msf > установить ДАННЫЕ 1
Как видите выше, мы успешно изменили значение катушки на 1! Чтобы проверить, действительно ли изменилось значение, теперь можно вернуться и считать показания катушек.
msf > set ACTION READ_COILS
Значение первой катушки было успешно установлено на 1, тогда как все остальные по-прежнему установлены на 0.
Теперь попробуем изменить значения в регистрах. Это области памяти, в которых хранятся значения, используемые устройством для настройки, например, продолжительности работы насоса или давления, при котором должен открываться клапан. Изменение этих значений может иметь серьёзные последствия.
Давайте сначала запишем значения в регистры.
msf > set ACTION WRITE_REGISTERS
Затем укажите данные, которые нужно записать в регистры. Значения данных задаются с помощью переменной DATA, и несколько значений должны быть добавлены через запятую. В данном случае добавим 5 (пять) значений 27 к первым пяти регистрам.
msf> набор ДАННЫХ 27,27,27,27,27
После нажатия кнопки «Эксплойт» Metasploit возвращает информацию о том, что записано 5 значений.
Чтобы проверить, действительно ли изменились значения, мы можем изменить ACTION на READ_REGISTERS.
msf > set ACTION READ_REGISTERS
Как видите, значение первых 5 регистров было изменено на 27. Это может быть очень опасно!
Шаг №5. Загрузите релейную логику ПЛК.
В сети SCADA/ICS ПЛК играют роль «мозга», управляющего всеми процессами, происходящими внутри сети. Эти небольшие компьютеры запрограммированы на управление подключенными к ним устройствами. Программное обеспечение называется «релейной логикой».
Злоумышленник, вероятно, захочет скачать и проанализировать логику ПЛК, чтобы понять, чем и как он управляет. Поняв логику, можно изменить значения, что может иметь разрушительные последствия для объекта. Никто, кроме администратора, не должен иметь доступа к этой логике.
К сожалению, некоторые администраторы не защищают свою лестничную логику и делают её доступной любому, кто попытается её скачать. Стоит отметить, что известная вредоносная программа Stuxnet сделала это перед загрузкой новой, разрушительной лестничной логики в иранские центрифуги для обогащения урана.
Давайте попробуем сделать это на нашем целевом объекте.
Первый шаг — загрузить нужный модуль.
msf > использовать вспомогательный/администратор/scada/modicon_stux_transfer
Нам нужно только установить нашу переменную MODE на прием (RECV), а нашу переменную RHOST — на переменную нашей цели.
При вводе эксплойта, если логика лестницы не защищена, начнется загрузка программы, что мы успешно и сделали.
Заключение
Доступ ко многим промышленным системам и управление ими можно осуществлять с помощью простых модулей Modbus
в Metasploit. В злоумышленных руках подобные манипуляции с катушками и регистрами могут привести к катастрофическим последствиям. Отрасли SCADA/ICS пора серьёзно заняться вопросами безопасности, прежде чем возникнут столь серьёзные последствия!
Если вы хотите узнать больше о безопасности и взломе SCADA/ICS, ознакомьтесь с моим разделом о взломе SCADA, доступным здесь.
Системы SCADA/ICS используют совершенно иные протоколы, чем традиционные ИТ-системы, использующие TCP/IP. Эти протоколы разнообразны и обычно разрабатывались для передачи данных по последовательному интерфейсу (RS485). В результате уязвимости в отрасли SCADA/ICS имеют совершенно иную природу.
Metasploit портировал ряд вспомогательных и эксплойтных модулей для SCADA/ICS. Полный список см. в этой статье в разделе «Взлом SCADA».
В этом руководстве мы сосредоточимся на самом распространённом протоколе SCADA/ICS — Modbus. В Metasploit есть несколько модулей, специально разработанных для исследования и эксплуатации этого наиболее распространённого протокола. В качестве объекта исследования я буду использовать работающую SCADA-систему. Это не лаборатория и не виртуальная машина. Это случайная система, выбранная из интернета. Я удалил её IP-адрес, чтобы защитить наивных и непосвященных. Никакого ущерба не было, и все настройки были возвращены в исходное состояние.
Шаг №1: Поиск модулей Modbus
Для начала давайте воспользуемся функцией поиска в Metasploit, чтобы найти модули Modbus .
msf > поиск modbus
Как видите выше, мы обнаружили пять (5) модулей, все из которых относятся к категории вспомогательных. Иногда эти вспомогательные модули в Metasploit действительно обладают возможностями, похожими на эксплойт, как мы увидим далее.
Давайте загрузим модуль с уникальной разведывательной функцией под названием modbusdetect . Как следует из названия, он способен определить, используется ли на сайте протокол Modbus . Это станет первым шагом разведки и, в конечном итоге, эксплуатации уязвимости.
msf > использовать вспомогательный/сканер/scada/modbusdetect
Для этого модуля пользователю необходимо только задать IP-адрес целевого устройства как RHOST. Порт по умолчанию для Modbus — 502, поэтому RPORT по умолчанию установлен на 502.
При запуске этого модуля он подключается к порту 502 целевой системы и отправляет запрос, чтобы определить, использует ли она Modbus. Как видно выше, он подтверждает, что наша цель использует Modbus, и теперь мы можем продолжить разведку и эксплуатацию уязвимости на основе Modbus.
Шаг №2: Найдите идентификаторы объектов
Теперь, когда мы убедились, что целевое устройство действительно использует протокол Modbus, следующим шагом будет перечисление идентификаторов устройств (Unit ID) подключённых устройств. Это похоже на пинг в TCP/IP, но результаты немного менее надёжны. Modbus допускает до 254 подключённых устройств. Для управления любым устройством Modbus или связи с ним нам необходим его идентификатор (UNIT ID) , что аналогично использованию IP-адресов в TCP/IP.
msf > используйте auxilary/scanner/scanner/modbus_findunitid
Опять же, для этого модуля единственная переменная, которую нам нужно установить, — это RHOST .
msf > set RHOST <IP-адрес>
msf > эксплуатировать
Как видите, этот модуль успешно обнаружил идентификаторы каждого из подключенных устройств. Эти идентификаторы критически важны для чтения и записи данных, как мы увидим далее.
Шаг №3: Чтение и запись устройств Modbus
Наш следующий модуль Modbus — это modbusclient . Он позволяет считывать и записывать данные как с катушек, так и с регистров этих SCADA-систем. Чтение данных может привести к утечке информации, но запись данных ещё более опасна, поскольку может изменить различные настройки на предприятии и вызвать сбой (будьте бдительны, кибервоины!).
Давайте загрузим этот модуль.
msf > использовать вспомогательный/сканер/scada/modbusclient
Для этого модуля требуется задать несколько переменных. Наиболее важной из них является ACTION . Эту переменную можно задать следующим образом:
1. ЧТЕНИЕ_РЕГИСТРОВ
2. ЗАПИСЬ_РЕГИСТРОВ
3. ЧТЕНИЕ_КАТУШЕК
4. ЗАПИСЬ_КАТУШЕК
Также обратите внимание, что значение по умолчанию для UNIT_NUMBER равно 1, а для NUMBER — 1. Это означает, что по умолчанию действие будет выполняться только для первого идентификатора UNIT ID и только для первого устройства. Чтобы увеличить количество устройств, на которые будет действовать ACTION, просто измените переменную NUMBER. В данном случае я установил переменную NUMBER равной 100. Это означает, что действие начнётся с идентификатора UNIT ID 1 и будет прочитано 100 регистров.
Как видно на снимке экрана выше, нам удалось прочитать значения из первых 100 регистров.
Теперь попробуем записать данные в катушки. В терминологии SCADA/ICS катушки — это сетевые устройства, которые могут быть либо включены, либо выключены. Их настройки — 1 или 0. Изменяя значения катушки, вы включаете или выключаете её.
Во-первых, нам нужно изменить ACTION на WRITE_COIL .
msf > set ACTION WRITE_COIL
Затем установите DATA равным 1 (допустимыми значениями являются только 1 или 0).
msf > установить ДАННЫЕ 1
Как видите выше, мы успешно изменили значение катушки на 1! Чтобы проверить, действительно ли изменилось значение, теперь можно вернуться и считать показания катушек.
msf > set ACTION READ_COILS
Значение первой катушки было успешно установлено на 1, тогда как все остальные по-прежнему установлены на 0.
Теперь попробуем изменить значения в регистрах. Это области памяти, в которых хранятся значения, используемые устройством для настройки, например, продолжительности работы насоса или давления, при котором должен открываться клапан. Изменение этих значений может иметь серьёзные последствия.
Давайте сначала запишем значения в регистры.
msf > set ACTION WRITE_REGISTERS
Затем укажите данные, которые нужно записать в регистры. Значения данных задаются с помощью переменной DATA, и несколько значений должны быть добавлены через запятую. В данном случае добавим 5 (пять) значений 27 к первым пяти регистрам.
msf> набор ДАННЫХ 27,27,27,27,27
После нажатия кнопки «Эксплойт» Metasploit возвращает информацию о том, что записано 5 значений.
Чтобы проверить, действительно ли изменились значения, мы можем изменить ACTION на READ_REGISTERS.
msf > set ACTION READ_REGISTERS
Как видите, значение первых 5 регистров было изменено на 27. Это может быть очень опасно!
Шаг №5. Загрузите релейную логику ПЛК.
В сети SCADA/ICS ПЛК играют роль «мозга», управляющего всеми процессами, происходящими внутри сети. Эти небольшие компьютеры запрограммированы на управление подключенными к ним устройствами. Программное обеспечение называется «релейной логикой».
Злоумышленник, вероятно, захочет скачать и проанализировать логику ПЛК, чтобы понять, чем и как он управляет. Поняв логику, можно изменить значения, что может иметь разрушительные последствия для объекта. Никто, кроме администратора, не должен иметь доступа к этой логике.
К сожалению, некоторые администраторы не защищают свою лестничную логику и делают её доступной любому, кто попытается её скачать. Стоит отметить, что известная вредоносная программа Stuxnet сделала это перед загрузкой новой, разрушительной лестничной логики в иранские центрифуги для обогащения урана.
Давайте попробуем сделать это на нашем целевом объекте.
Первый шаг — загрузить нужный модуль.
msf > использовать вспомогательный/администратор/scada/modicon_stux_transfer
Нам нужно только установить нашу переменную MODE на прием (RECV), а нашу переменную RHOST — на переменную нашей цели.
При вводе эксплойта, если логика лестницы не защищена, начнется загрузка программы, что мы успешно и сделали.
Заключение
Доступ ко многим промышленным системам и управление ими можно осуществлять с помощью простых модулей Modbus
в Metasploit. В злоумышленных руках подобные манипуляции с катушками и регистрами могут привести к катастрофическим последствиям. Отрасли SCADA/ICS пора серьёзно заняться вопросами безопасности, прежде чем возникнут столь серьёзные последствия!