Защита сервера имен


Интерьер квартиры студии в стиле лофт mrloft.ru.

BIND — притягательная мишень для злоумышленников, поскольку предоставляет много информации о сети. Даже если атакующий не сможет получить контроль над вашей машиной, он проявит особый интерес к полученной информации, особенно если ваши хосты имеют наглядные имена, такие как «accounting» или «finance». Кроме того, уже многие годы named(8) работает с привилегиями root. Если кому-то удастся взломать named, он сможет полностью овладеть вашей машиной. Обе эти проблемы мы рассмотрим по отдельности.

Управление передачей информации о зонах

Пример с dig, в котором мы получили весь список хостов в домене, описывает передачу зоны (zone transfer). Такого рода запросы используются вторичными серверами имен для обновления своих записей о домене. Предполагаемый взломщик проявит особый интерес к полному списку хостов. Назначение сервера имен состоит в том, чтобы обслуживать имена, поэтому он не может полностью прикрыть доступ взломщиков к машине. Однако named можно настроить так, чтобы он давал ответы только на особые запросы, а не выставлял напоказ свое содержимое. Таким образом, если кто-нибудь выдаст запрос о конкретном хосте, сервер имен ответит. Если же будет запрошен весь список хостов, запрос будет отклонен.

Чтобы ограничить передачу зоны узким кругом хостов, можно использовать параметр allow-transfer:

options {
    allow-transfer {
        127.0.0.1; 192.168.8.3;
    };
};

В данном примере хосты с адресами 127.0.0.1 (локальный компьютер) и 192.168.8.3 — единственные системы, которым позволено выполнять передачу зоны. Замените эти IP-адреса на адреса ваших вторичных серверов имен и своей рабочей станции — и значительная часть информации о вашей сети будет скрыта от посторонних глаз. В список можно добавить и настольные машины, чтобы они также могли выполнять передачу зоны при отладке DNS.

При необходимости named(8) позволяет еще больше ограничить возможность доступа, передавая определенным клиентам информацию только об отдельных зонах. За дополнительной информацией обращайтесь к документации BIND в каталоге /usr/src/contrib/bind/doc.

Защита named(8)

А как насчет хакеров, атакующих сам демон named(8) с целью получить доступ к командной строке? Можно запустить named в клетке (глава 9), чтобы удачливый взломщик не смог получить доступ больше ни к чему. По умолчанию BIND работает в chroot-окружении. В данном случае использование chroot-окружения предпочтительнее, так как оно включает в себя только системные ресурсы, необходимые для обеспечения работы named, и ничего больше, chroot-окружение можно представить себе как непривилегированную упрощенную клетку. И хотя этот режим работы используется по умолчанию, вы должны знать, как он работает.

В этом окружении корневым каталогом для named(8) является /var/named. Если заглянуть в него, можно увидеть подкаталоги dev, etc и var. Запущенный в chroot-окружении named(8) полагает, что /var/named — это корневой каталог /, а все указанные выше каталоги — это /dev, /etc и /var. Программа обладает доступом только к этим подкаталогам. Обратите внимание на отсутствие таких каталогов, как /bin или /sbin. Злоумышленник не сможет получить доступ к командной оболочке или другим программам просто потому, что эти программы отсутствуют!

Но, минутку… Если named(8) заперт в каталоге /var/named, как тогда он читает файлы конфигурации в /etc/namedb? Присмотритесь к /etc/namedb — это всего лишь символическая ссылка на каталог /var/named/etc/namedb. Каталог конфигурации носит имя /etc/namedb так долго, что теперь ни в одной операционной системе не рискуют удалить эту ссылку.

Комментарии запрещены.