Обмен командами и данными в почтовых протоколахОбмен командами и данными в почтовых протоколах ведется в текстовом виде. Программа-клиент посылает серверу строчки инструкций, сервер отвечает аналогичным образом. Этот обмен легко пронаблюдать, подключившись к любому удаленному SMTP-серверу через 25-ый порт при помощи стандартной для Windows и UNIX утилиты Telnet. То же самое делает любая почтовая программа, то же самое делает и червь.

Вот типичный сеанс связи между почтовым клиентом и сервером по протоколу SMTP, описанному в стандарте RFC-821:

Некоторые почтовые серверы поддерживают расширенный протокол ESMTP, описанный в RFC-2554 и требующий от клиента аутентификационных данных — логина и пароля. Сеанс обмена командами и данными, по сравнению с SMTP, несколько усложнился, но не настолько, чтобы его не смог воспроизвести почтовый червь:

Интересно, что подсказки «Username:» и «Password:» сервер посылает клиенту в кодировке Base-64/Mime, и они выглядят как «VXNlcm5hbWu6» и «UGFzc3dvcmQ6» соответственно. Разумеется, «каков вопрос — таков ответ», и клиент должен отвечать серверу в той же кодировке.

Впрочем, протокол ESMTP обычно работает на провайдерских серверах, которые ждут «нормальных» писем от ограниченного круга зарегистрированных клиентов. Релейные же серверы получают письма друг от друга — в принципе, с любого конца света — и проверять аутентификационные данные не должны. Поэтому они используют более простой протокол SMTP. Алгоритм поведения почтового червя, связывающегося непосредственно с SMTP-сервером, в целом соответствует классической схеме взаимодействия клиента и сервера, рассмотренной нами ранее. Вот как примерно реализовывал эту схему червь E-Worm. Win32.Dumaru :

Еще интересные статьи :