Как взламывают принтеры и как от этого защитится.
Форсайт
Однажды тихим вечером вы вдруг слышите звук: это принтер в соседней комнате — он что-то печатает, хотя вроде бы никто его об этом не просил. Вы подходите к принтеру и обнаруживаете, что он почему-то напечатал листовку, призывающую вас подписаться на известного видеоблогера.
Спустя несколько часов принтер вдруг выплевывает рекламу компании, которая обещает рекламировать товары через принтеры, а потом начинает вообще безостановочно печатать всякую ерунду, в основном крайне сомнительного содержания. Что за чертовщина? Ваш принтер взломали — и не только ваш.

Принтер выбирает PewDiePie
Случай с листовкой, предлагавшей подписаться на видеоблогера, — реальный и совсем недавний: на прошлой неделе 50 000 принтеров по всему миру напечатали эту листовку. Среди этих неожиданно взбесившихся агрегатов был, например, и чековый принтер в отделении полиции, которому вроде как совсем не подобает себя так вести.
Случилось это вот как: одному хакеру стало скучно. По его словам, перед этим он играл в Destiny 2 добрых четыре часа кряду, так что его можно понять. После Destiny хакеру остро захотелось что-то взломать, и с этой мыслью он отправился в Shodan — это сервис, который позволяет искать подключенные к Интернету устройства, его еще называют поисковиком по Интернету вещей.
Хакер решил, что взламывать он будет принтеры и распечатает на них что-нибудь забавное, чем немедленно и занялся. По утверждению хакера (который, кстати, рассказал всю историю сам в Твиттере — там его зовут @HackerGiraffe), он быстренько изучил используемые для печати протоколы и соответствующие им порты, а потом поискал эти порты на Shodan. Там он обнаружил более 800 000 устройств, доступных из Интернета, у которых эти порты открыты. Из них он выбрал первые 50 000.

Напечатать на них хакер решил шуточную листовку в поддержку известного видеоблогера PewDiePie, YouTube-канал которого сейчас соревнуется за звание самого популярного в мире с другим каналом, T-Series. Листовка призывала подписываться на PewDiePie и отписываться от T-Series.
На страницах Интернета хакер нашел программу для взлома принтеров, написал простенький скрипт, который запускал утилиту для взлома и отправлял на принтеры команду печатать листовку, — и оставил скрипт выполняться. Так на 50 000 принтеров по всему миру была отправлена вот такая листовка:
Технические детали
Как мы уже говорили, техническая сторона взлома не представляет особой сложности.
Для поиска уязвимых устройств традиционно используется поисковая система Shodan. Она позволяет указать номер порта и протокол — и получить список сетевых устройств, в которых данный порт свободно открыт в интернет, с указанием IP-адресов.
Последняя атака была нацелена на принтеры с открытыми портами IPP (Internet Printing Protocol), LPD (Line Printer Daemon) и портом 9100. Затем пишется скрипт, чтобы рассылать по полученным IP-адресам и указанному порту файл PostScript, который сразу принимается на печать.

Количество принтеров с открытым портом 9100. Скриншот из поисковой системы Shodan (2 декабря 2018 года)
В Reddit AMA хакер @TheHackerGiraffe сказал, что он отправил сообщения только только 50 000 принтеров, хотя мог задействовать и большее количество: поисковик выдал более 800 000 непропатченных принтеров с выставленными в интернет портами по протоколам IPP, LPD и JetDirect. Но хакер выбрал только 50 000 принтеров с открытыми портами 9100.
Список уязвимых принтеров можно скачать с Shodan. Затем хакер взял инструмент Printer Exploitation Toolkit (PRET), исходный код которого свободно опубликован в интернете и использовал его для подключения к принтерам. Кстати, PRET позволяет не только вывести на печать сообщение, но и получить доступ к внутренней сети, к файлам, а также просто повредить принтер, среди прочего.

