Итак, ситуация, к сожалению, стандартна: я не беспокоился о защите сервера, и за это — его сломали. Всё справедливо, никаких претензий к фортуне. Но теперь встал вопрос о недопущении ошибок в будущем.
На VPS стоит Ubuntu Server 10.10 (фаерволл не был включен), когда с него начали брутфорсить кого попало, то моему хостеру посыпались абузы, а он дал мне сутки на то, чтобы я закрыл дыры и отчитался, иначе прибьют мой аккаунт. Хостер Hetzner.de — молодец, другие бы небось сразу бахнули аккаунт, а эти дали время на устранение брешей.
Дальше опишу действия, которые предпринял.
Прошу квалифицированных хабровчан подсказать:
- Что я делал после атаки ни так и чего из необходимого не сделал?
- Как же теперь искать руткита?
- Если есть какие-нибудь комплексные мануалы по базовой защите на русском или простом английском, то ткните в них, пожалуйста.
Свои IP я далее исказил, а IP плохих парней оставил неизменными (на случай, если кто-то будет гуглить спасение от них).
~# sockstat | grep 22<br/>
root sshd 1795 tcp4 79.47.35.666:22 96.156.140.666:54113 ESTABLISHED # моё<br/>
root sshd 17351 tcp4 *:22 *:* LISTEN<br/>
root sshd 17364 tcp4 79.47.35.666:22 2.2.44.3:51557 ESTABLISHED # чужое<br/>
root sshd 17365 tcp4 79.47.35.666:22 2.2.44.3:51557 ESTABLISHED # чужое<br/>
root sshd 18871 tcp4 79.47.35.666:22 96.156.140.666:57163 ESTABLISHED # моё
Попробовал посмотреть, кто вообще юзает ssh:
~# ps ax | grep ssh<br/>
1795 ? Ss 0:02 sshd: root@pts/0<br/>
17351 ? Ss 0:00 /usr/sbin/sshd -D<br/>
18871 ? Ss 0:00 sshd: root@notty # это точно не моё<br/>
18886 ? Ss 0:00 /usr/lib/openssh/sftp-server<br/>
30370 ? Ss 0:00 sshd: root [priv]<br/>
30371 ? S 0:00 sshd: root [net]<br/>
30373 pts/0 S+ 0:00 grep --color=auto ssh
Бахнул процесс:
~# kill 18871
Врубил фаерволл, добавил правила:
~# ufw status<br/>
Status: active<br/>
<br/>
To Action From<br/>
-- ------ ----<br/>
Apache ALLOW Anywhere<br/>
Postfix ALLOW Anywhere<br/>
Anywhere ALLOW 97.157.140.172<br/>
Anywhere ALLOW 194.247.190.1<br/>
22 LIMIT Anywhere<br/>
21 LIMIT Anywhere<br/>
<br/>
22 DENY OUT Anywhere<br/>
21 DENY OUT Anywhere
И sockstat теперь говорит, что на IP 2.2.44.3 никто уже не лезет.
Пошёл искать кто и как приходил на сервер.
~# cat /var/log/auth.log | grep "Accepted "<br/>
...<br/>
Mar 13 23:23:22 ubuntuserver sshd[27438]: Accepted password for webmaster from 114.80.100.241 port 37966 ssh2<br/>
Mar 13 23:23:22 ubuntuserver sshd[27439]: Accepted password for webmaster from 114.80.100.241 port 47732 ssh2<br/>
...<br/>
Mar 15 07:39:58 ubuntuserver sshd[6320]: Accepted password for webmaster from 79.117.72.150 port 1217 ssh2<br/>
...
Был у меня такой юзер с доступом в консоль (юзер создавался давно, не исключено, что у него пароль был смешной или что пароль запалился у кого-то из сотрудников на локальном компе через вирус, ибо от ftp пароль такой же и его сохраняли в клиентах).
Но этот webmaster не был в sudoers. Получается, у меня какой-то руткит?
Установил rkhunter и chkrootkit
Первый нашёл такие подозрительности:
[14:57:13] Checking for hidden files and directories [ Warning ]<br/>
[14:57:13] Warning: Hidden directory found: /dev/.udev<br/>
[14:57:13] Warning: Hidden directory found: /dev/.initramfs<br/>
[14:57:13] Warning: Hidden file found: /dev/.blkid.tab: ASCII text<br/>
[14:57:13] Warning: Hidden file found: /dev/.blkid.tab.old: ASCII text
Но в интернетах
bugs.launchpad.net/ubuntu/+source/rkhunter/+bug/86153 говорят, что это он зря ругается.
Второй нашёл только это:
Checking `chkutmp'... The tty of the following user process(es) were not found in /var/run/utmp !
Но это были мои же рут-сессии, запущенные внутри screen.
И… получается, что в остальном всё чисто.
Как теперь искать руткит?