笔者从事网络管理工作,数月前,应邀对本地一家公司做了一次安全检测,在检测就要结束的时候,在内网用嗅探到了一个数据库的SA密码,经该公司的网络管理人员介绍说,该运行了一套软件,在有固定的ip地址,用于与各地子公司交换数据用的,SA密码是软件安装人员设置的,数据库服务器从来没有出现过安全问题。
尽管这个SA密码非常复杂,10多位字符,由数字和字母混合组成,但笔者一看到这个SA密码的部分字符,马上想到国内的一家软件公司,会不会这个家软件公司的SA密码设置都是相同的,或者大部分是这个?经过几个月的测试,笔者发现了更为惊人的情况,国内多个软件公司的部分数据库软件产品都存在安全隐患,严重威胁到运行服务器和数据的安全,者可以在短时间内完全控制互联网上大量数据库服务器。SA密码泄露会造成什么危害请参考笔者的这篇文章:http://www.cnking.org/post/286.html。由于众所周知的原因,本文没有进行抓图说明,下文仅以字母代表软件公司的名称。
1、公司A的某产品后台数据库使用的是SQLServer数据库,在服务器端安装时会在数据库中建立一个用户,该用户和SA的权限一样,尽管密码相对复杂一些,但密码都是相同的,一旦泄露出去,数据库服务器的安全肯定会受到威胁,而且产品说明书中并没有说明该用户的存在。公司B和C的产品同样存在这用情况。
2、还是公司A的某个产品,也是使用的SQLServer数据库,不知道什么原因,SA的密码都是相同的,带有很明显的特征(非弱口令),笔者怀疑是该公司进行技术人员培训时都以该密码作为例子造成的。公司D、E也存在这种情况。
3、公司F、G、H的某些产品也是使用的SQLServer数据库,在安装服务器端时也会在数据库中建立一个用户,好在只是普通权限,只可以对本数据库进行操作,无法执行master数据库中的扩展过程,这些用户的密码有的和用户名是一样的,有的以明文的形式保存在ini配置文件中,这些用户名和密码一旦泄露会对数据安全产生威胁,如果什么时候再出个数据库提权漏洞后果也是不堪设想。
4、公司I的某个软件产品是安装在嵌入式设备中的,后台数据库也是SQLServer,SA的密码默认设置很复杂,但都是相同的,而且该密码以明文的形式保存在数据库中的某个表中。经过测试还发现在数据库中还存在一个用户,权限和SA一样,密码和SA的不同,但也都是固定的,不知道在哪个环节建立的该用户。
出于安全和方便管理考虑,不少软件公司在安装完自己的产品后,会推荐用户购买其他公司的远程接入产品,单从远程接入软件来看,安全措施做的都比较好,都有特征码绑定、KEY等安全功能选择,入侵者无法通过开启服务器的远程桌面服务进行连接控制,但由于SA密码已经泄露,远程接入软件也都存在被攻破的可能。
远程接入软件公司J可对接入方的网卡物理地址进行认证,入侵者在获得服务器的SA密码后可以通过Ipconfig /all命令获得服务器的网卡物理地址,然后将自己的计算机网卡物理地址修改成服务器的网卡物理地址,运行远程接入的客户端就可以连接上服务器,进行图形操作了,当然前提是设置中允许服务器远程接入。
远程接入软件公司K的接入客户端可以通过服务器开启的web方式下载,但需要在web页面中输入正确的用户名和密码,而web页面的用户名和密码保存在该远程接入软件的安装目录下的某个文件中,入侵者可以通过SA密码使用type命令获取该文件中的信息,用户名是明文,密码则是经过某种(不方便透露)加密的,入侵者破解加密密码获得明文后,就可以登陆到web管理界面的后台,获得分发的接入客户端,运行客户端就可以图形化管理服务器了。
说了这么多的安全隐患,都与使用SQLServer数据库有关,但这不代表SQLServer数据库存在安全问题,恰恰因为SQLServer数据库出色的稳定性和安全性使其得到极为广泛的应用,安全隐患只是软件“偷偷摸摸”建立的数据库用户造成的,使用其他数据库的软件肯定也存在类似隐患,只是笔者没有测试过,特此说明,以免引起大家的误会。
在数据库中添加用户似乎是某些软件公司的“潜规则”,我想软件公司的目的是好的,是为了方便用户,让用户只需要把精力放在前台的程序操作上,而不需要关心后台是如何运作的,却忽视了安全这个环节,如果能在安装应用程序时让用户自己设置数据库新用户的密码,并将该密码加密后保存在配置文件中,这样会更安全和灵活,相信聪明的程序员一定会解决这个问题。
在互联网上有非常多的服务器运行着上面这些有安全隐患的软件,这些服务器或拥有固定ip地址,或使用花生壳、每步等软件解析,谁家的孩子,谁家清楚,希望这篇文章能引起所有软件公司对产品安全的重视,不要因为你们的疏忽而让数据库服务器的安全性受到威胁,让广大的系统维护人员和网管员背黑锅。