Невидимость в *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, позволяющий беспрепятственно проникнуть в систему без аутентификации и прочих штучек. Ничего особенно трудного здесь нет, нужно лишь немного разбираться в кодинге. |