Взлом принтеров

Взлом принтеров

@TOR_ION

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


Что такое принтер/МФУ?

С точки зрения нашей сегодняшней статьи, это не столько печатающее устройство, сколько продвинутое многофункциональное устройство, подключенное к вашей сети. Я исхожу из того, что любой современный сетевой принтер, МФУ и некоторые другие сетевые офисные устройства, несмотря на свою очевидную безобидность, представляют собой уже почти полноценную копию компьютера. У такого сетевого принтера – свой сетевой адаптер, собственный винчестер, ОЗУ и ПЗУ, встроенные telnet, ftp и web-серверы на борту и так далее... И, как мы сегодня покажем, возможности, которые они дают злоумышленникам, вполне сопоставимы с обычным компьютером, а в чем-то даже уже превосходят его. Теперь эти устройства могут сами получать и отправлять e-mail–сообщения, интегрироваться с сервисами в вашей локальной сети (например, через LDAP), выходить в Сеть, запускать в себе некие специальные приложения... короче, жить своей собственной бурной и интересной жизнью.


В связи с этим с самого начала хочется подчеркнуть две базовые проблемы, которые и порождают длинную вереницу опасных последствий в этой сфере. Во-первых, подобные ниже рассмотренным типы атак на принтерную технику – очень сложно обнаружить или как-то автоматически предотвратить. Нет никакого специализированного антивируса для принтеров или встроенных средств контроля над их безопасностью, и, если прошивка МФУ будет всё-таки скрытно заменена, о новых возможностях этого устройства можно будет только догадываться. Во-вторых, к сетевым принтерам и МФУ, как правило, наблюдается очень легкомысленное отношение со стороны системных администраторов. Штатные сисадмины могут внимательно следить за состоянием своих серверов, анализировать и выявлять опасные подключения к рабочим станциям, но сетевой принтер… он, как правило, предоставлен сам себе, после того как был включен и единожды настроен для работы в локальной сети организации.


На фоне высокой распространенности подобной техники эта проблемная ситуация, естественно, привлекает пристальное внимание сетевых злоумышленников, постоянно ищущих всё новые вектора атак на корпоративные сети. Но довольно сухой теории, переходим к самому интересному – к практике использования удаленного принтера.


Трюк #1 - Находим уязвимые принтеры

Поверьте на слово: в Сети таких принтеров как звезд на небе, не счесть им числа… давайте лучше попробуем посмотреть, как можно выуживать их практически в любых количествах. Лично я как бывший технарь (или бывших не бывает?) предпочитаю пользоваться сетевым сканером Nmap, для любителей же графических оболочек можно предложить во многом аналогичную программу – CAIN,. Другим простым способом нахождения принтеров может послужить любой сканер SNMP-сервисов. Я не использую в данном случае ни один из штатных способов получения подобной информации, так как хочу показать возможности доступные для злоумышленника, который не подключен к ресурсам локальной сети традиционным способом. Отмечу лишь, что стандартный принтер, как правило, болтается на стандартном для него порту – 9100.

О’кей, признаем вместе: черный, как уголь, экран сканера nmap’a – всё это слишком уныло для большинства современных офисных ИТ-работников, которые не только консоль давно не видали, но даже в GUI специализированной программы разбираться им частенько лениво. И, поскольку живём-то мы в век глобализации и веб-интерфейсов, давайте выйдем за пределы конкретной локальной сети и поищем подключенные к глобальной сети принтеры по всему миру, для чего воспользуемся самым простым способом, на котором я и остановлюсь подробней, – поиском от Google.
Вот пример поискового запроса в Google для поиска некоторых популярных принтеров фирмы HP:
inurl:hp/device/this.LCDispatcher
Как вы видите на скриншоте ниже, огромное количество принтеров марки HP (около миллиона) свободно доступны по их прямым IP-адресам прямо сейчас – выбирайте понравившийся!

Точно таким же образом можно легко найти принтеры и других фирм: например, для второго примера я выбрал Ricoh (вот вам целых три разных варианта запросов): intitle:"web image monitor" "/web/user/en/websys/webArch/mainFrame.cgi" inurl:"/en/sts_index.cgi" Я намеренно в этих запросах сужаю условия поиска, чтобы не шокировать вас десятками миллионов доступных для внешнего управления принтеров, но щелкая даже по выбранными здесь принтерам и заходя в их web-панели управления и выборочно отменяя/запуская чужие задания в этом глобализированно-виртуальном мире, вы можете почувствовать весь масштаб этой проблемы.

Что касается web-поиска, то выдам напоследок такой хинт: наиболее эффективно искать конкретные модели, адаптируя поисковые запросы индивидуально к «видовым особенностям» каждого отдельного принтера и его web-панели. Короче, пока мы на этом остановимся, и пусть это будет первым домашним заданием для читателя – самостоятельно найти через Google не менее 1 000 000 открытых для удаленного доступа принтеров (что, кстати говоря, довольно легко сделать).


Трюк #2 - Удаленная печать на принтере

Итак, в примерах выше вами было найдено множество сетевых принтеров по всему миру, и все они – к вашим услугам. Далее в статье мы покажем, что же со всем этим урожаем офисной техники делать.

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

!/usr/bin/perl -w

File name: prnmsg.pl

