公开/公告号CN106227812A
专利类型发明专利
公开/公告日2016-12-14
原文格式PDF
申请/专利权人 杭州安恒信息技术有限公司;
申请/专利号CN201610585672.2
申请日2016-07-21
分类号G06F17/30;G06F21/71;
代理机构杭州中成专利事务所有限公司;
代理人周世骏
地址 310051 浙江省杭州市滨江区通和路浙江中财大厦15层
入库时间 2023-06-19 01:07:21
法律状态公告日
法律状态信息
法律状态
2019-06-21
授权
授权
2019-06-07
著录事项变更 IPC(主分类):G06F16/21 变更前: 变更后: 申请日:20160721
著录事项变更
2017-01-11
实质审查的生效 IPC(主分类):G06F17/30 申请日:20160721
实质审查的生效
2016-12-14
公开
公开
技术领域
本发明是关于信息安全技术领域,特别涉及一种数据库对象脚本安全风险的审计方法。
背景技术
随着信息技术的发展,数据库成了很多企业的核心资产,特别是金融、互联网等企业,数据库一旦出现故障整个企业的业务立刻瘫痪,因此数据库安全越来越受到人们的重视。目前数据库系统越来越先进,功能也越来越强大,人们可以在数据库上开发各种对象供应用程序调用,比如各种存储过程、视图、触发器等,这方便了应用程序的开发,但同时也带来了各种安全问题。由于这些对象运行在数据库服务器上,能直接操作数据库,如果数据库对象开发人员开发时无意或有意的犯错,就可能会在数据库上留下后门或使数据库丢失数据,这些都会对数据库造成巨大的影响。因此对这些对象脚本的安全审计非常重要,但是很多时候由于审计人员经验欠缺或疏忽,这些对象脚本的安全风险不能被全部发现。而且很多时候由于没有审计人员,这些脚本直接写进了数据库。因此必须有方法能快速全面地发现脚本中的安全风险,降低脚本安全审计的难度。
目前常见的数据库安全扫描软件主要检测数据库系统配置风险和数据库软件本身的安全漏洞,分析的都是数据库系统的信息,没有对数据库对象脚本进行分析的功能。
发明内容
本发明的主要目的在于克服现有技术中的不足,提供一种能够发现数据库对象脚本安全风险的方法。为解决上述技术问题,本发明的解决方案是:
提供一种数据库对象脚本安全风险的审计方法,具体包括下述步骤:
(1)扫描数据库的系统表,获取所有用户编写的数据库对象脚本;
(2)根据对象脚本构建执行路径树;具体包括下述子步骤:
步骤D:取步骤(1)返回的一个对象的脚本数据;
步骤E:根据语句分割符将脚本整理为语句列表;
步骤F:顺序解析语句列表,将每一条语句解析为操作符、涉及的变量和常量、下一步语句指针三部分;一条语句的三个部分就构成了执行路径树上的一个节点,各个节点通过指针连成一颗树,这棵树就是执行路径树;分支语句与循环语句的下一步指针有多个,通过变量条件判断执行哪一条;
(3)在执行路径树跟踪参数变量,判断参数是否经过过滤,以及参数是否参与数据库操作;具体包括下述子步骤:
步骤G:解析步骤D中所取的对象脚本,获得该脚本的传入参数列表;
步骤H:对步骤F中解析生成的执行路径树,从树上各个节点涉及的变量中,判断传入参数的起始节点,跟踪该传入参数在树中的执行路径,判断该参数是否有参与数据库操作的行为;
将有参与数据库操作的参数和执行路径记录下来(一个传入参数可能有多条参与数据库操作的执行路径),如果脚本有多个传入参数,则通过循环获得各个参与数据库操作的参数的执行路径;
步骤H主要用于过滤掉不参与数据库操作的传入参数;
步骤I:对步骤H获取的参数执行路径的各个节点进行判断是否有参数过滤行为,判断方法是节点的操作符是否包含在过滤关键字列表里;如果一条执行路径里的各个节点都没有参数过滤,那么这条执行路径就被判定是有问题的;
步骤J:循环执行步骤D、步骤E、步骤F、步骤G、步骤H、步骤I,直至完成对步骤(1)返回的所有对象脚本数据进行判断;
(4)列出没有经过过滤,并且参与数据库操作的参数所在对象名、参数名和有风险的行号,即将步骤J中得出的有问题的执行路径对应的参数列出,并显示参数所在的对象名称和参与数据库操作的行号,形成扫描报告输出。
在本发明中,所述步骤(1)具体包括下述子步骤:
步骤A:连接数据库;
步骤B:用SELECT语句获取数据库中各个对象的脚本(以Oracle数据库为例,获取数据库的系统视图All_SOURCE里各个对象的脚本),同时用WHERE语句排除系统的对象,得到用户编写的对象脚本;
步骤C:将步骤B中获得的用户对象脚本列表按对象类型和所属用户区分排序后返回。
在本发明中,所述步骤(1)中,获取的对象脚本是指(包括存储过程、函数等)数据库系统中有调用参数的用户对象的脚本。
在本发明中,所述步骤H中,一个脚本参数的执行路径中,只要一条路径有安全风险就认为该参数有安全风险。
在本发明中,所述步骤I中用于判断参数是否经过过滤的关键字能用户自定义(数据库系统可能提供了过滤函数,用户也可能有自定义的过滤函数,都应该写到过滤关键字列表里)。
在本发明中,所述步骤(4)形成的扫描报告中,根据对象所属的用户定义有不同的危险等级,用于帮助用户更直观的了解脚本中的危险程度,从而优先修复高危的对象脚本(数据库对象由不同的用户创建,比如系统管理员创建的对象,它的权限可能就比一般用户创建的高,所以当系统管理员创建的对象有安全问题时,危害等级也应该比一般用户创建的大)。
与现有技术相比,本发明的有益效果是:
本发明主要对脚本的入口参数进行分析,审计各个参数在执行过程中是否有过滤行为,能发现SQL注入等危害比较大的安全风险。
本发明利用执行路径树构建以及参数变量跟踪识别技术降低漏报误报率,并且用户可以自定义过滤关键字识别变量是否经过过滤。
本发明能快速自动发现数据库中所有用户编写的脚本里的安全风险,并采用危险等级区分和脚本定位技术,使用户能快速定位需要及时处理的安全风险。
附图说明
图1为本发明的工作流程图。
图2为实施例中生成的执行路径树示意图。
具体实施方式
首先需要说明的是,本发明涉及数据库技术,是计算机技术在信息安全技术领域的一种应用。在本发明的实现过程中,会涉及到多个软件功能模块的应用。申请人认为,如在仔细阅读申请文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本领域技术人员完全可以运用其掌握的软件编程技能实现本发明。前述软件功能模块包括但不限于:过滤关键字符表、脚本获取及分类模块、执行路径树生成模块、参数过滤判断模块、显示输出模块等,凡本发明申请文件提及的均属此范畴,申请人不再一一列举。
下面结合附图与具体实施方式对本发明作进一步详细描述:
如图1所示,假设要对Oracle10g数据库进行对象脚本安全风险审计,具体包括下述步骤:
步骤A:连接数据库;
步骤B:用SELECT语句获取数据库的系统视图All_SOURCE里各个对象的脚本,同时用WHERE语句排除系统用户的对象,得到用户编写的对象脚本;
步骤C:将步骤B中获得的用户对象脚本列表根据TYPE字段按对象类型排序和根据OWNER字段按所属用户区分排序后返回;
步骤D:取步骤C返回的一个对象的脚本数据,例如:
步骤E:根据语句分割符将脚本整理为语句列表,具体如表1所示;
表1语句列表
步骤F:顺序解析语句列表,将每一条语句解析为操作符、涉及的变量和常量、下一步语句指针三部分,具体如表2所示;
表2语句解析列表
生成的执行路径树如图2所示;
步骤G:解析对象脚本,获得该脚本的传入参数是param1。
步骤H:对步骤F中解析生成的执行路径树,从树上各个节点涉及的变量中,判断传入参数的起始节点,跟踪该传入参数在树中的执行路径,判断该参数是否有参与数据库操作的行为。param1在第1个和第5个节点中都有涉及,并且2个节点都参与了数据库操作。
步骤I:对步骤H获取的参数执行路径的各个节点进行判断是否有参数过滤行为,判断方法是节点的操作符是否包含在过滤关键字列表里。第1个节点操作符是Select是操作数据库而不是过滤用的,所以第1个节点符合安全风险定义。第5个节点的执行路径是1->2->4->5,第2、4、5个节点也没有过滤操作,所以也有安全问题。所以参数param1是有安全问题的。
步骤J:循环执行步骤D、步骤E、步骤F、步骤G、步骤H、步骤I,直至完成对步骤C返回的所有对象脚本数据进行判断。
将步骤J中得出的有问题的执行路径对应的参数列出,并显示参数所在的对象名称和参与数据库操作的行号,形成扫描报告提供给用户,具体可参考表3。
表3扫描报告
最后,需要注意的是,以上列举的仅是本发明的具体实施例。显然,本发明不限于以上实施例,还可以有很多变形。本领域的普通技术人员能从本发明公开的内容中直接导出或联想到的所有变形,均应认为是本发明的保护范围。
机译: 对象语义数据建模系统;一种用于创建相对于数据库存储数据的数据库模式的方法,一种在D中解释公式的方法,以及一种对象语义类型的数据模型的有效期的数据模型,该对象语义类型的数据模型包括多个对象语义。和系统来创建数据库架构
机译: 用于生成用于定义数据库对象的脚本的系统和方法
机译: 数据库对象脚本生成方法和系统