Скажи мне, друг-сосиска: какой метод авторизации ты используешь, когда логинишься на почтовый сервак? Что я слышу? Plain text?! Иными словами, ты вводишь (а точнее, твой почтовик вводит) стандартные USER и PASS и получаешь данные о почтовом ящике.
Согласен, так делают большинство пользователей. И это плохо, потому как тебя могут запросто заснифать, то есть утащить твой пароль на почту (а
за ним и на шелл, FTP и т.п.). Чтобы этого не случилось, тебе предоставляется возможность авторизации с помощью шифрования MD5. Если почитать RFC, то мы отыщем там инфу о том, что в хеш заносятся следующие данные: баннер почтовика (тот, что в «<>» скобках), а также пароль на почту. Эта последовательность криптуется md5-алгоритмом и отправляется на сервер командой APOP. У команды два обязательных параметра — имя пользователя и MD5-хэш. Именно его ловят сниферы в момент прослушивания твоего интерфейса. Расшифровать этот хэш
вряд ли удастся по нижеследующей причине.

Баннер состоит из следующих частей: <уникальный_id.текущее_время@хост.машины>. К примеру, мой почтовик выдает следующий заголовок: «+OK POP3 Server 3.5.9 ready <14.1061593825@kamensk.net.ru>». Теперь ты понимаешь всю сложность шифрования? Мало того, что данные динамические, так они еще и MD5 шифруются! Хакеры отдыхают.

Для того, чтобы обезопасить себя, просто выбери вкладку Transport в настройках ящика твоего любимого The Bat. Затем нажми на кнопку Pop3 Autentification и выбирай тип MD5-APOP. Теперь ты в безопасности.

Хочешь большего? Тогда читай дальше. Теперь я научу тебя составлять хэши и
защищать твои шелл-скрипты от хакеров. Итак, чтобы составить md5-хэш, достаточно выполнить команду md5 -s ‘строка’. К примеру, зашифруем последовательность ‘<14.1061593825@kamensk.net.ru>mypassword’:

[forb@ruhost4 work]$ md5 -s ‘<14.1061593825@kamensk.net.ru>mypassword’
MD5 («<14.1061593825@kamensk.net.ru>mypassword») = 58a6bc47c74f5913f1b207c2bc4795d8.

Что хотели, то и получили. Следующий способ более универсален, так как реализован он будет на Perl. Для этого заюзаем модуль Digest::MD5.

#!/usr/bin/perl

use Digest::MD5;
$salt=Digest::MD5->new; ##
Новый метод для MD5
$pass=’mypassword’; ##
Заносим наш пароль
chomp($banner=<STDIN>); ##
Запрашиваем баннер
$hash = $salt->add($banner,$pass); ##
Формируем хэш
$passwd=$hash->hexdigest; ##
Шифруем методом ASCII-HEX
print «salt is: $passwd\n»; ##
Пишем полученный хэш

Остается запустить и проверить работу скрипта…

[root@ruhost4 forb]# perl md5.pl
<14.1061593825@kamensk.net.ru>
salt is: 58a6bc47c74f5913f1b207c2bc4795d8

Как видим, хэш совпадает с предыдущим, значит сценарий работает как надо.

Вернемся же к проблеме с почтой. Вышеизложенный алгоритм юзается в известном модуле Net::POP3. Мы не будем изобретать велосипед, а применим именно его. Точнее, напишем мини-скрипт, встречающийся у большинства на шеллах — сценарий будет коннектится к почтовому серверу, и, в случае наличия сообщения, дампить его в файл. Функция MD5-авторизации в перловом модуле называется apop(), а передать ей надо лишь логин и пароль.

#!/usr/bin/perl

use Net::POP3;

$host=’mail.ru’; ## Почтовый сервер
$user=’forb_mail’; ##
Логин для соединения
$pass=’mypassword’; ##
Пароль
$log=’message’; ##
Файл, куда будет скидываться последнее сообщение при его наличии

$pop=Net::POP3->new($host) || die print «cannot make connection\n»; ## Создаем новый объект $pop, который соединяется с сервером.
$mess=$pop->apop($user,$pass); ##
Авторизуемся. Функция apop() возвращает «0E0», если сообщений нет, undef — если произошла неудача, а в остальных случаях вернет количество мессаг в маилбоксе.
if (!defined $mess || $mess eq «0E0») { ##
Если результат функции был «0E0: или undef
$mess ne «0E0» ? $reason = «Wrong password» : $reason = «No messages»; ##
В первом случае, причина выхода — неверный пароль, во втором — отсутствие сообщений.
$pop->quit(); ##
Корректно выходим.
exit print «$reason\n»; ##
Пишем результат…
}
$message=$pop->get($mess); ##
Если функция вернула число — вытягиваем последнее сообщение. Функция get() вернет ссылку на массив, в котором будет письмо.
print «total: $mess\n»; ##
Дебаг может пригодиться…
open(LOG,»>$log») || die print «Cant open log»; ##
Откроем логфайл.
print LOG @$message; ##
Пишем туда сообщение (не забудем
разыменовывать ссылку).

close(LOG); ##
Закроем файл.
$pop->delete($mess); ##
Удалим сообщение.
$pop->quit; ##
И завершим скрипт.

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

Советую включить авторизацию и в SMTP, это делается аналогично POP3. С шелл-скриптами помогать не буду =) — там другие модули и принцип авторизы — читай RFC и ты все поймешь. Удачи!

Оставить мнение

Check Also

WWW: Carbon — сервис для создания идеальных скриншотов кода

В теории сделать скриншот кода, чтобы кому-то показать, — задача несложная. В реальности р…