Немного предыстории: мы только что взломали нашу АТС. Сам сервер кажется безопасным (нет зарегистрированного несанкционированного доступа к консоли - SSH и т. Д.), Но каким-то образом хакерам удалось внедрить нового пользователя-администратора в программное обеспечение АТС (FreePBX, поддерживаемое MySQL). Журналы Apache подразумевают, что хакерам удалось добавить пользователя без использования веб-интерфейса (или любого эксплойта в веб-интерфейсе).
Теперь я обнаружил, что MySQL работает без пароля root (!!) и открыто привязан к внешнему IP-адресу (очевидно, сейчас я заблокировал это). Однако единственным пользователем корневого уровня в MySQL был 'root'@'localhost'
и 'root'@'127.0.0.1'
, оба из которых должны были быть доступны только локально.
Итак, мой вопрос такой:
Есть ли способ подделать соединение с MySQL, чтобы он мог подключиться к пользователю 'root' @ 'localhost' с удаленного IP-адреса, БЕЗ запуска каких-либо других эксплойтов локально?
Для справки, это Centos 5 (Linux 2.6.10) с Mysql 5.0.95.
Делает "нет зарегистрированного несанкционированного доступа" включить неудачные попытки входа в систему? Если нет, это могло быть CVE 2012-2122.
[...] при работе в определенных средах с определенными реализациями функции memcmp (MySQL) позволяет удаленным злоумышленникам обходить аутентификацию путем многократной аутентификации с одним и тем же неправильным паролем, что в конечном итоге приводит к успешному сравнению токенов из-за неправильной проверки возвращаемое значение.
Имя root
создается по умолчанию и очень хорошо известен. Буквальное значение root не имеет никакого значения в системе привилегий MySQL. Следовательно, нет необходимости продолжать использование имени пользователя. root
.
Вы должны изменить root
имя пользователя на что-то другое, чтобы внешний мир не мог легко идентифицировать (угадать) его, это уменьшит попытки взлома.
Например: если у вас есть пользователь как root
@localhost
который всем хорошо известен, поэтому хакеры попытаются подключить его, вы должны изменить его на что-то конкретное, например admin_db_name
@localhost
для лучшей безопасности.
Отслеживайте переменную состояния с именем Aborted_connects
периодически знать Refused
подключения к вашему серверу MySQL, он должен быть 0 после Flush status;
команда и не должна увеличиваться дальше.
показывать статус типа «Aborted_connects»;
Нет.
MySQL никогда не войдет в систему с пользователем с localhost
или 127.0.0.1
спецификация хоста, если вы не из локальной системы. Обратите внимание, что это также касается уязвимости обхода аутентификации, CVE 2012-2122; сравнение паролей можно обмануть, а вот сравнение хостов - нет.
Вам понадобится что-то в системе для прокси, чтобы «обмануть» проверку исходного хоста. На ум приходит что-то вроде phpmyadmin или балансировщик нагрузки, такой как HAProxy, работающий перед TCP-портом MySQL.