Этап 3. Прослушивание серверов DNS
После установления всех доменов можно приступать к работе с серверами DNS. DNS — это распределенная база данных, предназначенная для преобразования IP-адресов в имена узлов и наоборот. Если сервер DNS не настроен на обеспечение максимальной степени защиты, то с его помощью можно получить информацию о внутренней сети организации.
Перенос зоны
Одна из самых серьезных ошибок администратора при настройке параметров сети состоит в предоставлении возможности взломщику осуществить перенос зоны DNS.
При переносе зоны (zone transfer) вторичный сервер DNS может обновить собственную базу данных зоны на основании данных, полученных от первичного DNS-сервера. Это позволяет обеспечить избыточность в работе службы DNS, которая необходима для тех случаев, когда первичный сервер по каким-то причинам становится недоступным. В общем случае вполне достаточно, чтобы перенос зоны выполнялся только вторичным DNS-сервером. Однако многие DNS-серверы настроены таким образом, что предоставляют копию зоны любому узлу Internet по первому же запросу. В этом нет ничего плохого при условии, что предоставляемая информация содержит лишь сведения о компьютерах, непосредственно подключенных к Internet. Однако такая возможность таит в себе опасность того, что полученные взломщиком сведения могут облегчить его задачу проникновения в сеть. Эта угроза реализуется в полной мере, когда в организации не используется механизм разделения DNS-информации на общедоступную и закрытую. Если это так, то любой желающий без особых проблем может получить сведения об именах узлов и IP-адресах внутренней сети. Предоставление информации о внутренних IP-адресах кому попало можно сравнить лишь с предоставлением полной схемы внутренней сети организации.
Давайте рассмотрим несколько методов переноса зоны, а также выясним, какие сведения можно получить из этих данных. Из всего множества различных инструментов, которые можно применять для выполнения данной операции, мы рассмотрим лишь самые распространенные.
Один из самых простых методов переноса зоны состоит в использовании клиента nslookup, который обычно входит в комплект поставки большинства версий UNIX и NT. Воспользуемся этой утилитой и введем следующие данные.
[bash]$ nslookup
Default Server: dns2.acme.net
Address: 10.10.20.2
>> server 10.10.10.2
Default Server: [10.10.10.2]
Address: 10.10.10.2
>> set type=any
>> Is -d Aome.net. >> /tmp/zone_out
Первая введенная команда — это запуск утилиты nslookup в интерактивном режиме. После запуска утилита сообщает, какой сервер им,ен в данный момент используется по умолчанию. Обычно таким сервером является DNS-сервер вашей организации или DNS-сервер провайдера. Поскольку используемый в данном примере DNS-сервер (10.10.20.2) не обслуживает интересующий нас домен, нам нужно перейти на другой сервер, на котором мы сможем найти необходимую информацию о внутренней сети. Таким образом, утилите nslookup необходимо явно сообщить о том, к какому серверу DNS ей нужно обратиться. В нашем примере мы будем использовать основной сервер сети Acme Networks с адресом 10.10.10.2. Вспомните, что его адрес мы узнали из регистрационной базы данных доменов на предыдущем этапе.
Затем мы устанавливаем тип записи any, что означает, что в список выбранных записей будут отобраны все записи из базы данных DNS-сервера. (Подробнее о параметрах утилиты nslookup можно узнать с помощью команды man nslookup (UNIX) или nslookup ? (NT).)
И наконец, для получения всех записей, соответствующих заданному критерию, воспользуемся командой Is. Параметр -d служит для включения режима вывода всех записей домена. В конце доменного имени добавлен символ ".", как это требуется для явного задания полностью определенного имени (fully qualified domain name). Однако в большинстве случаев точку можно не использовать. Кроме того, мы переназначили вывод в файл /tmp/zone_out для возможности дальнейшего анализа полученных данных.
После выполнения переноса зоны можно открыть созданный файл и посмотреть, содержится ли в нем информация, которая может помочь нам в выборе какой-то конкретной системы в качестве плацдарма для проникновения в сеть. Вот фрагмент такого файла.
[bash]$ more zone_out
acctlS ID IN A ' 192.168.230.3
ID IN HINFO "Gateway2000" "WinWKGRPS"
ID IN MX 0 acmeadmin-smtp
ID IN RP bsmith.rci bsmith.who
ID IN TXT "Location:Telephone Room"
ce ID IN CNAME aesop
au ID IN A 192.168.230.4
ID IN HINFO "Aspect" "MS-DOS"
ID IN MX 0 andromeda
ID IN RP jcoy.erebus jcoy.who
ID IN TXT "Location: Library"
acct21 ID IN A 192.168.230.5
ID IN HINFO "Gateway2000" "WinWKGRPS"
ID IN MX 0 acmeadmin-smtp
ID IN RP bsmith.rci bsmith.who
ID IN TXT "Location:Accounting"
Мы не будем рассматривать подробно каждый элемент всех найденных записей, а остановимся лишь на некоторых важных типах информации, которую можно получить таким образом. Как видно из приведенного выше листинга, для каждого узла имеется запись типа 'А, содержащая IP-адрес узла, имя которого указано в левом столбце. Кроме того, каждый узел имеет запись типа HINFO, идентифицирующую используемую платформу или операционную систему (описание см. в RFC 952). Информация записей HINFO не используется операционными системами, однако очень часто оказывается полезной для взломщиков. Поскольку результаты переноса зоны сохранены в файле, то его содержимое без особых проблем можно отсортировать с помощью таких программ UNIX, как grep, sed, awk или perl.
Предположим, взломщик является экспертом какой-нибудь определенной операционной системы, например SunOS или Solaris. В таком случае найти в файле IP-адреса, соответствующие записям HINFO компьютеров SPARC, Sun или Solaris, можно с помощью следующей команды.
[bash]$ grep -i Solaris zone_out |wc -1
388
Таким образом, взломщик имеет 388 записей, в которых присутствует слово Solaris, и каждый из этих 388 компьютеров может стать потенциальной жертвой.
Предположим, нужно найти компьютеры, которые используются для тестирования программного обеспечения или аппаратных средств. Такие компьютеры часто представляют "лакомый кусок" для взломщика, поскольку обычно на них установлены минимальные средства обеспечения безопасности, используется легко угадываемый пароль, а администраторы, как правило, не следят за тем, кто за ними работает. Такие компьютеры идеально подходят для взлома! Поэтому можно попробовать поискать тестовые системы с помощью следующей команды.
[bash]$ grep -i test /tmp/zone_out |wc -1
96
Итак, в нашем распоряжении около сотни записей файла зоны, в которых содержится слово test. Как правило, это количество примерно соответствует количеству реальных тестовых систем сети. Приведенные примеры — лишь малая часть того, что можно при известной доле настойчивости и изобретательности получить из файла зоны. Опытный взломщик, "просеяв через сито" полученные данные, рано или поздно выявит самый уязвимый компьютер сети, с которого он сможет начать вторжение.
Существуют некоторые особенности, о которых нужно помнить. Вышеописанный метод позволяет одновременно обращаться лишь к одному серверу имен. Это означает, что взломщику придется выполнить те же операции по отношению ко всем остальным серверам имен, обслуживающим требуемый домен. Кроме того, мы обращались с запросом лишь к домену Acme.net. Если в представляющей интерес сети имеются подчиненные домены, придется выполнить те же действия и с каждым из них (например, greenhouse.Acme.net). И наконец, можно получить сообщение о том, что список записей домена недоступен или что запрос не может быть выполнен. Такое сообщение обычно говорит о том, что параметры настройки запрещают выполнять перенос зоны с этого сервера. Однако если в сети несколько серверов, то, возможно, удастся найти тот из них, который позволяет осуществлять перенос зоны.
Теперь, когда вы познакомились с тем, как перенос зоны выполняется вручную, можно рассмотреть и те средства, которые позволяют ускорить этот процесс. К таким средствам относятся host, Sam Spade, axfr и dig.
Команда host входит в комплект поставки многих версий системы UNIX. Вот несколько самых простых способов ее использования.
host -1 Acme.net
или
host -I -v -t any Acme.net
Если нужно определить лишь IP-адреса, чтобы впоследствии вставить их в сценарий оболочки, можно воспользоваться командой cut, позволяющей выделить IP-адреса из выходного листинга команды host.
>>host -l acme.net |cut -f 4 -d" " » /tmp/ip_out
В процессе предварительного сбора данных использовать команды системы UNIX для выполнения всех задач нет необходимости. Существует довольно много продуктов для Windows, которые позволяют получить ту же информацию (рис 1.5).
И наконец, можно воспользоваться одним из лучших средств переноса зоны — утилитой axfr (http://ftp.edit.edu.cn/pub/linux/
www.trinux.org/src/netmap/axfr-0.5.2.tar.gz), написанной Гаюсом (Gaius). Эта утилита последовательно опрашивает указанные домены, выполняет для каждого из них перенос зоны и создает сжатую базу данных зоны и файлов узлов по каждому домену. Кроме того, в качестве параметра этой утилите можно передать домены верхнего уровня, такие как com или edu, и получить таким образом список всех доменов, связанных с указанным доменом. Однако этой возможностью пользоваться не рекомендуется. Для запуска утилиты axfr используйте следующую команду.
[bash]$ axfr Acme.net
axfr: Using default directory:
/root/axfrdb Found 2 name servers for domain 'Acme.net.':
Text deleted.
Received XXX answers (XXX records).
Для того чтобы обратиться с запросом к полученной с помощью утилиты axf r базе данных, необходимо ввести следующую команду.
[bash]$ axfrcat Acme.net
Получение записей обмена почтой (MX)
Определение компьютера, на котором обрабатывается почта,— это один из наиболее удачных способов выявления сетевого брандмауэра представляющей интерес организации. Как правило, в коммерческих компаниях почта обрабатывается на том же компьютере, который служит в качестве брандмауэра, или по крайней мере на компьютере, который находится в том же сегменте сети. Для получения более подробной информации можно воспользоваться командой host.
[bash]$ host Acme.net
Acme.net has address 10.10.10.1
Acme.net mail is handled (pri=20) by smtp-forward.Acme.net
Acme.net mail is handled (pri=10) by gate.Acme.net
Рис. 1.5. Приверженцы Windows могут выполнить перенос зоны, а также другие задачи предварительного сбора данных с помощью многофункциональной утилиты Sam Spade
Если команда host применяется без параметров либо только с именем домена, то сначала она попытается найти записи А, а затем записи MX. Приведенная выше информация пересекается с той информацией, которую ранее была получена при поиске в базе данных ARIN с использованием утилиты whois. Это лишний раз подтверждает, что мы правильно определили адрес нужной нам сети.
Контрмеры: обеспечение безопасности базы данных DNS
Информация DNS представляет для хакера очень большой интерес, поэтому очень важно уменьшить объем данных, доступных через Internet. С точки зрения настройки узла, необходимо ограничить возможность переноса зоны, разрешив ее лишь определенным серверам. В современных версиях службы BIND для этих целей можно использовать директиву xfernets файла named.boot. Для того чтобы ограничить возможность переноса зоны службы DNS компании Microsoft, необходимо использовать параметр Notify (более подробную информацию по этому вопросу можно найти по адресу http://support.-microsoft.eom/support/kb/articles/ql93/8/37.asp). Для настройки служб имен других разработчиков необходимо обратиться к соответствующей документации.
С точки зрения зашиты сети необходимо настроить брандмауэр или фильтрующий маршрутизатор таким образом, чтобы они отсекали все несанкционированные входящие соединения с портом 53 протокола TCP. Поскольку в запросах на получение имен используется протокол UDP, а в запросах на перенос зоны — протокол TCP, это позволит эффективно пресекать любые попытки переноса зоны. Кроме того, целесообразно установить устройство управления доступом или систему выявления вторжений (IDS — intrusion detection system), чтобы регистрировать всю информацию, которая может свидетельствовать об опасных действиях.
Ограничение возможности переноса зоны увеличит время, которое должен потратить взломщик, перебирая IP-адреса и пробуя разные имена узлов. Однако поскольку запросы на получение имен по-прежнему остаются разрешенными, взломщик может вручную перебрать все IP-адреса из выделенного для сети диапазона адресов. Таким образом, настройте внешние серверы имен так, чтобы они предоставляли информацию только о компьютерах, которые непосредственно подключены к Internet. Эти внешние серверы DNS ни при каких обстоятельствах не должны разглашать информацию о внутренней сети. Может показаться, что перечисленные выше рекомендации являются очевидными, однако мы не редко встречали DNS-серверы, которые позволяли "вытащить" из них более 16000 внутренних IP-адресов и имен узлов. И наконец, лучше не использовать записи HINFO. Как вы увидите ниже в этой главе, это вряд ли поможет скрыть от взломщика тип операционной системы, однако затруднит его задачу, так как он не сможет автоматизировать процесс получения данной информации программным способом.