Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
900
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6088
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как бороться (найти и уничтожить) с руткитом на Linux-сервере (в моём случае, Ubuntu Server)?
Просмотров: 378
 
Ответов: 11
Итак, ситуация, к сожалению, стандартна: я не беспокоился о защите сервера, и за это — его сломали. Всё справедливо, никаких претензий к фортуне. Но теперь встал вопрос о недопущении ошибок в будущем.
На 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.
И… получается, что в остальном всё чисто.
Как теперь искать руткит?
~# 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 # моё~# 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~# 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~# 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/>
...[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 textChecking `chkutmp'... The tty of the following user process(es) were not found in /var/run/utmp !
я один раз встречался с руткитом, ркхантер его не находил, было года 4 назад, деталей не помню, он умело прятался от ТОП ps и ещё много чего, но святился исходящим соединением.
дальше по цепи этого соединия был найден «модуль ядра»… переустановка решила вопрос.
ещё также недавно у одного из знакомых был сайт на нулленым движке, не менявшийся лет 5 и вот через него мне загрузили файл (шелл) собрали «ирк клиента» и также зацеплись с к удалённому серверу. процесс работал от пользователя apache
Погасив многое я нашёл файл, который использовался апачем. простое ф3 по исполняемому файлу показало параметры соединения с ирк сервером, пошёл я туда и пообщался с админом того канала, ботов таких у него было большее 250.
всеми серверами он рулил прямо из канала, сказал что продаёт серваки спаммерам, сказал через что он ко мне попал, сказал что из малазии он. серваки продаёт от 5 до 100 баксов.
просил меня дать ему шелл только для «ИРКпрокси» ничего большего :))
имеет смысл поискать «пхп шелл» или подобные «штуки»
у меня была перловская картинка кстати, файл jpg внутри с пёрл скриптом по сборке ирк демона :))
опыта я тогда наполучался много :))
1. Попробуйте для начала утилиту unhide для поиска спрятанного процесса (если таковой есть)
2. переустановите все пакеты. Вот скрипт:
#!/bin/bash
for pkg in `dpkg --get-selections|awk '{print $1}'| egrep -v '(dpkg|apt)'`; do apt-get install --reinstall -y $pkg; done
3. Используйте tripwire для контроля целостности файлов (на будущее)
Я делаю в таком случае миграцию данных на промежуточный сервер, реинсталл текущего и миграцию обратно. Ну или просто на другой чистый сервер.
Линукс — сложная система. Каждый сисадмин желает знать где сидит руткит. Но таких мест слишком много. Что то упустил и весь многодневный труд на смарку. В перспективе реинсталл проще.
Странно вообще, что Вам об этом сообщил хостер после жалоб, а не Вы сами узнали.
Вот кстати, из-за скупости держателей серверов на нормальных админов такое и происходит, хотя для поддержания средненького сервера удаленно, вполне нормально иметь хотя б удаленного админа.
То есть получается что Вы не следили должным образом за сервером, ни как не мониторили его, не просматривали логи — так что ж Вы хотите то?
В идеале, поставить сервер с нуля, нанять человека для адекватной настройки защиты. Далее, либо самому подтягивать знания, либо оставить человека на зарплате, хотя б на начальное время.
Я не понимаю, как можно не отслеживать заходы по ssh — это раз. (хотяб logwatch что-ли прикрутили бы)
Не понимаю как можно оставлять ssh на стандартном порту и не блокировать количество попыток коннекта к нему с одного IP — это два.
И я совсем не понимаю, как можно нырять в океан не умея плавать — это три.
Надо бы ещё настроить SSH, если по уму: отключите протокол версии 1, отключите вход для root, отключите авторизацию по паролю и оставьте только по ключам. Займитесь настройкой прав доступа: уберите всех пользователей из группы wheel (в идеале, вообще оставьте каждого пользователя в своей группе), удалите sudo.
Посмотреть за rootkit'ом, если он в ядро не пролез, можно при помощи утилиты lsof — в Linux сложно скрыть работу с какими-нибудь файлами, ищите всякие записи, вроде (deleted), может и повезёт. Но если взломщик получил root'а, то он, скорее всего засунул модуль в ядро, который способен скрываться, что достаточно просто и студенты делают за месяц, как бы, мощь Linux тут против него играет. От этого Вас спасёт только переустановка. И берегите root в дальнейшем, как зеницу ока.
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться