Продолжаем катить нашу телегу, прошлая часть была вот тут, а начало всей серии статей про безопасность сетевых принтеров (оглавление) — ищите здесь.
Отключите на принтере все вспомогательные сервисы, до которых сможете дотянуться. Поэтому третий, самый главный и одновременно до ужаса банальный вывод звучит так: единственное, что должен делать принтер — это печатать. Худо-бедно, но печатать, больше от него ничего не требуйте!
Я показал ранее, насколько зачастую некачественная реализация встроенного ftp-сервера поставляется практически в каждом втором принтере, как безобидный telnet-сеанс позволяет скрытно блокировать работу принтера, дошла очередь показать, какое безобразие творится с web-панелью управления сетевым принтером.
Наиболее просто обход авторизации выполняется на некоторых МФУ марки Toshiba, поэтому наш практический пример посвящен именно ей. Здесь нужно просто знать прямой путь-URL на любое вложенное меню web-панели, но поскольку все эти пути стандартные на всех моделях принтера, то это не такой уж и большой секрет.
Вот пример такого произвольного пути в меню Сканирование:
http://198.68.0.1/TopAccess/Administrator/Setup/ScanToFile/list.htm
Если предварительно не авторизоваться на таком принтере/МФУ и попробовать сразу перейти на одну из страниц web-панели — произойдет вполне логичный редирект на страницу c приглашением сначала ввести пароль:
http://198.68.0.1/TopAccess/Administrator/Login/Login.htm
Да-да, это сработала встроенная система безопасности принтера — лично я очень впечатлен таким поворотом дел. Очень хорошо, тогда добавляем дополнительный «слэш» в первоначальный адрес как показано ниже и пробуем ещё раз:
198.68.0.1/TopAccess//Administrator/Setup/ScanToFile/list.htm
Вот это другое дело — защита, конечно, заставляет «напрячься», чтобы ввести дополнительный знак с клавиатуры, но зато теперь сразу открывается страница настроек, в которую мы и намеревались первоначально войти.
Кстати о паролях... согласитесь, как-то не эстетично лазить в чужие принтера «через окна», когда существует вполне нормальные «входные двери», и пароли — эти двери отворяющие.
Как-то кошки на душе скребут, когда вот так вот через какой прямой URL, порой нахрапом вваливаешься в чужую администраторскую зону — не эстетично это всё как-то, право...
Сразу после попадания в принтер вышеописанным методом, советую потратить немного времени, чтобы впредь чувствовать себя человеком. Зайдите в административный раздел ответственный за настройку, где перечислены поля ввода паролей и логин, после чего откройте просмотр «исходного кода страницы», как правило, тут все достаточно скучно и однообразно на многих моделях принтеров и от разных производителей.
Как видно на рис. ниже, в свойстве поля Password
сразу открыто указан как бы скрытый от вас на странице звёздочками пароль. Записывайте все эти пароли на бумажку, и не лазьте в чужие принтеры какими-то окольными путями — помните, всегда важно сохранять человеческое достоинство, даже занимаясь ни пойми чем.
Кроме того, если есть физический доступ к принтеру, все ваши пароли на нём можно также аннулировать, просто выполнив сброс настроек принтера (hard reset), поэтому ваши «продвинутые» сотрудники при распечатке могут убить двух зайцев сразу: распечатать нужный текст, а также, раз уж дошли к принтеру ногами — сбросить все пароли на нём, для последующего беспрепятственного доступа к нему через сеть.
Тема обзора уязвимостей доступных в принтерах и МФУ достаточно огромна, но ещё один момент которого я бы хотел обязательно коснуться напоследок, это ответ на логичный вопрос: как добывается такое количество уязвимостей на принтеры?
В нашем примере мы рассмотрим специализированный исследовательский инструмент — Praeda (полное и очень глубокомысленное название: Praeda Harvesting Tool), который, несмотря на свою молодость уже успел снискать определенную известность «в узких кругах». Эта программа впервые была представлена на конференции по информационной безопасности ShmooCon 2011.
Итак, Praeda — это довольно объемный скрипт на Perl (кстати, в самом конце 2011 года принято принципиальное решение и начат процесс переноса этого проекта с языка Perl на Ruby, но это начинание пока ещё в самой начальной стадии своей реализации), который предназначен для поиска активных уязвимостей в web-панелях управления современных лазерных принтеров и МФУ, и который не только очень активно развивается в последнее время, но и содержит в себе достаточно продвинутые эвристические алгоритмы, а не только банальный fuzzing или перебор уже стандартных/известных способов взлома известных web-панелей управления.
Например, в данный момент завершается изучение и тестирование модуля расшифровки бэкапов и экспорта настроек создаваемых некоторыми известными принтерными вендорами.
Программа при своей работе рассчитывает на то, что настройки уровня безопасности МФУ и лазерных принтеров представляют из себя значения по умолчанию, поэтому она пытается выудить максимально большой объем информации с таких устройств, включая имена зарегистрированных пользователей, адреса электронной почты, адресные книги пользователей, данные аутентификации SMB, email, LDAP-пароли и т.д.
Как правило, вся подобная информация используется как стартовая точка для развития атаки на локальную сеть.
Давайте очень кратко опишем, на что способна текущая версия Praeda:
Также следует остановиться в общих чертах и на параметрах работы с этим скриптом, так как документация к нему достаточно скудная. Вот общий формат его запуска:
praeda.pl target_file tcp-port project_name output_file [-ssl]
Здесь файл target_file
содержит список-перечисление всех принтеров (их сетевых адресов), которые должны быть исследованы, записанные в формате один адрес на строчку. Аргумент tcp-port
указывает на порт web-панели (допускается только одно — общее для всех значение ), а project_name
— это названия вашего проекта-исследования, физически же будет создана отдельная папка с этим названием, куда будут складироваться все собранные в рамках этого запуска данные.
Кроме того в этой папке будет создан файл data-file.log
, который документирует все операции выполняемые Praeda во время своей работы (название этого файла и определяет последний обязательный аргумент — output_file
). Здесь опция ssl необязательна, она позволяет работать с принтерами, где доступ к их web-панели открыт только через этот криптографический протокол.
Вот пример запуска его диспетчера (головного файла комплекса):
./praeda.pl target.lst 80 pentest1 data-file
Хотелось бы отметить, что различные модули Praeda, которые могут быть автоматически запущены, будут подключаться по разным протоколам и портам, отличным от указанного в строке запуска скрипта, поэтому предварительно убедитесь, что ваш локальный брандмаер лояльно настроен по отношению к этому скрипту. И последнее, для его работы требуются следующие установленные в системе Perl-модули:
LWP::Simple, LWP::UserAgent, HTML::TagParser, URI::Fetch, HTTP::Cookies, IO::Socket, HTML::TableExtract.
PJL exploits
» чтобы убедиться, что здесь всё не так гладко (мне понравилось вот это, например).Исторически PJL задумывался как мощное расширение языков PCL и JCL и создавался на их основе. Несмотря на то, что PJL это разработка компании HP, сейчас этот язык используется на множестве современных принтеров от других известных производителей. Правда, в некоторых случаях их реализации могут содержать свои собственные функции, несовместимые с прототипом (эта ситуация отчасти напоминает SQL с его множеством общих диалектов, иногда несовместимых между собой в деталях).
PJL, отчасти наряду с более ранними и более простыми языками «разметки страниц» — PostScript (PS), Encapsulated PostScript (EPS), Epson Job Language (EJL) и Printer Command Language (PCL), — на данный момент монопольно доминирует на рынке принтеров. В свою очередь некоторые идеи PJL получили дальнейшее развитие в PML (HP Printer Managment Language) — новейшем объектно-ориентированном двухстороннем протоколе для одновременного обмена информацией между множеством приложений и множеством принтеров (например, используемый для SNMP-взаимодействий с принтерами).
Читать этот материал дальше. Оглавление и начало этой серии статей — здесь.