Perl для системного администрирования




Изменения сетевых служб



Изменения сетевых служб

Мы узнали, как обнаружить изменения в локальных файловых системах. Как насчет того, чтобы заметить изменения на других машинах или в службах, ими поддерживаемых? Мы уже видели способы запроса NIS и DNS в главе 5 «Службы имен TCP/IP». Не должна вызвать затруднений проверка изменений в повторяющихся запросах к этим службам. Например, можно притвориться вторичным сервером и запросить копию данных (т. е. выполнить зонную пересылку) с сервера для определенного домена, если, конечно, DNS-сервер настроен так, что позволит сделать это:

use Net::DNS;

принимает два аргумента в командной строке: первый - сервер

имен, к которому посылается запрос, а второй - интересующий

и нас доме"

$server = new Net::DNS::Resolver.

$server-:^.ar;eservers($ARGV[C]);

ur;n+ 3 ' OERR 'Выполняется ''еррдоча.

i:c $sorver-.'Or rorst гц-.д jr,:ess (de'ired ьу(У-(-}\

for Srecord (@zone){

$record-'>pr int;
}

Объединим эту идею с MD5. Вместо того чтобы получать информацию о зоне, давайте просто сгенерируем для нее подпись:

use Net::DNS:

use FreezeTnaw qiv{f reeze!;

use Digest::MD5 qw(md5):

Sserver = new Net: :DNS::Resolver:
$server->naineservers($ARGV[0]):

print STDERR "Выполняется передача,..";
@zone = $server->axfr($ARGV[1]);
die $server->errorstring unless (defined @zone);
print STDERR "готово.\n";

$zone = join('',sort map(freeze($_),@zone));

print "MD5 fingerprint for this zone transfer is: ";
print Digest::MD5->new->add($zone)->hexdigest,"\n";

MD5 работает со скалярными данными (сообщение), но не со структурами типа списка кэшей, как @zone. Вот почему нужна такая строчка:

Szone = join(",sort map(freeze($_),@zone));

Для преобразования каждой записи из структуры данных @zone в обычные строки воспользуемся модулем FreezeThaw, который мы уже видели в главе 9 «Журналы». Перед тем как записи будут склеены в одно большое скалярное значение, они будут отсортированы. Сортировка позволяет проигнорировать порядок, в котором возвращались записи при пересылке зоны.

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

Все, что мы видели до сих пор, не очень помогло нам преодолеть затруднения. Возможно, следует прояснить несколько вопросов:

  • Что если кто-то подделает базу данных MD5 подписей и подставит действительные подписи под поддельные троянские файлы или изменения служб?
  • Что если кто-то подделает ваш сценарий таким образом, что он будет только создавать видимость проверки подписей со значениями из базы данных?
  • Что если кто-то сделает что-нибудь с модулем MD5 на вашей системе?
  • Это уже, конечно, предел паранойи, но что если кто-то сделает что-то с самим исполняемым файлом Perl, одной из его разделяемых библиотек или самим ядром операционной системы?

Обычные ответы на эти вопросы (какими бы они ни были неудовлетворительными): храните хорошие копии всего, что имеет отношение к этому процессу (базы данных подписей, модули, Perl и т. д.) на устройствах, к которым разрешен доступ только для чтения.

Эта головоломка - еще одна иллюстрация бесконечности безопасности.
Всегда можно найти что-то, чего можно опасаться.



Содержание Назад Вперед