Обращайте внимание на подозрительную


К сожалению, зачастую мы учимся замечать признаки подозрительной активности только в результате потерь и желания избежать их в дальнейшем. Достаточно всего нескольких взломов, чтобы заметить, что злоумышленники часто действуют по определенным шаблонам и оставляют за собой предательские улики. Зная, что эти признаки собой представляют, заметить их из Perl не сложно.

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

Заманчиво было бы вернуться к обычной жизни и забыть про взлом. Если вы не подвергнетесь этому соблазну, то позже поймете, что инцидент научил вас кое-чему, и что вы не просто потеряли время и силы. Принцип Ницше - «то, что вас не убивает, делает вас сильнее» - часто справедлив и в системном администрировании.

Например, очень часто взломщики, а особенно менее опытные, пытаются замести следы, создавая «скрытые» каталоги для хранения данных. В Unix и Linux они помещают свои программы и вывод подслушивающих программ в каталоги с именами «...» (точка точка точка), (точка пробел) или «Mail» (пробел Mail). Такие имена, скорее всего, останутся без внимания при беглом просмотре вывода команды Is.

При помощи инструментов, о которых мы узнали в главе 2, можно легко написать программу для поиска таких имен. Ниже приведена программа, использующая модуль File: :Find (вызываемый find.pl) для
поиска «ненормальных» имен каталогов.

require "find.pl";

Обходим нужные файловые системы

&find('.');

sub wanted {

(-d $_) and каталог

$_ ne "." and $_ ne ".." and tt не . и не ..

(/["-.a-zA-ZO-9+.:;_"$»()]/ or

содержит "плохой" символ

/~V {3, }/ or ft или начинается как минимум с ipe>
точек

/"-/) and

или начинается с дефиса

print......&nice($name)." '\n";

}

печатаем "хорошую" версию имени каталога, то есть, не раскрывая управляющие символы. Эта подпрограмма -- лишь
немного измененная версия &unctrl() из dumpvar.pl sub nice {

my($name) = $_[0];

$name =' s/([\001-\037\177])/'"'.pack('с'.ord($1)"64)/eg:

$name;
}

Помните врезку «Регулярные выражения» из главы 9? Подобные программы, тщательно анализирующие файловую систему, - еще один пример, где высказанная в главе 9 мысль справедлива. Эффективность таких программ зачастую зависит от качества и количества используемых в них регулярных выражений. Слишком мало регулярных выражений - и вы пропустите то, что хотели найти. Слишком много регулярных выражений или они неэффективны - и ваша программа будет выполняться чрезмерно долго и захватит непомерное количество ресурсов. Если использовать слишком общие регулярные выражения - будет найдено много ложных совпадений. Здесь тонкий баланс.



Содержание раздела