带有安全需求的应用程序的构建方法和装置的制作方法

文档序号:6557578阅读:130来源:国知局

专利名称::带有安全需求的应用程序的构建方法和装置的制作方法
技术领域
:本发明涉及计算机软件技术,尤其涉及一种安全应用程序(PE应用程序)的构建方法和装置。
背景技术
:当前,可移植的执行体(PE,PortableExecutable)文件格式应用于所有版本的Windows32位系统,包括Windows9x、WindowsNT、Windows2000和WindowsXP等。它是Win32环境中执行体(EXE或DLL)的文件格式。PE文件格式如图1所示,包括DOS部首(DOSHead)、PE文件头(PEHeader)、节表(sectiontable)、节(Section)和调试信息。DOS部首位于PE文件的文件首,包括DOSMZheader和DOSStub。有了DOSMZheader,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随MZHeader之后的DOSStub。PEHeader紧接着DOSStub。它是一个IMAGE_NT_HEADERS结构。其中包含了很多PE文件被载入内存时需要用到的重要域。PEHeader接下来是数组结构的节表(SectionTable)。如果PE文件里有5个节,那么此SectionTable结构数组内就有5个成员,每个成员包含对应节的属性、文件偏移量、虚拟偏移量等。节表(SectionTable)之后是PE文件的真正内容,它划分成块,称之为节(sections)。每节是一块拥有共同属性的数据,比如代码/数据、读/写等。Sections是以其起始位置来排列,而不是以其字母次序来排列。通过节表提供的信息,我们可以找到这些节。常见的Sections包括.arch最初的构建信息(AlphaArchitectureInformation).bss未经初始化的数据.CRTC运行期只读数据.data已经初始化的数据.debug调试信息.didata延迟输入文件名表.edata导出文件名表.idata导入文件名表.pdata异常信息(ExceptionInformation).rdata只读的初始化数据.reloc重定位表信息.rsrc资源.text.exe或.dll文件的可执行代码.tls线程的本地存储器.xdata异常处理表其中.text节存储着程序的执行代码,实现着程序逻辑。目前,对于有安全要求的程序,其安全逻辑也是在此节中实现。安全需求和安全逻辑的实现都嵌入到应用程序具体实现逻辑中。应用程序的实现依赖于软件的设计和代码的编写,对于不同的设计人员和不同的编程人员,针对安全需求的考虑和对安全逻辑的实现会出现不同;同时在应用逻辑中实现复杂的安全逻辑,实现起来也相对较难,会出现不稳定性和不可测性;PE文件格式中没有能描述应用程序安全需求和安全逻辑实现的标准的程序框架,不能给安全程序提供较一致的安全程序构建方法,因此不能缩短开发周期、提高可靠性。
发明内容基于目前PE格式的应用程序,如果对安全方面有要求,相关的安全需求和安全实现逻辑都会由应用程序设计人员进行设计,由编码人员进行编码,这制约了安全程序的构建,不规范不可靠,增加设计和开发的工作量,延长开发周期。为了解决这方面的问题,本发明基于PE文件格式,提供一种具有描述安全需求、实现安全逻辑的通用架构的安全程序的构建方法和装置。一方面,提出一种带有安全需求的应用程序的构建方法。该方法包括步骤A、将源程序中嵌入应用逻辑第一安全需求检查点的第一安全需求代码段转换为该源程序生成的可执行文件中独立于应用逻辑部分的第一安全需求部分;B、在可执行文件的应用逻辑部分中与源程序第一安全需求检查点对应的入口点,链接安全实现逻辑并向其传递第一安全需求部分在该可执行文件中所处位置的信息。上述方法还包括步骤C、该应用逻辑部分运行到该对应的入口点时,调用该安全实现逻辑根据收到的位置信息找到第一安全需求部分并按其安全需求对运行环境进行检测。上述步骤A进一步包括对第一安全需求代码段进行有效性和一致性检查,通过检查后将第一安全需求代码段转换成第一安全需求部分。上述方法中,采用可扩展置标语言XML定义的元素来描述以下类型代码段中至少一种代码段源程序中嵌入应用逻辑的安全需求代码段;源程序中安全需求代码段转换后的可执行文件中安全需求部分。上述方法中,第一安全需求部分是该可执行文件中一个安全数据节所包括的至少一个安全需求段之一。上述方法中,第一安全需求部分在所述可执行文件中所处位置的信息是第一安全需求部分对应的段头在安全数据节的段头表中的索引号。另一方面,提出一种带有安全需求的应用程序的构建装置。该装置包括存储器和至少一个保存在存储器中的应用程序源代码,还包括安全编译器和安全需求解释器。该安全编译器进一步包括安全需求部分转换模块,用于将源程序中嵌入应用逻辑第一安全需求检查点的第一安全需求代码段转换为该源程序生成的可执行文件中独立于应用逻辑部分的第一安全需求部分;安全需求解释器链接模块,用于在可执行文件的应用逻辑部分中与源程序第一安全需求检查点对应的入口点,链接安全需求解释器并向其传递第一安全需求部分在该可执行文件中所处位置的信息。该安全需求解释器用于根据接收的位置信息找到第一安全需求部分,并对其进行解释执行。上述安全需求解释器进一步包括位置信息接收模块,用于接收安全编译器传递来的位置信息;安全需求部分查找模块,用于根据位置信息接收模块收到的位置信息在可执行文件中查找第一安全需求部分;安全需求部分分析模块,用于对安全需求部分查找模块找到的第一安全需求部分进行分析;安全检测模块,用于根据安全需求部分分析模块的分析结果对运行环境进行检测。上述安全编译器还包括有效性与一致性检查模块,用于对第一安全需求代码段进行有效性和一致性检查,通过检查后将第一安全需求代码段传递给安全需求部分转换模块。上述第一安全需求部分是该可执行文件中一个安全数据节所包括的至少一个安全需求段之一。上述第一安全需求部分在该可执行文件中所处位置的信息是第一安全需求部分对应的段头在安全数据节的段头表中的索引号。上述装置中,采用可扩展置标语言XML定义的元素来描述以下类型代码段中至少一种代码段源程序中嵌入应用逻辑的安全需求代码段;源程序中安全需求代码段转换后的可执行文件中安全需求部分。本发明主要的优点和特点如下具有通用架构的安全程序的构建方法和装置将安全需求和安全逻辑从应用程序中分离出来,提高到一个通用的层面,由比应用程序更低层的相关软件层面实现,这些更低的软件层面主要由操作系统(OperatingSystem)供应商、开发工具供应商等实现,大大规范了安全程序的实现流程,减少了有安全需求的应用程序的开发工作量,提高软件的可靠性和可移植性。图1示出PE文件的框架结构;图2示出PE文件增加.secure节那部分架构;图3示出安全需求分段;图4示出.secure节采用的结构;图5示出带安全需求的应用程序源程序;图6是应用程序源程序中的安全需求描述转化为安全需求段的过程示意图;图7是安全编译器的处理过程示意图;图8是安全需求解释器的处理过程示意图。具体实施例方式在PE格式的文件中,根据数据属性的不同分成很多节(sections),比如保存程序代码的.text节、保存资源的.rsrc节等。为了实现将安全需求和安全实现逻辑从应用程序中分离出来,在PE文件中加入一个.secure节,用来保存应用程序对运行环境的安全需求,如图2所示。应用程序根据应用的安全需要,在程序入口点或某些代码段的入口点进行安全需求检查。这些检查安全需求的处理点称为“安全需求检查点”。应用程序的安全需求根据各个“安全需求检查点”的不同,分成“安全需求段”,每个安全检查点对应于一个“安全需求段”。一个应用程序的安全需求由若干个“安全需求段”组成,如图3所示。根据应用程序“安全需求检查点”的不同分成若干“安全需求段”的安全需求,都存储于.secure节中。每个“安全需求段”对应于一个“安全需求检查点”,作为相应代码执行的安全条件。为了方便“安全需求段”的检索,.secure节采用的结构参见图4。.secure节包括“节头”、“安全需求段头表”和“安全需求段表”。“节头”保存“安全需求段”的总概信息,如“安全需求段”的段数Typedefstruct_IMAGE_SECURE_HEAD{WORDSecureNumber;/**安全需求段的段数**/……}IMAGE_SECURE_HEAD,*PIMAGE_SECURE_HEAD;SecureNumber字段为“安全需求段”的段数。“安全需求段头表”中表项的数量与SecureNumber字段的值相一致。每个表项的结构都相同,存储着相应“安全需求段”的偏移即相对虚拟地址和此安全需求段的大小。其结构如下typedefstruct_MAGE_SECURE_SECTION_HEADER{DWORDVirtualAddress;/**相对虚拟地址RVA**/DWORDSizeOfRawData;/**安全需求段的大小**/}IMAGE_SECURE_SECTION_HEADER,*PIMAGE_SECURE_SECTION_HEADER;其中,VirtualAddress为相应安全需求段相对于.secure节基地址的相对虚拟地址(RelativeVirtualAddress);SizeOfRawData为相应安全需求段的大小。通过安全需求段头表中表项,可以定位相应安全需求段的位置。“安全需求段”存储着相应“安全需求检查点”对应的安全需求。各个“安全需求检查点”的安全需求根据需求会变化较大,为了方便表达各种安全需求及其组合,“安全需求段”通过可扩展置标语言XML(ExtensibleMarkuplanguage)来描述,例如<SECURE><OS_TYPE>WINDOWS</OS_TYPE><VERSION>2000</VERSION><PATCH>SP3</PATCH><FIREWALL>MUST</FIREWALL><VIRUS>MUST</VIRUS><IDPS>MUST</IDPS><AUTHENTICATION><TYPE>BIDIRECTIONAL</TYPE><SERVER>119.239.112.111</SERVER><CERTIFICATE>…</CERTIFICATE></AUTHENTICATION><ENCRYPT>MUST</ENCRYPT></SECURE>其中元素SECURE表示一个“安全需求段”的开始和结束。元素OS_TYPE表示操作系统的类型,其可取值WINDOWS或LINUX等。元素VERSION表示操作系统的版本,其取值与OS_TYPE取值相关,比如当OS_TYPE为WINDOWS值时,VERSION可取值9x、2000或XP等。元素PATCH表示操作系统的补丁版本,其取值与OS_TYPE和VERSION取值相关,比如当OS_TYPE为WINDOWS值,VERSION为2000时,PATCH可取值SP1、SP2、SP3或SP4等。元素FIREWALL表示是否需要防火墙,其可取值MUST,表示必须需要防火墙;OPTIONAL表示可以有防火墙;NO表示不需要防火墙。元素VIRUS表示是否需要防病毒软件,其可取值MUST,表示必须有防病毒软件;OPTIONAL表示可以有防病毒软件;NO表示不需要防病毒软件。元素IDPS表示是否需要入侵检测和防护系统,其可取值MUST,表示必须有入侵检测和防护系统;OPTIONAL表示可以有入侵检测和防护系统;NO表示不需要入侵检测和防护系统。元素AUTHENTICATION表示需要进行身份认证。其中还有TYPE、SERVER、CERTIFICATE等子元素。TYPE表示身份认证的类型SINGLE表示单向认证,即只有服务器对客户端的应用程序进行认证;BIDIRECTIONAL表示双向认证,即除了服务器对客户端的应用程序进行认证外,客户端的应用程序也对服务器进行认证。SERVER表示服务器的网络IP地址。CERTIFICATE包含了相关的客户端的证书。元素ENCRYPT表示是否需要对通信信息进行加密。其可取值MUST,表示必须要对通信信息进行加密;NO表示不需要对通信信息进行加密。以上“安全需求段”中XML的元素是以常用的安全要求作为安全需求进行概要介绍,如有扩展需要,可以加入相应新元素,代表新的安全需求。PE文件的.secure节存储着应用程序的安全需求。安全需求最初由应用程序设计和开发者根据应用的安全要求进行确定,然后描述到应用程序源代码中。带有安全需求的应用程序源代码在编译时,经具有安全需求处理功能的“安全编译器”处理后,相应的安全需求存储到相应PE文件的.secure节中。应用程序的开发者在应用程序源代码中,通过“安全描述语言”描述相应的安全需求。“安全描述语言”以当前高级编程语言如C语言等为宿主语言。“安全描述语言”描述的安全需求嵌入到宿主语言编写的程序代码中,如图5所示。嵌入有“安全描述语言”描述的安全需求的应用程序源程序,通过“安全编译器”进行编译后生成PE文件格式的执行文件体,其中的安全需求描述也被编译转化为安全需求,并存储于.secure节中。每个“安全需求检查点”对应的安全需求都存储到.secure节中一个相应的“安全需求段”中,如图6所示。“安全描述语言”用来描述应用程序中各个“安全需求检查点”的安全需求。由于.secure节中各“安全需求段”中的安全需求是通过XML语言进行描述的,为了方便和简化,“安全描述语言”也采用XML语言嵌入到应用程序源代码中,以描述安全需求。“安全描述语言”中的元素与“安全需求段”中的XML元素基本一致。例如…<SECURE><AUTHENTICATION><TYPE>BIDIRECTINAL</TYPE><SERVER>210.223.119.110</SERVER><CERTIFICATE>...</CERTIFICATE></AUTHENTICATION><ENCRYPT>MUST</ENCRYPT>withdrawFromAccount();/**取款--安全需求检查点**/…“安全编译器”为各种高级编程语言编译器的扩展。“安全编译器”在编译带有安全需求的应用程序源程序时,对于源程序中每一个“安全需求检查点”的安全需求都进行如下处理(1)检查安全需求的有效性和一致性。主要检查XML元素的合法性和使用的一致性等。(2)对于通过有效性和一致性检查的某个“安全需求检查点”的安全需求,“安全编译器”将其存入PE文件.secure节中,作为一个“安全需求段”,并记下此“安全需求段”对应的“安全需求段头表表项”在“安全需求段头表”中的索引号,如索引号为“N”。(3)“安全需求检查点”的安全需求转化为对“安全需求解释器”的调用,参数为“安全需求段”对应的“安全需求段头表表项”在“安全需求段头表”中的索引号,如“N”。CALLSECURE_INTERPRETER(N);进一步地,该安全编译器包括有效性与一致性检查模块,对应用程序源程序每个安全需求检查点嵌入的安全需求描述进行有效性和一致性检查,将通过检查的安全需求描述传递给安全需求部分转换模块;安全需求部分转换模块,将传递来的安全需求描述编译转化为安全需求并存储于.secure节内相应的“安全需求段”中;安全需求解释器链接模块,在.text节每个安全需求检查点上链接安全需求解释器,并向其传递相应的安全需求段对应的安全需求段头表表项在安全需求段头表中的索引号。通过“安全编译器”的上述处理后,应用程序中的安全需求最终转化为了对“安全需求解释器”的调用,而需要“安全需求解释器”处理的安全需求则存储于PE文件的.secure节中,它们之间通过“索引号”进行关联,如图7所示。当应用程序运行时,PE文件载入器将各节映射到内存中某块地址(VirtualAddress)上,其中.text节为应用程序执行代码,.secure节为安全需求。PE文件被载入内存后,应用程序从程序入口点开始运行。当应用程序运行到“安全需求检查点”时,其实就是对“安全需求解释器”的调用。在调用时,传递相应安全需求对应的“索引号”,比如N。“安全需求解释器”被调用后,执行的操作如图8所示,操作流程具体如下(1)首先获取传递来的安全需求“索引号”;(2)然后根据“索引号”,查找.secure节中的“安全需求段头表”,找到相应的“安全需求段头表”的表项,并从此“安全需求段头表”的表项中,获得相应“安全需求段”的起始地址和大小;(3)接着对“安全需求段”中描述的安全需求进行分析,并且进行相应的检测和检验。检测当前运行环境是否能满足应用程序此安全需求段的安全要求;(4)如果当前运行环境能满足应用程序此安全需求段的安全要求,应用程序从“安全需求检查点”的下一条执行代码开始执行;否则,应用程序返回上层逻辑,不能执行相应的代码。进一步地,安全需求解释器包括位置信息接收模块,用于接收安全编译器传递来的安全需求段对应的安全需求段头表表项在安全需求段头表中的索引号;安全需求部分查找模块,用于根据位置信息接收模块收到的索引号在可执行文件中查找安全需求段;安全需求部分分析模块,用于对安全需求部分查找模块找到的安全需求段进行分析;安全检测模块,用于根据安全需求部分分析模块的分析结果对运行环境进行检测。“安全需求解释器”负责对安全需求进行分析和安全条件的检测,判断当前运行环境是否满足当前“安全需求段”的安全要求。“安全需求解释器”首先具有XML解释器的部分功能,实现对“安全需求段”中描述安全需求的XML的解释;其次,针对安全需求的每个XML元素,“安全需求解释器”都会有相应的安全处理机制。对于例如元素VIRUS:<VIRUS>MUST</VIRUS>,处理如下“安全需求解释器”会检测当前系统是否安装了防病毒软件,如果安装了,应用程序将从“安全需求检查点”继续执行;否则,跳转到上一逻辑,不能执行相关的代码。“安全需求解释器”可以以动态链接库(DLL)的形式出现。常用的安全要求在通用的“安全需求解释器”中实现,如应用程序需要,也可以进行扩充。总而言之,该方案在PE文件格式中加入.secure节,同时引入“安全描述语言”、“安全编译器”和“安全需求解释器”等概念,将安全需求和安全实现逻辑从应用程序中分离出来。“安全描述语言”描述分离出来的安全需求,“安全需求解释器”实现安全需求的安全逻辑。首先,定义“安全描述语言”,用来描述应用程序对运行环境的各种安全需求。“安全描述语言”用“可扩展置标语言(XML,eXtensibleMarkupLanguage)”进行描述。定义“安全描述语言”,就是确定描述安全需求的相关XML元素。每个XML元素代表着一种安全需求,或者一种安全需求的一部分。常用的元素比如SECURE元素表示“安全需求段”的开始OS_TYPE元素表示操作系统类型VERSION元素表示操作系统的版本PATCH元素表示操作系统补丁版本FIREWALL元素表示是否需要防火墙VIRUS元素表示是否需要安全防病毒软件IDPS元素表示是否需要安装入侵检测和防护系统AUTHENTICATION元素表示需要进行身份认证TYPE元素表示身份认证的类型SERVER元素表示身份认证服务器CERTIFICATE元素客户端证书ENCRYPT元素表示是否需要信息加密接着,以动态连接库(DLL)的形式构建“安全需求解释器”。针对“安全描述语言”中的每个XML元素,“安全需求解释器”都要实现相应的安全处理,检测、校验运行环境是否满足相应的安全要求。“安全需求解释器”由PE文件载入器在载入应用程序时,载入内存;在应用程序运行到“安全需求检查点”时调用。对于每个“安全需求段”,只有通过“安全需求解释器”校验,并证明当前运行环境满足应用程序的安全需求时,应用程序才能往下运行;否则,转到上一级逻辑。然后,扩展高级语言的编译/链接器,增加对由“安全描述语言”描述的安全需求的编译和链接功能。经编译/链接后,安全需求存入PE文件中的.secure节中,同时相应的“安全需求检查点”用对“安全需求解释器”的调用来代替。利用“安全描述语言”、“安全编译器”和“安全需求解释器”,为安全应用程序构建提供了一种通用的框架,由于安全需求和安全实现逻辑从应用程序中分离,这为构建适合各种安全需求的应用程序提供了灵活、快捷的方法。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。权利要求1.一种带有安全需求的应用程序的构建方法,包括以下步骤A、将源程序中嵌入应用逻辑第一安全需求检查点的第一安全需求代码段转换为所述源程序生成的可执行文件中独立于应用逻辑部分的第一安全需求部分;B、在可执行文件的应用逻辑部分中与源程序第一安全需求检查点对应的入口点,链接安全实现逻辑并向其传递第一安全需求部分在所述可执行文件中所处位置的信息。2.如权利要求1所述的方法,其特征在于还包括步骤C、所述应用逻辑部分运行到所述对应的入口点时,调用所述安全实现逻辑根据收到的位置信息找到第一安全需求部分并按其安全需求对运行环境进行检测。3.如权利要求1所述的方法,其特征在于步骤A进一步包括对第一安全需求代码段进行有效性和一致性检查,通过检查后将第一安全需求代码段转换成第一安全需求部分。4.如权利要求1所述的方法,其特征在于采用可扩展置标语言XML定义的元素来描述下述类型代码段中至少一种代码段源程序中嵌入应用逻辑的安全需求代码段;源程序中安全需求代码段转换后的可执行文件中安全需求部分。5.如权利要求1所述的方法,其特征在于第一安全需求部分是所述可执行文件中一个安全数据节所包括的至少一个安全需求段之一。6.如权利要求5所述的方法,其特征在于第一安全需求部分在所述可执行文件中所处位置的信息是第一安全需求部分对应的段头在安全数据节的段头表中的索引号。7.一种带有安全需求的应用程序的构建装置,包括存储器和至少一个保存在存储器中的应用程序源代码,其特征在于还包括安全编译器和安全需求解释器,所述安全编译器进一步包括安全需求部分转换模块,用于将源程序中嵌入应用逻辑第一安全需求检查点的第一安全需求代码段转换为所述源程序生成的可执行文件中独立于应用逻辑部分的第一安全需求部分;安全需求解释器链接模块,用于在可执行文件的应用逻辑部分中与源程序第一安全需求检查点对应的入口点,链接安全需求解释器并向其传递第一安全需求部分在所述可执行文件中所处位置的信息;所述安全需求解释器,用于根据接收的位置信息找到第一安全需求部分,并对其进行解释执行。8.如权利要求7所述的装置,其特征在于安全需求解释器进一步包括位置信息接收模块,用于接收安全编译器传递来的位置信息;安全需求部分查找模块,用于根据位置信息接收模块收到的位置信息在可执行文件中查找第一安全需求部分;安全需求部分分析模块,用于对安全需求部分查找模块找到的第一安全需求部分进行分析;安全检测模块,用于根据安全需求部分分析模块的分析结果对运行环境进行检测。9.如权利要求7所述的装置,其特征在于安全编译器还包括有效性与一致性检查模块,用于对第一安全需求代码段进行有效性和一致性检查,通过检查后将第一安全需求代码段传递给安全需求部分转换模块。10.如权利要求7所述的装置,其特征在于第一安全需求部分是所述可执行文件中一个安全数据节所包括的至少一个安全需求段之一。11.如权利要求10所述的装置,其特征在于第一安全需求部分在所述可执行文件中所处位置的信息是第一安全需求部分对应的段头在安全数据节的段头表中的索引号。12.如权利要求7所述的装置,其特征在于采用可扩展置标语言XML定义的元素来描述下述类型代码段中至少一种代码段源程序中嵌入应用逻辑的安全需求代码段;源程序中安全需求代码段转换后的可执行文件中安全需求部分。全文摘要本发明公开一种带有安全需求的应用程序的构建方法和装置。在安全编译器中,安全需求部分转换模块将源程序中嵌入应用逻辑第一安全需求检查点的第一安全需求代码段转换为该源程序生成的可执行文件中独立于应用逻辑部分的第一安全需求部分;安全需求解释器链接模块在可执行文件的应用逻辑部分中与源程序第一安全需求检查点对应的入口点,链接安全需求解释器并向其传递第一安全需求部分在该可执行文件中所处位置的信息。安全需求解释器根据接收的位置信息找到第一安全需求部分,并对其进行解释执行。本发明将安全需求和安全逻辑从应用程序中分离,提高到一个通用的层面,规范了安全程序的实现流程,减少了开发工作量,提高了软件的可靠性和可移植性。文档编号G06F9/45GK101042657SQ20061006556公开日2007年9月26日申请日期2006年3月22日优先权日2006年3月22日发明者欧启伦,高翔申请人:北京握奇数据系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1