Как ошибки в админке маршрутизаторов могут выдать полный доступ к роутеру
Производители программного обеспечения недостаточно заботятся о безопасности маршрутизаторов. А ведь именно через роутер злоумышленник может проникнуть во внутреннюю сеть и прослушивать весь проходящий трафик. В данной статье будут рассмотрены баги и уязвимости, которые были найдены мной и товарищем @090h в процессе пентеста завоевавших популярность роутеров ZyXEL Keenetic.
Warning!
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Современный роутер
Если не брать тех людей, которые сравнивают установку Wi-Fi-роутера с монтированием вышки сотовой связи у себя дома и опасаются влияния радиоволн на свой мозг, можно с уверенностью сказать — беспроводная точка доступа есть почти у каждого активного пользователя Сети. Помимо удобства, Wi-Fi-роутер, как правило, добавляет и безопасности: устройства пользователя оказываются за файрволом и недоступны для прямых атак. Но вместе с тем сама точка доступа может стать объектом для атаки. Программное обеспечение точки доступа (как и любого другого девайса) нередко может быть уязвимо. Производители в большинстве случаев редко придают значение серьезным проверкам безопасности, концентрируясь на удобстве пользователя и максимальной производительности. Аргументация простая: если большинство сервисов недоступны извне, а админка доступна только для пользователей в локальной сети, то чего заморачиваться? На самом же деле набор из простых уязвимостей вкупе с социальной инженерией может дать злоумышленнику удаленный доступ к управлению роутером (правда, при определенном стечении обстоятельств). В этой статье мы рассматриваем потенциальную возможность такой атаки на роутер ZyXEL Keenetic, с первой версией прошивки, которая установлена по умолчанию.
Первый взгляд
Надо понимать, что мы целенаправленно искали уязвимости в роутере. Не было задачи взломать кого-то, у кого стоит нужная нам точка доступа. Первое, с чего мы начали, — это сканирование портов Nmap’ом из внутренней сети (снаружи веб-админка по умолчанию закрыта). Сканер показал нам три открытых порта, из которых нас интересуют только два — 80-й (веб-интерфейс) и 23-й (Telnet).
На 80-м порту крутится обычный веб-интерфейс для управления роутером. С него мы и начнем.
Веб-баги
Если рассмотреть веб-интерфейс с точки зрения безопасности, то это провал. Классика жанра: везде, где есть возможность ввода своей информации, отсутствует фильтрация! В формах отсутствуют какие-либо токены, что открывает возможность для CSRF-атак.
Конкретно каждую XSS я рассматривать не буду, но стоит обратить внимание на один интересный вариант эксплуатации XSS (лайф-хак). Тебе наверняка хотелось бы скрыть себя из списка клиентов, подключенных к роутеру (их можно посмотреть в админке роутера). Казалось бы, для этого нужно иметь доступ к консоли, писать модули ядра и так далее. Но ответ лежит на поверхности. Просто меняем имя нашего компьютера (поле «Описание») на 1'>]");alert(1); и подключаемся к роутеру. В результате можно увидеть, что мы «втиснулись» в JS таким образом, что он не обработался и выдал пустой список клиентов. Этого будет вполне достаточно, чтобы скрыть себя и других пользователей, подключенных к точке доступа, от глаз невнимательного админа.
Прошивка под скальпелем
Хакер #171. 3D-принтерыБлагодаря CSRF и XSS можно добыть пароль от роутера и получить удаленный доступ через бэкенд, что будет самым лакомым подарком. Однако для этого не обойтись без социальной инженерии (вообще любая атака становится возможной только при определенном стечении обстоятельств).
-
Отправляем админу ссылку на хост с заранее подготовленным HTML-файлом:
Jailbreak from cmd
Подключившись по телнету и залогинившись с данными, которые мы извлекли из файла KEENETIC.cfg, попадаем в интерактивную консоль Keenetic. Здесь мы можем выполнять примитивные операции или даже системные команды через exec. Пример:
Но дело в том, что это дико неудобно, да и хотелось бы иметь полноценную консоль, а не какую-то кривую обертку. Для получения полноценной консоли был найден и проэксплуатирован интересный баг с неправильным парсингом аргумента для ping. Благодаря ему удается выполнять произвольные команды и в том числе «выпрыгнуть» из предложенной оболочки в шелл ash:
И вот мы уже имеем полноценную консоль. Теперь мы можем делать все, что угодно, но не стоит забывать, что в роутере используется файловая система squashfs в режиме read-only.
Изменяем имя сети на XSS, и она исполняется
Теперь сделаем вещь, которая облегчит нашу работу с консолью. Конечно же, это бэкконнект. Делается он очень просто:
Теперь открываем консоль на нашем компьютере:
Как видишь, мы можем даже сделать бэкконнект на свой сервер. В некоторых случаях это может помочь обойти защиту, если таковая имеется.
Концепты
Найденные баги открывают возможности для дальнейшего развития атаки. Рассмотрим некоторые концепты.
- Вносим изменения в софт роутера. Как я уже сказал ранее, мы имеем дело с файловой системой squashfs, и, чтобы что-либо изменить, нужно сильно постараться. Для начала скачиваем оригинал прошивки и распаковываем (в интернете можно без труда найти множество инструкций), далее изменяем необходимые файлы и «склеиваем» прошивку в удобный вид. После этого необходимо обновить микропрограмму в роутере, загрузив файл измененной прошивки. Таким образом, мы сможем изменять, добавлять и удалять какие-либо файлы с прошивки.
- Добавляем функционал через модуль ядра. Если ты обладаешь навыками программирования модулей ядра, то ничто не мешает тебе написать свой модуль ядра, скомпилировать его и подгрузить через lsmod. Но, чтобы без обновления микропрограммы иметь в распоряжении пространство для создания и изменения файлов, мы должны подключить внешний носитель и работать непосредственно с ним (однако у многих пользователей внешних носитель уже подключен).
- Получаем дополнительные данные через команду flash. Стоит обратить внимание на такой инструмент, как команда flash, доступная в консоли роутера. Она может дать нам интересные данные (к примеру, пароль для программы NetFriend с целью удаленной настройки роутера), которые в дальнейшем могут быть использованы против жертвы. Пример:
- Обсуждение маршрутизаторов ZyXEL Keenetic;
- интересная ветка форума на iXBT;
- возможности роутера Keenetic на прошивке второго поколенияhabrahabr.ru;
- дополнительные приложения для Keenetic.
Вердикт?
Надо понимать, что случай ZyXEL не уникальный — изъянами в своем софте могут похвастаться практически все производители роутеров. Не самые критические на первый взгляд уязвимости при совмещении с социальной инженерией могут привести к довольно печальным последствиям. Но обезопасить себя от подобного можно, только если регулярно обновлять прошивки роутера и изменять все настройки, запрещающие удаленно пользоваться роутером.
Информация об уязвимостях была передана специалистам компании ZyXEL.
Скорый BUGFIX
Парни из ZyXEL сразу же ответили, что будут делать с багами
«Исправления найденных багов (там где, это необходимо) в ближайшее время станут доступны пользователям в той или иной форме в зависимости от версии микропрограммы (V1 — в неофициальных сборках, V2 — в свежих компонентах). Прошивка 2.0 вообще построена по иному принципу — без использования shell и BusyBox. Вся логика работы скрыта в модулях и библиотеках, и повлиять на ее работу гораздо сложнее. Получить рутовый доступ попросту некуда. Командная оболочка NDM хоть и исполняется от имени рута, но настолько ограничена, что требуется отдельное исследование, как использовать ее по злому умыслу. Что касается уязвимостей веб-интерфейса, вставить код на страницу через имя компьютера в прошивке 2.0 невозможно (мы на всякий случай проверили). Воспользоваться CSRF не получится, ведь мы используем AJAX, а не GET/POST через форму или URL, а кросс-доменные запросы AJAX давно блокируются браузерами. Украсть пароль тоже нельзя, потому что он не хранится в открытом виде.»