数据库是电子商务、金融以及ERP系统的基础,通常都保存着重要的商业伙伴和客户信息。不管
数据完整性以及关系到系统安全这些在数据库中非常重要,但是数据库通常没有象操作系统和网络这
样在安全性上受到重视。数据完整性和合法存取会受到很多方面的安全威胁,包括密码策略、系统后
门、数据库操作以及本身的安全方案。
为什么数据库安全很重要?
1、保护敏感信息和数据资产
大多数企业、组织以及政府部门的电子数据都保存在各种数据库中。他们用这些数据库保存一些
个人资料,比如员工薪水、医疗记录、员工个人资料等等。数据库服务器还掌握着敏感的金融数据。
包括交易记录、商业事务和帐号数据,战略上的或者专业的信息,比如专利和工程数据,甚至市场计
划等等应该保护起来防止竞争者和其他非法者获取的资料。数据库服务器还保存着一些有关员工详细
资料的东西比如银行帐号、信用卡号码,以及一些商业伙伴的资料。
2、数据库同系统紧密相关并且更难正确地配置和保护
数据库应用程序通常都同操作系统的最高管理员密切相关。比如Oracle,Sybase,MS SQL Server数
据库系统都有下面这些特点:用户帐号和密码,认证系统,授权模块和数据对象的许可控制,内置命
令(存储过程),特定的脚本和程序语言(通常派生自SQL),中间件,网络协议,补丁和服务包,数
据库管理和开发工具。许多DBA都全日工作来管理这些复杂的系统。但是,安全漏洞和不当的配置通常
会造成严重的后果,而且都难以发现。而且一些安全公司也忽略数据库安全,数据专家又不把安全作
为主要职责。“网络安全适应性”哲学——把安全当作持续过程而不是一次性的检查,还没有被数据
库管理员认可。
3、网络和操作系统的安全被认为非常重要,但是却不这样对待数据库服务器
安全专家认为这是的一种普遍现象,他们都认为只要把网络和操作系统的安全搞好了,那么所有
的应用程序也就安全了。现在的数据库系统都有很多方面被误用或者漏洞影响到安全。而且这些关系数
据库都是“端口”型的,这就表示任何人都能够用分析工具试图连接到数据库上,而绕过操作系统的安
全机制。比如:Oracle7.3和Oracle8使用的端口是1521和1526。多数数据库系统也有公开的默认帐号和
默认密码。这两个特性大大地危害着数据库的安全。
4、少数数据库安全漏洞不光威胁数据库的安全,也威胁到操作系统和其他可信任的系统。
这也是为什么数据库安全很重要的原因:有些数据库提供机制威胁着网络安全低层。比如,某公司
的数据库里面保存着所有技术文档、手册和白皮书,不认为数据库的安全非常重要。即使运行在一个非
常安全的操作系统上,入侵者可能通过数据库获得操作系统权限,只需要执行一些内置在数据库中的扩
展存储过程。这些存储过程能提供一些执行操作系统命令的接口,而且能访问所有的系统资源,如果这
个数据库服务器还同其他服务器建立着信任关系,那么,入侵者就能够对整个域机器的安全产生严重威
胁。
5、数据库是电子商务、ERP系统和其他重要的商业系统的基础。
许多电子交易和电子商务的焦点都放在WEB服务、JAVA和其他技术上,那么对于以关系数据库为基础
的客户系统和B2B系统,数据库就显得更加重要。安全将直接关系到系统可靠性、数据事务完整性,和保
密性。系统如果出现问题,将不仅仅对交易产生影响,同时也影响着公司的形象。这些系统需要对所有
合作伙伴和客户信息保密性负责,但是它们又同时是对入侵者开放的。另外,ERP和想SAP R/3这样的管理
系统都是建立在一些基本数据库系统上的。安全问题将直接同维护时间、系统完整性和客户信任密切相关
联。
需要注意那些安全漏洞?
传统数据库安全主要集中在用户帐号、规则和操作许可(比如对表和存储过程的访问权)上。而实际
上,一个完全的数据库安全分析包含的范围宽得多,包括所有可能范围内的漏洞评定。下面是一些类别:
软件风险。软件本身漏洞,错过操作系统补丁,脆弱的服务和不安全的默认配置等。
管理风险。提供的安全选项不正确操作,默认设置,不正确地给其他用户提供权限,以及没有得到许
可的系统配置改变等。
用户行为风险。密码不够长,不确当的数据访问和恶意操作(偷窃数据结构)等。
这些风险类别也同样适用与网络服务、操作系统。当加强数据库安全的时候,所有的因素都应该考虑。
数据库安全——弱点和例子
下面列出一些常用数据库服务器安全漏洞和配置缺陷。
安全特性缺陷。
大多数关系数据库已经存在上10年了,都是成熟的产品。不幸的是,IT和安全专家对网络和操作系统
要求的许多特性在多数关系数据库上还没有被使用。
没有内置一些基本安全策略。
MS SQL Server Sybase Oracle7 Oracle8
帐号锁定 N N N Y
管理员帐号重命名 N N N N
帐号健壮性要求 N N N Y
帐号失效 N N N N
密码失效 N Y Y Y
登陆时间限制 N N N N
由于这些数据库都是“端口性”的,操作系统核心安全机制不提供给数据库的网络连接,
比如MS SQL Server,可以使用WINDOWS NT的安全机制来弥补上面的缺陷,但是,多数运行
MS SQL Server的环境并不一定都是100%的 Windows NT。执行又是另一个问题。如果在运行Oracle 8,
管理员怎么知道这些安全特性正在被使用?
上面列举这些特性连起来,将更加严重。由于系统管理员帐号不能改变(SQL Server和Sybase
是“sa”,Oracle是“system”和“sys”),如果没有设置密码,入侵者就能直接登陆并攻击数据
库服务器,没有任何东西能够阻止他们获得更高权限的系统帐号。
数据库帐号管理。
多数数据库提供的基本安全特性,都没有机制来限制用户必须选择健壮的密码。这就需要更加谨
慎的控制和管理。也有一些额外的功能来管理和保护整个密码表。比如,Oracle系统有超过10个特殊
的默认用户帐号和密码,并且有特定的密码来管理一些数据库操作,比如数据库的启动,控制网络监
听进程和远程数据库登陆特权。许多系统密码都能给入侵者完全访问数据库的机会,更甚的是,有些
就储存在操作系统中的普通文本文件中。比如:
Oracle 内部密码,储存在strXXX.cmd文件中,其中XXX是Oracle系统ID和SID,默认是“ORCL”。
这个密码用于数据库启动进程,提供完全访问数据库资源。这个文件在Windows NT中需要设置权限。
Oracle监听进程密码,保存在文件“listener.ora”(保存着所有的Oracle执行密码)中,用于启
动和停止 Oracle的监听进程。这需要设置一个健壮的密码来代替默认的,并且必须对访问设置权限。入
侵者可以通过这个弱点进行DOS攻击。
Oracle内部密码——“orapw”文件权限控制,Oracle内部密码和帐号密码允许SYSDBA角色保存在
“orapw”文本文件中,该文件的访问权限应该被限制。即使加密,也能被入侵者暴力破解。
这些只是一些例子。密码保护不仅只针对Oracle,其他数据库系统一样需要。
操作系统后门。
多数数据库系统都有一些特性,来满足数据库管理员,这些也成为数据库主机操作系统的后门。
对于Sybase 和SQL Server的帐号“sa”,入侵者可以执行“扩展存储过程”来获得系统权限。只要
登陆作为“sa”,就可以使用扩展存储过程 xp_cmdshell ,这允许Sybase和SQL Server用户执行操作系
统命令,就好象在运行操作系统的命令行模式。比如,下面可以添加一个系统帐号“refdom”,
密码是"nopassword",并且添加到administrators组中:
xp_cmdshell ""net user refdom nopassword /add""
go
xp_cmdshell ""net localgroup /add administrators refdom""
go
这就是因为SQL Server用Windows NT的本地帐号“localsystem”来运行的命令。黑客还可以使用
xp_regread 来读取加密的SAM密码。然后再暴力破解。
xp_regread ""HKEY_LOCAL_MACHINE"",""SECURITYSAMDomainsAccount"",""F""
注意,能读出加密的密码是NT的"administrator"帐号也不能做的。SQL Server能读出来同样是使用
的“LocalSystem”帐号。
Oracle有这样的特性,可以获得操作系统的文件访问权限。比如,UTL_FILE允许用户读和写文件,
UTL_FILE_DIR可以用来设置用户使用UTL_FILE还写文件。
审核。
主要信息和时间能被关系数据库的认证系统很详细地记录下来,但是,这只能在正确地使用和配置
下才能起到安全和报警作用。这些功能能提前报警入侵者正在威胁数据库服务器,并且能探测和修复破坏。
木马的威胁。
数据库管理员需要特别小心,一个著名的木马能够密码改变存储过程修改密码,而且能通知入侵者。
比如,可以添加几行到sp_password中,记录新帐号到库表中,通过EMAIL发送这个密码,或者写到文件中
以后使用。这个存储过程不断地获得密码,直到弄到"sa"的密码。