近期美国某些大型商务网站和政府网站被黑客通过Adminer数据库入侵,根本原因是 MySQL服务器的协议缺陷。
具体来说,客户端主机和MySQL服务器之间的文件传输交互存在一个开源关系数据库管理系统(RDBMS)设计缺陷,允许运行恶意MySQL服务器的攻击者访问所连接的客户端具有读取访问权限的任何数据。
若被恶意利用此漏洞,攻击者可以从配置不当的Web服务器(允许连接到不受信任的服务器)或数据库管理应用程序中检索敏感信息。
MySQL
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
MySQL的特性:
- 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;
- 支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统;
- 为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等;
- 支持多线程,充分利用CPU资源,支持多用户;
- 优化的SQL查询算法,有效地提高查询速度;
- 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中;
- 提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名;
- 提供TCP/IP、ODBC和JDBC等多种数据库连接途径;
- 提供用于管理、检查、优化数据库操作的管理工具;
- 可以处理拥有上千万条记录的大型数据库。
安全隐患显而易见
此次出现的问题在于LOCAL修饰符使用的LOAD DATA(加载数据)语句,在MySQL文档中被认为具有安全风险。
开发人员进一步解释了它的运行方式,客户端根据其在LOAD DATA语句中提供的信息从MySQL服务器接收文件传输请求。LOAD DATA语句可以加载位于服务器上的文件,如果请求中使用了LOCAL关键字,则可以加载客户端主机上的文件。因此,恶意服务器也可以通过使用LOADDATA LOCAL(加载本地数据)语句进行响应,并要求获取客户端具有读取权限的任何文件。
“理论上来说,构建一个补丁MySQL服务器,回复任何语句的文件传输请求,而不仅仅是LOAD DATALOCAL语句,这样的服务器可以访问客户端用户具有读访问权限的客户端主机上的任何文件,因此更基本的问题是客户端不应该连接到任何不受信任的服务器,” MySQL文档中写道。
这同样适用于Web服务器,它在连接到MySQL服务器时能够充当客户端。在这种情况下,攻击者可以使用该漏洞窃取包含用户帐户记录在内的“/ etc / passwd”文件。
只有在服务器知道文件完整路径的情况下,才能以这种方式获取文件。但是,可以通过请求“/ proc / self /environ”文件,提供正在运行的进程的环境变量,从而暴露主目录和有关内部文件夹结构的详细信息。
随时可用的无管理系统MySQL服务器
安全研究员Willem deGroot(Twitter:@gwillem)在Reddit上,讨论了用户受恶意MySQL服务器影响可能出现的隐患。其中盗取SSH密钥和访问加密货币钱包的详细信息首当其冲。
根据de Groot的说法,2018年10月的Magecart攻击正是利用MySQL漏洞向购物网站注入了恶意代码,以便在用户付款时窃取支付卡详细信息。
早在五年前,GitHub上就已经开始提供无管理系统MySQL服务器的恶意代码,因此如果网络犯罪分子在攻击中使用它,并不会让人感到意外。de Groot推测无管理系统MySQL服务器的修改版本很有可能已经在暗网上出售。
在上周的一篇博客文章中,de Groot 解释了攻击者是如何利用这个漏洞在Adminer(一个管理PostgreSQL和MySQL数据库的工具)的帮助下提取敏感细节信息的。
攻击者的目的似乎是窃取Magento商业平台存储其数据库密码的文件('local.xml')。
这在运行易受攻击版本Adminer(修订版4.3.1至4.6.2被发现受此漏洞的影响)的网站上是极有可能实现的。因此,管理员应更换或升级为更安全的版本,至少是4.6.3版本。除此之外,还可以通过设置二级密码和IP过滤器来保护数据库信息。