Инвентаризация UNIX

Большинство современных реализаций системы UNIX основываются на стандартных средствах обеспечения сетевой безопасности протокола TCP/IP. Благодаря этому они не так щедро раздают всем желающим информацию о сети, как система NT, в которой используется унаследованный от предыдущих версий интерфейс NetBIOS, или система NetWare, работа которой основывается на собственном механизме безопасности компании Novell. Естественно, это вовсе не означает, что система UNIX является неуязвимой, а ее сетевые ресурсы не могут подвергнутся инвентаризации. Все зависит от конфигурационных параметров системы. Например, службы RFC (Remote Procedure Call — удаленный вызов процедур), N1S (Network Information Service — сетевая информационная служба) и NFS (Network File System — сетевая файловая система), преимущества которых очень часто используют разработчики, являются излюбленными "мишенями" для взломщиков на протяжении уже многих лет. Ниже вы познакомитесь с некоторыми классическими методами инвентаризации UNIX (другими словами, старые и проверенные способы, которые, по-видимому, практически всегда будут срабатывать).
Не забывайте о том, что большинство из описываемых в данном разделе приемов основывается на информации, полученной при сканировании портов и определении типа и версии операционной системы, о чем рассказывалось в предыдущих главах.

Инвентаризация сетевых и совместно используемых ресурсов UNIX


Лучшими источниками информации о сети UNIX являются базовые методы исследования стека протоколов TCP/IP, которые рассматривались в главе 2. Среди других средств можно выделить утилиту showmount, которую можно использовать для инвентаризации экспортируемых в сети файловых систем NFS. Например, предположим, что в результате сканирования стало известно, что на исследуемом компьютере в состоянии ожидания запросов находится порт 2049 (NFS). В этом случае с помощью утилиты showmount можно выяснить, какие именно каталоги являются совместно используемыми.

showmount -e 192.168.202.34
export list for 192.168.202.34:
/pub (everyone)
/var (everyone)
/usr user

Использование параметра -е позволяет получить список экспортируемых файловых систем сервера NFS. К сожалению, архитектура NFS в данном случае не позволяет противопоставить каких-либо защитных мер запросам такого рода. Можно лишь посоветовать, чтобы доступ к экспортируемой файловой системе выполнялся в соответствии с установленными разрешениями (операции чтения и записи должны быть разрешены только для строго определенных узлов), а доступ к NFS блокировался бы извне с помощью брандмауэра (порт 2049). Запросы утилиты showmount тоже можно регистрировать в системе. Это облегчает обнаружение взломщика.
Сейчас в мире UNIX система NFS является не единственным примером программного обеспечения, с помощью которого обеспечивается совместное использование данных. В настоящее время возрастает популярность пакета Samba, разработанного в рамках модели открытого кода. Этот пакет обеспечивает клиентам SMB возможность совместного использования файлов и принтеров. Как уже упоминалось, протокол SMB (Server Message Block) представляет собой основу для работы в сети клиентов Windows. Пакет Samba можно получить по адресу http://www.samba.org (его можно найти в комплекте поставки большинства версий операционной системы Linux). Хотя в файле настройки сервера Samba (/etc/smb.conf) используются довольно простые параметры обеспечения безопасности, необходимо относится к ним внимательно, поскольку их неправильная настройка может привести к нарушению защиты совместно используемых сетевых ресурсов.
Еще одним потенциальным источником информации о сети UNIX является служба NIS. Она служит ярким примером плохой реализации хорошей идеи (поддержка распределенной базы данных сетевой информации). С точки зрения обеспечения безопасности основной проблемой службы NIS является то, что, узнав доменное имя сервера NIS, с помощью простого запроса RPC можно получить любую из карт NIS (тар). Карты NIS — это файлы данных, в которых содержится важная информация каждого узла домена, например содержимое файлов паролей. Традиционное проникновение в сеть с использованием службы NIS предусматривает применение клиента N1S для попытки подбора доменного имени. Для достижения этой цели может служить и утилита pscan, написанная хакером Плювиусом (Pluvius). Ее можно найти во многих хакерских архивах Internet. Для того чтобы с помощью утилиты pscan получить всю необходимую информацию, ее необходимо запустить с параметром -n.
Если вы используете службу NIS, то, по крайней мере, не применяйте легко угадываемое доменное имя (в котором используется название компании, имя DNS и т.д.). Подобрав доменное имя, хакер без труда может получить всю необходимую информацию, включая базу данных паролей. Если вы не планируете переходить на использование службы NIS+ (которая поддерживает режим шифрования данных и аутентификации через защищенные запросы RPC), то хотя бы отредактируйте файл /var/yp/securenets и ограничьте доступ к определенным узлам и сетям, либо откомпилируйте утилиту ypserv с включенной поддержкой TCP-оболочек. Кроме того, не помещайте в таблицы NIS информацию о системной записи root и других системных учетных записях.
Как уже отмечалось в предыдущих разделах этой главы, протокол SNMP позволяет взломщикам получить много важной информации о системе UNIX, в которой запущен агент SNMP. Если в сети используются строки доступа, заданные по умолчанию, то в процессе сбора данных чрезвычайно полезной может оказаться утилита snmpwalk, входящая в состав утилит SNMP многих систем UNIX.

