А АFriday 6 December 2019

Знаете ли вы свой принтер?

Всем привет.

Листая журнал "Системный администратор" я обнаружил неожиданно (для себя), что Игорь Савчук во многом прав относительно таких устройств как принтеры в наших офисах. Ведь действительно, мы все тщательно сканируем свою сеть, патчим наши хосты, устанавливаем антивирусники, а рядом у нас в сети работает принтер с набором современных TCP/IP-сервисов.

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

Конечно, стандартов тут нет, у каждого бренда свои секреты, но все разгадки легко ищутся в Интернет.

Вот таким вот образом можно легко найти доступные принтеры HP:
inurl:hp/device/this.LCDispatcher

Точно таким же образом можно легко найти принтеры других фирм, например от Ricoh:
intitle:"web image monitor"
"/web/user/en/websys/webArch/mainFrame.cgi"
inurl:"/en/sts_index.cgi"

С помощью нескольких строк кода (Perl) автор предлагает проверить отзывчивость вашего печатного друга.

Первый пример это печать текста "PRINTER TEST STRING" из командной строки
perl prnmsg.pl ip-adr-принтера "PRINTER TEST STRING"

Где prnmsg.pl:
#!/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!" stuff $mysock;
print $mysock $textprn;
close($mysock);



Второй пример это поменять сообщение на административной панельке
perl lcdmsg.pl ip-adr-принтера "INITIATING ROBOT UPRISING"

Где lcdmsg.pl:
#!/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);


Существует специализированный исследовательский инструмент - Praeda (полное название: Praeda Harvesting Tool), который, несмотря на свою молодость уже успел снискать определенную известность в узких кругах.

Praeda - это довольно объемный скрипт на Perl который предназначен для поиска активных уязвимостей в web-панелях управления современных лазерных принтеров и МФУ, и который не только очень активно развивается в последнее время, но и содержит в себе достаточно продвинутые эвристические алгоритмы, а не только банальный fuzzing или перебор уже стандартных/известных способов взлома известных web-панелей управления.

Программа при своей работе рассчитывает на то, что настройки уровня безопасности МФУ и лазерных принтеров представляют из себя значения по умолчанию, поэтому она пытается выудить максимально большой объем информации с таких устройств, включая имена зарегистрированных пользователей, адреса электронной почты, адресные книги пользователей, данные аутентификации SMB, email, LDAP-пароли и т.д.

Как правило, вся подобная информация используется как стартовая точка для развития атаки на локальную сеть.

На что способна текущая версия Praeda:
- поставляется около 30 специализированных модулей (то есть если в принтере обнаруживается какая-то отдельная уязвимая служба - стартует отдельный модуль её обрабатывающий);
- на данный момент поддерживаются более 40 известных марок принтеров, такие как Canon, HP, Lexmark, Ricoh, Sharp, Toshiba, Xerox и другие;
- многопоточный режим работы, допускается передача в качестве аргументов сразу целого списка из принтеров;

Также следует остановиться в общих чертах и на параметрах работы с этим скриптом, так как документация к нему достаточно скудная.

Общий формат его запуска:

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

perl praeda.pl  -n ip-adr -p 9100 -j project1 -l data-file

Хотелось бы отметить, что различные модули Praeda, которые могут быть автоматически запущены, будут подключаться по разным протоколам и портам, отличным от указанного в строке запуска скрипта, поэтому предварительно убедитесь, что ваш локальный брандмауер лояльно настроен по отношению к этому скрипту.

И важно - для его работы требуются следующие установленные в системе Perl-модули:
LWP::Simple, LWP::UserAgent, HTML::TagParser, URI::Fetch, HTTP::Cookies, IO::Socket, HTML::TableExtract.

Например так:
perl -MCPAN -e shell
install HTML::TagParser

либо так с исходного кода:
cd Module-Name-1.23
perl Makefile.PL
dmake
dmake test
dmake install

Согласитесь, интересная тема.

No comments:

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное