一种基于aop与注解信息系统的安全审计方法

文档序号:6515238阅读:182来源:国知局
一种基于aop与注解信息系统的安全审计方法
【专利摘要】一种基于AOP与注解信息系统的安全审计方法,包括如下步骤:根据审计需求,设计审计注解类;在业务类中加入审计注解;通过AOP拦截业务操作;通过HTTP协议将审计日志提交到审计平台。本发明提供一种使用AOP结合注解技术,解决安全审计与业务的解耦,可提供人性化的安全审计信息。
【专利说明】—种基于AOP与注解信息系统的安全审计方法【【技术领域】】
[0001]本发明涉及计算机软件【技术领域】,具体涉及ー种基于AOP与注解信息系统的安全审计方法。【背景技木】
[0002]计算机信息安全的认识是要保证计算机信息系统中信息的机密性、完整性、可控性、可用性和不可否认性(抗抵赖),简称“五性”。安全审计是这“五性”的重要保障之一,它对计算机信息系统中的所有网络资源(包括数据库、主机、操作系统、安全设备等)进行安全审计,记录所有发生的事件,提供给系统管理员作为系统维护以及安全防范的依据。一旦有突发事件可以快速的查阅进出记录和行为记录,确定问题所在,以便采取相应的处理措施。
[0003]随着涉密系统规模不断扩大,每个系统都带有自己的审计模块。审计模块与具体业务并无关联,但基于面向对象的设计,往往在业务逻辑中嵌入审计代码,耦合度较高,逻辑负责,代码混乱。再者,不同系统的审计模块,审计内容基本相同,在各自系统中重复建设审计系统,造成资源浪费,另外审计数据格式不统一、审计分析规则无法统一,给安全审计的业务部门造成工作困扰。
[0004]AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的ー种技木。Annotation (注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。
[0005]中国发明专利201110418958.9公开了一种基于Hadoop的分布式日志分析系统,解决了海量日志分析中实效,存储,计算的瓶颈。但是未解决审计日志与业务逻辑混乱,耦合度高的问题。
[0006]中国发明专利201110144104.6公开了ー种日志写入方法和日志系统,将日志信息写入内存,在数据达到预置数量时,在存储到磁盘中,減少了 I/O操作,減少写入时间,提供并发能力。此方法如果系统异常,容易造成,日志丢失,在安全审计业务中不可取。
[0007]中国发明专利201110124967.7公开了ー种ERP系统中基于规则配置的数据安全审计方法,属于ERP系统安全审计领域。将安全审计功能封装,后在业务中调用安全审计变成接ロ,在具体需求中进行审计数据项,审计主体等配置,审计方法灵活,快速满足不同的审计需求。但是在业务逻辑中调用安全审计接ロ,业务逻辑与安全审计无法脱离,耦合度闻。
[0008]中国发明专利201110143035.7公开了ー种记录日志的方法,通过提出一个基于AOP进行拦截,应用于设计通用审计日志再在AOP中进行日志信息组织并处理,将导致这种处理非常复杂,且业务类中不标识审计的业务信息,不够人性化,代码可读性大大降低。
[0009]中国发明专利201110321921.4公开了ー种基于AOP技术进行拦截来处理业务通用逻辑的方法,此方法可以应用于设计通用审计日志,但是审计日志的业务属性如果只提供ー个属性标识,再在AOP进行处理,将导致这种处理非常复杂,且业务类中的标识不够人性化,代码可读性大大降低。
[0010]不管是以上何种方案都无法同时解决耦合度与统一安全审计的需求,使用内存缓存日志或者hadoop进行分布式分析都未解决业务与代码解耦问题,单纯使用AOP方式只解决了耦合度高的问题,但是在AOP中无法根据具体的业务获得业务相关的审计信息,导致审计信息技术性太强,人性化不足,对审计管理员的技术要求太高。
[0011]有鉴于此,本发明人针对现有技术的缺陷深入研究,遂有本案产生。

【发明内容】

[0012]本发明所要解决的技术问题在于提供ー种使用AOP结合注解技术,解决安全审计与业务的解耦,可提供人性化的安全审计信息。
[0013]本发明是这样实现的:
[0014]一种基于AOP与注解信息系统的安全审计方法,包括如下步骤:
[0015]第一步骤:根据审计需求,设计审计注解类:
[0016]具体包括:
[0017]根据企业审计日志的需求,设计好审计所需信息项,分析并将审计信息项拆分为公共运行信息与具体业务信息;根据企业审计业务信息,设计审计注解类,要求注解类字段要完全覆盖审计业务信息;
[0018]第二步骤:在业务类中加入审计注解:
[0019]具体包括:
[0020]在具体业务类中加入审计注解类,根据不同业务操作类传入相对应的审计需要的业务信息,包括系统名、模块名、操作类型、操作名、操作描述;
[0021 ] 第三步骤:通过AOP拦截业务操作:
[0022]具体包括:
[0023]根据注解类进行AOP拦截配置,拦截所有配置了审计注解的方法;拦截了方法后,在方法开始前记录方法开始时间,方法參数,方法名字,并获得方法的注解类,通过注解类获得该业务类的的审计业务信息;在方法执行后获得方法执行后返回的參数,执行结束时间,方法执行过程是否抛出异常,抛出的异常信息;
[0024]第四步骤:通过HTTP协议将审计日志提交到审计平台:
[0025]具体包括:
[0026]将第三步骤中获取的各种信息,整理成完整的审计信息通过http协议提交到审计平台;通过统ー审计日志平台,对外提供HTTP协议的审计日志服务,包括审计写入与读取服务,收集企业各业务系统的审计日志信息;并在审计日志平台提供统ー的审计日志查询与下载功能。
[0027]进ー步地,所述第一步骤中,注解类中定义各种审计项,包括系统名、模块名、业务操作类型、业务操作描述、业务操作名,并且支持可注解类,与注解方法,并且可继承?,方法注解信息覆盖类注解;安全审计信息,直接在业务类中通过注解直接标识与类中。
[0028]进ー步地,所述第三步骤还包括:[0029]通过session或者线程变量将操作人信息,包括操作人姓名、操作人ID、IP,传递到AOP切面中,在AOP直接获得操作人相关信息;
[0030]通过注解类传递用户的操作描述,
[0031]获得切面对象类:invokeClass=joinPoint.getTarget ()? getClass ();
[0032]获得切面类的方法:methods[] =invokeClass.getMethods ();
[0033]获得注解类对象:auditClass=invokeClass.getAnnotation (Audit, class);
[0034]获得方法名methodName=joinPoint.getSignature ().getName ();
[0035]循环类的所有方法,与methodName比对,可以获得当前方法对象method
[0036]获得方法注解对象:auditMethod=method.getAnnotation (Audit, class);
[0037]获得系统:auditClass.system()
[0038]获得模块:auditClass.moudle ()
[0039]同理获得其他注解信息;
[0040]通过反射机制获得业务操作产生的影响:通过审计的注解类做为切面的切入点,在切面进行逻辑处理,获得包括注解类传递的信息与运行时參数包括,操作是否成功,操作耗时,运行类与方法名,系统參数,操作返回对象。
[0041]本发明的优点在干:本发明实现了ー种统ー的信息系统安全审计方法,通过建立统ー的安全审计平台,提供标准的安全审计服务,可以为单位(公司)的不同应用系统提供ー个统ー审计服务(中间件)。统ー了不同应用系统的审计日志格式,并将审计日志统一存储起来,降低了単位审计管理员的工作量,同时还避免信息系统重复建设安全审计模块,缩短系统建设周期。为后期建设单位统ー审计日志分析系统提供数据保障。本发明在审计日志服务端通过兼容关系型数据库与mongodb,解决传统安全审计模块在审计日志数据量随着时间增加而速度降低的问题。
【【专利附图】

【附图说明】】
[0042]下面參照附图结合实施例对本发明作进ー步的描述。
[0043]图1是本发明系统框架示意图。
[0044]图2是本发明中审计日志拦截装置示意图。
[0045]图3是本发明中主要流程示意图。
[0046]图4是本发明中通过AOP处理审计日志的信息流程示意图。
[0047]图5是本发明中提交审计信息到审计平台流程示意图。
【【具体实施方式】】
[0048]本发明中,所有的应用系统都将其安全审计信息统一存储到安全审计平台,如图1所示。业务系统(如:协同办公、质量体系等)不再继续存储安全审计日志;安全审计日志平台对外提供安全审计日志服务(只提供添加与查询接ロ),同时安全审计日志平台也提供面向用户的安全审计日志查询服务(即可以通过安全审计日志平台提供的查询界面直接查询安全审计日志)。由于安全审计日志集中的管理,所以需要对审计日志进行分系统管理,如协同办公的审计管理员,无法检索到质量体系或其他应用系统的审计日志。各应用系统不必建设安全审计模块,只需引入安全审计拦截装置,在业务类中通过注解方式,传入安全审计日志的关键业务信息。通过切面类组织审计内容,并调用安全审计客户端提交审计日志到统一安全审计平台,完成审计功能。
[0049]审计日志拦截装置包括:自定义注解类,切面类,安全审计提交客户端。如图2所
/Jn o
[0050]本发明具体实施步骤,如图3所示。
[0051]第一步骤:根据审计需求,设计审计注解类:
[0052]具体包括:
[0053]根据企业审计日志的需求,设计好审计所需信息项,分析并将审计信息项拆分为公共运行信息与具体业务信息;根据企业审计业务信息,设计审计注解类,要求注解类字段要完全覆盖审计业务信息;
[0054]注解类中定义各种审计项,包括系统名、模块名、业务操作类型、业务操作描述、业务操作名。并且支持可注解类,与注解方法,并且可继承。
[0055]方法注解信息覆盖类注解,比如类中注解了 systenumodule,而在方法的注解也添加了 system、module的注解信息则以方法的注解为准。
[0056]安全审计信息,直接在业务类中通过注解直接标识与类中,即通俗易懂,又实现了安全审计与正常业务逻辑的解耦。
[0057]第二步骤:在业务类中加入审计注解:
[0058]具体包括:
[0059]在具体业务类中加入审计注解类,根据不同业务操作类传入相对应的审计需要的业务信息,包括系统名、模块名、操作类型、操作名、操作描述;
[0060]第三步骤:通过AOP拦截业务操作:
[0061]具体包括:
[0062]根据注解类进行AOP拦截配置,拦截所有配置了审计注解的方法;拦截了方法后,在方法开始前记录方法开始时间,方法參数,方法名字,并获得方法的注解类,通过注解类获得该业务类的的审计业务信息;在方法执行后获得方法执行后返回的參数,执行结束时间,方法执行过程是否抛出异常,抛出的异常信息;
[0063]通过AOP (切面编程)处理审计日志的信息,如图4所示。
[0064]审计日志要记录谁在什么时间做了什么,产生了什么影响。
[0065]1、通过session或者线程变量将操作人信息(操作人姓名,操作人ID,IP)传递到AOP切面中,在AOP直接获得操作人相关信息。
[0066]2、通过注解类传递用户的操作描述(操作名,操作模块,操作的系统,操作描述,操作类型)
[0067]获得切面对象类:invokeClass=joinPoint.getTarget ()? getClass ();
[0068]获得切面类的方法:methods[] =invokeClass.getMethods ();
[0069]获得注解类对象:auditClass=invokeClass.getAnnotation (Audit, class);
[0070]获得方法名methodName=joinPoint.getSignature ().getName ();
[0071]循环类的所有方法,与methodName比对,可以获得当前方法对象method
[0072]获得方法注解对象:auditMethod=method.getAnnotation (Audit, class);
[0073]获得系统:auditClass.system()[0074]获得模块:auditClass.moudle ()
[0075]同理获得其他注解信息
[0076]3、通过反射机制获得业务操作产生的影响
[0077]通过审计的注解类做为切面的切入点,在切面进行逻辑处理,获得包括注解类传递的信息与运行时參数包括,操作是否成功,操作耗时,运行类与方法名,系统參数,操作返回对象等。
[0078]第四步骤:通过HTTP协议将审计日志提交到审计平台,如图5所示。
[0079]具体包括:
[0080]将第三步骤中获取的各种信息,整理成完整的审计信息通过http协议提交到审计平台;通过统ー审计日志平台,对外提供HTTP协议的审计日志服务,包括审计写入与读取服务,收集企业各业务系统的审计日志信息;并在审计日志平台提供统ー的审计日志查询与下载功能。
[0081]通过httpclient 编写一个 restfullclient 负责构造符合 http restfull 规范的的审计日志提交客户端,客户端负责调用审计日志添加接ロ并获得結果。
[0082]服务端采用springmvc开放标准http restfull接ロ,使用hibernate作为持久化框架,支持普通关系型数据库与MongoDB,依据预估的安全审计日志记录数选择关系型数据库或者MongoDB,而调用结果统一封装为标准的json对象。大概格式如下:
[0083]


{
【权利要求】
1.一种基于AOP与注解信息系统的安全审计方法,其特征在于:包括如下步骤: 第一步骤:根据审计需求,设计审计注解类: 具体包括: 根据企业审计日志的需求,设计好审计所需信息项,分析并将审计信息项拆分为公共运行信息与具体业务信息;根据企业审计业务信息,设计审计注解类,要求注解类字段要完全覆盖审计业务信息; 第二步骤:在业务类中加入审计注解: 具体包括: 在具体业务类中加入审计注解类,根据不同业务操作类传入相对应的审计需要的业务信息,包括系统名、模块名、操作类型、操作名、操作描述; 第三步骤:通过AOP拦截业务操作: 具体包括: 根据注解类进行AOP拦截配置,拦截所有配置了审计注解的方法;拦截了方法后,在方法开始前记录方法开始时间,方法參数,方法名字,并获得方法的注解类,通过注解类获得该业务类的的审计业务信息;在方法执行后获得方法执行后返回的參数,执行结束时间,方法执行过程是否抛出异常,抛出的异常信息; 第四步骤:通过HTTP协议将审计日志提交到审计平台: 具体包括: 将第三步骤中获取的各种信息,整理成完整的审计信息通过http协议提交到审计平台;通过统ー审计日志平台,对外提供HTTP协议的审计日志服务,包括审计写入与读取服务,收集企业各业务系统的审计日志信息;并在审计日志平台提供统ー的审计日志查询与下载功能。
2.如权利要求1所述的ー种基于AOP与注解信息系统的安全审计方法,其特征在于:所述第一步骤中,注解类中定义各种审计项,包括系统名、模块名、业务操作类型、业务操作描述、业务操作名,并且支持可注解类,与注解方法,并且可继承;方法注解信息覆盖类注解;安全审计信息,直接在业务类中通过注解直接标识与类中。
3.如权利要求1所述的ー种基于AOP与注解信息系统的安全审计方法,其特征在于:所述第三步骤还包括: 通过session或者线程变量将操作人信息,包括操作人姓名、操作人ID、IP,传递到AOP切面中,在AOP直接获得操作人相关信息; 通过注解类传递用户的操作描述,
获得切面对象类:invokeClass=joinPoint.getTarget ().getClass (); 获得切面类的方法:methods [] =invokeClass.getMethods (); 获得注解类对象:auditClass=invokeClass.getAnnotation (Audit, class);
犾得刀法名 methodName=joinPoint.getSignature ().getName (); 循环类的所 有方法,与methodName比对,可以获得当前方法对象method 获得方法注解对象:auditMethod=method.getAnnotation (Audit, class); 获得系统:auditClass.system () 获得模块:auditClass.moudle ()同理获得其他注解信息; 通过反射机制获得业务操作产生的影响:通过审计的注解类做为切面的切入点,在切面进行逻辑处理,获得包括注解类传递的信息与运行时參数包括,操作是否成功,操作耗吋,运行类与方法名 ,系统參数,操作返回对象。
【文档编号】G06F11/34GK103559118SQ201310476118
【公开日】2014年2月5日 申请日期:2013年10月12日 优先权日:2013年10月12日
【发明者】倪时龙, 苏江文, 洪顺淋 申请人:福建亿榕信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1