Выбрать главу

Например:

\kpnc, kpnc@aport.ru, kpnc@hotmail.ru

В этом случае, SendMail будет дублировать всю входящую корреспонденцию по двум указанным адресам и кроме этого, помещать в почтовый ящик пользователя, расположенный в каталоге “/var/mail/kpnc” [215]. Если же подстроку “\kpnc” удалить, почта не будет сохраняться на сервере [216]. Аналогичного результата можно добиться перечислением требуемых адресов в файле aliases.

Значительно проще устроен POP3 Agent. В большинстве случаев его реализация полностью умещается в нескольких сотнях строк языка Си или Perl [217]. Этого оказывается вполне достаточно для поддержки десяти базовых команд протокола POP3 (USER, PASS, QUIT, STAT, LIST, RETR, DELE, NOOP, LAST, RSET - подробнее каждой из них рассказывается в главе «Протокол POP3»).

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

Врезка «информация»

Агенты POP3 крайне непопулярны в среде UNIX. Так, например, в стандартной поставке SPARC под Solaris никакого агента POP3 вообще нет и желающие установить его на свою систему вынуждены делать это самостоятельно - благо исходные тексты программ, реализующих этот протокол, широко распространены в сети.

Дополнение. Анонимная рассылка корреспонденции

O В этой главе:

O Создание скрипта, отправляющего сообщения

O Обеспечение анонимности отправителя письма

O Фальсификация заголовков сообщения

Большинство SMTP-серверов определяют IP-адрес отправителя сообщения и вставляют его в заголовок. Конечно, IP-адрес это еще не сам отправитель (которого пойди найди), но иногда возникает необходимость остаться полностью анонимным.

В Сети существует множество служб, предоставляющих услуги подобного рода (например, proxy-серверы, анонимайзеры), но анонимайзеры явно указывают на желание отправителя остаться неизвестным, а по поводу анонимности некоторых proxy-серверов многих терзают смутные сомнения.

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

Часто начинающие вредители не могут придумать ничего оригинальнее, чем заставлять сервер с помощью скрипта получать самый свежий дистрибьютив бета-версии Windows 2000 [218] и посылать его на ящик жертвы в немерянных количествах.

Куда привлекательнее выглядит попытка принудительного приобщения атакуемого к миру прекрасного, например, ознакомление его с космическими исследованиями NASA (для чего используются фотографии, доступные на сайте www.nasa.gov)

Ниже приведена одна из возможных реализаций такой программе, написанной на языке Perl (на диске, прилагаемом к книге, она находится в файле “/SRC/smtp.pl”). Подробное объяснение ее работы выходит за рамки данной книги, однако, структура программы достаточна проста, чтобы в ней мог разобраться даже неподготовленный читатель.

· use Socket; · my($mailFrom) = 'KPNC@APORT.RU'; · my($MailTo) = 'KPNC@APORT.RU'; · · socket(SMTP, PF_INET(), SOCK_STREAM(), 6); · connect(SMTP,sockaddr_in(25,inet_aton("mail.aport.ru"))); · · recv(SMTP, $buffer, 200, 0); · print "$buffer\n"; · · send(SMTP, "HELO kpnc\n",0); · print "»HELO\n"; · · my($buffer) = @_; · recv(SMTP, $buffer, 200, 0); · print "$buffer\n"; · · send(SMTP, "MAIL FROM: «$mailFrom»\n",0); · print "»MAIL FROM:«$mailFrom»\n"; · recv(SMTP, $buffer, 200, 0); · print "$buffer\n"; · · send(SMTP, "RCPT TO: «$MailTo»\n",0); · print "»RCPT TO: «$MailTo»\n"; · recv(SMTP, $buffer, 200, 0); · print "$buffer\n"; · · send(SMTP, "DATA\n",0); · print "»DATA\n"; · recv(SMTP, $buffer, 200, 0); · print "$buffer\n"; · · send(SMTP, "From: Kris Kaspersky\n", 0); · print "»From: Kris Kaspersky"; · print "«BR»\n\n"; · · send(SMTP, "Subject: Test\n", 0); · print "»Subject: Test\n"; · · send(SMTP, "Hello, KPNC!\n", 0); · print "»Hello, KPNC!\n"; · · send(SMTP, "\r\n.\r\n",0); · print "\r\n.\r\n"; · recv(SMTP, $buffer, 200, 0); · print "$buffer\n"; · · send(SMTP, "QUIT\n",0); · print "»QUIT\n"; · recv(SMTP, $buffer, 200, 0); · print "$buffer\n"; · · close(SMTP);

Приведенный пример позволяет отослать только одно письмо по указанному адресу. На самом же деле, если программа может отправить одно письмо, то сумеет и десять, стоит только дополнить ее циклом [219].

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

Скрипт необходимо разместить на сервере, который поддерживает удаленное выполнение программ, разрешает telnet-вход, имеет в наличие интерпретатор Perl и допускает установку соединений с другими узлами сети. Перечисленным требованиям удовлетворяет, например, hobbiton.org и некоторые другие бесплатные сервера.

Для размещения файла скрипта на сервере лучше всего воспользоваться ftp-протоколом, а запустить его из telnet-сессии проще всего так: “perl имяфайла.pl”. (Для запуска скрипта по протоколу HTTP его придется несколько модифицировать, о том, как это сделать рассказано в главе «Протокол HTTP»). После завершения работы скрипта экран должен выглядеть приблизительно так:

Рисунок 31 Демонстрация работы скрипта, посылающего письмо

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

Заголовок письма, доставленного на “kpnc@aport.ru” (или по любому другому адресу) должен выглядеть приблизительно так:

· From kpnc@aport.ru Mon Jun 05 11:51:53 2000

· Received: from hobbiton.org ([216.161.239.42] helo=kpnc)

· by hearst.mail.ru with smtp (Exim 3.14 #3)

· id 12yrfs-000KGD-00

· for KPNC@APORT.RU; Mon, 05 Jun 2000 11:51:53 +0400

· From: Kris Kaspersky

· Subject: Test