FastNetMon

Monday 14 December 2009

Руководство по поиску руткитов в Linux системах

Почти каждый день приходится вычищать системы от руткитов, поэтому решил начать писать мануал по их поиску, основываясь на своих изысканиях.

Проверка временных директорий

1. Проверьте содержимое папки /var/tmp на предмет наличия исполняемых файло (они могут быть с очень неприметными именами, например, scan.txt и проч)
2. Проверьте содержимое папки /tmp
3. Проверьте содержимое папки /dev/shm, некоторые руткиты используют ее для хранения своего тела
4. Просканируете систему на факт наличия файлов с "подозрительными" именами (в примере ниже руткит шифруется под присутствующий в каждой папке псевдофайл ..):

find / | grep '\.\.\.'

5. Проверяем спиcки доверенных ключей SSH (владельцы приватной части этих ключей могут беспрепятственно войти в систему с любым паролем):
cat /root/.ssh/authorized_keys

6. Проверяем глобальный системный CRON:
cat /etc/crontab

7. Проверяем CRON рута:
crontab -l

8. Проверяем папки с CRON задачами на предмет наличия сомнительных файлов:
find /etc/ | grep cron

9. Проверяем конфиг файл sudo (может быть выдан доступ к системным командам какому-либо непривилегированному юзеру):
cat /etc/sudoers

10. Смотрим, с каких IP были входы по SSH.

Для Debian:
cat /var/log/auth.log | grep 'Accepted password'


Для CentOS (не забываем, что вход может быть по сертификату!):

cat /var/log/secure | grep 'Accepted password for'
cat /var/log/secure | grep 'Accepted publickey'


11. Также проверяем содержимое папки /etc/ssh:

find /etc/ssh


12. Проверяем файл /etc/rc.local, он также может использоваться для запуска руткитов:
cat /etc/rc.local


13. Общее замечание - лучше проверять руткито опасные папки не ls ом, а find ом, так как очень часто папки с руткитами имеют не отображаемые имена, например, из одного пробела :) Пример создания папки с пробельным именем ниже.

# mkdir ' '
# stat ' '
File: ` '
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 902h/2306d Inode: 2107796 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2010-03-19 18:36:46.000000000 +0300
Modify: 2010-03-19 18:36:46.000000000 +0300
Change: 2010-03-19 18:36:46.000000000 +0300



Если в указанных папках Вы нашли подозрительные файлы, то по всей видимости их владельцем будет какой-то из пользователей системы, поэтому очень полезно будет проверить и его. Чтобы узнать домашнюю папку пользвоателя, необходимо проверить файл /etc/passwd:

cat /etc/passwd | grep user_name


Проверка пользовательских файлов

1. Основным местом поиска следов руткитов является пользовательский крон файл, находящийся в файле:
/var/spool/cron/user_name


Так что обязательно проверьте все скрипты указанные в кроне очень внимательно.

2. Также в случае нестандартных конфигураций системы необходимо поискать все файлы пользователя в системе, это можно сделать так: http://phpsuxx.blogspot.com/2009/12/blog-post_7930.html

3. Если это веб-сервер, то найдите все папки cgi-bin и проверьте их на пустоту (если cgi не используется) или на наличие подозрительных файлов.

4. Проверьте все файлы, измененные несколько дней назад (если точно знаете дату взлома), вот пример поиска измененных за последние пять дней файлов:

find -mtime 5


Отфильтровать веб-лог файлы можно так:

find -mtime 5 | egrep -v 'access.log|error.log'


5. Проверяем файл .bash_history, который обычно проливает свет на то, как была взломана система (если взломщик его не удалил)

Ну вот пока и все :) Также рекомендую делать все вышеперечисленное на отключенной системе через chroot.

2 comments :

  1. спасибо, помогла статья...нашел папку с одним пробелом, в папке юзера...который заходил по ccш недавно (этим юзером я не пользовался)

    ReplyDelete
  2. Всегда пожалуйста!

    ReplyDelete

Note: only a member of this blog may post a comment.