Недавно мы расследовали взлом управляющей инфраструктуры одной хостинговой компании. Ничего экзотического в нём не было: ни уязвимости нулевого дня, ни инструментов государственного уровня. Это была цепочка обычных привычек, каждая из которых сама по себе безобидна, но вместе они дали злоумышленнику скрытый доступ на срок более недели. Ниже — как развивались события, что в итоге выдало атаку и восемь привычек, которые остановили бы её почти на каждом шаге.
who. Он оставался открытым девять дней./tmp.Отключите вход по паролю для SSH и выдайте каждому сотруднику собственный ключ. Тогда утёкший пароль бесполезен, а одна украденная учётная запись никогда не открывает все машины. См. статью настройка входа по SSH-ключу.
Jump-хост или сервер управления имеет доступ ко всему остальному, что делает его самой ценной целью. Выдайте ему отдельные учётные данные, самый строгий файрвол и самый пристальный мониторинг. Если такой сервер когда-либо скомпрометирован, пересоберите его, а не пытайтесь вычистить.
Туннель проработал девять дней, потому что о входе никто не узнал. Сообщение в Telegram о каждом входе по SSH и в панель сразу выделяет неизвестный IP. Настройка занимает около десяти минут: аудит входов с оповещениями в Telegram.
Проверяйте ss -tnp на долгоживущие SSH-соединения с неизвестных IP, а не только who. Туннели и сессии SFTP не видны обычным командам.
Хостинг-панели, биллинговые системы и панели управления серверами — это ключи ко всему. Включите двухэтапную проверку и по возможности ограничьте доступ к страницам администрирования известными IP. Для aaPanel см. руководство по усилению безопасности aaPanel.
Время изменения легко подделать. При поиске подброшенных файлов используйте время изменения метаданных (ctime) и время создания (birth), которые обычный процесс в пространстве пользователя не может сдвинуть назад:
find /var/www /tmp /dev/shm -newerct "-14 days" -type f 2>/dev/null
stat /path/to/suspicious.php # compare Modify with Change and Birth
Порты баз данных, порты панелей и пути к админкам не должны быть доступны всему интернету. Разрешите доступ только своим IP, поставьте сайты за прокси, скрывающий исходный сервер, и держите политику файрвола по умолчанию в режиме запрета. См. статью как скрыть IP исходного сервера с помощью Cloudflare.
Завершите активные сессии, но прежде чем что-либо удалять, скопируйте логи и подозрительные файлы в безопасное место. Затем смените все пароли, ключи и API-токены, которые были доступны скомпрометированным машинам, включая учётные данные баз данных и платёжных шлюзов. Полный чек-лист очистки — в статье как проверить, взломан ли сервер Linux.
Возможность локализовать инцидент зависит от того, какой контроль у вас есть до того, как что-то случилось. На выделенных серверах IMIDC вы можете открыть экран сервера через консоль VNC, даже закрыв файрволом всё остальное, загрузить систему восстановления, чтобы изучить диски в офлайне, и переустановить сервер, которому больше не доверяете, — всё самостоятельно из личного кабинета (см. руководство по панели управления выделенным сервером). Наша круглосуточная служба поддержки поможет с анализом логов и очисткой, когда вам нужен свежий взгляд.
grep "Accepted password" /var/log/auth.log* | tail # any password logins?
ssh-keygen -lf /root/.ssh/authorized_keys # do you know every key?
ss -tnp | grep sshd # unknown long-lived connections?
crontab -l; ls /etc/cron.d /etc/systemd/system # anything you did not add?
find /tmp /var/tmp /dev/shm -name ".*" -type f # hidden files in temp dirs?
Если что-то выглядит незнакомым, остановитесь и разберитесь, прежде чем вносить дальнейшие изменения. Создайте тикет, и команда IMIDC поможет вам во всём разобраться.