小谈一下数据库的安全理论
先分3点从全局来看
对操作系统的安全需求:防止对DBMS的非法访问和修改,保护存储的数据、文件的安全性,对数据库用户的认证
对数据库系统本身的安全需求:用户认证管理、访问控制、审计,数据库的稳定性,保证数据的安全性与完整性,完善的恢复功能,数据加密
对数据库应用系统的安全需求:访问控制、认证管理,对数据库的保护防止非法访问和修改,自身的稳定性
举一个实例
SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,比如典型的攻击类型是在newsid变量后加后sql语句:exec xp_cmdshell ‘net user’
这样就执行了一个加用户的命令了。
Web应用程序访问数据库会造成特定的一些潜在安全问题。SQL注入攻击仍然稳居黑客至爱兵器榜的首位,对那些想要保护数据安全的企业来说,这是个大麻烦。
据CVE的2006年度统计数据显示,SQL注入攻击漏洞呈逐年上升的状态
如何做好数据库的安全工作
1.数据库基本安全架构
从广义上讲,数据库的安全首先依赖于网络系统。网络系统的安全是数据库安全的第一道屏障,外部入侵首先就是从入侵网络系统开始的。
解决方案:防火墙,入侵检测 IDS—Instrusion Detection System,协作式入侵检测技术,IPS:Intrusion Prevention System 入侵防御系统
对于宿主操作系统层次,操作系统安全策略用于配置本地计算机的安全设置,包括密码策略、账户锁定策略、审核策略、IP安全策略、用户权利指派、加密数据的恢复代理以及其它安全选项。
2 数据库用户及权限
减少特权管理,不要显式地将同一特权组授权给几个用户,只需将这特权组授给角色,然后将角色授权给每一用户。
动态特权管理,如果一组特权需要改变,只需修改角色的特权,所有授给该角色的全部用户的安全域将自动地反映对角色所作的修改。
特权的选择可用性,授权给用户的角色可选择地使其使能(可用)或使不能(不可用)。
应用可知性,当一用户经一用户名执行应用时,该数据库应用可查询字典,将自动地选择使角色使能或不能。
专门的应用安全性,角色使用可由口令保护,应用可提供正确的口令使用权角色使能,达到专用的应用安全性。因用户不知其口令,不能使角色使能。
3 数据库加密技术
库外加密
将数据库的文件作为加密对象,在库外加密方式中,加/解密过程发生在DBMS之外,DBMS管理的是密文。加/解密过程大多在客户端实现,也有的由专门的加密服务器或硬件完成。
库内加密
加密对象为数据库中存储的数据,比如表、记录、元素、数据等。库内加密在DBMS内核层实现加密,加/解密过程对用户与应用透明,数据在物理存取之前完成加/解密工作。
硬件加密
在物理存储器与数据库系统之间的硬件加密装置,加密解密操作由硬件中间设备完成
4 数据库备份技术
数据库有三种标准的备份方法,它们分别为导出/导入(EXPORT/IMPORT)、冷备份、热备份。
— 导入/导出备份:逻辑备份
— 冷备份:物理备份
— 热备份:物理备份
设定数据库备份计划,启动数据库归档模式,定期执行数据库备份,监控检查备份情况
5 数据库审计技术
审计是对选定的用户动作的监控和记录,通常用于:
审查可疑的活动。例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。
监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据。
数据库常见攻击与防护
1 破解弱口令或默认的用户名及口令
Oracle数据库常见缺省用户:SYS、SYSTEM、DBSNMP、SCOTT
数据库常见缺省用户:SA
2 特权提升
特权提升:恶意的用户占有超过其应该具有的系统特权
原因:
数据库管理系统漏洞
如:oracle 10g DBMS_Scheduler本地特权提升漏洞:任何拥有CREATE JOB权限可通过dbms_scheduler执行一个数据库作业而转换SESSION_USER到SYS,本地攻击者可以利用此漏洞提升权限。
错误的配置:一个用户被错误地授与了超过其实际需要用来完成工作的、对数据库及其相关应用程序的访问和特权。
3 利用未用的数据库服务和功能中的漏洞
利用未用的和不需要的数据库服务和功能中的漏洞
利用未用的和不需要的数据库服务和功能中的配置缺陷
4 针对未打补丁的数据库漏洞
虽然Oracle和其它的数据库厂商确实在为其漏洞打补丁,问题是单位不能跟得上这些补丁,因此它们总是处于企图利用某种机会的老谋深算的攻击者控制之下。
5 SQL注入攻击及防护
漏洞原理:在数据库应用的编程过程中,由于程序员没有对用户输入数据进行规范检查,导致攻击者能够通过构造恶意输入数据,操作数据库执行,甚至能直接攻击操作系统
SQL Injection(SQL注入),就是利用某些数据库的外部应用把特定的数据命令插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。
解决方案:
从根本上避免出现SQL Injection漏洞,必须提高WEB程序员的安全意识和安全编程技能来解决程序本身的漏洞;
代码中必须对所有用户输入进行严格的过滤,对单引号、双引号以及“--”等符号、非指定的数据类型及数据长度进行过滤;
用存储过程来执行所有的查询
限制表单或查询字符串输入的长度
检查用户输入的合法性,确信输入的内容只包含合法的数据
将用户登录名称、密码等数据加密保存
检查提取数据的查询所返回的记录数量
合理设置数据库应用程序的权限;
对数据库系统进行必要的安全配置。