Пишу эту статью и вспоминаю мои первые взломанные
сервера %) Разумеется рутом на них я был недолгое время. Причем,
сам удивлялся - почему же мое пребывание на сервере раскрыли и
запатчили все дыры, через которые я ломал сервер. Теперь ситуация
становится яснее - логвайперами я в то время не пользовался, да
и за своей безопасностью мало следил...
На этом трагическом вступлении мои воспоминания заканчиваются
- сегодня я поведаю тебе основные правила, подчиняясь которым
ты на много процентов повысишь твою "незамеченность"
на зарутанном серваке :)
Итак, начнем. После удачного диалога с сервером у тебя получилось
нечто:
bash$ gcc coolexploit.c -o cool
bash$ ./cool
Enjoy!
uid=0(root) gid=0(root)
bash#
После последней строки у многих начинается паника: что делать?
Как не засветиться в дальнейшем и удержать права рута? Начнем
с самого важного - создадим "невидимость" на сервере.
1) На любителя - установка руткитов, которые заменяют бинарники,
типа /bin/ls /bin/netstat, etc... Если админ умный - то у него
будет chrootkit и бекап системы. Проверяя контрольную сумму бинарников,
он запросто вычислит твое пребывание... Но - это смотря какой
админ ;)
2) Подгрузка дополнительных модулей в ядро... Уже что-то. На
этот счет, у меня два претендента на описание - sk-1.3a и adore.
Обо всем по порядку:
a) sk-1.3a - по сути это подмененный /sbin/init+бинарник sk.
Содержит сниффер (локальный - записывает stdin,stdout,stderr суид-бинарников),
скрывает твои процессы и обеспечивает безопасный вход на сервер
;). По сути, /sbin/init - обеспечивает корректную работу с inetd-сервисами.
Трояненный бинарник пускает тебя в систему, когда ты с помощью
login'а от sk коннектишься на тачку на любой открытый сервисный
порт. Удобно и просто... Побочные эффекты: сорит в логах о невозможности
подгрузить модули в ядро... Админы могут заметить. Качать сие
с http://sd.g-art.nl/sk.
б) adore - модуль ядра, который способен скрывать твои процессы
и прятать файлы. Компилишь, затем insmod adore.o; insmod cleaner.o;
rmmod cleaner. После этих действий система загрузит адору и уберет
модуль из lsmod. Также поставляется бинарник ava - прячет процессы
и файлы на сервере. Побочные эффекты: Adore отрубает syslogd при
первом сокрытии твоих процессов.. Нет поддержки входа на сервер...
Так, что тебе потребуется user-account, чтобы воспользоваться
этим руткитом. Брать с http://teso.scene.at/releases/adore-0.42.tgz.
Итак, ты обеспечил себе вход на сервер... Далее следует чистка
логов. В первое время доверять логвайперам не стоит, поэтому выполни
следующее:
bash# tail -50 /var/log/messages; tail -50 /var/log/auth.log;
tail -50 /var/log/secure
Если, ты увидишь заметки о твоем взломе/пребывании на сервере,
делай vi logfile и чисти ненужные строки. Затем проверь почту
root'а - возможно там есть мыло о взломе:
bash# mail -f /var/spool/mail/root
1. Warning... crc-attack detected
& d 1
& q
bash#
После того, когда ты уверен, что логи системы вычищены - качай
vanish,
компиль и выполняй:
./vanish2 username 0 yourip
Этим ты сотрешь все строки своего пребывания на сервере (username
- логин под которым ты засветился, yourip - твой ip адрес).
Внимание! Когда ты небезопасно (под юзерским аккаунтом заходишь
на сервер) - юзай vanish при каждом входе. Наилучший вариант -
закинь бинарник в /usr/bin, а затем адорой скрой его. Если ты
ходишь простым аккаунтом - скрой все свои процессы, например,
таким кодом:
perl -e '@ps=system("ps -u user | awk \' { print($1) } \'");
foreach (@ps) { chomp; /usr/bin/ava i $_ }'
Где user - твой логин, а /usr/bin/ava - _скрытый_ бинарник адоры.
Итак, ты почистил логи и полностью уверен в своей безопасности...
Дам тебе напоследок несколько советов, выполняя которые ты увеличишь
срок хранения root-привелегий ;)
1) Читай хистори юзеров. Часто они там оставляют рут-пароли либо
пароли на mysql. В папке каждого пользователя (если он имеет shell
/bin/bash) имеется скрытый файл .bash_history - найди их все:
locate .bash_history и прочитай.
2) Не свети свои команды, но и не уводи историю рута в /dev/null.
Этого делать не надо, так как админы могут по этому симлинку заметить,
что их поломали: простой вариант - export HISTFILE=/dev/null при
каждом запуске shell.
3) Бывает, что сервер ломают и до тебя. Чтобы "убить"
прежних взломщиков и поглядеть, какие файлы они оставили на тачке
- напиши следующие команды (в большинстве процентов, если сервер
был взломан заранее, они увенчаются успехом):
find /dev -type d
find /tmp -type d
find / -type f -perm 4755
Если ты найдешь директории типа /dev/... или /tmp/.. - то в них
что-то есть.
4) Как запасной вариант - создание суид-шелла. Через него ты
можешь получить рута, но его могут засечь админы. Код такой:
int main()
{
setuid(0);
setgid(0);
system("bash");
}
Компилим, кидаем в бинарники под скромным именем... и возможно
пользуемся им.
5) Разгадывай пароли пользователей. Попробуй john-ом прогнать
всех пользователей на сервере в том числе и рута... Пробуй в качестве
словаря тот язык, в зоне которого находится тачка.. Возможно сработает.
6) И наконец, не заходи на взломанную машину напрямую с твоего
диалапа или прововской выделенки. Если напишут жалобу админу -
то у тебя будут неприятности... Лучше зарегистри где-нибудь халявный
шелл и юзай взломанный сервер через тамошний ssh-клиент.
Удачи!
Автор: http://www.xakep.ru/
|