Изучаем ПЛК. Краткий гайд по поиску уязвимостей в промышленных контроллерах

Если ты думаешь, что контроллеры, которые ставят в зданиях и на заводах, защищены намного лучше, чем домашние гаджеты, то эта статья тебя разубедит. Я возьму девайс под названием Linx-150 и на его примере покажу, как работать с ПЛК на Linux. По этой схеме ты сможешь повторить исследование с любым другим устройством.

Пару лет назад я написал две статьи — одну о системах управления зданиями (BMS), вторую — о том, как их можно поломать со стороны конечных устройств. Но время идет, интеграция проникает все глубже, и тот же KNX уже отвечает не только за field level, его спокойно можно встретить и на automation level.

В интернете попадаются интересные статьи о том, как реверсить IoT-устройство или IP-камеру. На мой взгляд, у индустриального железа (правильный термин АСУ ТП, на английском ICS) отличий от них нет. За исключением разве что цены и возможного импакта атаки. Одно дело — устроить внезапную светомузыку у кого-то дома, другое — в терминале аэропорта.

Итак, перед нами Loytec Linx-150. Спасибо Дмитрию Викторову из «Сенсорматики», который предоставил нам экземпляр для изучения.

С чего начинать работу с таким устройством? Как бы банально это ни звучало, но первым делом идем на официальный сайт и читаем подробности. Здесь меня ждал небольшой сюрприз: просто так эту железку не найти, поскольку она как бы старая и уже снята с производства. Почему «как бы»? Сейчас расскажу.

Углубившись в сайт, я нашел вот такую страничку. Здесь есть разные руководства и даташиты, но главное не это.

Файлик со словом firmware в названии сразу же привлек мое внимание. Внутри нашелся целый набор прошивок для разных устройств.

Надо отдать должное вендору: хоть Linx-150 устаревший и снят с производства, но новые прошивки все равно есть. Когда устройство попало ко мне в руки, актуальной прошивкой была 6.4.6, а на момент написания статьи — уже 6.4.10, датированная 24 мая 2019 года. То есть девайс, может быть, и не продается, но активно поддерживается. А это, скорее всего, означает, что он распространенный.

Чтобы проверить эту теорию, заглянем в Shodan, Zoomeye и Censys и посмотрим, как много Linx-150 и других железок Loytec доступно из интернета. А то, может, ты скажешь: «Ну крут, ломанул железку, а она нигде не используется, кроме как у кого-то дома!»

Чтобы не быть голословным, вот несколько скриншотов, по которым понятно, что устройств Loytec в мире предостаточно.

Пока я делал скриншоты, «случайно» нашел очередную железку, к которой подходят дефолтные креды.

Тем временем скачался архив с прошивками. Находим нужную — linx_at91_6_4_10_20190524_0940.dl.

Первая мысль: это что еще за .dl и что с ним делать? Но старый добрый binwalk подскажет, что внутри. Заодно, чтобы распаковать содержимое, используем ключ -e.

$ binwalk -e linx_at91_6_4_6_20190213_1030.dl

После распаковки выясняется, что загадочный .dl — это архив с пакетами .deb.

Поскольку изначально я разбирал 6.4.6, а когда начал писать эту статью, уже вышла 6.4.10, поступлю просто и буду разбирать фичи баги, которые встречаются и там и там. Тем более что мои сомнения, не станет ли вдруг в 6.4.10 все хорошо, оправдались.

В целом различий между 6.4.6 и 6.4.10 не наблюдается, кроме ключевого файла linx-at91-primary_6.4.10_arm.opk.

Содержимое прошивок 6.4.6 и 6.4.10

Надеюсь, у тебя в закладках браузера давно поселились Vulners и CVE Detail (если нет, срочно исправляй!). Они позволят нам понять, насколько все печально в исследуемых прошивках. Как видишь, очень много старых версий пакетов.

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

Как понять, какие бинарники заслуживают внимания в первую очередь? Я, конечно, мог бы напустить тумана и сказать, что для этого нужны годы опыта, особое чутье и ежедневные духовные практики. Но подсказка лежит на виду: у нас есть две версии прошивок (6.4.6 и 6.4.10) и отличается в них один файл linx-at91-primary_xxx. Про еще одну подсказку поговорим, когда будем смотреть веб-интерфейс и заходить по SSH.

Применяем binwalk к этим файлам и смотрим, что получилось.

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *