клиент tr 069 в роутере d link что это
Спецификация TR-069 для управления CPE
Попробовал найти на Хабре статьи на эту тему. Но, что странно — не нашёл упоминаний. Поделюсь тогда своими знаниями об этом я. Это моя вторая попытка написать статью на Хабре.
Итак. Последние несколько лет наблюдается тенденция смещения функций контроля и настройки конечных сетевых устройств от пользователей к провайдерам. Они берут на себя заботу по конфигурации и обновлению устройств, а пользователь получает просто коробку с оборудованием, которое достаточно включить, чтобы начать работать.
Современные производители понимают это и предоставляют собственные протоколы для управления. Но не каждый оператор позволит себе работать только с одним вендором и практически полностью от него зависеть.
Для управления тысячами абонентских устройств нужен гибкий механизм, не привязанный к конкретному производителю. Этот механизм должен быть универсальным и достаточно простым в реализации для производителей сетевого оборудования.
Протокол предполагает расположение на территории провайдера сервера автоконфигурации (ACS), организующего взаимодействие с абонентским оборудованием, осуществляющего обработку запросов от устройств и способного подключать дополнительные сервисы, в зависимости от выбранной политики.
Сессия может быть инициирована как со стороны CPE, так и со стороны ACS.
Для того, чтобы было возможно управление устройством, оно должно иметь IP-адрес независимо от типа этого устройства (Bridge, Router, IP-Phone). Для обеспечения защищённого соединения в TR-069 используется SSL и TLS.
TR-069 поддерживает следующие функции
1.Конфигурация. Речь идёт как о начальной конфигурации, так и автоконфигурации уже работающего устройства или внесении изменений в настройки.
2.Управление версиями ПО и его обновление.
3.Анализ log-файлов, производительности и диагностика устройства.
4.Выполнение хранимых процедур
Выбор СРЕ для обслуживания может осуществляться по различным условиям. Например, конкретное устройство, по вендору, модели или версии ПО.
Использовать автоконфигурацию возможно при любом способе приобретения устройств:
1.Оборудование предоставляется при подписании договора.
2.Оборудование покупается абонентом в виде комплекта подключения к сети оператора.
3.Оборудование покупатеся абонентом самостоятельно и не имеет предварительных настроек на сеть оператора.
Я работаю в новом провайдере WiMAX и, возможно, у нас будет внедрение этого механизма в будущем. Если всё получится, то смогу рассказать об этом более подробно.
Клиент tr 069 в роутере d link что это
Спецификация TR-069, разрабатываемая некоммерческой организацией Broadband Forum начиная с 2004 года, описывает протокол управления абонентскими устройствами – CPE WAN Management Protocol (CWMP). Основная цель создания CWMP – унификация средств и методов управления CPE в сетях провайдеров, независимо от производителей и моделей CPE. Достижение указанных целей позволило бы обеспечить качество предоставления массовых услуг, оптимизировать расходы на их сопровождение, упростить процедуру доступа к услуге со стороны абонентов.
Рис. Примерная схема сети оператора
Протокол CWMP определяет принципы взаимодействия между абонентскими устройствами (CPE) и сервером Auto-Configuration Server (ACS). ACS, согласно TR-069, является сетевым устройством и представляет собой сервер приложений, автоматизирующий реализацию основных методов управления абонентскими устройствами (CPE):
Настройка TR-069 на примере роутера QFR-200-4T—W GATEWAY
QFR-200-4T-W с поддержкой TR-069 синхронизируется с сервером ACS. Все параметры, заданные на CPE, контролируются и настраиваются с сервера ACS. Пользователю необходимо ввести URL, имя пользователя и пароль для сервера ACS для подключения устройства. Тем не менее, URL, имя пользователя и пароль пользователя изменить не сможет. Данные параметры настраиваются на стороне ACS сервера.
Выполните следующие действия:
периодического информирования ACS-сервера. Далее укажите временной
интервал в диапазоне значений от 0 до 65535 секунд, через который CPE будет связываться с ACS.
Настройка TR-069 на примере роутера QBR-1040W v3S
Выбираем вкладку Администрирование, затем TR069.
Активируем опцию TR069, нажимая “Включить”
Указываем URL, логин и пароль для ACS сервера, после чего нажимаем применить и перезагружаем роутер.
TR-069 в Mikrotik. Испытываем Freeacs в качестве сервера автоконфигурации для RouterOS
В данной статье, я попробую пошагово описать процесс установки тестового сервера прекрасного проекта Freeacs до полностью работоспособного состояния, и показать практические приемы для работы с mikrotik: конфигурацию через параметры, выполнение скриптов, обновление, установку доп.модулей и т.д.
Цель статьи — подтолкнуть коллег к отказу от управления сетевыми устройствами с помощью ужасных граблей и костылей, в виде самописных скриптов, Dude, Ansible и пр. И, по этому поводу, вызвать салюты и массовое ликование на площадях.
0. Выбор
Почему freeacs, а не genie-acs, упомянутый в mikrotik-wiki, как более живой?
Потому, что по genie-acs с mikrotik есть публикации испанцев. Вот их pdf и видео с прошлогоднего MUM. Автошаржи на слайдах — это круто, но я бы хотел уйти от концепции написания скриптов, для запуска скриптов, для запуска скриптов…
1. Установка freeacs
Ставить будем в Centos7, а так как устройства передают достаточно много данных, и ACS активно работает с базой данных — жадничать с ресурсами не будем. Для комфортной работы выделим 2 ядра CPU, 4GB RAM и 16GB быстрого хранилища ssd raid10. Я буду ставить freeacs в lxc-контейнере Proxmox VE, а вы можете работать в любом, удобном вам инструменте.
Не забудьте настроить правильное время на машине с ACS.
Система будет тестовая, поэтому не будем мудрить, и просто воспользуемся любезно предоставленным скриптом установки, как есть.
Как только работа скрипта завершится — вы тут же сможете попасть в веб-интерфейс по ip машины, с учетными данными admin/freeacs
Вот такой приятный минималистичный интерфейс, и как здорово и быстро все получилось
2. Первичная настройка freeacs
Базовая единица управления для ACS — это юнит или CPE(Customer Premises Equipment). А самое главное, что нам нужно для управления юнитами — это их Unit Type, т.е. модель оборудования, определяющая совокупность настраиваемых параметров юнита и его ПО. Но пока мы не знаем как правильно завести новый Unit Type, лучше всего будет спросить об этом у самого юнита, включив Discovery Mode.
В продакшн такой режим использовать категорически нельзя, но нам надо скорее завести мотор и посмотреть возможности системы. Все основные настройки хранятся в /opt/freeacs-*. Поэтому, открываем
Кроме того, нам желательно увеличить максимальные размеры файлов, с которыми будут работать nginx и mysql. Для mysql добавляем в /etc/my.cnf строчку
, а для nginx, в /etc/nginx/nginx.conf добавляем
в секцию http. Иначе мы сможем работать с прошивками не более 1М.
Перезагружаем, и мы готовы работать с устройствами.
А в роли устройства(CPE) у нас будет малыш-трудяга hAP AC lite.
Перед тестовым подключением, желательно вручную настроить CPE до минимальной рабочей конфигурации, чтобы параметры, которые вы в будущем захотите конфигурировать, были непустыми. Для роутера минимально можно включить dhcp-клиент на ether1, установить пакет tr-069client и поставить пароли.
3. Подключаем Mikrotik
Все юниты желательно подключать, используя в качестве логина валидный серийный номер. Тогда вам в логах все будет понятно. Кто-то советует использовать WAN MAC — не верьте. Кто-то использует общую для всех пару логин/пасс — обходите их стороной.
Открываем лог tr-069 для мониторинга «переговоров»
Открываем winbox, пукт меню TR-069.
ACS URL: http://10.110.0.109/tr069/prov (заменить на ваш IP)
Username: 9249094C26CB (копируем серийник из system>routerboard)
Password: 123456 (для discovery не нужен, но чтобы был)
Periodic inform interval мы не меняем. Эту настройку мы выдадим через наш ACS
Ниже идут настройки для удаленной инициализации соединения, но с наскока заставить mikrotik с этим работать я не смог. Хотя с телефонами remote request работает «из коробки». Надо будет разбираться.
После нажатия кнопки Apply — в терминале пойдет обмен данными, а в веб-интерфейсе Freeacs можно будет увидеть наш роутер с автоматически созданным Unit Type «hAPaclite».
4. Конфигурируем Mikrotik
Пришла пора скачать руководство по веб-интерфейсу Это руководство 2011 года — как бутыль хорошего, выдержанного вина. Давайте его откроем и оставим подышать.
А сами, в веб-интерфейсе кликнем на карандашик рядом с нашим юнитом и перейдем в режим конфигурации юнита. Выглядит это так:
Кратенько разберем что есть интересного на этой страничке:
Блок Unit configuration
Самый большой и важный блок, где, собственно, задаются и читаются параметры для данного юнита. Сейчас мы видим только самые важные системные параметры, без которых работа ACS с юнитом невозможна. Но мы-то помним, что у нас в Unit Type их — 928. Давайте посмотрим все значения, и решим с чем это все едят у микротика.
4.1 Читаем параметры
В блоке Provisioning нажимаем кнопку Read all. В блоке — красная надпись. Справа появится столбец CPE (current) value. В системных параметрах ProvisioningMode сменился на READALL.
Перезапустите TR-069 client или перезагрузите роутер, и продолжайте обновляйте страничку браузера, пока не получите справа параметры в жизнерадостных серых прямоугольниках
Если кто захотел глотнуть старого выдержанного — этот режим в мануале описан, как 10.2 Inspection mode. Включается и работает немного не так, но суть описана вполне
Режим READALL сам выключится через 15 минут, а мы попробуем разобраться что же тут есть полезного, и что можно подправить «на лету», пока мы в этом режиме.
Можно изменить IP-адреса, включать/отключать интерфейсы, правила фаервола, которые с комментариями (иначе полный бардак), вай-фай и так по мелочи.
То есть, вменяемо конфигурировать mikrotik только средствами TR-069 пока нельзя. Но можно весьма неплохо мониторить. Доступна статистика по интерфейсам и их статус, свободная память и т.д.
4.2 Доставляем параметры
Давайте теперь попробуем доставить параметры в роутер, через tr-069, «естественным» путем. Первой жертвой станет Device.DeviceInfo.X_MIKROTIK_SystemIdentity. Находим его в параметрах юнита All. Как видно — он не задан. Это значит, что любой юнит может сам по себе иметь любой Identity. Хватит это терпеть!
Тыкаем галку в столбце create, задаем имя Mr.White и тыкаем кнопку Update parameters. Что будет дальше вы уже догадались. При очередном сеансе связи со штабом, роутер должен поменять свой Identity.
Но нам этого мало. Такой параметр, как Identity, хорошо всегда иметь под рукой при поиске нужного юнита. Тыкаем в имя параметра и ставим там галки Display(D) и Searchable (S). Ключ параметра меняется на RWSD (Помните, имена и ключи задаются на самом высоком уровне Unit Type)
Значение теперь не только отображается в общем списке поиска, но и доступно для поиска в Support > Search > Advanced form
Инициируем provision и смотрим на Identity. Здравствуйте, Mr.White! Теперь вы не сможете сами сменить личину, пока работает tr-069client
4.3 Исполняем скрипты
Раз уж мы выяснили, что без них никак, — давайте их исполнять.
Но прежде, чем приступать к работе с файлами — нам надо поправить директиву public.url в файле /opt/freeacs-tr069/config/application-config.conf
У нас ведь до сих пор тестовая конфигурация, установленная одним скриптом. Не забыли?
Но то, что открывается у нас сейчас — принадлежит Unit Type, т.е. глобально ко всем роутерам hAP ac lite, будь то роутер филиала, хотспот или капсман. Нам такой высокий уровень пока не нужен, поэтому, прежде, чем работать со скриптами и файлами — следует создать профиль. Можно это себе назвать, как «должность» устройства.
Давайте сделаем нашего малыша сервером времени. Достойная должность c отдельным пакетом ПО и небольшим количеством параметров. Идем в Easy Provisioning > Profile > Create Profile и создаем в Unit Type:hAPaclite профиль timeserver. Параметров у нас в дефолтном профиле не было, поэтому и копировать нечего Copy parameters from: «don’t copy. »
Тут параметров пока нет совсем, но можно будет задать те, что мы позже захотим видеть на наших серверах времени, слепленных из hAPaclite. Например, общие адреса NTP-серверов.
Перехотим в конфигурацию юнита, и перемещаем его в профиль timeserver
А чтобы сразу было видно результат — добавим роутеру vlan на ether1
Вбиваем, нажимаем Upload и готово. Наш скрипт vlan1.alter ждет своего часа.
Ну что, погнали? Нет. Надо еще добавить для нашего профиля группу. Группы не входят в иерархию оборудования, но нужны для поиска юнитов в UnitType или Profile и обязательны для исполнения скриптов через Advanced Provisioning. Обычно, группы связаны с локациями, и имеют вложенную структуру. Давайте сделаем группу Russia.
Представляете мы только что смогли сузить поиск с «Все серверы времени мира на hAPaclite» до «Все серверы времени России на hAPaclite». Там еще огромный пласт всего интересного с группами, но нам некогда же. Погнали уже в скрипты.
Поскольку мы как-никак в Advanced режиме, то тут можно указать кучу разных условий начала задания, поведения при ошибках, повторов и таймаутов. Рекомендую это все прочитать в руководствах или позже обсудим при внедрении в продакшн. Пока лишь поставим n1 в Stop rules, чтобы задание остановилось, как только выполнится на нашем 1 юните.
Заполняем необходимое, и осталось только запустить!
Нажимаем START и ждем. Сейчас резво побежит счетчик убитых недоотлаженным скриптом устройств! Нет, конечно. Такие задания даются надолго, и в этом их отличие от скриптов, Ansible и проч. Юниты сами обращаются за заданиями по расписанию или по мере появления в сети, ACS ведет учет какие юниты уже получили задания, и как они завершились, и записывает это в параметры юнита. В нашей группе 1 юнит, а будь их 1001 — админ запустил бы это задание и уехал на рыбалку
Ну же. Перезагрузите уже роутер или перезапустите TR-069 клиент. Все должно пройти гладко и Mr.White получит новый vlan. А наше задание по Stop rule перейдет в статус PAUSED. То есть, его еще можно будет перезапустить или изменить. Если нажать FINISH — задание спишется в архив
4.4 Обновляем ПО
Это очень важный пункт, так как прошивка микротика модульная, но добавление модулей не меняет общую версию прошивки устройства. Наш ACS нормальный, и к такому не привык.
Сейчас мы сделаем в стиле quick&dirty, и запихнем модуль NTP в общую прошивку сразу, но как только на устройстве обновится версия — мы не сможем добавить еще модуль таким же путем.
В продакшн такой трюк лучше не применять, и устанавливать необязательные для Unit Type модули только скриптами.
Итак, первое, что нам нужно сделать — это подготовить пакеты ПО нужных версий и архитектуры, и положить на какой-то доступный веб-сервер. Для теста пойдет любой, до которого сможет дотянуться наш Mr.White, а для продакшн лучше собрать автообновляемое зеркало нужного ПО, которое не страшно выставить в web
Важно! Не забывайте всегда включать в обновления пакет с tr-069client!
Итак, у нас должно быть три npk-файла, доступных по http. У меня вышло так
Теперь это нужно оформить в xml-файл с FileType=«1 Firmware Upgrade Image», который мы скормим микротику. Имя пусть будет ros.xml
Делаем по инструкции из mikrotik-wiki:
Бросается в глаза нехватка Username/Password для доступа к серверу загрузки. Можно либо попробовать вписать это как в пункте A.3.2.8 протокола tr-069:
Или спросить напрямую у официалов микротика, как и о максимальной длине пути до *.npk
Выбираем для загрузки наш xm-файл и готово.
Теперь у нас есть масса способов обновить устройство. Через Wizard в главном меню, через Advanced Provisioning и задания с типом SOFTWARE, или просто зайти в конфигурацию юнита и нажать Upgrade. Выберем самый простой путь, а то и так статья распухла.
Нажимаем кнопку, инициируем provision и готово. Тестовая программа завершена. Теперь мы умеем делать с mikrotik больше.
5. Заключение
Когда начинал писать, хотел сначала описать подключение ip-телефона, и на его примере объяснить как классно может быть, когда tr-069 работает легко и без усилий. Но потом, по мере продвижения и копания в материалах, подумал, что тому, кто подключил микротик — уже никакой телефон не будет страшен для самостоятельного изучения.
В принципе Freeacs, который мы тестировали — уже можно применять в продашн, но для этого надо настроить безопасность, SSL, надо настроить микротики для автоконфигурации после reset, надо отладить корректное добавление Unit Type, разобрать работу webservices и fusion shell, и еще много чего. Пробуйте, изобретайте, и пишите продолжение!
Всем, спасибо за внимание! Буду рад поправкам и комментариям!
Список использованных материалов и полезные ссылки:
Просматривая информацию про проекту FreeACS, наткнулся на очень интересный патч, предложенный польскими ребятами, у которых FreeACS обслуживает 20К устройств.
Патч сделан для разных версий hardware, но в случае микротиков он позволит создавать несколько Unit Type для одинаковых роутеров с разным набором модулей ПО.
Например, hAPaclite-ntp, hAPaclite-ups и т.д. И, соответственно, обойти ограничение «одна модель == одна прошивка»
Слишком много поваров, или взлом Интернета с помощью TR-069
Шахар Тал: проведём быстрое голосование – кто из вас видел сериал «Слишком много поваров?». Достаточно хороший процентаж для такой аудитории. Итак, начнём.
На экране демонстрируется заставка к фильму, затем появляются портреты докладчиков.
Далее в титрах указаны:
Дени ДеВито – в роли доступного тостера IPv4, Арнольд Шварценеггер – в роли роутера TP- Link TD-W8961NDи другие…
Итак, тем из вас, кто не видел фильм «Слишком много поваров», который демонстрировался несколько месяцев назад, советуем его посмотреть, нам он очень понравился. Если вы его смотрели, то смогли оценить наши «весёлые картинки», которые мы использовали для презентации.
Итак, мы являемся исследователями вредоносного ПО и уязвимостей и работаем в компании – разработчика программ в сфере IT-безопасности CheckPoint, расположенной в Тель-Авиве. Слоган нашей компании – «Мы защищаем Интернет». Наша задача состоит в том, чтобы найти уязвимость оборудования, рассказать об этом его производителю и поделиться информацией с обществом.
Сегодня мы поговорим о следующем:
Это то, что ISP используют:
Справа расположено оборудование пользователя CPE – ваш домашний роутер с клиентом TR-069, слева – сервер TR-069, называемый также сервером автоматической конфигурации ACS. Они «разговаривают» друг с другом при помощи SOAP RPS, использующим язык XML через HTTP.
Сессию всегда инициирует роутер, это одиночное IP-соединение, с помощью которого компьютер подсоединяется к сети. ASC использует запрос соединения и отсылает роутеру команды «получить значения параметров» и «установить значения параметров».
Как вы можете убедиться, это достаточно просто. Здесь задействован двойной механизм аутентификации. СPE должен убедиться, что связывается с вашим доверенным ASC, а ASC разрешает сессию только авторизованному пользователю.
На DEFCON 22 мы рассказывали о том, что мы нашли в этом процессе. Наше исследование обнаружило недостатки реализации и конфигурации, производимой многими ACS серверами сетевых провайдеров (ISP):
В прошлом году парни из Dead Map провели очень интересное исследование, это был Захарий Румрич и его друзья из Мичиганского университета. Они просканировали 2 миллиона случайных адресов на каждом из почти 10 тысяч портов, и определили, что CWMP 7547 — порт по умолчанию для TR-069 — является в мире вторым по популярности открытым портом. Процент его использования Hit Rate для интернета составляет 1,12%. Напомню, что этот протокол был создан 10 лет назад – подумайте об этом! Этот порт для связи с интернетом используют примерно 45 миллионов устройств, и через этот открытый порт они могут быть «прослушаны».
Проведём небольшой обзор самых популярных в мире портов, которые различные устройства используют для связи с Интернетом.
Портом 80 пользуются примерно 70 миллионов устройств, половина — для связи с веб-серверами глобального Интернета. Большинство из них это Apache серверы, далее следуют серверы nginx, IIS 8 и другие. Вторая половина устройств использует 80-й порт для Интернета вещей. Эти устройства представляют собой роутеры, веб-камеры, VoIP телефоны и тостеры.
Сейчас наконец-то люди начинают осознавать, что открытый доступ к этим вещам попросту опасен. Поэтому они ищут как можно больше устройств, которые используют для локальных сетей только порт 80.
Учтите, что открытый порт 7547 используют не только обычные пользователи, его применение предусмотрено программным обеспечением серверов провайдеров, взаимодействующих с устройствами пользователей. И все 45 миллионов устройств, использующих TR-069, представляют собой Интернет вещей.
Все эти устройства выходят в сеть с использованием запроса соединения Connection Request.
Мы решили исследовать проблемы безопасности и найти число пострадавших от этой уязвимости. Нам нужно было перестать гадать и перейти к фактам. В прошлом месяце (ноябрь 2014 года) мы несколько раз просканировали порты 7547 по всему адресному пространству IPv4 с помощью наших друзей Rapid 7 и ребят из Мичиганского университета. В результате после простого ввода «слэш» (/) через порт 7547 нам ответили 1,18% всех устройств публичного Интернета, общее число которых составило 46 093 733 штуки по всему свету. То есть это не одна страна, в которой открыты данные порты, это 189 стран по всему миру.
Если вы помните, в спецификации TR-069 существует требование, чтобы этот порт был открыт для запросов ASC. Так вот, в прошлом году появилось ещё 0,06% новых устройств, удовлетворяющих этому требованию, а это целых 2,2 миллиона! То есть тенденция роста налицо.
Мы занялись проблемой реализации TR-069 на клиентской стороне и вот какую статистику получили.
У нас получилось 5 основных типов серверов, использующих запрос соединения. Больше половины пришлось на штуку под названием RomPager. Это встроенный HTTP сервер от Allegro Software, компании, расположенной в штате Массачусетс, который включён в прошивку большинства роутеров. Он оптимизирован под минимальные требования – двоичные коды, минимум памяти – и впервые был представлен в 1996 году. С тех пор было много версий, последней является 5.4. Мы решили сфокусировать на нём внимание и установили, что оборудование клиента использует четыре версии RomPager.
В результате мы выяснили, что 98,04% устройств использует устаревшую версию 4.07, 1,44% используют версию 4.51, 0,51% — 4.03 и 0,01% 4.34. Как говорилось в сериале, «после этого я стал подозрительным». Чем объясняется такая невероятная популярность единственной версии RomPager?
Мы купили новый роутер TP Link, распаковали его и подсоединили к сети. В нём был установлен RomPager 4.07. Мы подумали, что может быть это старый роутер с устаревшей прошивкой и скачали с сайта TP Link новую прошивку 2014 года, обновили, перезагрузили роутер и в результате снова получили версию 4.07.
Таким образом мы получили объяснение такой популярности старой версии – это был единственный самый последний вариант прошивки, расположенный на сайтах производителей роутеров.
Кто из присутствующий здесь имеет нераспакованный новый роутер? Не может быть, вот это удача!
Парень из зала передаёт коробку с роутером, и докладчик кладёт его на стол.
Уверяю вас, этот человек на меня не работает! Мы займёмся этой коробкой позже.
Мы решили исследовать, что собой представляет RomPager версии 4.07. Он был выпущен в 2002 году и появился во множестве современных устройств:
Очень важный момент состоит в том, что самые популярные версии спецификаций имеются в Интернете в открытом доступе.
А сейчас пусть продолжит Лиор – он расскажет о том, как мы анализировали эту прошивку.
Добрый день! Меня зовут Лиор и я производил анализ того, как работает RomPager версии 4.07, и обнаружил интересные результаты. У нас была фирменная прошивка, скачанная с сайта производителя роутера TP Link. Она выглядела как сжатый массив данных, поэтому мы использовали Binwalk — инструмент для поиска файлов и исполняемого кода в данном двоичном образе. Его используют для взлома архива и извлечения запакованных файлов.
Для более объективного анализа я решил загрузить все прошивки RomPager версии 4.07, какие только смог найти в Интернете, и обнаружил, что все они содержали заголовок ZyNOS (mipsb32) – операционную систему, которые используют сетевые устройства производства компании ZyXEL. Я не мог понять, почему устройства разных производителей имели одинаковую прошивку. Я стал изучать, что собой представляет ZyNOS.
Это основная операционная система в режиме реального времени – Real Time OS, RTOS, без всякой файловой системы и специальных разрешений, она состоит из одного большого двоичного файла, предназначенного для удовлетворения любых требований.
Эта система имеет известную уязвимость «rom-0» (СVE-2014- 4019). По состоянию на май 2014 года этой уязвимостью обладали 1 219 985 устройств по всему миру. Эта уязвимость позволяет злоумышленнику захватить контроль над роутером, просто загрузив из него файл конфигурации без всякой авторизации, прямо из панели веб-браузера через порт 80. В результате взломщик просто получит пароль и имя пользователя. И такой уязвимости подвержены 1,2 миллиона устройств во всём мире.
Рассмотрим, как выглядит интерфейс атаки через порт 80. Мы получили запрос авторизации, и так как не знали имя пользователя и пароль, попробовали войти через порт 7547.
Здесь мы получили сообщение, что по данному адресу «Объект не найден» для любого пути, кроме правильного адреса.
Я решил найти правильный адрес, то есть отправить запрос по правильному пути. Перед тем, как начать разбираться с кодом, я решил выполнить ручное тестирование через HTTP-заголовки, и неожиданно мне удалось взломать роутер путём отправки дайджест-имени пользователя с переполнением заголовка дайджест-аутентификации значением ‘a’#600.
Это привело меня к первой уязвимости. Чтобы понять, почему это происходит, давайте рассмотрим структуру кода RomPager. Каждая строка здесь состоит из заголовка HTTP и относящейся к ней функции производителя для обработки этого заголовка.
Рассмотрим функцию, которая отвечает за имя пользователя.
Вы можете увидеть, что приводит к такой уязвимости – это незащищённая strcpy, функция стандартной библиотеки для копирования нуль-терминированной строки (включая нуль-терминатор) в буфер. Но что в действительности приводит к возможности взлома роутера – это отсутствие символов и возможности динамического анализа. Это очень трудно понять.
Я вскрыл роутер и принялся искать JTAG. Для тех, кто не знает, что это такое, объясню: JTAG это интерфейс для отладки и проверки встроенных программ. Но когда я снял корпус, то не обнаружил там никаких разъёмов JTAG, зато я нашёл там нечто, выглядевшее как последовательный порт U-ART на отдельной микросхеме – разъём, предназначенный для связи с другими цифровыми устройствами.
Я занялся пайкой и подсоединил его к самому роутеру, а затем через USB адаптер подсоединил этот U-ART к своему компьютеру. Когда я загрузил роутер, то обнаружил очень хорошую возможность для отладки роутера. Я покажу вам, что получил после того, как взломал роутер – это очень симпатичный краш-дамп со всеми регистрами и стеками, с указанием причины аварийной записи – «переполнение TLB». Вверху расположена строка EPS – указателя инструкций для микропроцессора MIPS. Как видите, она переписана мной, и это значит, что я контролирую роутер. Дальнейший анализ аварийного дампа позволил полностью выяснить причину уязвимости.
Итак, незащищённая strcpy позволяет полностью переписать EPC, который состоит из 584 шестнадцатиричных байт, удобно расположенных после имени пользователя, поэтому взломать роутер очень легко.
В этом заключается эксплойт №1:
Трудность такого способа взлома заключается в следующем:
Теоретически обойти эти проблемы можно, если попытаться внедрить shellcode через другую уязвимость утечки информации роутера. Давайте посмотрим, как это работает.
Так как у меня не было возможности полноценной отладки, я использовал вариант отладки для «нищих», используя примитивные возможности отладки, встроенные в сам RomPager, через последовательный порт. Это позволило пропатчить прошивку перед её загрузкой, что было достаточно удобно, но весьма утомительно.
После нескольких перезагрузок я нашёл скрытую функцию операционной системы ZyNOS, которая позволила добраться до памяти роутера через интернет. Это ZynOs Remote Debugger, или ZORDON. Эта функция позволяла создавать контрольные точки, просматривать и редактировать память, читать и переписывать регистры в режиме онлайн.
Давайте рассмотрим уязвимость №2.
Если помните, динамическое выделение памяти отсутствует, поэтому каждый входящий HTTP-запрос заполняет предварительно выделенную «структуру запроса».
RomPager 4.07 обрабатывает до 3 параллельных запросов (3 предварительно выделенные структуры).
При посылании 3-х последовательных запросов один из них может переписать HTTP структуру, которую мы видели ранее. Это также стало возможным из-за незащищённой strcpy, и мы снова захватили контроль над EPC.
Итак, в чём состоит эксплойт №2?
RomPager поддерживает «кукиз». Как вы помните, динамическое выделение памяти отсутствует, поэтому имеет место предварительное выделение памяти под каждый массив «кукиз» общим количеством 10 штук, каждая длиной по 40 байт. Имена «кукиз» постоянны – от С0, С1, С2 … С9. На следующем слайде показано, как выглядит С0.
Посмотрим, как RomPager «крадёт печеньки», то есть обрабатывает файл «кукиз». Вверху слайда видно, что сначала он проверяет имя «кукиз» с заглавной буквы в его начале. Если это так, он конвертирует остальную часть имени «кукиз» в целое число и использует его как индекс для массива «кукиз».
Далее он загружает его, умножая на s3, это будет индекс для 40, и использует его в пункте назначения strncpy.
Таким образом, уязвимость №3 заключается в следующем.
Выполняя произвольную запись в память относительно фиксированной точки во внутренней структуре управления RomPager, мы получаем контроль над всем, что делает RomPager. При этом дополнительным бонусом является возможность переполнить 32-х битное целочисленное значение с целью негативного воздействия на инфраструктуру.
Если мы посылаем любое «кукиз» вместо С0, С1 и так далее, то получаем такой ответ:
Этот приём срабатывает на любой модели роутеров любой марки, к которым мы получили легальный доступ. Таким образом, эксплойт №3 заключается в следующем: используя несколько волшебных «кукиз», добавленных к вашему запросу, вы обходите любую аутентификацию и просматриваете интерфейс конфигурации как администратор, через любой открытый порт.
Давайте посмотрим демонстрацию сказанного – у нас есть видеозапись наших действий. Запускаем интернет-браузер и в адресной строке вводим IP адрес нашего роутера и запрос на авторизацию. Если прописать в строке: 7547, то мы получим показанное ранее сообщение.
Поэтому мы используем «наш» плагин браузера Chrome, то есть встроенный нами эксплойт, его значок размещен правее адресной строки браузера (плагин называется «Завладей всеми этими штуками!»).
Щелкаем по значку, чтобы активировать этот плагин.
Проходит буквально секунда, и перед нами открывается окно настроек роутера TP-Link. Мы обошли процесс авторизации!
Далее можно опять щелкнуть по плагину, чтобы восстановить легальный режим.
Покажу вам ещё раз, как это работает: вводим в строку IP-адрес роутера 192.168.1.1, обновляем страницу при подключённом плагине…не получилось… пробуем ещё раз обновиться – готово! Мы зашли на страницу настроек роутера без всякого запроса аутентификации, окно ввода имени пользователя и пароля вообще не появлялось.
Ещё раз повторю: у нас сейчас подключён новый роутер от производителя, прямо из коробки, выпущенный в 2014 году, и он подвержен всё той же уязвимости, которую обнаружили и описали более 10 лет назад.
Вернёмся к нашей презентации. Мы разместили на этом слайде ссылку на сайт, где размещена информация по сути описанной нами проблемы.
На этой карте показано, какие страны затронуты этой уязвимостью. Это 189 стран по всему миру и свыше 52% всех IP-адресов.
Я знаю о чём вы сейчас подумали: нужно немедленно отказаться от использования порта 7547 на своих устройствах для выхода в Интернет. Но даже если попытаться в настройках роутера деактивировать функцию CWMP, порт 7547 всё равно останется открытым.
Противостоять этому можно следующим образом:
Рассмотрим, как проходит процесс производства роутеров.
Компания Allegro Soft поставляет RomPager производителю чипсетов, который отправляет их производителям роутеров ASUS, D-Link, Huawei, TP-Link, ZTE. Те приспосабливают ПО к различным моделям, вставляют в прошивку своё лого и продают готовые роутеры конечному пользователю оборудования.
Подумайте, как медленно происходит обновление системы безопасности в такой производственной цепочке.
Allegro Soft поставляет фиксированную версию RomPager производителю чипов, который должен включить его в SDK и передать производителю роутера. После этого нужно перекомпилировать прошивки для каждой линейки продуктов и каждой модели, а если ещё и выполнять регулярное обновление, то это станет настоящим кошмаром для производителя.
Именно в таком случае мы говорим: «Too many cooks do spoil the broth», то есть «У семи нянек дитя без глазу» (дословный перевод с английского: «Слишком много поваров портят бульон»).
Замечу, что большинство людей никогда не обновляют прошивку своих роутеров. Это одна из причин, почему подобные уязвимости не устраняются на протяжении месяцев или даже лет.
Рассмотрим вопрос сотрудничества с производителями. Мы связались с Allegro Soft и наиболее влиятельными производителями роутеров, представили им полное описание уязвимости и предложили неразрушающие «заплатки» операционной системы (POS) для её устранения. Несмотря на наш ломанный английский, большинство вняло нашим рекомендациям и выпустило обновления прошивки с учётом наших рекомендаций, например, компания Huawei.
Зато Allegro Soft ответили нам, что «мы не можем заставить производителей обновиться до последней версии», при том, что последнюю обновлённую версию они представили в 2005 году! Подумайте о том, что если обновление 2005 года до сих пор ещё не прошло по всей этой цепочке, то что-то с этим явно не в порядке.
А сейчас мы ответим на часто задаваемые вопросы:
Правда ли, что RomPager настолько плох?
— Нет, он очень удобен, надёжен и безопасен, если используется «заплатка», просто мы исследовали старую уязвимую версию прошивки, которая до сих пор чрезвычайно популярна во всём мире.
Возможно ли, что этот «чёрный ход» намеренно оставили открытым?
– Нет, на это непохоже.
Можете ли вы поделиться свои эксплойтом?
Можете ли вы сказать, какие IP-адреса подвержены уязвимости по этой причине в моей стране?
– Просканируйте порты 80 и 7547 и пользовательские порты ISP TR-069, используемые для запроса соединения, так как в разных странах по умолчанию могут использоваться разные порты.
Вывод: мы обнаружили очень серьёзную уязвимость IPv4, четвёртой версии протокола IP, которая на сегодняшний является основной и обслуживает большую часть сети Интернет.
Производители роутеров, вы обязаны это исправить!
Благодарю вас за внимание, теперь мы готовы ответить на ваши вопросы.
— Я увидел в вашем списке роутер D-Link GSL 320, он использует ОС на основе Linux, можете ли вы сказать, что он соответствует современным требованиям безопасности?
— Мы не знаем особенностей каждого устройства, представленного в нашем списке, потому что у нас не было доступа к каждому устройству из списка, и мы не ставили перед собой задачу проверить каждый роутер, обеспечивающий связь с Интернетом, но мы можем поговорить об этом роутере позже, если вы представите нам детальную информацию.
— Когда вы опубликовали список уязвимого оборудования, то посоветовали использовать в качестве защиты межсетевой экран ZoneAlarm. Вы можете посоветовать, как мне защитить свой компьютер, не устанавливая персональный файервол?
— Это совсем другой способ, нежели тот, о котором мы здесь говорили, и возможно, мы поговорим о нём позже.
— Проверяли ли вы кабельные модемы, потому что по крайней мере в Германии, мы используем модемы, представленные нашими провайдерами, это специальные модели, эксплойты для которых очень хорошо известны, и над ними также легоко можно захватить контроль? Я интересуюсь потому, что не могу отказаться от использования именно этого ISP.
— Мы не пытались классифицировать кабельные или DSL модемы, но если ваша модель имеется в списке потенциально уязвимого оборудования, для меня не составит особого труда её протестировать.
Мы не можем знать, какие именно устройства в каких странах обладают уязвимостью, поэтому мы публикуем наши исследования в надежде оказать давление на производителей, чтобы они исправили эти проблемы так быстро, как это только возможно. Поэтому мы просим – если вы обнаружили уязвимость, сообщайте об этом вашему провайдеру, потому что это очень важный аспект вашей безопасности.
— Может вам стоит попытаться использовать gSOAP для решения проблемы?
— Мы никогда не использовали этот SDK, потому что это совершенно другое направление исследований, однако любой интересующийся может использовать его для такого случая.
— Можно ли использовать ваш эксплойт для того, чтобы взломать роутер и поменять прошивку?
— Можно ли избавиться от уязвимости, заблокировав использование порта 7547?
— Если вам каким-то волшебным способом удастся заблокировать этот порт, то вы лишите свой роутер важных функций, которые обеспечивает провайдер интернета, в том числе получение IP, и можете вообще потерять доступ в WAN. Однако если использовать этот порт для получения IP в локальной сети LAN, а для выхода в Интернет пользоваться другим портом, то уязвимости можно избежать. И некоторые провайдеры Интернета предоставляют такую возможность своим клиентам.
— Могу ли я избавиться от уязвимости, если сразу после того, как вытащу роутер из коробки и подсоединю к сети, ACS назначит ему другой порт по умолчанию?
— Возможно, поэтому мы советуем провайдером именно так и поступать, во всяком случае, это обезопасит вас от атаки хакеров, которые сканируют весь Интернет в поисках открытых по умолчанию портов.
— Избавлены ли последние версии прошивки от этой уязвимости?
— Да, многие производители учли эту проблему и предусмотрели защиту от неё.