Инвентаризация пользователей  и групп UNIX


Возможно, самым старым приемом инвентаризации учетных записей пользователей, описанных в данной книге, является утилита finger. Эта утилита предоставляла простой и удобный способ получения информации о пользователях удаленного узла еще в те времена, когда сеть Internet не была настолько большой и простой в использовании. Мы упоминаем здесь об этой утилите в основном для того, чтобы акцентировать ваше внимание на основных способах ее использования. Многие средства проникновения в сеть по-прежнему базируются на использовании этой утилиты, поскольку нерадивые системные администраторы зачастую запускают системный процесс fingerd без каких-либо мер обеспечения безопасности. Как и прежде, мы предполагаем, что в процессе сканирования портов была получена информация о том, что на исследуемом узле запущена служба finger (порт 79).

[root$]finger -I @target.hackme.com
[target.hackme.com]
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Sun Mar 28 11:01 (PST) on ttyl 11 minutes idle
(messages off)
On since Sun Mar 28 11:01 (PST) on ttypO from :0.0
3 minutes 6 seconds idle
No mail.
Plan:
John Smith Security Guru Telnet password is my birthdate.

Команда finger 0@имя-узла также позволяет получить интересный результат. 

[root$]finger 00192.168.202.34
[192.168.202.34]
Line User Host(s) Idle Location
* 2 vty 0 idle 0 192.168.202.14
SeO Sync PPP 00:00:02

Как легко заметить, большая часть информации, которая отображается утилитой finger, не имеет особого значения (она выбирается из соответствующих полей файла /etc/password). Можно сказать, что с точки зрения безопасности самой опасной является информация об именах пользователей, зарегистрированных в системе, а также о времени, в течение которой пользователь не выполняет каких-либо операций (idle). Это поможет хакеру определить, кто в данный момент "присматривает" за машиной (возможно, пользователь root?) и насколько внимательно он это делает. Некоторая дополнительная информация может использоваться при попытке проникновения в сеть с помощью приемов социальной инженерии. (Социальная инженерия (social engineering) — термин из словаря хакера, обозначающий попытку с помощью психологических приемов установить контакт с нужными людьми с целью получения от них информации для проникновения в систему. Более подробная информация об этом содержится в главе 14, "Расширенные методы".) Как показано в этом примере, пользователи, которые помещают в свой рабочий каталог файлы .plan или .project, могут дать очень хорошую наводку хакеру (содержимое этих файлов выводится командой finger).
Обнаружить и устранить подобную утечку информации очень просто. Достаточно не запускать демон fingerd (для этого нужно закомментировать соответствующую строку в файле inetd.conf и выполнить команду killall -HUP inetd), а также заблокировать порт 79 на брандмауэре. Если вам по каким-то причинам все же необходимо иметь доступ к программе finger, используйте TCP-оболочки (см. главу 8, "Хакинг UNIX"), чтобы ограничить доступ к узлу и регистрировать все соответствующие события. Можно также воспользоваться модифицированным демоном finger, предоставляющим ограниченное количество информации.
Существуют также и другие, менее популярные утилиты, например rusers и rwho. Как и в случае с программой finger, от них лучше отказаться (обычно эти утилиты запускаются независимо от демона inetd). Поищите в файлах загрузки ссылки на файлы rpc.rwhod и rpc.rusersd). Утилита rwho возвращает перечень пользователей, которые в данный момент зарегистрированы на удаленном узле,

rwho 192.168.202.34
root localhost:ttypO Apr 11 09:21
jack beanstalk:ttypl Apr 10 15:01
jimbo 192.168.202.77:ttyp2 Apr 10 17:40

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

rusers -1 192.168.202.34
root 192. 168..202.34:ttyl Apr 10 18:58 :51
root 192.168.202.34:ttypO Apr 10 18:59 :02 (:0.0)