В январе 2017 года программу выложила группа исследователей вместе с научной работой о бедственной безопасности сетевых принтеров. В своей работе они подробно описали шесть уязвимостей в более чем 20 моделях сетевых принтеров со старыми прошивками. Инструмент предназначен для тестирования сетей и поиска уязвимостей.
@TheHackerGiraffe запустил такой bash-скрипт. Скрипт берёт список принтеров c Shodan (potential_bros.txt) и циклом прогоняет по каждому IP-адресу PRET с командами, указанными в commands.txt:
Bash:
#!/bin/bash while read -r line; do ip="$line" torify ./PRET/pret.py $ip pjl -q -i ./commands.txt done < "./potential_bros.txt"
Содержимое commands.txt:
Bash:
print ./message.pdf display HACKED quit
В связи с большим количеством IP-адресов скрипт лучше запустить где-нибудь на сервере.

@TheHackerGiraffe не считает свои действия незаконными, потому что принтеры свободно открыты для управления через интернет: «Представьте большую кнопку „Печать” в интернете», — говорит он.
Независимо от целей взлома и глупого использования, нынешний инцидент многое говорит о защите сетевых устройств (точнее, об отсутствии этой защиты). Как видим, огромное количество пользователей не думает об обновлении прошивок и не следит за выпуском патчей. Впрочем, это давно известно, сейчас произошла лишь наглядная демонстрация, к чему такое может привести.
«Люди недооценивают, насколько легко хакер-злоумышленник может использовать такую уязвимость, чтобы вызвать серьезный хаос, — написал @TheHackerGiraffe — Они могут украсть файлы, установить вредоносное ПО, нанести физический ущерб принтерам и даже использовать принтер в качестве плацдарма для дальнейшей атаки на внутреннюю сеть».
Партизанский принтерный маркетинг
Естественно, такую новость не могли упустить СМИ — и в результате о возможности печатать что угодно на десятках тысяч принтеров по всему свету узнали миллионы людей по всему миру.
Среди них нашлись предприимчивые: например, буквально за пару дней на просторах Интернета появилось некое агентство, которое предлагает компаниям печатать рекламу на чужих принтерах — видимо, тем же самым образом, каким это делал @HackerGiraffe, заботливо поделившийся всей методикой в Twitter.
Информация о существовании агентства распространялась для пущей наглядности через все те же самые принтеры. При этом в своих рекламных проспектах, выползающих из лотков для печати, агентство хвалится, что может добраться до абсолютно любого принтера, что, скорее всего, неправда. По крайней мере, тем способом, который предложил @HackerGiraffe, дотянуться можно только до сетевых принтеров.
Краткий экскурс в историю печатных атак
На самом деле атаки на принтеры — не новость, и в какой-то мере даже удивительно, что массово эту идею подхватили только сейчас. Например, во времена активного использования факсов популярностью у всяких сомнительных личностей пользовался факс-спам — рассылка рекламы и не только рекламы по факсу. В 1991 году в США был принят закон, который запрещал такую рассылку, да и факсы в большинстве стран стали встречаться все реже (кстати, вы не проверите, но в Японии факсы до сих пор еще как живы!), так что со временем факс-спам пошел на убыль.
Принтерам тоже уже доставалось. В 2008 году исследователь Аарон Уивер (Aaron Weaver) опубликовал статью, в которой описал возможность создания веб-сайта, при посещении которого на принтер пользователя будет отправляться запрос на печать определенной страницы.
Были и случаи массовых атак на принтеры — например, в 2016 году хакер взломал сетевые принтеры более чем в десяти колледжах в США и распечатал на них расистские листовки.
Как не дать принтеру взбеситься
Скорее всего, большинству пользователей совершенно не нужно, чтобы их принтер был доступен из Интернета. Ну а поскольку взломать описанным выше способом можно только сетевые принтеры, то лучше просто отключить свой принтер от Интернета, при этом он останется доступным через локальную сеть.
- Если в настройках принтера есть какие-либо пункты про печать через Интернет, отключите эти возможности.
- У сетевых принтеров часто есть логин и пароль для доступа. Обязательно поменяйте их — ни в коем случае не оставляйте те, что установлены по умолчанию.
- На вашем роутере, скорее всего, есть файрвол. В нем стоит закрыть порты 9100, 515, а также с 721-го по 731-й. О том, как это сделать, читайте в руководстве пользователя к вашему роутеру.
- Старайтесь выключать принтер, когда вы его не используете.