use IO::Socket; $iphost = $ARGV[0]; $textprn = $ARGV[1]; my $mysock = new IO::Socket::INET (  PeerAddr => $iphost,  PeerPort => '9100',  Proto => 'tcp', ); die "NETWORK ERROR: Could not create socket! $!\n" stuff $mysock; print $mysock $textprn; close($mysock);

Из исходника видно, что при запуске этого скрипта нужно указать в его командной строке в качестве первого аргумента ip-адрес целевого принтера, а вторым аргументом – сообщение, которое вы хотите удаленно распечатать. Здесь мы молча предполагаем, что управляющий канал принтера находится на порту 9100 (что в большинстве случаев так и будет). IP-адрес понравившегося принтера, как понятно, мы возьмём из Трюка #1. Кстати говоря, если вы вдруг спросите у меня про слова типа «пароль», «полномочия» и прочую милую чепуху, то расслабьтесь: это всё сущности гораздо более высокого порядка, характерные для вашей LAN, здесь же мы оперируем с принтером на низком канальном TCP-уровне, где… никаких паролей для печати не предусмотрено. Более подробно я расскажу про это в последнем, седьмом трюке.

В качестве очередного домашнего задания я предлагаю вам воспользоваться дополнительный циклом, чтобы написать легкую вариацию этого скрипта, которая работала бы в более глобальных масштабах, для чего принимала бы в своем первом аргументе сразу диапазон адресов в виде 192.168.1.*, – теперь при его запуске все принтеры в вашем офисе (или выбранном вами удаленном офисе) будут заняты работой. Лично меня шум равномерно печатающих принтеров успокаивает подобно прибою, а вас?


Трюк # 3 -Пример печати на экране принтера

Да, голоса в моей голове говорят мне, что используя ещё один вложенный цикл - печать на этих принтерах можно зациклить вообще, вплоть до окончания бумаги в лотке, но я не стал этого делать из соображений светлых гуманистических идеалов человечества.

Согласитесь, иногда бывает удобно, не вставая, послать вашему коллеге из соседнего отдела «Привет!», но использовать для этого ICQ или SMS было бы слишком банально и скучно, для чего в качестве места отображения я предлагаю выбрать экранчик состояния его принтера. Увидев утром на своем принтере вместо сухого системного сообщения “Ready” живой дружеский “Privet!”, он наверняка будет счастлив! Ну что ж, нам программистам для счастья людского ничего не жалко, для чего опять пишем очередной Perl-скрипт (нет, я не работаю на Mail.ru, я просто люблю Perl):

!/usr/bin/perl -w

File name: lcdmsg.pl

use IO::Socket; $iphost = $ARGV[0]; $lcdprn = $ARGV[1]; my $mysock = new IO::Socket::INET (  PeerAddr => $iphost,  PeerPort => '9100',  Proto => 'tcp', ); die "NETWORK ERROR: Could not create socket! $!\n" stuff $mysock; print $mysock "\@PJL RDYMSG DISPLAY = \"$lcdprn\"\n"; close($mysock);

Аргументы здесь аналогичны предыдущему примеру; рассматривая же код самого скрипта, мы понимаем, что здесь мы используем единственную принтерную команду – "@PJL RDYMSG DISPLAY”, которую мы худо-бедно заталкиваем в принтерный порт 9100. Как видно, второй аргумент командной строки, бережно помещаемый в $lcdprn, содержит сам текст отправляемого сообщения другу.

Вот пример запуска такого скрипта:

lcdmsg.pl 192.168.1.1 “INITIATING ROBOT UPRISING”

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

Ну, я тут, пока писал эту статью, во второй вкладке моего сознания написал небольшой стартап, который позволяет принимать SMS на номер моего шлюза, с которого ваш меседж редиректится на IP-указанного принтера, позволяя распечатывать текст SMS на этом принтере или на его экране. Собственно, составными частями его кода я и делюсь с вами.


Трюк # 4. - DDos-атака на прнтеры

Чтобы не умереть от скуки, я вынужден поднять градус – теперь мы будем DDoS’ить офисную технику, благо сделать это можно очень просто буквально в одну строчку, например, из консоли моей машины на FreeBSD это выглядит вот так:

cat /dev/hda | netcat -q 0 192.168.1.2 9100

Здесь мы трепетно пересылаем всё содержимое нашего винчестера (в raw-формате) на указанный первым аргументом удаленный принтер для последующей печати всех полученных нулей и единичек. Большинство испытанных мною принтеров чётко зависает от такой импровизированной DDoS-атаки, но некоторые, наиболее перспективные модели, при условии, если подловить их точно в момент печати, зацикливаются и начинают издавать адские щелкающие звуки, что приводит в суеверный ужас секретарш и других представительниц женского пола, как правило, выбегающих со своего рабочего помещения, гонимых по темным и длинным коридорам своей работы неким иррациональным страхом. Прекратить эти «принтерные судороги» можно только отключив принтер от питания (как вариант – добив его чем-то тяжелым). Кстати говоря, более эффективно скидывать на принтер громадные файлы через протокол ftp, который современные принтеры вполне поддерживают, прямо с публичных сервисов (тарбол с последними исходниками Linux для меня наиболее симпатичен), что снимает в данном случае нагрузку с вашего компьютера.

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

Report Page