本文只做技术交流,请勿用于非法用途,出现任何问题,本人概不负责。

先说一件事吧,去年同事的一台笔记本电脑装的xp系统,三番几次被人增加系统用户,用户名都internetusers,问问同事的笔记本电脑最近都做什么了,答复是一家软件公司给安装了一套数据库软件,这下基本明白怎么回事了,因为同事的登陆界面已经不显示administrator这个用户名了,按了2次重启键,用administrator用户登录到系统,看到了sqlserver的运行图标,打开查询分析器,用sa登录,密码为空,登录成功。

上网搜索了一下internetusers这个关键词,发现不少人遇到过这个问题,都是安装了sqlserver,sa密码设置的过于简单造成的,估计***者使用了某种批量抓肉鸡的软件。

sa弱口令造成的后果很严重,小王以前也写过几篇这方面的文章,普通计算机使用者可能不懂这些,你软件公司的技术人员应该知道点吧,给那家软件公司的经理打电话,把同事计算机的情况说了一下,这位经理说也知道sa为空的危害,说想办法解决这个问题,我就奇怪了,既然知道为什么不给手下的技术人员说说,万一数据和数据库服务器出了问题,谁来负责,恐怕还是软件使用者和网络管理人员背这个黑锅。

软件公司产品的安全问题还真不少,小王在去年的时候应邀对本地一家公司做了一次安全检测,在检测就要结束的时候,在内网用嗅探到了一个SQLServer数据库的SA密码,经该公司的网络管理人员介绍说,该数据库服务器运行了一套软件,在互联网有固定的ip地址,用于与各地子公司交换数据用的,SA密码是软件安装人员设置的,数据库服务器从来没有出现过安全问题。尽管这个SA密码非常复杂,10多位字符,由数字和字母混合组成,但笔者一看到这个SA密码的部分字符,马上想到国内的一家软件公司,会不会这个家软件公司的SA密码设置都是相同的,或者大部分是这个?经过几个月的测试,小王发现了更为惊人的情况,国内多个软件公司的部分数据库软件产品都存在安全隐患,严重威胁到运行服务器和数据的安全,***者可以在短时间内完全控制互联网上大量数据库服务器。由于众所周知的原因,下面的内容没有进行抓图说明,仅以字母代表软件公司的名称。

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地址,或使用花生壳、每步等软件解析,谁家的孩子,谁家清楚,希望这篇文章能引起所有软件公司对产品安全的重视,不要因为你们的疏忽而让数据库服务器的安全性受到威胁,让广大的系统维护人员和网管员背黑锅。这里介绍两个查看SQLServer服务器是否被***的方法:

1、***者***后一般会开服务器的3389,建立隐藏用户,然后登录。我们只要到C:\Documents and Settings这个目录下看看是否有可以的用户名就可以了,不管是不是隐藏的用户,都会在这里显示出来。

2、有些***者喜欢留一个有高权限的sqlserver数据库用户,当作后门,我们可以打开登陆sqlserver的查询分析器,然后依次打开master--系统表--dbo.sysxlogins(sqlserver2000下,sql2005和2008下,小王没找到如何查看数据库用户的方法,如果您知道请指点),在这个窗口的name列中可以看到sqlserver数据库的用户,一般情况下会有3个用户,一个是sa,一个BUILTIN\Administrators,还有一个是NULL,如果还存在其他用户,就有可能是被人***了或者是我上面讲的那些情况,就需要注意点了,当然不一定就那三个用户,小王还见过name下有多个sa和NULL的,但不知道是怎么回事,具体问题还需要具体分析。