Определяем Userland Preload Rootkits

Недавно был выпущен новый руткит по имени Азазель. Этот руткит похож на предыдущие версии Jynx/Jynx2, но является более продвинутым и сфокусирован на борьбе с отладкой и с методами обнаружения. Это приводит нас к проблеме обнаружения руткитов, такими продуктами как RkHunter. Проще говоря, если вы запустите этот инструмент в потенциально скомпрометированой среде, вы не можете доверять выводу этой программы. RkHunter опирается прежде всего на механизм обнаружение сигнатур, который прекрасен для известных угроз, которые используют дефолтные значения и имена файлов. Вот простой метод обнаружения, который сравнивает адрес системных вызовов загруженных напрямую с libc, а "рядом" адрес этого системного вызова. Сравнивая эти два значения, можно более точно определить Userland Preload Rootkits.

#define _GNU_SOURCE

#include (stdio.h> // change to <
#include (dlfcn.h> // change to <

#define LIBC "/lib64/libc.so.6"

int main(int argc, char *argv[]) {
 void *libc = dlopen(LIBC, RTLD_LAZY); // Open up libc directly
 char *syscalls[] = {"open", "readdir", "fopen", "accept", "access", "unlink"};
 int i;
 void *(*libc_func)();
 void *(*next_func)();

 for (i = 0; i < 6; ++i) {
  printf("[+] Checking %s syscall.\n", syscalls[i]);
  libc_func = dlsym(libc, syscalls[i]);
  next_func = dlsym(RTLD_NEXT, syscalls[i]);
  if (libc_func != next_func) {
   printf("[!] Preload hooks dectected!\n");
   printf("Libc address: %p\n", libc_func);
   printf("Next address: %p\n", next_func);
  }
 }

 return 0;
}


$ gcc preloadcheck.c -o preloadcheck -ldl
$ ./preloadcheck
[+] Checking open syscall.
[+] Checking readdir syscall.
[+] Checking fopen syscall.
[+] Checking accept syscall.
[+] Checking access syscall.
[+] Checking unlink syscall.


Вот пример запуска против Azazel.

$ LD_PRELOAD=/lib/libselinux.so ./preloadcheck
[+] Checking open syscall.
[!] Preload hooks dectected!
Libc address: 0x7fe1bf65a890
Next address: 0x7fe1bfb1d932
[+] Checking readdir syscall.
[!] Preload hooks dectected!
Libc address: 0x7fe1bf633c50
Next address: 0x7fe1bfb1dc56
[+] Checking fopen syscall.
[!] Preload hooks dectected!
Libc address: 0x7fe1bf5f46c0
Next address: 0x7fe1bfb1d6c6
[+] Checking accept syscall.
[!] Preload hooks dectected!
Libc address: 0x7fe1bf6676a0
Next address: 0x7fe1bfb1eb4a
[+] Checking access syscall.
[!] Preload hooks dectected!
Libc address: 0x7fe1bf65ab40
Next address: 0x7fe1bfb1d670
[+] Checking unlink syscall.
[!] Preload hooks dectected!
Libc address: 0x7fe1bf65bd50
Next address: 0x7fe1bfb1db58


Примечание: Это не конец Userland Preload Rootkits. Как мы видели с Azazel, руткиты по-прежнему могут выборочно фильтровать результаты или обойти конкретные программы, чтобы избежать обнаружения. Так же данный руткит может быть настроен на данный механизм отлова черес libdl.so.

via www.chokepoint.net




Вас также может заинтересовать:

Userland-RootKit Azazel