Целая детективная история разыгралась на моём сервере.
Дано: небольшой арендуемый у хостера сервер с Debian 12 и последней PostgreSQL 16. Постгрес стоит без всяких докеров.
Месяц назад начал тормозить сервак. Думаю, что за ерунда, захожу по SSH, ввожу:
Зарождается слабая мысль о криптомайнерах, но пока не понимаю, как вирус проник на сервер. Пароль у рута сложный, да и тут про постгрес написано.
В общем, думаю - ну, заглючил PostgreSQL, наверное. Убиваю процесс и перезагружаю сервак (это всегда полезно):
Потом опять тормоза через некоторое время. Смотрю - эта хрень опять запущена. И странно как-то всё, причём тут юзер postgres?
Полез гуглить. Про этот kswapd и нагрузку на проц много разрозненных сообщений. Народ про него пишет и 2013, и в 2017, а у меня вообще-то 2024 на дворе, а ведь в те годы не было ещё криптовалют.
Может это не криптомайнер, а что-то другое?
Дано: небольшой арендуемый у хостера сервер с Debian 12 и последней PostgreSQL 16. Постгрес стоит без всяких докеров.
Месяц назад начал тормозить сервак. Думаю, что за ерунда, захожу по SSH, ввожу:
topи вверху поверх всякой мелочи вижу это:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2251 postgres 20 0 2445140 2,3g 4 S 400,7 14,7 6:20.66 kswapd0Жрёт все ресурсы, процессор загружен полностью.
Зарождается слабая мысль о криптомайнерах, но пока не понимаю, как вирус проник на сервер. Пароль у рута сложный, да и тут про постгрес написано.
В общем, думаю - ну, заглючил PostgreSQL, наверное. Убиваю процесс и перезагружаю сервак (это всегда полезно):
kill 2251 rebootЗахожу по SSH снова - чисто. Ну, думаю, всё ок.
Потом опять тормоза через некоторое время. Смотрю - эта хрень опять запущена. И странно как-то всё, причём тут юзер postgres?
Полез гуглить. Про этот kswapd и нагрузку на проц много разрозненных сообщений. Народ про него пишет и 2013, и в 2017, а у меня вообще-то 2024 на дворе, а ведь в те годы не было ещё криптовалют.
Может это не криптомайнер, а что-то другое?
Пытаюсь понять, кто запускает процесс. Делаю:
Решаю просто переименовать каталог:
Через эти пару недель опять веселуха с загрузкой всех ядер процессора.
Смотрю - каталог снова создан. Значит точно криптовалютный вирус. Но как зараза проникла на сервер?
Наконец-то до моей глупой головы дошло посмотреть логи SSH:
Фильтрую только логи успешного входа по SSH:
Ради интереса проверил айпишники:
103.94.113.2 - India
162.217.64.26 - USA
206.189.36.236 - Singapore
103.146.52.138 - Hong Kong
Целый ботнет. Или VPN-ы. Не знаю, да и это не важно.
Начинаю вспоминать, что когда ставил PostgreSQL, создавал примитивный пароль. Или вообще не задавал его - точно не помню.
Срочно меняю пароль юзеру postgres:
Перезагружаем SSH демона:
Кстати, это зараза прописала SSH-ключ в:
ls -l /proc/2251/exeвыводит:
lrwxrwxrwx 1 postgres postgres 0 июл 23 13:12 /proc/2251/exe -> /var/lib/postgresql/.configrc5/a/kswapd0Такс... Находится в каталоге postgresql. А вдруг это важная часть сервера базы данных? Названо ведь так "по-умному" - configrc5.
Решаю просто переименовать каталог:
kill 2251 cd /var/lib/postgresql mv .configrc5 _renamed_.configrc5 rebootПосле этого всё хорошо... но только пару недель :)
Через эти пару недель опять веселуха с загрузкой всех ядер процессора.
Смотрю - каталог снова создан. Значит точно криптовалютный вирус. Но как зараза проникла на сервер?
Наконец-то до моей глупой головы дошло посмотреть логи SSH:
journalctl -t sshdОпытные линуксоиды знают, что так смотреть не имеет смысла. Там толпы кул-хацкеров пытаются подключиться к серверу, но обламываются.
Фильтрую только логи успешного входа по SSH:
journalctl -t sshd --since "2024-08-01" --until "2024-08-16 10:00:00" | grep "Accepted "И там среди моих заходов вижу эту падлюку:
Jul 06 11:40:07 debian sshd[589266]: Accepted password for postgres from 103.94.113.2 port 33482 ssh2 Jul 10 08:18:00 debian sshd[723300]: Accepted publickey for postgres from 162.217.64.26 port 60366 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 02 07:45:44 debian sshd[258599]: Accepted publickey for postgres from 206.189.36.236 port 47140 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 02 07:50:53 debian sshd[258915]: Accepted publickey for postgres from 157.245.42.37 port 50478 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 14 10:23:08 debian sshd[99132]: Accepted publickey for postgres from 82.165.79.77 port 40086 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7Cw Aug 14 10:47:37 debian sshd[99723]: Accepted publickey for postgres from 103.146.52.138 port 55110 ssh2: RSA SHA256:MkYY9qiVsFGBC5WkjoClCkwEFW5iSjcGQF7m4n4H7CwЁлы-палы! Сначала чувак вошёл по паролю, а потом уже входил по ключу.
Ради интереса проверил айпишники:
103.94.113.2 - India
162.217.64.26 - USA
206.189.36.236 - Singapore
103.146.52.138 - Hong Kong
Целый ботнет. Или VPN-ы. Не знаю, да и это не важно.
Начинаю вспоминать, что когда ставил PostgreSQL, создавал примитивный пароль. Или вообще не задавал его - точно не помню.
Срочно меняю пароль юзеру postgres:
passwd postgresи ставлю запрет входа SSH для определённых юзеров:
nano /etc/ssh/sshd_config
DenyUsers postgres no-reply blahВ идеале, конечно вообще всем запретить, а оставить только для разрешённых.
Перезагружаем SSH демона:
systemctl restart sshd
Кстати, это зараза прописала SSH-ключ в:
/var/lib/postgresql/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckrРазумеется это надо сразу удалять.
Вирусняк прописывал себя и в крон.
А вот содержимое каталога:
Если запустить бинарник (я это по неосторожности сделал :)), то автоматически прописываются ключи в authorized_keys и криптомайнер заново запускается.
Какой из этого можно сделать вывод? Не будь дураком :)
Порты закрыть - это только часть дела. Сложные пароли нужно иметь у всех юзеров. Особенно у тех, у которых есть запуск шелла при логине.
Смотрим файл:
А вот если есть такое:
После всего этого я стал чуть больше красноглазиком.
Какой из этого можно сделать вывод? Не будь дураком :)
Порты закрыть - это только часть дела. Сложные пароли нужно иметь у всех юзеров. Особенно у тех, у которых есть запуск шелла при логине.
Смотрим файл:
cat /etc/passwdТам будет примерно такое:
games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologinТак вот, /usr/sbin/nologin или /bin/false в конце - это значит шелл не запустится при логине.
А вот если есть такое:
postgres:x:114:122:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bashто в случае успешного входа под юзером у него запускается шелл. Да, там не рут-права, но гадить можно.
После всего этого я стал чуть больше красноглазиком.