RuCore.NET

Проверка своего принтера на уязвимости и его защита





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

 



Компания HP разработала язык Printer Job Language (PJL) еще в далеких 90-ых. Изначально он был предназначен для расширения команд принтера, но прошли годы, и в нашем мире информационных технологий для этой функции стали использовать другой язык программирования — PCL. С этого момента PJL пошел своей дорогой. Его использовали другие компании и он оброс большим количество дополнительных функций. В итоге мы получили что-то похожее на ассемблер.

Даже если взять только устройства HP, то полного описания инструкций и команд в открытом доступе нет (видимо, компания поняла, что выкладывать технические детали в интернет небезопасно). Есть общий мануал, в котором сопоставлены серийные модели принтеров и поддерживаемые ими команды. Также есть инструкция, описывающая действия команд, синтаксис и ошибки. Документ уже устарел и сильно на него полагаться не стоит.

Помимо языка управления принтерами, HP разработала еще одну интересную технологию, которая служит и по сей день, — JetDirect. Это штука, позволяет превратить любой принтер в сетевой. На ее основе выпускаются как отдельные принт-серверы, так и встроенные (в принтеры, МФУ и роутеры). JetDirect дает возможность подключить устройства к сети и печатать удаленно… причем не только самому владельцу!

Спойлер: Взлом приветствия.С помощью языка PJL некоторые хакерские приемы применяются в сервисных центрах. Например, так сбрасывают счетчики напечатанных листов или очищают память о вставленных ранее картриджах. Это нельзя сделать из меню самого принтера, поэтому и приходится прибегать к таким уловкам через консоль. Давайте копнем глубже и разберемся как они взламывают принтеры.

Сервис JetDirect по умолчанию слушает TCP-порта 9100. На него мы и будем отправлять команды из консоли. Для эксперимента я использовал сетевой принтер HP Color LaserJet 3600n со встроенным принт-сервером HP JetDirect Fast Ethernet.

Поиск открытого порта 9100 программой Nmap

На открытый порт мы можем подключиться обычным telnet, но так как я приверженец всяких изощренных методов, то воспользуюсь netcat. Давайте попробуем поменять приветствие принтера на дисплее.

nc -v 172.22.1.207 9100
@PJL STMSG DISPLAY="HACKED"

Поясню немного команду:

@PJL — эти символы дают понять принтеру, какой мы используем язык;

STMSG DISPLAY — это сама команда изменения надписи на дисплее. После нее мы просто пишем то, что хотим вывести.

Отправляем команду на принтер. В итоге получаем результат как на фотографии:

 

Теперь наша надпись будет сиять на дисплее вместо стандартного приветствия, пока кто-то не нажмет любую кнопку на самом устройстве.

Аналогичного эффекта можно добиться, используя оператор RDYMSG (сообщение о готовности) вместо STMSG (стандартное сообщение). Команда приобретет следующий вид:

@PJL RDYMSG DISPLAY=»HACKED»

То же самое можно проделать, выполнив печать из файла:

# Записываем команду в текстовый файл перенаправлением вывода

echo '"@PJL STMSG DISPLAY="HACKED"' >> PJL.txt

# Отправляем файл на IP-адрес сетевого принтера с помощью netcat

# Ключ -v включает режим вывода дополнительных сообщений (verbose)

сat PJL.txt | nc –v 172.22.1.207

После этих команд на табло принтера снова гордо воссияла надпись HACKED, а это значит, что мы можем отправлять принтеру PJL-команды из файла.

Массовый тест

Взаимодействие принтера и компьютера при печати можно представить как трехслойную модель. На первом слое будет сетевой протокол, затем язык управления принтером (в нашем случае PJL) и последним — язык описания (PostScript).

Тут есть интересный момент: поскольку порт 9100 де-факто зарезервирован для JetDirect, то он прослушивается на получение как команд PJL, так и собственно заданий печати. Другими словами, мы можем послать туда любую строку, которая не относится к PJL. Принт-сервер передаст ее на следующий уровень, где PostScript преобразует ее в задание на печать. Конечно, без взаимодействия с драйвером распечатать форматы типа .docx или .png, скорее всего, нельзя, а вот для обычного файла .txt этого вполне хватит.

Внесу небольшую ремарку: если есть желание получить идентичные надписи на разных моделях и марках принтеров и МФУ — лучше сразу забыть. PostScript не «понимает» форматирование текста, или, если сказать другими словами, шрифт и размер надписи будет разный, тот, который используется по дефолту.

Для проверки создадим текстовый файл printme.txt, не содержащий команд. Это просто строки с латинскими буквами. Отправляем его на принтер той же командой, и… спустя пару секунд устройство выплюнет распечатанный лист!

cat printme.txt | nc –v 172.22.1.207

В итоге мы имеем возможность печатать документ при помощи JetDirect, просто отправив текст на TCP-порт 9100 из файла или консоли. Можно ли это автоматизировать? Конечно!

Массовая печать

Давайте разберемся с автоматизацией, это не так уж и сложно. Я буду использовать bash и выполнять все тесты на примере своей локальной сети, хотя за NAT это тоже без труда сработает.

Для начала создадим файл с любым содержимым. Теперь нам необходимо просканировать диапазон IP-адресов на наличие всех узлов с открытым портом 9100. В этом нам поможет старый добрый Nmap. Однако, чтобы получить чистые IP-адреса в удобном формате (без лишних символов), воспользуюсь утилитой grep для обработки регулярных выражений:

grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}")

С такой маской мы получим вывод, содержащий только IP-адреса в каждой строчке.

Вот итоговая команда после объединения:

nmap -p 9100 172.22.1.1/24 --open |  grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"

 

Результат добавления регулярного выражения​

Теперь загоним все это в цикл, указав желаемый IP-адрес и маску подсети:

for ip in $(nmap -p 9100 172.22.1.1/24 --open |  grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}");do cat PJL | nc -v $ip 9100; done

 

Работа скрипта. Запуск… и слышно, как загудели все сетевые принтеры в офисе. Помимо разных моделей HP, Kyocera 2040dn тоже присоединилась к работе. Распечатки после запуска скрипта​

 

Можно было бы заставить печатать принтеры и с помощью команды echo, а не из файла, но это кому как удобно.

Dos-атака

Теперь попробуем вызвать отказ в обслуживании. Для этого (как вариант) нам необходимо создать бесконечный цикл. На bash он выглядит как-то так:

while [ 0 -eq 0 ]

Добавим в него отправку заданий:

while [ 0 -eq 0 ]; do echo "HACKED" | nc –v 172.22.1.163; done

Запускаем и смотрим результат. У меня на подопытном МФУ HP LaserJet Pro M1536dnf вышло вот что: он успел напечатать пару листов, а затем на табло постоянно горело «Печать документа», хотя сама печать уже не выполнялась. Печать не возобновилась даже после остановки работы скрипта. Видимо, слишком длинная очередь заданий подвесила МФУ. Его пришлось перезагрузить для восстановления работоспособности. Примерно то же произошло позже и с Kyocera 2040dn

Web-интерфейс принтера

Сетевые принтеры часто оказываются подключены к интернету, причем без ведома их владельцев. Веб-интерфейс со страницами настроек и функциями управления также будет виден из-за NAT’а без существенных ограничений доступа. В большинстве случаев логин/пароль либо установлен по умолчанию, либо отсутствует вовсе.

Вот сайт с говорящим названием passwordsdatabase.com — один из онлайновых справочников дефолтных паролей с поиском по вендору. Новые модели в нем (пока) отсутствуют, но принтеры сразу сообщают свой номер, по которому легко найти заводской пароль в руководстве на сайте производителя.

В зависимости от модели принтера через его веб-панель можно делать разные вещи: смотреть и менять настройки, отправлять команду напечатать тестовую страницу или указанный файл.

 

Также можно прочесть логи использования принтера, то есть увидеть, кто и что печатал. Обычно в хронологическом порядке указываются имена пользователей, используемые приложения, названия документов и прочее.

Некоторые принтеры (в частности, встречалось на Ricoh Aficio MP C3500) сами подсказывают хакерам, что либо пароль администратора дефолтный, либо его нет совсем. Это выглядит как строка «Change your admin password!» прямо на панели управления принтером

 

Инструменты для взлома принтеров

В 2017 году на конференции Black Hat рассматривали автоматизированные способы эксплуатации различных дыр в безопасности сетевых принтеров, после чего готовых инструментов стало еще больше. Вот некоторые из них.

Praeda — эта программа предназначена для аудита безопасности при проверке настроек подключения сетевых принтеров. Умеет выполнять автоматический поиск и скачивать документы из памяти принтера. Работает на портах TCP 80 и 443, то есть поддерживает защищенное соединение. Ее можно запустить и под Windows, однако предварительно придется кое-что поменять в коде самой программы (см. документацию).

PRET — это целый фреймворк на Python для эксплуатации известных уязвимостей в службах удаленной печати. Работает в Linux, поддерживает команды PJL и PCL. Инструмент очень хорошо документирован, есть даже подробный гайд с примерами.

Защита от взлома принтеров

Чтобы защитить принтер от подобных посягательств, необходимо как минимум закрыть порт 9100 (например, через настройки маршрутизатора). Это написано даже в руководстве о минимальной сетевой безопасности на сайте HP, однако что-то мне подсказывает, что его мало кто читал.

Обычно компьютер отправляет задание на печать по сети иначе — например, на TCP-порт 631 по протоколу IPP. На скриншоте ниже отображены пакеты, перехваченные сниффером во время печати документа на сетевом принтере HP Color LaserJet 3600n.

 

Продвинутые модели позволяют настроить список доступа с определенных IP-адресов. Поищите в документации соответствующий раздел или ключевые слова IP ACL.

Смените дефолтные логины/пароли, даже если не собираетесь использовать удаленное управление.

Различные уязвимости в системе JetDirect используются давно, а патчатся крайне медленно. Организации годами используют морально устаревшие принтеры и МФУ. Для них есть готовые эксплоиты, но нет и не будет новых драйверов/прошивок, закрывающих известные уязвимости. Поэтому лучше вообще отключить свой принтер от интернета и пользоваться им только через локальную сеть. Включайте его, только когда в этом есть реальная необходимость. Только выключенное устройство невозможно взломать удаленно.

Подумайте о том, что представляет собой современный принтер. Многие модели оснащены функцией сканирования и возможностью удаленной печати. Большинство принтеров поставляются с жесткими дисками, на которых хранятся цифровые копии всех документов, которые были отсканированы, скопированы, присланы по электронной почте и напечатаны. Современный принтер сохраняет копии всех документов, которые когда-либо прошли через него: от конфиденциальных записей сотрудников до номеров кредитных карт, медицинских карточек и других важных документов. Это просто кладезь информации, за которой могут охотиться злоумышленники.

Какова текущая ситуация? Некоторые статистические данные действуют отрезвляюще. Только 16 % опрошенных считают, что риск угрозы или нарушения безопасности со стороны принтеров находится на высоком уровне. Далее, у 61 % организаций в мире в прошлом году произошло по крайней мере одно нарушение безопасности, связанное с печатью.

По оценкам компании HP, менее 2 % из сотен миллионов корпоративных принтеров в мире можно считать защищенными. Как такое возможно? Это можно объяснить следующими факторами:

  • В некоторых моделях или сборных устройствах могут отсутствовать соответствующие функции безопасности.
  • Компании не устанавливают обновления ПО для обеспечения безопасности, которые зачастую должны устанавливаться вручную.
  • Функции безопасности принтера остаются отключенными.
  • Принтеры расположены за пределами сети, защищенной брандмауэром.
  • Хакер перехватывает документы, которые затем незаметно передаются в облачный сервис хранения хакера.
  • С помощью смартфона осуществляется запись определенных звуков, издаваемых 3D-принтером, а затем хакер может реконструировать печатаемый объект.
  • Хакеры, которые удаленно управляют принтером и задерживают печать важных документов, тем самым могут нарушать корпоративную безопасность.

Какие меры следует принять организациям для борьбы с подобными угрозами? Для начала необходимо убедиться в том, что используемые политики, процедуры и технологии основаны на современных разработках, учитывающих выявленные проблемы. Директора компаний должны консультироваться со специалистами в области ИТ и информационной безопасности и принимать меры по снижению рисков для безопасности данных. Оценка технологий и риска кибератак на конечных устройствах, таких как принтеры, сканеры и т. д., может помочь определить потенциальные области риска.

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

 

Источник: http://www.spy-soft.net/ , https://www.osp.ru/ 



Поделись статьей с друзьями


37 просмотров



Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: