简单介绍一下背景:我们的 PBX 系统刚刚遭到黑客攻击。服务器本身似乎很安全(没有记录未经授权的控制台访问 - SSH 等),但黑客不知何故设法将新的管理员用户注入 PBX 软件(FreePBX,由 MySQL 支持)。Apache 日志表明黑客设法在不使用 Web 界面(或 Web 界面中的任何漏洞)的情况下添加了用户。
现在,我发现 MySQL 运行时没有 root 密码(!!)并且公开绑定到外部 IP 地址(显然,我现在已经锁定了它)。但是,MySQL 中唯一的 root 级用户是'root'@'localhost'
和'root'@'127.0.0.1'
,这两个用户都应该只能在本地访问。
所以,我的问题是:
有没有办法欺骗与 MySQL 的连接,以便它允许从远程 IP 地址连接到“root”@“localhost”用户,而无需在本地运行任何其他漏洞?
作为参考,该框是运行 Mysql 5.0.95 的 Centos 5(Linux 2.6.10)。
答案1
不。
localhost
如果您不是来自本地系统,MySQL 永远不会使用或主机规范将您登录到用户127.0.0.1
。请注意,这还涵盖了身份验证绕过漏洞 CVE 2012-2122;密码比较可能会被欺骗,但主机比较不会。
您需要在系统上安装代理程序来“欺骗”源主机检查。例如 phpmyadmin,或者在 MySQL TCP 端口前运行的负载平衡器(例如 HAProxy)。
答案2
该名称root
是默认创建的,并且众所周知。文字值 root 在 MySQL 权限系统中没有任何意义。因此,不需要继续使用用户名root
。
您应该将root
用户名更改为其他名称,以便外界无法轻易识别(猜测)它,这将减少黑客攻击。
例如:如果您有一个用户root
@ localhost
,该用户为大家所熟知,因此黑客会尝试连接它,那么您应该将其更改为admin_db_name
@等特定内容localhost
以获得更好的安全性。
监视定期调用的状态变量Aborted_connects
以了解Refused
与 MySQL 服务器的连接,命令执行后该变量应该为 0 Flush status;
,并且不应进一步增加。
显示类似‘Aborted_connects’的状态;
答案3
做“未记录未经授权的访问”包括失败的登录尝试?如果没有,则可能是CVE 2012-2122。
[...] 在某些环境中使用 memcmp 函数的某些实现运行时,(MySQL)允许远程攻击者通过反复使用相同的错误密码进行身份验证来绕过身份验证,最终由于返回值检查不当而导致令牌比较成功。