Еще один классический метод инвентаризации основан на использовании универсального средства почтовой доставки Internet — протокола SMTP (Simple Mail Transfer Protocol). Этот протокол поддерживает две встроенные команды, которые позволяют выполнять инвентаризацию пользовательских учетных записей. Команда VRFY подтверждает, что введенное имя имеется в системе, а команда EXPN отображает реальный адрес доставки письма вместо псевдонима или списка рассылки. Хотя в настоящее время многие компании и так достаточно свободно предоставляют информацию об электронных адресах, разрешение подобной деятельности на почтовом сервере может дать взломщику ценную информацию о пользователях, а также предоставить ему возможность фальсификации.

telnet 192.168.202.34 25
Trying 192.168.202.34...
Connected to 192.168.202.34.
Escape character is -'^]'.
220 mail.bigcorp.com ESMTP Sendmail
8.8.7/8.8.7; Sun, 11 Apr 1999
10:08:49 -0700
vrfy root
250 root <root@bigcorp.com>
expn adm
250 adm <adm@bigcorp.com>
quit
221 mail.bigcorp.com closing connection

Это еще один пример того, что нужно всегда помнить о старых хакерских приемах и вовремя отключать соответствующие режимы. Популярная программа sendmail, предназначенная для обмена информацией с использованием протокола SMTP (http://www.sendmail.org), начиная с версии 8, поддерживает синтаксис, который позволяет поместить в файл mail.cf параметры, запрещающие подобные команды или требующие аутентификации. Другие реализации SMTP-сервера должны предоставлять аналогичные возможности. Если это не так, замените программу!
Конечно, самым старым и излюбленным приемом хакеров UNIX является попытка получения файла /etc/passwd, о чем мы подробно будем говорить в главе 8., "Хакинг UNIX". Сейчас же необходимо отметить, что один из наиболее популярных методов получения этого файла состоит в использовании протокола TFTP (Trivial File Transfer Protocol — простой протокол передачи файлов).

tftp 192.168.202.34
tftp> connect 192.168.202.34
tftp> get /etc/passwd /tmp/passwd.cracklater
tftp> quit

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

Инвентаризация приложений и идентификационных маркеров


Как и любой другой сетевой ресурс, приложения должны иметь возможность обмениваться друг с другом информацией по сети. Одним из самых популярных протоколов, разработанных для обеспечения этого процесса, является протокол RPC (Remote Procedure Call). На основе RPC работает программа rpcbind, основная задача которой состоит в посредничестве между запросами клиентов и портами, которые эта программа динамически назначает находящимся в режиме ожидания приложениям. Несмотря на постоянную головную боль, которую много лет вызывают у администраторов брандмауэров подобные программы, служба RPC остается чрезвычайно популярным механизмом. Существует утилита rpcinfo, которая, подобно программе finger, может применяться для инвентаризации приложений RPC, находящихся в состоянии ожидания запроса на удаленном узле. Обычно для того чтобы воспользоваться этой утилитой, во время сканирования достаточно установить, что открыт порт 111 (rcbind) или 32771 (вариант утилиты от компании Sun).

rpcinfo -p 192.168.202.34
program vers proto port
100000 2 tcp 111 rpcbind
100002 3 udp 712 rusersd
100011 2 udp 754 rquotad
100005 I udp 635 mountd
100003 2 udp 2049 nfs
100004 2 tcp 778 ypserv

Из полученных результатов можно заключить, что на данном узле запущен системный процесс rusersd, программное обеспечение служб NFS и NIS (ypserv — сервер службы NIS). Таким образом, с помощью команд rusers, shomount -e и pscan -n можно попытаться получить более подробную информацию. Кроме того, для инвентаризации можно также воспользоваться утилитой pscan (упоминавшейся выше) с параметром -г.
Утилиту, аналогичную rpcinfo, можно применять и в системе Windows NT. Эта утилита, написанная Дэвидом Литчфилдом (David Litchfield) называется rpcdump. Как видно из следующего примера, утилита rpcdump ведет себя аналогично rpcinfo с параметром -р.

D:\Toolbox>rpcdump 192.168.202.105
Program no. Name Version Protocol Port
(100000) portmapper 4 TCP 111
(100000) portmapper 3 TCP 222
(100001) rstatd 2 UDP 32774
(100021) nlockmgr 1 UDP 4045

Существует и несколько других приемов использования службы RPC, с помощью которых хакеры могут получать требуемую информацию. Так, в системе Solaris компании Sun используется вторая утилита, необходимая для работы с портами с номерами выше 32771. Следовательно, модифицированная версия утилиты rpcinfo при обращении к этому порту позволит получить приведенную выше информацию, даже если порт 111 заблокирован.
Хотя лучший инструмент RFC-сканирования из всех, которые нам доводилось видеть, входит в состав коммерческого пакета CyberCop Scanner компании Network Associates, Inc., для поиска определенных приложений RPC хакер может воспользоваться бесплатной утилитой rpcinfo со специальными параметрами. Например, для того чтобы проверить, работает ли на исследуемом компьютере по адресу 192.168.202.34 сервер TTDB (ToolTalk Database), известный своей уязвимостью (см. главу 8), можно воспользоваться следующей командой.
 rcpinfo -n 32771 -t 192.168.202.34 100083
В службе RPC серверу TTDB соответствует программный номер 100083.
Самый простой способ воспрепятствовать такой утечке информации, —предусмотреть тот или иной механизм аутентификации, применяемый со службой RPC (более подробные сведения об имеющихся возможностях можно получить из документации). Второй метод состоит в использовании пакета, подобного Secure RPC компании Sun, который обладает встроенными средствами аутентификации, базирующимися на криптографическом механизме с использованием открытого ключа. Наконец, обязательно убедитесь в том, что порты 111и32771 (rpcbind) фильтруются на уровне брандмауэра.
Как уже упоминалось в предыдущем разделе, посвященном методам инвентаризации Windows NT, классический способ проведения инвентаризации приложений практически любой системы состоит в подключении к порту, о котором известно, что он находится в состоянии ожидания запросов. Это можно осуществить с помощью утилит telnet или netcat. Мы не будем снова подробно рассматривать эти же вопросы, а лишь остановимся на некоторых полезных функциях netcat, которые вкратце описаны в файлах, поставляемых с самой утилитой. Например, попробуйте перенаправить вывод специального текстового файла на вход netcat, чтобы попытаться получить более подробную информацию. Создайте файл nudge. txt, содержащий одну-единственную строку GET / HTTP/1.0 и два символа перевода строки, а затем, запустите следующую команду.

nc -nw -о banners.txt
192.168.202.34 80 < nudge.txt

HTTP/1.0 200 OK
Server: Sun_WebServer/2.0
Date: Sat, 10 Apr 1999 07:42:59 GMT
Content-Type: text/html
Last-Modified: Wed, 07 Apr 1999 15:54:18
GMT
ETag: "370a7fbb-2188-4"
Content-Length: 8584
<HTML> <HEAD>
<META NAME="keywords"
CONTENT="BigCorp, hacking, security">
<META NAME="description"
CONTENT»"Welcome to BigCorp's Web site.
BigCorp is a leading manufacturer of security holes.">
<TITLE>BigCorp Corporate Home Page</TITLE>
</HEAD>



Рис. 3.12. Команда Crawl Website программы Sam Spade позволяет с минимальными усилиями выполнить поиск интересующей информации в коде HTML всех страниц Web-узла

Если в качестве параметра утилиты netcat используется IP-адрес исследуемого компьютера, то нужно указать также параметр -n.
Известны ли вам хорошие методы проникновения в Webserver 2.0 компании Sun? Тогда вперед! Другими примерами содержимого такого текстового файла являются строки HEAD /HTTP/1.0<cr><cr>, QUiT<cr>, HELP<cr>, ECHO <cr> и даже просто пара символов перевода строки (<сr>).
Необходимо также отметить, что немало "лакомых кусочков" информации можно найти в исходном HTML-коде Web-страниц. Одним из наших любимых инструментов для проверки целых Web-узлов (а также для выполнения других не менее полезных функций) является утилита Sam Spade компании Blighty Design (http://www.blighty. com/products/spade). На рис. 3.12 показано, как программа Sam Spade может проверить весь Web-узел в поисках заданной информации, например слова password.

Контрмеры против сбора идентификационных маркеров


Конечно, мы коснулись лишь нескольких из самых популярных приложений, поскольку ограничения по времени и объему не позволяют нам подробнее рассмотреть все многообразие существующего сетевого программного обеспечения. Однако, отталкиваясь от описанных в данном разделе общих подходов, необходимо по крайней мере "заткнуть рот" слишком "болтливым" приложениям вашей сети. Дополнительные сведения об устранении имеющихся изъянов можно поискать на Web-узле канадской консультационной компании PGCI. специализирующейся в области защиты информации, по адресу http://www.pgci.ca/p_fingerprint.html. Помимо интересной дискуссии о защите от попыток выявления типа и версии операционной системы (см. главу 2), на этом Web-узле приведены сведения о контрмерах, позволяющих предотвратить инвентаризацию идентификационных маркеров с помощью таких средств как программы sendmail, telnet, и протокол FTP. Там же вы найдете список адресов других Web-серверов, на которых содержится аналогичная информация.