核查web服务配置的安全性的制作方法

文档序号:7618222阅读:302来源:国知局
专利名称:核查web服务配置的安全性的制作方法
技术领域
本发明的系统和方法涉及分布式系统安全性。
背景技术
现有的协议验证器在安全协议的特别(ad-hoc)、手写、抽象描述上工作。手写描述和运行代码之间的差距能导致错误。令事情变得更坏的是,核查和维护手写描述实质上是劳动密集且耗时的。

发明内容
描述了用于核查分布式系统的安全性目标的系统和方法。在一个方面,将详细的安全政策转化成模型。详细的安全政策在一个或多个端点之间的消息交换期间实施。一个或多个端点主宿(host)在分布式操作环境中联网的相应主体。评估该模型,以确定详细安全政策是否实施了一个或多个端点的至少一个的一个或多个安全性目标。


附图中,组件标号最左边的数字标识了该组件首次出现的特定附图。
图1示出了用于自动生成web服务的安全政策并核查web服务配置的安全性的示例性计算装置。
图2示出了当分析系统描述以核查web服务配置的安全性时的示例性数据流。
图3示出了用于配置数据文件生成和安全政策分析以核查web服务配置的安全性的示例性数据流。
图4示出了用于自动生成web服务的安全政策的示例性过程。
图5示出了用于核查web服务配置的安全性的示例性过程。
图6示出了一个示例性的何时计算环境,其中,随后描述的用于自动生成web服务的安全政策并核查web服务配置的安全性的系统、装置和方法可被完全或部分地实现。
图7示出了示例性政策建议器的体系结构。
具体实施例方式
综述通过非安全传输发送的SOAP消息可通过嵌入式安全头部来保护;WS安全(WS-Security)规范定义了这一头部如何可包括诸如签名或密文等密码资料,以及诸如标识特定主体的令牌等各种安全令牌。根据库中其类属实现,web服务开发者可依照其安全性目标为其消息选择头部和令牌,由此在基于SOAP的标准之上设计其自己的应用程序级协议。
与通过密码保护的所有联网系统一样,使用WS安全的web服务可能易受一类攻击,其中,攻击者可截取、计算并注入消息,但是不会危害底层的密码算法。在SOAP安全性的设置中,这类攻击被称为扩展的标记语言(XML)重写攻击,这与web服务实现上诸如缓冲区溢出、SQL注入等攻击相反。
在WS安全的web服务增强(WSE)2.0实现(以及可能的其它实现)中,对安全头部的处理可通过与命令性代码(直接被编译以在运行时间内运行的代码)分离的声明性配置文件来编程。WSE 2.0依照符合WS安全政策(WS-SecurityPolicy)规范的XML元数据文件生成传出的安全头部,并核查传入的安全头部。这遵循规定当构建安全系统时,将安全核查与消息处理的其它方面隔离以帮助人类对安全性的审阅的原理。然而,这一系统实质上还是有问题的。例如,WS安全政策是一种用于构建并核查个别的安全头部的低级(非常详细的)语言。没有直接的方法来使用这一低级语言以将政策与诸如消息认证或保密等高级目标相关。现有系统的另一问题涉及配置文件的使用(如,基于SOAP系统的WS安全政策文件),它很大程度上确定了实体对XML重写攻击的易受攻击性。程序员几乎有用其它的和新发明的密码协议来修改配置文件的完整自由度。这些协议在任何伪装下很难恢复正常。这意味着对运行时间配置文件的修改会破坏期望的任何安全性目标。
此处所描述的系统和方法提出了一种新的语言和新的协议以解决这些问题。例如,以下描述提出了一种用于描述对SOAP处理程序之间流动的消息的预期的保密和认证目标的高级(抽象)链接描述语言。该链接语言是覆盖可从例如用户界面(或向导)和/或系统建模工具生成的消息流的公用实例的简单表示法。核查web服务配置的安全性的系统和方法使用了一种“Generator(生成器)”计算模块(后文参考图1描述)以将链接描述编译成配置文件/数据。部分地由于配置文件的精细语义,从抽象链接描述生成配置文件比直接书写配置文件要安全得多,且更不容易出错。为描述和示例性实现的目的,配置文件通常被称为WS安全政策文件,尽管配置文件不限于这一数据格式或实现WS安全政策的环境。
另外,核查web服务配置的安全性的系统和方法使用了一种“Analyzer(分析器)”计算模块,以在执行前核查在给定的WS实现中是否实现了链接描述的安全性目标。在此实现中,Analyzer采用例如WS安全政策文件等配置文件的集合以及抽象链接描述作为输入。Analyzer构造用于该配置的模型作为一组SOAP处理程序,连同处理程序执行的安全性核查。该模型也包括链接描述中规定的安全性目标的形式规范。在一个实现中,为示例和说明的目的,这一模型以TulaFale脚本语言表达,它是∏积分的非标准语言,它被开发来表达这类分布式实现。在此实现中,然后执行用于TulaFale的现有工具,以自动核查模型的安全性目标是否易受任何XML重写攻击。
鉴于上述内容,核查web服务配置的安全性的系统和方法提供了一种形式语义,以自动分析WS安全性的密码协议的抽象描述。令工具自动构造用于分析的模型(例如,TulaFale模型)实质上消除了从手动构造模型产生的任何人类错误,并进一步允许使用配置文件的语义验证来配置web服务。这些系统和方法通过组成并支持健壮的声明性安全政策,实质上确保了应用程序之间的强健的端对端安全性。即,给定两个应用程序,或仅给定它们的安全设定,可使用上述工具作出静态分析。同时,也可通过在运行时使用上述工具来应用动态分析。例如,在访问另一服务之前,可获取用于该服务的数据,然后分析该数据以基于其安全性设定确定安全通信是否可能。
在另一实现中,没有配置数据的安全性目标规范的高级链接描述,核实web服务配置的安全性的系统和方法自动标识某些有问题的配置设定以警告用户。为此,这一实施例实现了一种政策建议器,以对照配置数据或对照配置数据的对象模型直接运行一组查询。政策建议器收集用于向用户报告的结果。每一查询由句法条件(即,可能被所有或部分配置数据满足或不满足的测试)触发,并可导致风险报告(指示可能存在何种类型的安全性易受攻击性的文本报告)以及矫正措施(建议如何修改配置数据以消除或降低易受攻击性的文本报告)。在一个实现中,每一查询的结果被报告给用户。另外,矫正措施可在例如从用户获取了许可之后自动执行。此外,政策建议器生成肯定报告,总结了配置数据以帮助人类用户理解保证了什么,并认出潜在的错误。
用于安全性目标的自动核查的示例性系统图1示出了用于自动生成web服务的安全政策并核查web服务配置的安全性的示例性系统100。在此实现中,安全性目标由人类书写,尽管在其它实现中,安全性目标可从其它来源导出,例如自动生成。系统100包括通过网络106耦合至一个或多个远程计算装置104的计算装置102。计算装置102包括计算机程序模块108和程序数据110。计算机程序模块包括,例如运行库程序模块112、分析器程序模块114以及核查器程序模块116。
运行库112(如,.NET运行库)提供了一种运行时环境,它可在多个机器上分布,诸如在一个或多个远程计算装置104上分布。在此实现中,运行库112至少部分地基于配置数据118或脚本使用密码安全政策用于通信。运行库112语其它软件组件接口,包括,例如操作系统、互联网信息服务(IIS)和WSE库。为说明的目的,这些其它软件组件被分别表示为“其它程序模块”120的各部分。
配置数据118包括,例如,系统100部署的信息,如用于系统100的计算装置(机器)的地址和本地配置及其关系。这一信息可确定密码资料的处理,如加密、解密、计算签名、验证签名、生成密钥资料或刷新不重性(nonce)、核查消息中的身份或不重性、从一套密码算法中选择、以及处理例如WS安全数据格式的各种安全令牌的操作。例如,在此实现中,配置数据118是一组SOAP端点的描述,其每一个与按照WS安全政策语言(WS政策语言的特定实例)的政策描述(即,声明性安全政策)的集合相关联。政策语言数据是WS安全政策语言的XML文件,尽管也可使用安全政策语言的其它标记。
分析器114和核查器116共同提供了一种用于核查配置数据118的形式工具,以验证(或实施)其安全执行。分析器114将配置数据118的至少一部分转换成模型122。在此实现中,模型以过程模型(ProcessModel)语言表达。过程模型包括表达消息的过滤和处理的逻辑谓词(Predicate)。在此实现中,过程模型数据是TulaFale句法中的∏积分过程,尽管可使用其它句法。例如,分析器114将政策语言翻译成用于核查器116的输入的逻辑谓词(政策语义政策语言->谓词)。在此实现中,谓词是定义TulaFale句法中逻辑谓词的子句(即,具有密码的符号表示的XML数据的Prolog风格的谓词)。
核查器116是用于核查/评估过程模型的属性的自动或半自动工具,它以例如安全断言(SecurityAssertion)语言来表达。可以用安全断言语言表达的属性的实例包括用于机器之间交换的某些信息的机密性属性,以及被表达为由这些机器执行的本地行动之间的对应性的真实性属性。安全断言也可表达与保密性(如身份或数据保护)或服务质量有关的安全属性。在此实现中,安全断言语言包括认证(通过形式的对应性)或秘密属性的TulaFale断言,尽管也可使用断言的其它表示。
一个示例性过程考虑到运行库112的配置C(配置数据118)和人类生成的相对较短的安全断言A使用了系统100。核查器116评估来自分析器114的输出,它考虑到断言A处理配置C。核查器116输出指示OK(意味着满足断言)、或反例(使用了调查,并可指示C中的安全易受攻击性)、或未知(包括核查器无法终止,并可再次指定调查)的结果。
鉴于上述内容,直接由运行库112执行的配置数据118也由分析器114和核查器116处理,以直接确定运行库112的执行是否易受攻击。这与常规的系统相反,在常规系统中,协议验证器在安全协议的特别、手写、抽象描述上工作,并且手写描述和运行代码之间的差距会导致错误,并且核查和维护是冗长乏味的。换言之,在语义上链接运行库112的分析器114以及核查器116是新颖的。
系统100的替换实现包括,例如,运行库112可以是使用WS安全性的密码协议的任何政策驱动实现,以及完全不使用XML或任何标记。配置数据118可包括过程模型本身或某些混合,在某些实现中它可被直接执行。例如,可扩展WSE以支持在TulaFale和WS安全政策的混合中指定的声明性配置。此外,在使用了分析器114来获取过程模型之后,可应用除核查器116之外的各种各样的技术和工具。
核查器116的这一实现使用了TulaFale工具加上ProVerif-一种基于分解的定理证明器。在一个不同的实现中,应用不同的定理证明器(如,TAPS),也加上模型核查器、类型核查器等。其它有用的技术包括,例如,系统实现的基于模型的测试以及其运行时行为的基于模型的监视或过滤。分析器114和核查器116可被细化(refine),以在部分配置上操作,例如描述了用于系统中某些(但不是所有)机器的政策的配置。这一细化是有用的,以核查某些安全属性与其本地配置未知或不可信的某些机器无关地保留。
web服务的安全政策的自动生成图1也示出了用于自动生成web服务的安全政策的示例性系统100。在此实现中,计算装置102还包括从链接语言126生成配置文件118的生成器(Generator)模块124,以及将链接语言126(链接描述)映射到嵌入在模型122中的对应性(用于验证)和秘密断言(例如,在一个实现中,这些方面嵌入在TulaFale脚本中)的安全目标(SecurityGoals)模块128。用于嵌入在模型122中的安全目标模块的输出是程序数据110的相应部分。更具体地,安全目标模块的输出是一系列对应性和秘密断言。对应性指示了消息接收者与消息发送者意见一致的一组数据;这类数据可包括接收者和发送者的身份、消息内容、诸如时间标记、消息标识符以及路由信息等消息头部,以及该消息与对话中任何先前的消息的关系。秘密断言指示某些数据(包括密钥资料)对攻击者保密。
链接语言(LinkLanguage)是端点之间的安全链接的简单语言。生成器124将这些链接映射到WS安全政策。更具体地,链接语言126(“L”)是用于描述SOAP端点之间,通常是担当客户机和服务器的主体组之间的安全链接的抽象或高级格式。对于每一链接,该格式描述了该链接的预期目标,它可包括消息认证、机密性、匿名性、请求和应答的相关性、主体之间的信任关系、重放或DOS保护等等,并也可考虑某些实现细节,如预期的认证机制(例如,共享口令、公钥签名、Kerberos令牌、WS安全对话(WS-SecureConversation)令牌等等)。另外,该格式描述了链接的组成以形成高级应用程序配置。
链接语言126比配置数据118抽象得多(例如,更不可表达),使得审阅链接语言描述的安全性比理解配置数据118中每一细节的安全含意要简单得多。例如,可设计链接语言126和生成器124,使得任何生成的配置118避免了以手写语言配置可表达的错误的公共模式,由此为运行库112提供了“默认保护”配置。
给定这一输入L,配置C=Generator(L)旨在驱动运行库112,以实现L中所有链接的预期安全属性。此外,安全断言A=SecurityGoals(L)是预期的安全属性的形式表示,它适用于自动核查。第一示例性使用是,对于任何链接描述L,可通过运行Checker 116(Analyzer(Generator(L)),SecurityGoals(L))来核查Generator 124正在产生安全政策,核查器116应当返回OK或反例。这一核查对于固定或随机生成的输入L的组可以在Generator函数124的常规测试运行期间,或者在Generator 124实际部署期间,使得每次它运行以产生配置C=Generator(L)时,可在将其传递到运行库112之前核查C的安全性。
第二示例性使用是,给定描述预期链接的链接描述L,以及包括预先存在的或手写的政策的配置C,可通过运行Checker(Analyzer(C),SecurityGoals(L))来核查C是否满足L的目标。
第三示例性使用是,给定链接描述L,以及可能在安装之后通过编辑Generator(L)获得的配置C,可通过运行Checker(Analyzer(C),SecurityGoals(L))来核查是否维护了安全性。
万一生成器仅产生了配置的某一部分,而配置的剩余部分保持不变,则这些使用也可被组合。安全性目标可通过运行Checker(Analyzer(C+Generator(L)),SecurityGoals(L))来测试。
在一个实现中,核查器116结合定理证明和/或类型核查应用程序一起运行。在这一实现中,核查器操作用诸如类型注释等一个或多个额外的暗示来促进。例如,类型注释可使用用于密码协议(如,在MSR/DEPaul大学密码项目(MSR/DePaulUnivercity Cryptyc Project)中产生的那些协议)的各种类型和效果系统以及依赖类型系统来表达。一种变异是引入一助手(Helper)函数,以结合生成器124一起运行。为说明的目的,这一助手函数被示出为图6的其它程序模块636的相应部分。例如Helper(未在图l中示出)LinkLanguate->HintsSemiAutomaticChecker(未在图1中示出)ProcessModel,SecurityAssertions,Hints->ok,或者反例,或者未知在一个实现中,助手函数结合Generator一起运行,而在另一实现中,助手函数由Generator实现。在任一实现中,助手函数构造了对产生的配置,例如密钥资料的预期类型适合的暗示。为对照A=SecurityGoals(L)测试C=Generator(L),将运行SemiAutomaticChecker(Analyzer(C),A,Helper(L)),这与先前的自动测试非常相似。尚未实现这一半自动化的变异。
web服务的安全政策web服务及其配置系统100考虑了在多个机器(如,计算装置102和104)上分布的SOAP处理程序。每一处理程序可发送和接收各种服务的SOAP包封130和132。包封格式由某些声明性配置文件驱动的类属系统库处理,而包封有效负载由命令性应用程序代码处理。例如,一种简单的(未保护的)包封可以是以下形式<Envelope>
<Header>
<To>http//bobospetshop.com/service.asmx</To>
<Action>httppeetshop/peremium</Action>
<MessageId>uuid5ba86b04...</MessageId>
</Header>
<Body><GetOrder><orderId>20</orderId></GetOrder></Body>
</Envelope>
该包封具有表示服务处的方法调用的消息正文,之前是提供目标服务和行动的URI以及唯一消息标识符的可任选头部。在上述实例中,未返回GetOrder的结果(20),服务可使用具有头部<RelatesTo>uuid5ba86b04...</RelatesTo>的包封,以将响应路由到请求者。
SOAP包封可使用额外的安全头部收集适当安全令牌来保护。例如,消息完整性可以由嵌入了XML数字签名的签名令牌来保护,而发送者的身份可作为嵌入了X.509证书的第二令牌来传递。包封的各部分也可使用指示如何导出解密密钥的第三令牌来加密。与传统的传输协议相比,该方法强调了灵活性,而以性能和复杂性方面为代价。实际上,WS安全性提供了用于安全令牌的精确的语法和默认的处理,但未规定特定的协议。
与使用应用程序接口(API)来操纵安全令牌相反,鼓励应用程序书写者以抽象链接语言126规定其安全性要求,用于由生成器模块124自动转换成配置数据文件118中的一组详细的安全政策。在这一实现中,系统100通过规定例如给定服务器支持的服务和行动,以及客户机和服务器(例如,102和104,或相反)之间的信任关系来配置。结果,配置数据118可完全确定密码资料的处理,如加密、解密、计算签名、验证签名、生成密钥资料或刷新不重性、核查消息中的身份或不重性、选择密码算法、处理WS安全性格式的各种安全令牌的操作。(不重性是包括在协议交换的数据中的随机或不重复的值,通常是为了确保活跃度并由此检测和免受重放攻击的目的。)为示例性说明的目的,系统100实现了运行在.NET运行库上的web服务-WSE 2.0,尽管也可使用其它web服务和运行库的组合。为核查工具消耗和产生了与WSE 2.0相同的XML包封和配置文件,以下描述捕捉其安全性语义,用作示例。这一方法可适用于依赖于这类示例性规范的其它系统。
WS政策和WS安全政策一系列web安全政策标准,例如,WS政策[5]、WS政策断言(WS-PolicyAssertion)[6]和WS安全政策[7]允许相对于客户机端和web服务端的声明,哪些安全令牌要嵌入到发送的消息中,并且哪些安全令牌要在接收到的消息上核查。尽管其名字不同,然而政策通常不是非常抽象的它们规定了加密和签署包封元素的机制,而非机密性或认证目标。WS政策构造了政策文件,作为可使用逻辑与操作符(All[...])(所有)以及逻辑或操作符(OneOrMore[...])(一个或多个)来组成的基础断言上的逻辑公式。在这一实现中,不使用WS政策很少用于安全性的其它特征,如ExactlyOne[...](正好一个)操作符,以及Rejected(拒绝)和Optional(可任选)修改符。
WS安全政策定义了用于完整性和机密性的两种基础断言。每一断言涉及密钥,该密钥或者来自X.509证书,或者从与客户机相关联的共享秘密中导出。在SOAP包封中,这通过在安全头部中嵌入X.509令牌或用户名令牌来实现。尽管实际的密钥是在运行时从本地数据库中提供的,然而断言可特别地请求主题名。每一断言也由部分的列表来参数化,这些部分表示了要加密或联合签署的包封的目标元素。每一部分可由其头部名来指定,或更一般地使用XPATH表达式来指定。对于每一完整性断言,在安全性头部中嵌入XML数字签名令牌。对于每一加密的部分,用其加密来替换目标元素。
在接收者端,接受SOAP包封作为有效的,并且如果包封满足其政策,则将其传递到应用程序。相反,在发送者端,协议栈生成满足其政策的SOAP包封。在一个实现中,并为了功能的正确性,发送者政策至少与接收者政策一样苛求。这可通过使用辅助协议预先交换和比较政策来实施。
接着,为政策定义抽象句法。在此描述中,省略了用于标准化、安全散列、共享密钥加密的算法的明确选择,并对每一目的假定固定的、明显的算法。(相反,工具消耗并产生了用于web服务规范中定义且WSE 2.0使用的政策的具体XML句法。)
政策tkToken∷= 令牌描述X509 X.509令牌,任一主题X509(substring) 主题为sub的X.509令牌Username 用户/口令令牌,任一用户Username(ustring) 用户u的用户/口令令牌partPart∷= 消息部分Header(tagstring) 具有标签tag的SOAP头部Body SOAP正文polPol∷= 政策None 空政策,总是为真All(psList(Pol)) 政策列表的逻辑与OneOrMore(psList(Pol))政策列表的逻辑或Integrity(tkToken,ptsList(Part))完整性断言Confidentiality(tkToken,ptsList(Part)) 机密性断言作为示例,以下政策可用于通过使用服务的X.509公用加密密钥加密其消息正文,并通过使用与客户机相关联的共享秘密签署所有其元素,来保护上文示出的示例性SOAP包封。
All[Integrity(Username,[Header(″To″,Header(″Action),Header(″MessageId″),Body)],Confidentiality(X509(″BobsPetShop″),[Body])]政策映射(例如,在WSE 2.0中)由于SOAP处理程序可主宿具有不同安全性要求的许多服务(并与其交互),因此指定了政策如何与服务以及包封相关联。在WSE 2.0中,这以用于分派通过HTTP发送的SOAP包封的本地配置文件来表达,它给出了从SOAP端点到个别政策的两种(XML)局部映射,分别用于传入和传出的包封。(对于HTTP服务器,这是与服务同一IIS虚拟目录中的Web.config文件;对于客户机,这是与应用程序代码同一本地目录中的app.config文件。)在此描述中,使用抽象句法用于政策配置配置uriURI∷= anyLegalXmlUri URI组addrAddr= SOAP端点地址Default 默认的服务和行动ToDefault(suriURI) 服务suri处的默认行动ToAction(suriURI,acURI) 服务suri处的行动acmapPolmap∷=政策映射Send(addrAddr,pol;Pol) 向addr发送政策Receive(addrAddr,polPol) 在addr处接受政策cfgConfig∷=配置polmapsList(Polmap) 政策映射列表作为示例,为客户机提供了支持上文给出的请求和响应的配置。客户机发送请求并接收响应clientConfig=[Send(ToAction(″http//bobspetshop.com/service.asmx″,″http∥petshop/premium″),Integrity(Username,[Header(″To″),Header(″Action″),Header(″MessageId″),Header(″Created″),Body])),Receive(Default,Integrity(X509(″BobsPetShop″),[Header(″From″),Header(″RelaresTo″),Header(″MessageId″),Header(″Created″),body]))]
用于分析政策的工具体系结构在一个实现中,核查web服务配置的安全性的一种通用方法在图1中描述。如图所示,该示例性方法开发了一种用于web服务的可操作模型,它(1)紧密地反映了其实际部署,并且(2)支持安全属性的自动化验证。与使用WSE 2.0实际运行web服务应用程序相反,使用TulaFale-一种用于表达XML安全协议的脚本语言-来符号地验证其安全性。
图2示出了当分析被写为TulaFale脚本的系统描述时的示例性数据流。某些卷轴表示手写或从其它脚本编译的脚本,其它长方形卷轴示出了将一个脚本编译成另一个或分析脚本的工具。ProVerif工具是第三方软件,它分析以中间∏积分表达的安全协议。Tulafale工具执行其输入脚本的类型核查,然后将其编译成中间∏积分,以供ProVerif分析。
TulaFale-一种用于web服务的安全工具(回顾)Tulafale[2]是一种基于支持XML处理的应用的∏积分,在ProVerif[3,4]-一种密码协议验证器-上构建的类型语言。该语言具有项、谓词和过程。项组合了XML和符号“黑箱(blck-box)”密码,由一组重写规则参数化。例如,以TulaFale定义AES对称加密和解密如下constructor AES(bytes,bytes)bytesdestructor decryptAES(bytes,bytes)bytes with decryptAES(k,AES(k,b))=bProlog风格的谓词在项上操作;它们用于反映web服务规范的句法和非形式语义。例如,以下谓词(在附录A中使用)通过描述如何构建这一XML令牌并从用户名u、秘密口令pwd、时间标记t和不重性n计算导出密钥,给出了WS安全用户名令牌的形式说明predicate mkUserTokenKey(tokitem,u,pwd,tstring,nbytes,kbytes)-tok=<UsernameToken>
<Username>u</>
<Password Type=″None″></>
<Nonce>base64(n)</>
<Created>t</></>,k=pshal(pwd,concat(n,utf8(t)))
过程表达了使用这些谓词发送、接收和转换项的主体的配置。根据其作用域,它们也可生成最新名字建模秘密、不重性和消息标识符。
攻击者涉及任意(过程)环境,并由此可尝试组合通信、密码和XML重写的任一主动攻击。唯一的限制是最新名字最初对攻击者不可用。
形式安全属性也可用TulaFale来表达。编译脚本,然后调用ProVerif-一种基于分解的协议验证器。对于每一属性,ProVerif或者成功,并对在任一环境中的所有运行建立属性,或者它失败,带有一跟踪文件,可(通常)将该跟踪文件反编译成Tulafale运行,或者它发散。属性包括机密性(某些名字对所有的运行保密)和真实性(被表达为由过程执行的特殊事件之间的对应性以标记其进度)。由于tulaFale脚本定义了过程,因此∏积分的一般原理也可有效地应用,例如以手动证明补充属性,或概括自动证明的属性。
从政策置生成TulaFale脚本为便于验证声明性SOAP配置,首先用将这些配置编译成TulaFale脚本的工具扩展框架,由此向其规范给予精确的可操作语义。“配置编译器”(如,图1的生成器模块124)的核心包括从WS安全政策公式到被配置成相对于基于WS安全性的示例性模型操作的包封上的TulaFale谓词的转换。在编程上,该工具也可收集WSE 2.0实现的政策映射,并自动生成其TulaFale脚本。从那一点,可为配置手写相对较短的安全属性,并使用Tulafale来验证它们。更具体地,该工具也可检测并报告政策配置中的常见错误(通常在TulaFale中很显然),如未认证的路由信息。
该工具和实际的web服务运行库采用相同的政策配置作为输入。因此,可直接确定web服务是否易受攻击。相反,在先前的工作中,协议验证器在安全协议的特别、手写、抽象描述上工作,并且手写描述和运行代码之间的差距可导致错误,并且核查和维护是冗长乏味的。换言之,用于验证密码协议的许多形式技术现在是可用的,但是其反映这些协议的实际分布部署的语义应用是新的。
为抽象配置生成安全目标和政策当缺乏用于表达高级安全性目标的规范时,链接描述126使用一种简单的格式来描述主宿担当客户机和服务器的主体组的SOAP端点之间的安全链接。该格式可涉及几个基本安全属性,如消息认证,以确保链接比政策映射更容易且更安全配置。从链接描述中,可提供生成适合自动核查的预期的安全属性的TulaFale表示以及满足这些属性的WSE配置。
链接描述126的语言是抽象的,且比政策映射更不具表达性,使得审阅链接描述的安全性比理解配置中的每一细节的安全含意简单得多。例如,可设计它们,使得自动生成的配置避免了常见的缺陷,由此提供了“默认保护”web服务配置。
对于任一链接描述,可组合多个工具,并通过将它们转换成模型122(如,以TulaFale或另一方式表达)及运行核查器116(验证器),来核查配置数据118中相关联的政策实际上是正确的。也可使用不同的(或经修改的)配置,例如通过手写某些政策,并核查修改的配置仍满足原始的安全性目标。在此实现中,自动验证形式安全保证,而无需使用对TulaFale脚本的手动操纵。例如,可在修改了运行配置之后验证目标。
图3示出了用于密码配置数据文件生成和安全政策分析,以核查web服务配置的安全性的示例性数据流。首先,注意,被看作为示例性“参考实现”(右侧)的模型遵循目标系统(左侧)的模块化结构。实际上,例如,通过核查对应于用一系列示例的WSE实验上观察到的那些TulaFale包封,并通过将TulaFale和WSE中执行的安全令牌上的动态核查,与高级规范无关地开发并彻底测试了WS安全性的建模。在第二阶段,确认政策的编译。政策的编译也被核查,以确保生成的政策由WSE 2.0接收,并产生预期的SOAP包封。该工具独立地核查(而非假定)政策生成的正确性。
在此实现中,用于SOAP处理程序和攻击者的示例性模型有些任意-通过对向攻击者提供额外能力的额外API进行编程,以TulaFale实现了若干变异。然而,所描述的系统和方法仍考虑了任意的XML重写攻击,并且对于SOAP处理程序主宿的未绑定数量的主体,在用于各种服务和行动的并行会话中潜在地重复使用了用于不同角色的同一密钥。更具体地,在一个实现中,为验证声明性SOAP配置,用将配置编译成TulaFale脚本的工具扩展框架,由此向其规范给予了精确的可操作语义。“配置编译器”实现了从WS安全政策公式到基于WS安全的包封上的TulaFale谓词的转换。该工具也收集WSE实现的政策映射,并自动生成其TulaFale脚本。从那一点,可以为配置手写相对较短的安全属性,并使用TulaFale来验证它们。
系统100也可检测并报告政策配置中的常见错误(通常在TulaFale中是明显的),如未认证的路由信息。该工具和实际的web服务运行库采用同一政策配置作为输入。因此,该系统和方法可直接确定由配置数据政策文件的误配置引起的web服务易受攻击性。相反,在以前的工作中,协议验证器在安全政策的特别、手写、抽象描述上工作,而且手写描述和运行代码之间的差距会导致错误,并且核查和维护是冗长乏味的。鉴于上述内容,系统100的所描述的系统和方法验证了其应用中的密码协议,以反映这些协议的实际分布部署。
政策分析实现使用SOAP处理程序的主体以下描述首先提供了模型122的非形式综述,然后详述了用TulaFale-∏积分的变体-的示例性模型编码。本系统包括运行在由公用网络连接的机器上的SOAP处理程序。例如,见系统100,其中,可实现可信和非可信(由攻击者控制)的处理程序。处理程序发送和接收代表主体的SOAP包封。在一个实现中,主体提供了描述要发送哪些包封以及要对接收的包封采取什么行动的代码。为简明起见,主体由其(串)名字来标识,如同它们出现在认证令牌中那样X.509中的主题名以及UsernameToken(用户名令牌)中的用户名。主体是有关系的,因为它们控制了对其相关联的秘密的访问。这一分布式系统使用了一种抽象机制用于向处理程序分发秘密。
单个处理程序可主宿多个主体(例如,当它正在发送由若干个主体签署的包封时);此外,多个处理程序可主宿同一主体(如复制服务)。因此,使用由下列参数化的类属SOAP处理程序·用于发送和接收SOAP消息的两个声明性的配置,表示从SOAP端点到政策的局部映射。
·记录共享口令和X.509证书以及主宿主体私钥的本地数据库。
例如,如果由与SOAP包封的URI和行动相关联的接收政策表达的要求可以使用数据库中记录的某些秘密来满足,则可接受该SOAP包封。在一个实现中,∏积分为攻击者提供了一种丰富的界面该环境控制了主体的创建、其破坏以及证书和共享密钥的生成。
在以下描述中,区分出一组依从主体,比如,它们可访问的所有秘密仅由这些SOAP处理程序来使用。当然,SOAP处理不依赖于依从主体的知识;该知识仅用于指定示例性安全属性。一旦标识了依从主体,其在SOAP处理程序之间的分布变得形式上不相关。形式上地,示出任一这样的配置在观察上等效于具有主宿所有依从主体的单个处理程序的配置,即,具有合并所有局部映射和数据库的全局政策映射和数据库的配置。
对政策驱动SOAP系统建模示例性模型122脚本在附录中示出,作为库和主TulaFale程序;这些示例性脚本提供了示例性详细形式语义。接下来,将部分地作为示例解释这些脚本的重要部分。SOAP配置的顶层结构包括并行运行的四个重复的过程(UsernameGenerator()|X509Generator()|GenericSender()|GenericReceiver())用户名生成器(UsernameGenerator)用户名生成器采用了genUPChan(生成上行通道)通道上的主体名u(来自攻击者),并生成新的口令“pwdu”。口令和用户名形成了添加到秘密数据库的新条目,作为dbChan(数据库通道)上的重复输出。由此,该条目变得对共享dbChan的任一诚实处理程序可用。
process UsernameGenerator()=(!in genUPChan(u);new pwdu;let entry=<UserPassword><Username>u</><Password>pwdu</></>in(!out dbChan entry))|(!in genLeakUPChan(u);new pwdu;let entry=<UserPassword><Username>u</><Password>pwdu</></>in((begin LogP(u);out publishChan(pwdu))|(!out dbChan entry)))为了用有效口令对不可信主体建模,用类似的结构向用户名生成器添加另一重复过程。这一过程采用genLeakUPChan(生成泄漏上行通道)上的主体名u、生成新口令、将其泄漏给公用通道publishChan(公开通道)上的攻击者、并将用户名和口令插入到数据库中。在泄漏口令之前,该过程调用开始的LopP(u),指示主体u不再可信。这一事件对于系统中的所有过程都是不可见的;它纯粹用于指定证据目标。
类似地,X509Generator(X509生成器)(在附录E中定义)在依赖于控制秘密签署密钥sr的单个证书授权机构的公用通道genXChan(生成X通道)和genLeakXChan(生成泄漏X通道)上实现了两个服务器。
类属发送者(GenericSender)为示例性说明的目的,SOAP发送者和接收者分别由计算装置102和104来表示。SOAP发送者依赖于在谓词mkConformant(使一致)中编码的其发送政策配置,否则就是类属的。它采用来自通道initChan(初始通道)上的攻击者的包封、实施预期的目的地的发送政策配置、并生成在httpChan(http通道)上发送的新政策依从包封。
谓词mkConformant选取一种发送政策,并试图通过在输入包封上执行密码操作来为主体的某一集合实施该政策。该主体集及其相关联的秘密由列表标识表示。该列表通过从数据库中提取适当数量的身份来填充。另外,向谓词给予可用作最新密钥或不重性的最新名字的最新列表。
process GenericSender()=(!in initChan(env);in(dbChan,ident1);in(dbChan,ident2);let idents=[ident1 ident2]innew fresh1;new fresh2;let fresh=[fresh1 fresh2]infilter mkConformant(env,idents,fresh,outenv)->outenv inout httpChan(outenv))类属接收者(GenericReceiver)SOAP接收者采用来自通道httpChan上的攻击者的包封、实施预期目的地的接收政策配置、并生成该包封可接受的证据。谓词isConformant(是否一致)选取一接收政策,并通过执行密码操作为主体的某一集合核查该包封是否符合它。至于发送者,主体集及其相关联的秘密由列表标识来表示,表示数据库的子集。
process GenericReceiver()=(!in(httpChan,env);in(dbChan,ident1);in(dbChan,ident2);let idents=[ident1 ident2] infilter isConformant(env,idents,proof)->proof indone))
政策语义SOAP系统100的政策配置118被编码为两个谓词-mkConformant和isConformant。具体地,发送政策映射由mkConformant的子句表示,而接收政策映射由isConformant的子句表示。在本节中,指定了从给定的政策配置生成这些子句的工具。在第2节中以一个发送政策和一个接收政策提出了从客户机端配置clientConfig生成的样例子句。发送政策使用了使用基于口令的密钥的五个消息部分的数字签名。例如,该政策从链接描述126转换成以下谓词(在配置118中)predicate hasSendPolicyClientToService(envitem,identsitems,freshitems,outenvitem)-fresh=[NewMessageIdval n t@_],hasHeaderTo(env,Toitm,Toval),hasHeaderAction(env,Actionitm,Actionval),hasHeaderCreated(env,Createditm,Createdva1),hasBody(env,bitm,bval),MessageIditm=<MessageId>NewMessageIdval</>,getUsernameToken(utok,k,idents,n,t),mkSignature(sig,”hmacsha1”,k,[Toitm,Actionitm,MessageIditm,Createditm,bitm]),outenv=<Envelope>
<Header>
Toitm Acitm MessageIditm<Security>
<Timestamp>Createditm<Expires></></>
utoksig</></>
<Body>bitm</>
</>
谓词首先提取三个最新名字包封的消息id、不重性以及用于生成基于口令的密钥的时间标记。接下来四个hasXxx调用提取了曾经被签署的五个消息部分中的四个。谓词然后用新的消息id创建新的<MessageId>。谓词getUsernameToken(获取用户名令牌)从标识数据库中提取任意的用户名和口令,并使用最新的不重性和时间标记时生成新的用户名令牌utok和基于口令的密钥k。mkSignature(制作签名)谓词使用了密钥k来构造签署所有五个消息部分的XML签名sig。最后,谓词用所有的输入消息部分、新消息id以及新用户名令牌和签名构造了输出包封outenv。
hasSendPolicyClientToService(是否有客户机到服务的发送政策)实施了相应的配置118中描述的客户机发送政策。对应的发送政策映射被转换成mkConformant谓词的子句。这一子句首先将消息的目的地服务和行动与政策映射中的地址进行匹配,然后调用hasSendPolicyClientToService谓词。
predicate mkConformant(ervitem,identsitems,freshitems,outenvitem)-hasHeaderTo(env,Toitm,Toval),hasHeaderAction(env,Actionitm,Actionval),Toval=“http//bobspetshop.com/service.asmx”,Actionval=“http//petshop/regular”,hasSendPolicyClientToService(env,idents,fresh,outenv).
clientConfig 118中的第二个政策是核查响应消息中的五个消息部分是否用签发给主体BobsPetShop的X509证书来签署的接收政策。
predicate hasReceivePolicyServiceToClient(envitem,identsitems,proofitems)-hasHeaderFrom(env,Fromitm,Fromval),hasHeaderRelatesTo(env,RelatesToitm,RelatesToval),hasHeaderMessageId(env,MessageIditm,MessageIdval),hasHeaderCreated(env,Createditm,Createdval),hasBody(env,bitm,bval).
hasSecurityHeader(env,toks),xtok in toks,checkX509Token(xtok,”BobsPetShop”,xk,idents),sig in toks,isSignature(sig,”rsashal”,xk,[Fromitm,RelatesToitm,MessageIditm,Createditm,bitm]),proof=[<Integrity>
<Token>xtok</>
<Parts>Fromval RelatesToval MessageIdval Createdvalbval</></>]对应的接收政策映射被转换成仅调用hasRecvPolicyServerToClient(是否有服务器到客户机的接收政策)的isConformant谓词的子句。
predicate isConformant(envitem,identsitems,proofitems)-hasRecvPolicyServerToClient(env,idents,proof).
附录C提出了一个示例性的一般情况,详细描述了用于将政策配置转换成谓词的示例性规则。这由图1的分析器模块114执行。
生成政策配置和安全目标链接规范的抽象句法链接定义了用于web服务及其客户机之间的SOAP会话的高级安全目标。链接描述126包括一组链接(用于感兴趣的所有web服务)。web服务由其服务URI-suri标识,并且它提供了由其SOAP行动URI-action标识的一组web方法。
为示例性说明的目的,在客户机和web服务之间定义的SOAP会话之间有三种不同的情况在本节的大部分所考虑的第一种情况下,会话包括一条消息。每一链接指定了两个会话,一个用于从客户机到服务的请求,另一个用于从服务到客户机的响应。链接指定了每一方向上的消息被签署并被可任选地加密,并且签名必需共同认证web服务、消息正文和唯一消息标识符。对于这一情况,链接规范对每一服务定义了最多一个链接(suri)。具体地,这意味着服务的所有行动具有同一安全目标。如果两个web服务使用了不同的安全保证,则它们被实现为单独的web服务。这一假设对于其它类型的会话是放松的。
在第二种情况下,会话包括请求-响应交换。在这一情况下,链接额外地指定了响应与请求正确地相关。在第三种情况下,会话是客户机和服务器之间的安全多消息对话,如由ws安全对话规范(WS-SecureConversation)所定义的那种会话。
链接的示例性句法如下;它使用了构造函数List来引用ML风格的列表(括号内包含的用逗号分隔的元素的序列)。
链接secrSecr∷=安全级别Clear 明文消息正文Encrypted 加密的消息正文psPrincipalSet∷= 主体集Any 所有可信的主体集psetList(string) 可信主体的有穷列表linkLink∷= 链接
(suriURI 服务器URIactionsList(URI),行动列表clientPrinPrincipalSet, 客户机主体servicePrinPrincipalSet,服务器主体secrLevelSecr)安全级别在这一实现中,链接描述126中所描述的每一链接(安全链接)包括web服务URI suri、允许的行动集actions、可担当客户机(clientPrin)或web服务(servicePrin)的主体名、以及两个方向上的消息的安全级别。可以回想,主体名是用户-口令组合中的用户名,或者X.509证书中的主题名。作为一种特殊的情况,将客户机(或服务)主体的空列表解释为允许任何主体担当链接的客户机(或服务器)。安全级别可以是Clear,意味着没有加密,或者Encrypted,意味着请求和响应都加密了正文。对于加密,客户机和服务器主体都必须使用X.509证书。
作为一个示例,考虑以下链接SimpleLink=(“http//bobspetshop.com/service.asmx”,[“http//petshop/premium”],Any,[“BobsPetShop”],Clear)该链接规定了http//bobspetshop.com/service.asmx处的web服务提供了两个行动http//petshop/premium和http//petshop/regular、其客户机可代表任一可信主体运作、以及服务仅代表BobsPetShop运作。两个方向上的消息都被认证,但是没有加密。在下一节中,将这一链接的经加密的版本称为EncLink。
从链接规范生成政策配置现在描述模块124的Generator函数,以将链接描述126中的链接列表转换成包括政策映射列表的配置118。从上文给出的示例的转换开始首先,为web服务和客户机的每一行动定义地址(以addr表示法)addrPremium=ToAction(“http//bobspetshop.com/service.asmx”,“http//petshop/premium”)addrClient=Default
对于请求消息(130或132),政策使用了由某一可信主体签署的消息的数字签名。该签名保证了消息的完整性和真实性。这一requestPolicy(请求政策)如下requestPolicy=OneOrMore[Integrity(Username,[Header(“To”),Header(“Action”),Header(“MessageId”),Header(“Created”),Body]),Integrity(X509,[Header(“To”),Header(“Action”),Header(“MessageId”),Header(“Created”),Body])]消息内容(Body)、目的地(To、Action)和标识符(MessagId、Created)由包括在消息中的数字签名覆盖,并且基于服务信任的某一主体的口令或X509证书。
对于响应消息(130或132),responsePolicy(响应政策)使用了基于签发给BobsPetShop的X509证书的数字签名responsePolicy=Integrity(X509(“BobsPetShop”),[Header(“From”),Header(“RelatesTo”),Header(“MessageId”),Header(“Created”),Body])响应消息包括其RelatesTo(涉及到)头部中以前的请求的消息标识符。响应的目的地隐含地为向其发送这一请求消息的客户机。该政策指定了由数字签名覆盖的服务URI(From)和请求id(RelatesTo),以及响应标识符(MessageId、Created)和响应内容(Body)。
服务处的政策配置118包括用于请求的接收政策和用于响应的发送政策serverConfig=[Receive(addrPremium,requestPolicy),Send(addrClient,responsePolicy)]一般而言,服务配置118对每一(行动,客户机主体,服务器主体)元组包括一个接收政策,并对每一(客户机主体,服务器主体)对包括一个发送配置。相反,在客户机处,政策配置118包括用于请求的发送政策和用于响应的接收政策clientConfig=[Send(addrPremium,requestPolicy),Receive(addrClient,responsePolicy)]SimpleConfig=serverConfig @ clientConfig附录D示出了生成政策配置的示例性规则。
嵌入安全目标链接描述126的链接为代表客户机主体之一运作的客户机和代表服务器主体之一运作的web服务之间的会话指定了安全目标。真实性目标是服务主体仅接受由客户机主体发送的请求消息,并且客户机主体仅接受由服务主体发送的响应消息(对于未完成的请求)。另外,如果链接使用了秘密,则消息的正文对未参与链接的任一主体保密。在本节中,形式化这些安全目标,并示出它们如何嵌入在TulaFale脚本中。
Asserts(断言)函数采用链接规范126,并生成支配真实性和秘密断言的hasLinkAssert(具有链接断言)和mkLinkEnvelope(制作链接包封)谓词的子句。这由图1的分析器模块114执行。
诚实的SOAP处理程序发送或接受的包封是同一链接L上的请求或回复。对于每一这样的包封,hasLinkAssert基于消息的方向和包封内容计算完整性断言(“ass”)。每次当诚实SOAP处理程序发送出消息env时,它首先调用事件开始Log(ass)。相反,每次当它接受env时,它然后调用结束Log(ass)。真实性目标是每一结束Log(ass)在每一匹配的开始Log(ass)之后。
对于上文定义的示例SimpleLink(简单链接),生成的子句例如predicate hasLinkAssert(envitem,assitems)-hasHeaderTo(env,Toitm,Toval),hasHeaderAction(env,Actionitm,Actionval),Toval=“http//bobspetshop.com/service.asmx”,Actionval=“http//premium”,hasHeaderMessageId(env,MessageIditm,MessageIdval),hasHeaderCreated(env,Createditm,Createdval),hasBody(env,bitm,bval),ass=[“*”“BobsPetshop”Toval Actionval MessageIdval Createdval bval]
谓词的前两行通过核查包封的目的地服务和行动,核查包封是否属于SimpleLink。然后,它提取感兴趣的三个其它字段正文、消息id和创建时间标记。最后,它返回包括与希望保护的五个消息部分串接的客户机和服务器主体名的断言。由于链接仅涉及服务主体,因此客户机主体由表示任意主体的“*”替代。
对于响应消息,计算的断言相当类似,除了目的地服务(To)和行动字段由源服务(From)和RelatesTo(涉及到)字段替代之外。
predicate hasLinkAssert(envitem,assitems)-hasHeaderFrom(env,Fromitm,Fromval),Fromval=“http://bobspetshop.com/service.asmx”,hasHeaderMessageId(env,MessageIditm,MessageIdval),hasHeaderRelatesTo(env,RelatesToitm,RelatesToval),hasHeaderCreated(env,Createditm,Createdval),hasBody(env,bitm,bval),ass=[“BobsPetshop”“*”Fromval RelatesTovalMessageIdval Createdval bval]这里,链接通过将From字段与链接服务URI进行匹配来标识。如以前那样,消息部分然后被提取并与主体名(如果已知的话)串接。
类属SOAP发送者采用来自攻击者的包封,并在添加了某些安全头部和加密的块之后将其发送出去。如果链接使用了秘密,则保护包封的正文免于攻击者。为对此建模,只要要求SOAP发送者在加密的链接上发送包封,它就使用mkLinkEnvelope谓词来用秘密正文B替代消息正文。秘密断言则是即使攻击者观察到不同链接上的若干消息,他也永远不能知道B。
private name B.
secret B.
对于示例的经加密的链接EncLink,请求消息的mkLinkEnvelope子句给出如下;响应消息是相似的predicate mkLinkEnvelope(envitem,secretBodyitem,outenvitem)-hasHeaderTo(env,Toitm,Toval),hasHeaderAction(env,Actionitm,Actionval),Toval=“http//bobspetshop.com/service.asmx”,
Actionval=“http//premium”,replaceBody(env,secretBody,outenv).
这一子句核查包封是否属于EncLink,然后用秘密正文(B)替换正文。数据B表示系统中希望保密的所有数据。因此,它仅可在加密的链接上发送。相反,非秘密数据可以在任一链接上发送;由仅保持包封未改变的mkLinkEnvelope子句建模。
附录D示出了链接到安全目标的示例性映射。
分析由链接规范和配置定义的脚本定义了如何构造TulaFale脚本来核查特定的政策配置是否达到了由链接描述/规范126定义的安全目标。给定链接L,生成器124生成谓词hasLinkAssert和mkLinkEnvelope的子句。给定配置C,生成器124生成谓词mkConformant和isConformant的子句。这四个谓词被嵌入到SOAP处理程序的TulaFale模型中发送者可使用利用mkLinkEnvelope的秘密正文,然后使用hasLinkAssert计算完整性断言、调用开始Log(ass)、使用mkConformant计算政策依从传出包封、并在网络上发送消息。相反,接收者使用isConformant核查政策依从性的传入包封,然后在调用结束Log(ass)之前使用hasLinkAssert计算完整性断言。
为验证政策配置满足链接安全规范,核查器116核查运行TulaFale的真实性和秘密目标。在此实现中,通用定义包括例如定义4.1如果当接收者过程调用结束Log([u]@ass)时,有先前已调用了开始Log([u]@ass)的某一发送者过程,或者某一令牌生成器过程先前已调用了开始LogP(u),TulaFale过程就被认为是对Log Logp是健壮安全的。
如果当攻击者知道B时,存在主体u,使得某一令牌生成器过程先前调用了开始LogP(u)并且某一发送者过程先前调用了开始LogS(u,B),则TulaFale过程被认为是对Logp、LogS保存了秘密B。
如果存在过程的执行,使得结束Log(ass)最终被调用,则TulaFale过程被认为对Log(ass)在功能上是适当的。
考虑从链接规范SimpleLink(简单链接)生成的政策配置SimpleConfig(简单配置)。以下定理规定了该配置保持了由链接指定的真实性目标定理4.1(对SimpleLink、SimpleConfig的健壮安全性)从SimpleLink和SimpleConfig生成的TulaFale脚本对Log、LogP是健壮安全的。
类似地,以下定理规定了从EncLink(加密链接)生成的政策配置EncConfig(加密配置)保持了EncLink的秘密目标定理4.2(对EncLink、EncConfig的真实性)从EncLink和EncConfig生成的TulaFale脚本对LogP、LogS保持了B的秘密。
由于EncLink是比SimpleLink严格地更强健的规范,也可为从EncLink和EncConfig生成的脚本建立健壮的安全性。在下一节中,提出能够在不再次运行这一分析的情况下导出该属性的通用定理。
所生成的两个脚本可以被示出为对某些断言在功能上是适当的。以下定理规定了从SimpleLink和SimpleConfig生成的脚本的这个属性。
定理4.3(对SimpleLink、SimpleConfig的功能适当性)存在断言ass,使得从SimpleLink和SimpleConfig生成的TulaFale过程对Log(ass)在功能上是适当的。
政策的逻辑理论在前一节中,提出了示出系统100如何对照链接规范126验证固定的政策配置118的正确性的示例。然而,此处参考图1-6所描述的系统和方法更一般,并可用于规定和证明关于例如下文描述的政策配置和链接规范的一般类别的定理。
政策的逻辑语义结合使用逻辑与和逻辑或,可将安全政策作为逻辑公式来处理,并将完整性和机密性断言作为原子命题来处理。这导致细化(refinement)的自然表示法如果任一消息指定一个政策就满足另一个,则一个政策细化另一个。
对TulaFale的依从提供了一种逻辑模型可核查基本公理是有效的,并可被推动通过过程配置(例如,将服务器的并行组成部分与政策的逻辑与进行比较);也可展示在模型中有效的额外法则,例如,没有用户名令牌签名的认证以及共享最新名字的多个签名的传递性。即使逻辑是WS政策,这类逻辑属性也是有用的。
具体地,如果政策细化转换成安全属性的保存,则为核查政策满足安全性目标,示出它(逻辑上在模型中)细化了已经使用TF核查的政策是足够的。
引理1(根据[1]改写)对于被表达为TulaFale脚本的某些类别的协议,顶层谓词的逻辑含意保持健壮的安全性。
引理2如果政策P1细化P2,则从P1生成的发送(接收)谓词蕴含了从P2生成的发送(接收)谓词。
逻辑细化可被扩展到政策配置如果配置C1是逐点细化配置C2的配置C1′的子集,则配置C1细化C2。
定理5.1给定链接L和政策配置C,如果从L和C生成的TulaFale脚本是健壮安全的,则从L和C′生成的脚本也是健壮安全的,其中C′细化了C。
使用手动和自动化证据的组合来建立主要结果。
链接生成的政策直接从链接规范生成的政策配置总是安全的。这由以下定理形式化。
定理5.2(真实性)对于所有的链接L,设C是从L生成的政策配置,则从L和C生成的TulaFale脚本对于Log是健壮安全的(对内部人员)。
定理5.3(秘密性)对于所有的链接L,设C是从L生成的政策配置,则从L和C生成的TulaFale脚本保持了B的秘密性(对内部人员)。
定理5.4(功能适当性)对于所有的链接L,设C是从L生成的政策配置,则从L和C生成的TulaFale脚本在功能上是适当的。
链接和发送政策配置的细化定理规定了加强发送政策保持了政策配置的健壮安全性。在某些情况下,强健的发送政策甚至可以补偿薄弱的服务器政策。
另一方面,如果服务器政策足够强健,以使能够确认链接规范,则发送政策对真实性是非实质的。
定理5.5(真实性)对于任一链接L,设C是从L生成的政策配置,并设R包含C中所有的接收政策映射。则对于发送政策映射的任一集合S,从L和S@R生成的TulaFale脚本是健壮安全的。
相反,秘密性仅依赖于发送政策定理5.6(秘密性)对于任一链接L,设C是从L生成的政策配置,并设S包含C中所有的接收政策映射。则对于接收政策映射的任一集合R,从L和S@R生成的TulaFale脚本保持了秘密性。
用于生成web服务的安全政策的示例性过程图4示出了用于核查web服务配置的安全性的示例性过程400。为讨论的目的,过程的操作参考图1的组件来讨论。(所有的标号以其中该组件首次引入的附图的号码开始)。在块402,描述客户机-服务器操作环境中联网的端点之间的安全链接。该安全链接以高级链接语言126(图1)来描述。该安全链接指示了在一个或多个会话期间在机器之间的消息交换的安全目标;会话在代表客户机主体运作的客户机和代表服务主体运作的web服务之间。安全目标可包括对消息被签署、加密或具有相关联的签名和组合认证了响应的客户机和/或web服务主体的指示。安全目标的真实性目标可指示服务主体仅接受由客户机主体发送的请求消息、指示客户机主体仅接受来自服务主体的响应消息、或指示任一消息要对不参与该链接的客户机或服务主体保密。
在一个实现中,安全链接的链接指示了web服务的URI、一组允许的行动、可担当客户机或web服务的一组主体名、或一个或多个会话中机器之间的消息交换的安全级别。会话包括请求和响应交换。会话可以是客户机和服务器之间的安全多消息对话。
块402的操作可包括消耗抽象的固定算法句法用于安全政策配置,包括具有接收政策的服务配置和发送配置。接收政策对应于行动、客户机主体或服务器主体。发送配置对应于每一客户机主体和服务器主体对。块402的操作也可包括消耗抽象的固定算法句法,用于安全政策配置,其中,对于web服务的客户机设备,配置包括发送请求政策和接收响应政策。
在块404,生成模块124从链接语言126自动生成配置数据118。配置数据包括与运行库112使用的安全协议相关联的声明性安全政策。配置数据还可包括服务器支持的行动中的服务以及客户机和服务器之间的信任关系的指示。关于配置数据的其它方面在下文参考图5描述的用于核查分布式系统的安全目标的示例性过程中有描述。
用于核查分布式系统的安全性目标的示例性过程图5示出了用于核查web服务配置的安全性的示例性过程500。为讨论的目的,参考图1的组件讨论过程500的操作。(所有的标号以其中该组件首次出现的附图的号码开始。)在块502,分析器模块114(图1)将配置数据118中的信息转换成模型122。配置数据包括与运行库112实现的安全协议相关联的声明性安全政策。在一个实现中,声明性安全政策包括基本断言上的逻辑公式。模型122包括表达在分布式计算系统100(图1)中的计算装置之间传递的消息的过滤和处理的谓词。
在一个实现中,配置数据118通过上文参考图4描述的示例性过程生成。
在块504,核查器模块116评估模型122,以确定运行库112的声明性安全政策是否实施了系统100的安全目标。这一评估操作包括自动确定声明性安全政策是否易受重写攻击。在块506,核查器模块116鉴于模型的评估确定分布式系统100是否易受安全攻击。
在一个实现中,配置数据118对应于与第一和第二计算机程序应用相关联的安全设置。在此实现中,块502到506的操作作为系统100对安全攻击的易受攻击性的静态分析或运行时分析的一部分而执行。
示例性操作环境生成web服务的安全政策并核查web服务配置的安全性的自动核查系统和方法在由个人计算机执行的计算机可执行指令(程序模块)的一般上下文中描述。程序模块一般包括例程、程序、对象、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类型。尽管在上述上下文中描述了系统和方法,然而后文描述的动作和操作也可以用硬件来实现。
图6示出了一个合适的计算环境的示例,其中,例如参考图1-6示出并描述的用于自动生成web服务的安全政策并核查web服务配置的安全性的系统和方法可被完全或部分地实现。示例性计算环境600仅为合适的计算环境的一个示例,并非暗示对此处描述的系统和方法的使用范围或功能的局限。也不应将计算环境600解释为对计算环境600中示出的任一组件或其组合具有任何依赖或需求。
此处描述的方法和系统可以使用众多其它通用或专用计算系统环境或配置来操作。适合使用的众所周知的计算系统、环境和/或配置包括但不限于个人计算机、服务器计算机、多处理器系统、基于微处理器的系统、网络PC、小型机、大型机、包括任一上述系统或设备的分布式计算环境等等。该框架的压缩或子集版本也可在有限资源的客户机中实现,如手持式计算机或其它计算设备。本发明在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
参考图6,用于核查web服务配置的安全性的示例性系统包括计算机610形式的通用计算装置。以下描述的计算机610的各方面是图1的计算装置102和/或104的示例性实现。计算机610的组件可包括但不限于,处理单元620、系统存储器630以及将包括系统存储器的各类系统组件耦合至处理单元620的系统总线621。系统总线621可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件互连(PCI)总线,也称为Mezzanine总线。
计算机610通常包括各种计算机可读介质。计算机可读介质可以是可由计算机610访问的任一可用介质,包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非局限,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机610访问的任一其它介质。
通信介质通常在诸如载波或其它传输机制的已调制数据信号中包含计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。上述任一的组合也应当包括在计算机可读介质的范围之内。
系统存储器630包括以易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)631和随机存取存储器(RAM)632。基本输入/输出系统633(BIOS)包括如在启动时帮助在计算机610内的元件之间传输信息的基本例程,通常储存在ROM631中。RAM632通常包含处理单元620立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图6示出了操作系统634、应用程序635、其它程序模块636和程序数据637。在一个实现中,应用程序635包括,例如图1的程序模块108以及诸如发送和接收代表主体的SOAP包封的“处理程序”(应用程序)等其它计算机程序模块。程序数据638包括,例如图1的程序数据110。
计算机610也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作示例,图6示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器641、对可移动、非易失性磁盘652进行读写的磁盘驱动器651以及对可移动、非易失性光盘656,如CD ROM或其它光介质进行读写的光盘驱动器655。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器641通常通过不可移动存储器接口,如接口640连接到系统总线121,磁盘驱动器651和光盘驱动器655通常通过可移动存储器接口,如接口650连接到系统总线621。
上文讨论并在图6示出的驱动器及其关联的计算机存储介质为计算机610提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图6中,示出硬盘驱动器641储存操作系统644、应用程序645、其它程序模块646和程序数据647。注意,这些组件可以与操作系统634、应用程序635、其它程序模块636和程序数据637相同,也可以与它们不同。这里对操作系统644、应用程序645、其它程序模块646和程序数据647给予不同的标号来说明至少它们是不同的副本。
用户可以通过输入设备,如键盘662和定点设备661(通常指鼠标、跟踪球或触摸板)向计算机610输入命令和信息。其它输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线621的用户输入接口660连接至处理单元620,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。
监视器691或其它类型的显示设备也通过接口,如视频接口690连接至系统总线621。除监视器之外,计算机也可包括其它外围输出设备,如扬声器697和打印机696,它们通过输出外围接口695连接。
计算机610可以在使用到一个或多个远程计算机,如远程计算机680的逻辑连接的网络化环境中操作。远程计算机680可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公用网络节点,并按照其特定实现的功能可包括许多或所有相对于计算机610所描述的元件,尽管在图6中仅示出了存储器存储设备681。图6描述的逻辑连接包括局域网(LAN)681和广域网(WAN)683,但也可以包括其它网络。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机610通过网络接口或适配器680连接至LAN 681。当在WAN网络环境中使用时,计算机610一般包括调制解调器682或用于通过WAN 683,如因特网建立通信的其它装置。调制解调器682可以是内置或外置的,通过用户输入接口660或其它适当的机制连接至系统总线621。在网络化环境中,相对于计算机610所描述的程序模块或其部分可储存在远程存储器存储设备中。作为示例而非局限,图6示出了远程应用程序685驻留在存储器设备681中。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它装置。
示例性开发工具集成鉴于上述内容,图1-6的系统和方法提供了安全/可信的计算。例如,这类计算可包括以下系统100分析操作·静态单元素分析-给定单个项目及其相关联的支持数据,确定是否能满足期望的安全目标,并标识失败或其它推荐。这确定了服务上的明显攻击。
·静态组分析—给定两个(或多个)项目及其相关联的支持数据,确定是否能满足期望的安全目标,并标识失败或其它推荐。这确定了进一步的攻击,诸如使用一个项目来损害另一个项目的间接攻击。
·动态分析-当务要连接到另一服务时,实时获取服务的支持数据(可能从高速缓存中,或使用辅助协议来获取)并作出关于通信是否满足已有的目标的安全性评估。如果不是,则可抛出异常或可阻断调用。该分析可在不同的地方发生,两个实施例包括CLR运行库和通信基础结构。
这些示例和支持数据可以变化。支持数据包括,例如代码注释、代码分析结果、安全数据、配置信息、政策信息、已知服务分析的库、已知攻击和攻击模式的库等等。数据越多,评估越准确(这是通用的规则),但是系统100可被配置成在给定可用数据时作出最佳的评估,或基于缺乏数据而降低其评估。同样,仅可用数据的某些部分可以是可信的。在这些情况下,用可用/有限的数据作出安全评估。
替换实现-示例性政策建议器由给定的配置118实施的安全保证可以是难以理解的。例如,WSE配置和政策文件很大程度上确定了这些保证,但是难以恢复正常。手写WSE政策样例的内部安全性审阅展示了各种微小的错误。为解决这一问题,系统100提供了一政策建议器,它提供了政策集合提供的肯定安全保证的注释,以及潜在安全易受攻击性的建议。在一个实现中,政策建议器是核查器模块116的相应部分。在另一实现中,政策建议器被示出为“其它程序模块”120。
政策建议器生成了肯定报告,包括例如,在每一端点上导出哪些行动的清单、哪些方法和政策被绑定到每一行动、以及按照哪些元素被认证和加密的政策概要。肯定语句指示,例如,它们是否对照特定的威胁模型在特定的情况下应用等等。(请参阅“示例性肯定报告”一节中的第一段,以获得关于肯定报告的更多信息)。政策建议器也生成否定报告,它包括,例如,签署或核查某些头部的失败、相关消息的失败、常见排印错误等的指示,以及如何纠正这些易受攻击性的某一建议。潜在易受攻击性的报告可包括建议的补救;因此,建议器可以是针对web应用程序的现有渗透工具的SOAP的任一扩展的防御。为说明的目的,肯定和否定报告被示出为“其它数据”127的相应部分。
政策建议器在配置118、政策文件的模型122或表示政策文件的某一其它对象上静态地运行。为说明的目的,这一其它对象由“其它数据”127的相应部分表示。在这一执行期间,政策建议器可咨询其它数据127,如本地证书存储和任何可用的消息日志。
在一个实现中,政策建议器由WSE安装的开发者、测试者或操作者使用。例如,政策建议器可以在设计过程的早期使用,作为当设计者用不同的WSE设置做实验时提供直接反馈的一种方法;作为在开发过程中调试过程的一部分;和/或作为例如在部署生产中的修正配置之前的安全性评估和审阅的一部分。在一个实现中,政策建议器展示了一个或多个应用编程接口(API),以自动(并可能远程地)运行核查,并当例如检测到新问题时触发警告。在一个实现中,政策建议器与图形分布式系统设计器集成。
示例性政策建议器体系结构图7示出了政策建议器的示例性体系结构。为说明的目的,图7的组件参考图1的组件来描述。在附图中,组件标号的最左边的数字标识了其中该组件首次出现的特定附图。例如,块702表示政策建议器,它映射到程序模块120。命令行客户机704和ASP.NET web服务706表示由政策建议器分析的配置数据118。政策建议器是可在分布式系统100的服务器102和客户机106组件上执行的组件,以应用于相应的服务器和客户机组件。
参考图7,政策建议器由对照它构建来反映它可以对WSE安装确定什么的内部数据结构(由块704的操作以及图1的“其它数据”127的相应部分表示)运行的查询708的库来参数化。每一查询可产生肯定或否定报告/关于政策的建议,它可以被优先化,并与有关的端点、行动和web方法相关。一般而言,输入是以下用项目符号表示的列表中的类型,与使用WSE实现的一个或多个SOAP节点相关联。某些输入可以从web服务器目录树或从交互式开发环境(IDE)的项目文件中收集。大多数输入(其某一些在以下列表中示出)是可任选的-政策建议器根据可用输入提供了尽可能精确的报告。最基本的模式是分析配置118或模型122的单个PolicyCache(政策高速缓存)文件(请参阅下文的项目符号三(3))。
·用于每一web服务的web.config文件;·用于每一命令行或窗口应用程序的app.config文件;·包含政策的PolicyCache文件;·用于web服务的asmx和DLL文件,从这些文件中可确定对应于web服务上每一行动的源代码;·用于web服务客户机的exe文件,从这些文件中确定对客户机已知的节点;·包含传入和传出的SOAP消息的踪迹的文件(通常为.webinfo);·本地安装的X.509证书,从这些证书中可确定可用于核查的主题名等等;和/或·由安全设置工具收集并用于生成政策的参数。
示例性查询查询被分组成图7的框708所示的六个类别,从简单句法核查到更复杂的确认。在一个实现中,如果这些查询的任一个生成“假肯定”,其中实际上没有东西是错的;系统100在核查它们之后向用户提供简单的UI,以抑制假肯定。这六个类别是·对方案和范围的查询(表1);·对每一节点配置的查询(表2);·对政策分派的查询(表3);·对每一政策的查询(表4和5);·对政策兼容性的查询;以及·自定义查询。
表1示出了对政策建议器使用的方案核查和标识符范围的示例性查询。
表1-示例性方案核查和标识符范围的查询

表2-应用程序或web配置设置的示例性查询


表3-对政策分派的示例性查询

表4-对个别政策的示例性查询

参考表4的查询(对个别政策的查询),系统100将每一(请求,相应,错误)三元组的消息模式分类如下·如果其requestAction(请求行动)是“RST/SCT”,它应用于RST/RSTR握手·否则,如果响应为空,则它应用于一次性消息·否则,它应用于RPC握手对于每一(请求,响应,错误)三元组,政策建议器报告其分类,以及与以下建议中的任一偏差。在一次性消息的情况下,政策建议器应用“请求”列。在其它情况下,政策建议器应用“请求”和“响应/错误”列。以下行H和列P中的X意味着头部H应当包括在元素P内一如果没有错误。另一方面,如果满足所有的X,则应当用消息模式上的相关来实现协定-至少在缺少内部人员攻击的情况下。
表5-对个别政策的其它示例性查询



对于政策兼容性的查询,系统100·为任意两个连接的断电计算政策的交集,并规定其交集的属性;·警告不兼容的客户机和服务政策;和/或·警告修改的政策,并核查它们是否继续提供在政策生成期间收集的安全意图。
对于自定义查询,系统100允许·一组织定义自定义查询,以要求包括某些头部,或反对某些算法;和/或·私有工具的执行,以检测日志文件例如<Password>等中的个人可标识信息(PII)。在此实现中,政策建议器警告安全头部内的私有问题,诸如将身份揭示为用户名或证书主题。
示例性肯定报告除报告潜在错误的查询之外,政策建议器总结配置数据118,以产生肯定报告,来帮助人类用户理解其含意并认出可能是错误的不规则性。在一个实现中,例如,政策建议器执行以下的一个或多个·显示政策文件加上已分配政策(不论是明确分配还是默认分配的)中已知的端点和行动。另外,政策建议器显示消息踪迹已经历了什么。
·加亮踪迹中消息的经签署和经加密的部分。
·对每一端点和行动,在接受了每一消息之后,提供发送者和接收者之间保留的任何协定的肯定状态。协定可从若干机制中得出,例如о在接受请求之后,在请求的经签署内容上(即,经签署的元素和签署者的身份)可以有协定;о在接受了对请求的响应之后,在响应的经签署内容上,并且如果适当地相关,在请求的经签署内容上可以有协定;о给定由RST/RTSR握手建立的安全环境,在发送和接收的消息的经签署内容上,并且也在该安全环境上(可包括发送者和接收者的身份)可以有协定。
·报告在消息踪迹中出现的任何非标准头部,以及它们是否被签署或加密的指示。
·报告消息踪迹或政策文件中所有的“身份”,例如主题名、关键字标识符、用户名。
示例性政策建议器输出表6示出了当运行在用要求签署和加密传入消息132的简单政策配置的服务器102上运行时政策建议器的示例性输出。
表6-对个别政策的其它示例性查询对机器MSRC-XXX的本地配置的报告,导出以下web方法(...)·服务http//server/MyApp/MyAppService.asmx使用了自定义令牌管理程序UsernameSignPolicyService.CustomUsernameTokenManager?该类具有对口令确认的完全控制·默认“空”政策应用于涉及发送到http//server/MyApp/MyAppService.asmx的消息以及行动http//contoso.com/MyRequest的回复和错误消息-这些消息既未被签署也未被加密-任何人可伪造这些消息·serverPolicyCache.xml的第13行处的用户名令牌签署的x509加密(username-token-signed-x509-encripted)政策应用于发送到http//server/MyApp/MyAppService.asmx、具有行动http//contoso.com/MyRequest的请求消息,并调用MyAppService.asmx.cs的第82行处的web方法MyRequest+包含web方法自变量的正文被签署+包含web方法自变量的正文被加密-重要的头部(<To>、<Action>)是可任选的,并且仅当它们存在时被签署-用户名令牌未被加密,并且可向偷听者展示个人标识符-见样例消息+<Created>时间标记被签署-请求可以是已在过去五分钟内处理的请求的回复-见对于如何使用签署的<Created>和<MessageId>元素来防止重放的WSE样例-请求被加密,但是响应未被加密响应正文可展示来自请求的机密数据-响应不能与请求相关,因为响应未被签署总结尽管以对结构特征和/或方法操作或行动专用的语言描述了核查web服务配置的安全性的系统和方法,然而可以理解,所附权利要求书中定义的实现不必要限于所描述的具体特征或行动。例如,在一个实现中,模型122被描述为模型(例如,使用TulaFale脚本)。因此,揭示了具体特征和行动作为实现要求保护的本发明的示例性形式。
参考资料[1]K.Bhargavan、C.Fournet和A.D.Gordon的“A semantics for Web servicesauthentication”。第31届编程语言原理ACM研讨会(ACM Symposium on Principlesof Programming Languages)(POPL’04),第198-209页,2004年。扩展版本为微软研究技术报告MSR-TR-2003-83。
K.Bhargavan、C.Fournet、A.D.Gordon和R.Pucella的“TulafaleA security tool forWeb wervices”。已被提交用于公开。可从http/securing.ws获得,2004年3月。
B.Blanchet的“An effcient cryptographic protocol verifier based on Prolog rules”。第14届IEEE计算机安全基础研究组(IEEE Computer Security FoundationsWorkshop)会议论文集,第82-96页,IEEE计算机协会出版社,2001年。
B.Blanchet的“From secrecy to authenticity in security protocols”。第3届国际静态分析研讨会(International Static Analysis Symposium)(SAS’02)会议论文集,计算机科学的演讲笔记(Lecture Notes in Computer Science)卷2477,第342-359页,Springer-Verlag,2002。
D.Box、F.Curbera、M.Hondo、C.Kaler、D.Langworthy、A.Nadalin、N.Nagaratnam、M.Nottingham、C.von Riegen和J.Shewchuk的“Web services policy framework(WS-Policy)”,2003年5月。
D.Box、M.Hondo、C.Kaler、H.Maruyama、A.Nadalin、N.Nagaratnam、P.Patrick、C.von Riegen和J.Shewchuk的“Web services policy assertionslanguage(WS-PolicyAssertions)”,2003年5月。
G.Della-Libera、P.Hallam-Baker、H.Hondo、T.Janczuk、C.Kaler、H.Maruyama、N.Nagaratnam、A.Nash、R.Philpott、H.Prafullchandra、J.Shewchuk、E.Waingold和R.Zolfonoon的“Web services security policy language(WS-SecurityPolicy)”,2002年12月。
附录A示例性库脚本1 //项构造函数2 constructor concat(bytes,bytes)bytes.
3 constructor c14n(item)bytes.
4 constructor utf8(string)bytes.
5 constructor shal(bytes)bytes.
6 constructor pshal(string,bytes)bytes.
7 constructor hmacshal(bytes,bytes)bytes.
8 constructor pk(bytes)bytes.
9 constructor rsashal(bytes,bytes)bytes.
10 constructor x509(bytes,string,string,bytes)bytes.
11 constructor base64(bytes)string.
12 constructor principal(string)string.
13 constructor rsa(bytes,bytes)bytes.
14 constructor aes(bytes,bytes)bytes.
1516 //项构造函数,具有重写规则17 destructor fst(string)string with fst(concat(a,b))=a.
18 destructor snd(string)string with snd(concat(a,b))=b.
19 destructor ibase64(string)bytes with ibase64(base64(x))=x.
20 destructor x509key(bytes)bytes with x509key(x509(s,u,a,k))=k.
21 destructor checkx509(bytes,bytes)bytes with checkx509(x509(s,u,a,k),pk(s))=pk(s)22 .
23 destructor checkrsashal(bytes,bytes,bytes)bytes with checkrsashal(pk(k),x,rsashal24 (k,x))=pk(k).
25 destructor iutf8(bytes)string with iutf8(utf8(x))=x.
26 destructor x509user(bytes)string with x509user(x509(s,u,a,k))=u.
27 destructor x509alg(bytes)string with x509alg(x509(s,u,a,k))=a.
28 destructor ic14n(bytes)item with ic14n(c14n(x))=x.
29 destructor decrsa(bytes,bytes)bytes with decrsa(k,rsa(pk(k),b))=b.
30 destructor decaes(bytes,bytes)bytes with decaes(k,aes(k,b))=b.
3132 predicate hasBody(envitem,bitmitem,bitem)-33 env=<Envelope><Header>@_</>bitm</>,34 bitm=<Body@>b</>.
3536 predicate hasHeaderTo(envitem,hitem,vitem)-37 env=<Envelope><Header>@hs</>@_</>,38 hs=[h ac id sec@_],39 h=<To>v</>.
4041 predicate hasHeaderAction(envitem,hitem,vitem)-42 env=<Envelope><Header>@hs</>@_</>,43 hs=[to h id sec@_],44 h=<Action>v</>.
4546 predicate hasHeaderFrom(envitem,hitem,vitem)-
附录A示例性库脚本1env=<Envelope><Header>@hs</>@_</>,2hs=[h rid id sec@_],3h=<From>v</>.
45 predicate hasHeaderMessageId(envitem,hitem,vitem)-6env=<Envelope><Header>@hs</>@_</>,7hs=[to ac h sec@_],8h=<MessageId>v</>.
910 predicate hasHeaderRelatesTo(envitem,hitem,vitem)-11 env=<Envelope><Header>@hs</>@_</>,12 hs=[from h id sec@_],13 h=<RelatesTo>v</>.
1415 predicate hasSecurityHeader(envitem,toksitems)-16 env=<Envelope><Header>@hs</>@_</>.
17 hs=[to ac id h@_],18 h=<Security>@toks</>.
1920 predicate hasHeaderCreated(envitem,hitem,vitem)-21 hasSecurityHeader(env,toks),22 toks=[t@_],23 t=<Timestamp>h@_</>,24 h=<Created>v</>.
2526 predicate replaceMessageId(envitem,iditem,outenvitem)-27 env=<Envelope><Header>@hs</>@b</>,28 hs=[to ac h sec@o],29 h=<MessageId>v</>,30 newh=<MessageId>id</>,31 outenv=<Envelope><Header>to ac newh sec@o</>@b</>.
3233 predicate replaceRelatesTo(envitem,rtoitem,outenvitem)-34 env=<Envelope><Header>@hs</>@b</>,35 hs=[from h id sec@o],36 h=<RelatesTo>v</>,37 newh=<RelatesTo>rto</>,38 outenv=<Envelope><Header>from newh id sec@o</>@b</>.
3940 predicate isUserTokenKey(tokitem,ustring,pwdstring,nbytes,tstring,kbytes)-4142 tok=<UsernameToken@_>
43<Username>u</>
44 -45<Nonce>base64(n)</>
46<Created>t</></>,
附录A示例性库脚本1 u=principal(pwd),2pshal(pwd,concat(n,utf8(t)))=k.
34 predicate mkUserTokenKey(tokitem,ustring,pwdstring,nbytes,tstring,kbytes)-56tok=<UsernameToken>
7 <Username>u</>
8<Password Type=“None”></>
9 <Nonce>base64(n)</>
10<Created>t</></>,11 k=pshal(pwd,concat(n,utf8(t))).
1213 predicate isX509Cert(xcertbytes,krbytes,ustring,astring,kbytes)-14 checkx509(xcert,kr)=kr,15 x509user(xcert)=u,16 x509key(xcerr)=k,17 x509alg(xcert)=a.
1819 predicate isX509Token(tokitem,krbytes,ustring,astring,kbytes)-20 tok=<BinarySecurityToken ValueType=“X509v3”>base64(xcert)</>,21 isX509Cert(xcert,kr,u,a,k).
222324 predicate isUserPassword(upitem,ustring,pwdstring)-25 up=<UserPassword>
26 <Username>u</>
27 <Password>pwd</></>.
2829 predicate isX509CertSecret(xscitem,xtokitem,skbytes,cakbytes)-30 xsc=<X509CertSecret>
31 xtok32 <SecretKey>base64(sk)</>
33 <CAPubKey>base64(cak)</></>,34 xtok=<BinarySecurityToken ValueType=“X509v3”>base64(cert)</>.
353637 predicate isSigVal(svbytes,siitem,pbytes,astring)-38 ”rsashal,”=a,39 p=checkrsashal(p,c14n(si),sv).
4041 predicate mkSigVal(svbytes,siitem,pbytes,astring)-42 ”rsashal”=a,43 sv=rsashal(p,c14n(si)).
4445 predicate isSigVal(svbytes,siitem,kbytes,astring)-46 ”hmacshal”=a,
附录A示例性库脚本1hmacshal(k,c14n(si))=sv.
23 predicate mkSigVal(svbytes,siitem,kbytes,astring)-4”hmacshal”=a,5hmacshal(k,c14n(si))=sv.
67 predicate ref(titem,ritem)-8r=<Reference>__<DigestValue>base64(shal(c14n(t)))</></>.
910 predicate mkRef(ritem,titem)-11 r=<Reference><Junk></><Junk></><DigestValue>base64(shal(c14n(t)))</>
12 </>.
1314 predicate isSigInfo(siitem,astring,xitem)-15 si=<SignedInfo>_<SignatureMethod Algorithm=a></>@r1</>,16 r in r1,17 ref(x,r).
1819 predicate isSignature(sigitem,astring,kbytes,xitem)-20 sig=<Signature>si<SignatureValue>base64(sv)</>@_</>,21 isSigInfo(si,a,x),22 isSigVal(sv,si,k,a).
2324 predicate isCipherValue(efitem,astring,kbytes,fitem)-25 ef=<EncryptedData>
26 <EncryptionMethod Algorithm=“rsa”></>
27 <KeyInfo>_</>
28 <CipherData><CipherValue>base64(cv)</></></>,29 a=”rsa”,30 ic14n(decrsa(k,cv))=f.
3132 predicate mkCipherValue(efitem,astring,kbytes,fitem)-33 a=”rsa”,34 cv=rsa(k,c14n(f)),35 ef=<EncryptedData>
36 <EncryPtionMethod Algorithm=“rsa”></>
37 <KeyInfo></>
38 <CipherData><CipherValue>base64(cv)</></></>.
3940 predicate mkSignature(sigitem,astring,kbytes,refsitems)-41 si=<SignedInfo><Junk></>
42 <SignatureMethod Algorithm=a></>@refs</>,43 mkSigVal(sv,si,k,a),44 sig=<Signature>si<SignatureValue>base64(sv)</></>.
4546 predicate replaceBody(envitem,newbodyitem,newenvitem)-
附录A示例性库脚本1 env=<Envelope><Header>@hs</>b</>,2 newenv=<Envelope><Header>@hs</>newbody</>.
附录B示例性/样例政策1 <PolicyMappings>
2 <SendPolicy>
3<To>
4 http//service.asmx5</To>
6<Action>http//premium</Action>
7<Policy Id=“ClientToServer1”>
8<All>
9<Integrity>
10<TokenInfo>
11<SecurityToken>
12<TokenType>UsernameToken</TokenType>
13<Claims><SubjectName>Alice</SubjectName></Claims>
14 </SecurityToken>
15 </TokenInfo>
16 <MessageParts>Body()Header(“To”)Header(“Action”)Header(“MessageId”)H17 eader(“Created”)</MessageParts>
18 </Integrity>
19<Confidentiality>
20 <TokenInfo>
21 <SecurityToken>
22 <TokenType>X509v3</TokenType>
23 <Claims><SubjectName>BobsPetshop</SubjectName></Claims>
24</SecurityToken>
25</TokenInfo>
26<MessageParts>Body()</MessageParts>
27 </Confidentiality>
28 </All>
29 </Policy>
30 </SendPolicy>
31 <ReceivePolicy>
32 <To>
33http//service.asmx34 </To>
35 <Action>http//premium</Action>
36 <Policy Id=“ClientToServer2”>
37 <All>
38 <Integrity>
39 <TokenInfo>
40 <SecurityToken>
41 <TokenType>UsernameToken</TokenType>
42 <Claims><SubjectName>Alice</SubjectName></Claims>
43</SecurityToken>
44</TokenInfo>
45<MessageParts>Body()Header(“To”)Header(“Action”)Header(“MessageId”)H46 eader(“Created”)</MessageParts>
附录B示例性/样例政策1</Integrity>
2<Confidentiality>
3 <TokenInfo>
4 <SecurityToken>
5 <TokenType>X509v3</TokenType>
6 <Claims><SubjectName>BobsPetshop</SubjectName></Claims>
7</SecurityToken>
8</TokenInfo>
9<MessageParts>Body()</MessageParts>
10 </Confidentiality>
11 </All>
12 </Policy>
13 </ReceivePolicy>
14 <SendPolicy>
15 <To>default</To>
16 <Action>default</Action>
17 <Policy Id=“ServerToClient3”>
18 <Integrity>
19<TokenInfo>
20 <SecurityToken>
21 <TokenType>X509v3</TokenType>
22 <Claims><SubjectName>BobsPetshop</SubjectName></Claims>
23</SecurityToken>
24</TokenInfo>
25<MessageParts>Body()Header(“From”)Header(“RelatesTo”)Header(“Message26 Id”)Header(“Created”)</MessageParts>
27</Integrity></Policy>
28 </SendPolicy>
29 <ReceivePolicy>
30 <To>default</To>
31 <Action>default</Action>
32 <Policv Id=“ServerToClient4”>
33 <Integrity>
34<TokenInfo>
35<SecurityToken>
36<TokenType>X509v3</TokenType>
37<Claims><SubjectName>BobsPetshop</SubjectName></Claims>
38 </SecurityToken>
39 </TokenInfo>
40 <MessageParts>Body()Header(“From”)Header(“RelatesTo”)Header(“Message41 Id”)Header(“Created”)</MessageParts>
42 </Integrity></Policy>
43 </ReceivePolicy>
44 </PolicyMappings>
附录C用于政策配置到谓词的示例性转换1用于过滤器的规则23 PartClause(Body)45 hasBody(env,bitm,bval)6 PartClause(Header(”tag”))78 hasHeadertag(env,tagitm,tagval)9 PartClauses([pt1,...,ptn]) Part(pt1),...,Part(ptn)1011 PartValue(Body) bval1213 PartValue(Header(“tag”)) tagval1415 PartValues([pt1,...,ptn]) [PartValue(pt1),...,PartValue(ptn)]16 PartItem(Body) bval1718 PartItem(Header(“tag”)),tagitm1920 PartItems([pt1,...,ptn]) [PartItem(pt1),...,PartItem(ptn)]21 SendPartClauses2223 ReceivePartClauses2425 Parts(Integrity(tk,pts)) pts2627 Parts(Confidentiality(tk,pts)) pts2829 Parts(None(tk,pts)) []3031 Parts(All[pol1,...,poln] i1...nParts(poli)3233 Parts(OneOrMore[pol1,...,poln] i1...nParts(poli)3435 S[[Integrity(Username,pts)]]3637 infresh=[nt@outfresh],38 getUsernameToken(utok,u,k,idents,n,t)39 mkSignature(sig,”hmacshal”,k,pts)40 S[[Integrity(Username(s),pts)]]4142 infresh=[n t@outfresh],43 getUsernameToken(utok,s,k,idents,n,t)44 mkSignature(sig,”hmacshal”,k,pts)45 S[[Integrity(X509,pts)]]4647 outfresh=infresh,48 getX509Token(xtok,u,sk,xk,idents)49 mkSignature(sig,”rsashal”,sk,pts)50 S[[Integrity(X509(s),pts)]]5152 outfresh=infresh,53 getX509Token(xtok,s,sk,xk,idents)54 mkSignature(sig,”rsashal”,sk,pts)5556 S[[Confidentiality(X509,[part1,...,artn])]]
附录C用于政策配置到谓词的示例性转换12outfresh=infresh,3getX509Token(xtok,u,sk,xk,idents)4mkCipherValue(PartItem(part1)enc,”rsa”,xk,PartItem(part1))567mkCipherValue(PartItem(partn)enc,”rsa”,xk,PartItem(partn))8S[[Confidentiality(X509(s),[part1,...,partn])]]910 outfresh=infresh,11 getX509Token(xtok,s,sk,xk,idents)12 mkCipherValue(PartItem(part1)enc,”rsa”,xk,PartItem(part1))131415 mkCipherValue(PartItem(partn)enc,”rsa”,xk,PartItem(partn))16 S[[All[pol1,...,poln]]]1718 hasSendPolicy1(env,idents,infresh,outfresh1,outenv1),19 where hasSendPolicy1(e,i,if,of,oe)-S[[pol1]]20 infresh2=outfresh1,21 env2=outenv1,22 hasSendPolicy2(env2,idents,infresh2,outfresh2,outenv2),23 where hasSendPolicy(e,i,if,of,oe)2-S[[pol2]]242526 infreshn=outfreshn-1,27 envn=outenvn-1,28 hasSendPolicyn(envn,idents,infreshn,outfreshn,outenvn),29 where hasSendPolicy(e,i,if,of,oe)n-S[[poln]]30 S[[OneOrMore[pol1,...,poln]]] S[[pol1]] ... S[[poln]]3132 R[[Integrity(Username,pts)]]3334 hasSecurityHeader(env,toks),35 utok in toks,36 sig in toks,37 checkUsernameToken(utok,u,k,idents,n,t)38 isSignature(sig,”hmacshal”,k,PartItems(pts))39 R[[Integrity(Username(s),pts)]]4041 has SecurityHeader(env,toks),42 utok in toks,43 sig in toks,44 checkUsernameToken(utok,s,k,idents,n,t)45 isSignature(sig,”hmacshal”,k,PartItems(pts))46 R[[Integrity(X509,pts)]]4748 hasSecurityHeader(env,toks),49 xtok in toks,50 sig in toks,51 checkX509Token(xtok,u,xk,idents)52 isSignature(sig,”rsashal”,k,PartItems(pts))53 R[[Integrity(X509(s),pts)]]5455 hasSecurityHeader(env,toks),56 xtok in toks,57 sig in toks,58 checkX509Token(xtok,s,xk,idents)
附录C用于政策配置到谓词的示例性转换1 isSignature(sig,”rsashal”,k,PartItems(pts))2 R[[Confidentiality(X509,[part1,...,partn])]]34 getX509Token(xtok,u,sk,xk,idents)5 isCipherValue(PartItem(part1)enc,”rsa”,xk,PartItem(part1))678 isCipherValue(PartItem(partn)enc,”rsa”,xk,PartItem(partn))9 R[[Confidentiality(X509(s),[part1 ,...,partn])]]1011 getX509Token(xtok,s,sk,xk,idents)12 isCipherValue(PartItem(part1),”rsa”,xk,PartItem(part1)dec)131415 isCipherValue(PartItem(partn),”rsa”,xk,PartItem(partn)dec)16 R[[All[pol1,...,poln]]] R[[pol1]],...,R[[poln]]1718 R[[OneOrMore[pol1,...,poln]]] R[[pol1]] ... R[[poln]]192021 F[[Default]]2223 F[[ToDefault(suri)]] Toval=suri2425 F[[ToAction(suri,ac)]]2627 Toval=suri,28 Actionval=ac29 F[[Send(addr,pol)]]3031 fresh=[MessageIdval@infresh],32 MessageIditm=<MessageId>MessageIdval</>,33 PartClauses(Parts(pol)\[Header(“MessageId”)]),34 F[[addr]],35 S[[pol]]36 F[[Receive(addr,pol)]]3738 PartClauses(Parts(pol)),39 F[taddr]],40 R[[pol]]
附录D从链接到谓词和断言的示例性转换12 ________________________________3 ___4 ToParts56 [Header(“To”),Header(“Action”), Server address(URI,action)7 Header(“MessageId”),Header(“Created”), Request id,timestamp8 Body] Request message contents910 FromParts1112 [Header(“From”),Header(“RelatesTo”), Server URI,request id13 Header(“MessageId”),Header(“Created”), Reply id,timestamp14 Body] Reply message contents1516 Tokens(Any) {Username,X509}17 Tokens([p1string,...,pn])1819 {Username(p1),X509(p1),...,Username(pn),X509(pn)}2021 ToPol(ctkToken,stkToken,secrlvlSecr)2223 Integrity(ctk,ToParts)if secrlvl=Clear24 All[Integrity(ctk,ToParts),25 Confidentiality(stk,Body)] if secrlvl=Encrypted2627 FromPol(ctkToken,stkToken,secrlvlSecr)2829 Integrity(stk,FromParts) if secrlvl=Clear30 All[Integrity(stk,FromParts),31Confidentiality(ctk,Body)] if secrlvl=Encrypted3233 GS[[(suriURI,actionsList(URI),cpsPrincipalSet,spsPrincipalSet,secrlvlSecr)]34 ]3536 [Receive(ToAction(suri,ac),ToPol(ctk,stk,secrlvl))37 |ac actions,ctk Tokens(cps),stk Tokens(sps)]@3839 [Send(Default,FromPol(ctk,stk,secrlvl))40 |ctk Tokens(cps),stk Tokens(sps)]41 GC[[(suriURI,actionsList(URI),cpsPrincipalSet,spsPrincipalSet,secrlvlSecr)]42 ]4344 [Send(ToAction(suri,ac),ToPol(ctk,stk,secrlvl))45 |ac actions,ctk Tokens(cps),stk Tokens(sps)]@4647 [Receive(Default,FromPol(ctk,stk,secrlvl))48 |ctk Tokens(cps),stk Tokens(sps)]49 ________________________________50 ___51 RuIesfor Asserts52 ________________________________53 ___54 Principal(Any) “*“5556 Principal([p]) “p”5758 Principal([p1,p2,...]) “*“
附录D从链接到谓词和断言的示例性转换12 ToClause(cpstring,spstring,suriURI,acUPI)34 PartClauses(ToParts),5 Toval=suri,6 Actionval=ac,7 ass=[cpsp]@PartValues(ToParts)8 FromClause(cpstring,spstring,suriURI,acUPI)910 PartClauses(FromParts),11 Fromval=suri,12 ass=[spcp]@PartValues(FromParts)13 A[[(suriURI,acURI,cpsPrincipalSet,spsPrincipalSet,EncryptedSecr)]]1415 PartClauses([Header(“To”),Header(“ Action”)]),16 Toval=suri,17 Actionval=ac,18 replaceBody(env,secretBody,outenv)19 A[[(suriURI,acURI,cpsPrincipalSet,spsPrincipalSet,EncryptedSecr)]]2021 PartClauses([Header(“From”)]),22 Fromval=suri,23 replaceBody(env,secretBody,outenv)24 A[[(suriUPI,acUPI,cpsPrincipalSet,spsPrincipalSet,secrSecr)]]2526 outenv=env
附录E示例性生成的TulaFale脚本12import ”library.tf”.
34predicate hasSendPolicyClientToServer11(env0item,identsitems,fresh0items,fres5h1items,env1item)-6fresh0=[n10 t11@fresh1],7up7 in idents,8hasBody(env0,itmb1,b1),9hasHeaderTo(env0,itmTo2,To2),10 hasHeaderAction(env0,itmAction3,Action3),11 hasHeaderMessageId(env0,itmMessageId4,MessageId4),12 hasHeaderCreated(env0,itmCreated5,Created5),13 isUserPassword(up7,”Alice”,p9),14 nby10=c14n(n10),15 tstr11=base64(c14n(t11)),16 mkUserTokenKey(utok6,”Alice”,p9,nby10,tstrl1,k12),17 mkRef(refb1,itmb1),18 mkRef(refTo2,itmTo2),19 mkRef(refAction3,itmAction3),20 mkRef(refMessageId4,itmMessageId4),21 mkRef(refCreated5,itmCreated5),22 mkSignature(sig13,”hmacsha1”,k12,[refb1 refTo2 refAction3 refMessageId4 refC23 reated5]),24 env0=<Envelope>inhdrs<Body>inbody</></>,25 env1=<Envelope><Header>itmTo2 itmAction3 itmMessageId4 itmCreated5<S26 ecurity>utok6 sig13</></> <Body>inbody</></>.
2728 predicate hasSendPolicyClientToServer12(env1item,identsitems,fresh1items,fres29 h2items,env2item)-30 fresh1=fresh2,31 xcs16 in idents,32 hasBody(env1,itmb14,b14),33 isX509CertSecret(xcs16,xtok17,sk20,cak21),34 isX509Token(xtok17,cak21,”BobsPetshop”,”rsashal”,k19),35 mkCipherValue(encb14,”rsa”,k19,itmb14),36 env1=<Envelope>inhdrs<Body>inbody</></>,37 env2=<Envelope>inhdrs<Body>encb14</></>.
3839 predicate hasSendPolicyClientToServer1(envitem,identsitems,freshitems,outfresh40 items,outenvitem)-41 fresh=fresh0,42 env=env0,43 hasSendPolicyClientToServer11(env0,idents,fresh0,fresh1,env1),44 hasSendPolicyClientToServer12(env1,idents,fresh1,fresh2,env2),45 outfresh=fresh2,
附录E示例性生成的TulaFale脚本1outenv=env2.
23predicate hasSendPolMap(envitem,identsitems,freshitems,outenvitem)-4hasHeaderTo(env,toitm,to),5to=”httpserviceasmx”,6hasHeaderAction(env,acitm,ac),7ac=”httppremium”,8hasSendPolicyClientToServer1(env,idents,fresh,outfresh,outenv).
910 predicate hasReceivePolicyClientToServer21(envitem,identsitems,toks0items,tok11 s1items)-12 up9 in idents,13 hasBody(env,itmb1,b1),14 hasHeaderTo(env,itmTo2,To2),15 hasHeaderAction(env,itmAction3,Action3),16 hasHeaderMessageId(env,itmMessageId4,MessageId4),17 hasHeaderCreated(env,itmCreated5,Created5),18 hasSecurityHeader(env,toks7),19 utok6 in toks7,20 isUserPassword(up9,”Alice”,p10),21 isUserTokenKey(utok6,”Alice”,p10,n11,t12,k13),22 sig14 in toks7,23 isSignature(sig14,”hmacshal”,k13,itmb1),24 isSignature(sig14,”hmacshal”,k13,itmTo2),25 isSignature(sig14,”hmacshal”,k13,itmAction3),26 isSignature(sig14,”hmacshal”,k13,itmMessageId4),27 isSignature(sig14,”hmacshal”,k13,itmCreated5),28 ass15=<Integrity><Token>utok6</><Parts>b1 To2 Action3 MessageId4 Creat29 ed5</></>,30 toks1=[ass15@toks0].
3132 predicate hasReceivePolicyClientToServer22(envitem,identsitems,toks1items,tok33 s2items)-34 xcs 18 in idents,35 hasBody(env,itmb16,b16),36 isX509CertSecret(xcs18,xtok19,sk22,cak23),37 isX509Token(xtok19,cak23,”BobsPetshop”,”rsashal”,k21),38 isCipherValue(itmb16,”rsa”,k21,decb16),39 ass24=<Confidentiality><Token>xtok19</><Parts>decb16</></>,40 toks2=[ass24@toks1].
4142 predicate hasReceivePolicyClientToServer2(envitem,identsitems,oldassitems,ass43 items)-44 oldass=toks0,45 hasReceivePolicyClientToServer21(env,idents,toks0,toks1),
附录E示例性生成的TulaFale脚本1 hasReceivePolicyClientToServer22(env,idents,toks1,toks2),2 ass=toks2.
34 predicate hasReceivePolMap(envitem,identsitems,assitems)-5 hasHeaderTo(env,toitm,to),6 to=”httpserviceasmx”,7 hasHeaderAction(env,acitm,ac),8 ac=”httppremium”,9 hasReceivePolicyClientToServer2(env,idents,[],ass).
1011predicate hasSendPolicyServerToClient3(envitem,identsitems,freshitems,outfresh12items,outenvitem)-13fresh=outfresh,14xcs9 in idents,15hasBody(env,itmb1,b1),16hasHeaderFrom(env,itmFrom2,From2),17hasHeaderRelatesTo(env,itmRelatesTo3,RelatesTo3),18hasHeaderMessageId(env,itmMessageId4,MessageId4),19hasHeaderCreated(env,itmCreated5,Created5),20isX509CertSecret(xcs9,xtok6,sk10,cak11),21isX509Token(xtok6,cak11,”BobsPetshop”,”rsashal”,k8),22mkRef(refb1,itmb1),23mkRef(refFrom2,itmFrom2),24mkRef(refRelatesTo3,itmRelatesTo3),25mkRef(refMessageId4,itmMessageId4),26mkRef(refCreated5,itmCreated5),27mkSignature(sig12,”rsasha1”,sk10,[refb1 refFrom2 refRelatesTo3 refMessageId428refCreated5]),29env=<Envelope>inhdrs<Body>inbody</></>,30outenv=<Envelope><Header>itmFrom2 itmRelatesTo3 itmMessageId4 itmCrea31ted5<Security>xtok6 sig12</></><Body>inbody</></>.
3233predicate hasSendPolMap(envitem,identsitems,freshitems,outenvitem)-34has SendPolicyServerToClient3(env,idents,fresh,outfresh,outenv).
3536predicate hasReceivePolicyServerToClient4(envitem,identsitems,oldassitems,ass37items)-38xk8 in idents,39hasBody(env,itmb1,b1),40hasHeaderFrom(env,itmFrom2,From2),41hasHeaderRelatesTo(env,itmRelatesTo3,RelatesTo3),42hasHeaderMessageId(env,itmMessageId4,MessageId4),43hasHeaderCreated(env,itmCreated5,Created5),44isX509CertSecret(xk8,xx,yy,cak10),45hasSecurityHeader(env,toks7),
附录E示例性生成的TulaFale脚本1xtok6 in toks7,2isX509Token(xtok6,cak10,”BobsPetshop”,”rsashal”,k11),3sig12 in toks7,4isSignature(sig12,”rsashal”,k11,itmb1),5isSignature(sig12,”rsashal”,k11,itmFrom2),6isSignature(sig12,”rsashal”,k11,itmRelatesTo3),7isSignature(sig12,”rsashal”,k11,itmMessageId4),8isSignature(sig12,”rsashal”,k11,itmCreated5),9ass13=<Integrity><Token>xtok6</><Parts>b1 From2 RelatesTo3 MessageId410 Created5</></>,11 ass=[ass13@oldass].
1213 predicate hasReceivePolMap(envitem,identsitems,assitems)-14 hasReceivePolicyServerToClient4(env,idents,[],ass).
1516 predicate getChanAssert(envitem,assitems)-17 hasBody(env,bitm,b),18 hasHeaderTo(env,toitm,to),19 hasHeaderAction(env,acitm,ac),20 hasHeaderMessageId(env,iditm,id),21 hasHeaderCreated(env,critm,cr),22 to=”httpserviceasmx”,23 ac=”httppremium”,24 ass=[“Alice””BobsPetshop” b to ac id cr].
2526 predicate mkChanEnvelope(envitem,iditem,bitem,newenvitem)-27 hasHeaderTo(env,toitm,to),28 hasHeaderAction(env,acitm,ac),29 to=”httpserviceasmx”,30 ac=”httppremium”,31 hasNewMessageId(env,id,outenv),32 swapBody(outenv,b,newenv).
3334 predicate getChanAssert(envitem,assitems)-35 hasBody(env,bitm,b),36 hasHeaderFrom(env,fromitm,from),37 hasHeaderMessageId(env,iditm,id),38 hasHeaderRelatesTo(env,riditm,rid),39 hasHeaderCreated(env,critm,cr),40 from=”httpserviceasmx”,41 ass=[“Alice””BobsPetshop”b from rid id cr].
4243 predicate mkChanEnvelope(envitem,iditem,bitem,newenvitem)-44 hasHeaderFrom(env,fromitm,from),45 from=”httpserviceasmx”,
附录E示例性生成的TulaFale脚本1hasNewMessageId(env,id,newenv).
23channel initChan,httpChan.
4correspondence Log.
5private channel B.
6secret B.
7private channel dbChan.
89new sr;10 let kr=pk(sr)in11 let r=principal(sr)in12 ((out(publishChan,(r,kr)))|13 (genX())|(genLeakX())|14 (genUP())|(genLeakUP())|1516 (!in(initChan,env);17 new freshid;18 filter mkChanEnvelope(env,freshid,B,cenv)->cenv in19 new fresh1;20 new fresh2;21 let fresh=[fresh1 fresh2]in22 in(dbChan,ident1);23 in(dbChan,ident2);24 let idents=[ident1 ident2]in25 filter hasSendPolMap(cenv,idents,fresh,outenv)->outenv in26 filter getChanAssert(cenv,ass)->ass in27 begin(Log,(ass));28 out(httpChan,outenv))|2930 (!in(httpChan,env);31 in(dbChan,ident1);32 in(dbChan,ident2);33 let idents=[ident1 ident2]in34 filter hasReceivePolMap(env,idents,tokens)->tokens in35 filter getChanAssert(env,ass)->ass in36 end(Log,(ass));37 done))
权利要求
1.一种计算机实现的方法,其特征在于,包括将详细安全政策转换成一模型,所述详细安全政策是在一个或多个端点之间的消息交换期间实施的,所述一个或多个端点主宿在一分布式计算环境中联网的相应主体;以及评估所述模型,以确定所述详细安全政策是否实施了所述一个或多个端点的至少一个的一个或多个安全目标。
2.如权利要求1所述的计算机实现的方法,其特征在于,所述详细安全政策是在所述一个或多个端点的配置数据中指定的。
3.如权利要求1所述的计算机实现的方法,其特征在于,所述详细安全政策指示了以下的一个或多个端点之间的信任关系、所述一个或多个端点的一个端点支持的服务、所述一个或多个端点的一个端点支持的行动。
4.如权利要求1所述的计算机实现的方法,其特征在于,所述模型还包括使用一并发过程的积分来表示所述一个或多个端点。
5.如权利要求1所述的计算机实现的方法,其特征在于,所述模型还包括使用逻辑谓词来表示消息过滤和处理。
6.如权利要求1所述的计算机实现的方法,其特征在于,所述模型还包括在与所述一个或多个端点相关联的链接描述中规定的一个或多个安全目标的形式规范。
7.如权利要求1所述的计算机实现的方法,其特征在于,所述详细安全政策是用包括基础断言上的逻辑公式的声明性数据来指定的。
8.如权利要求1所述的计算机实现的方法,其特征在于,所述一个或多个端点是包括客户机和服务器的多个端点。
9.如权利要求1所述的计算机实现的方法,其特征在于,所述一个或多个安全目标的一个安全目标针对与所述消息相关联的内容的至少一个子集的秘密性或完整性。
10.如权利要求1所述的计算机实现的方法,其特征在于,评估所述模型包括自动确定所述一个或多个端点的一个端点是否易受在交换的消息上的重写攻击。
11.如权利要求1所述的计算机实现的方法,其特征在于其中,转换与所述详细安全政策相关联的信息的子集对创建所述模型不可用;以及其中,评估所述模型还包括自动模拟所述子集,以确定所述至少一个端点的一个或多个安全目标是否独立于所述信息子集而实施。
12.如权利要求1所述的计算机实现的方法,其特征在于,还包括确定所述详细安全政策已被修改;响应于所述确定,评估所述模型,以确定所修改的详细安全政策实施了所述一个或多个端点的安全目标;以及仅当满足所述安全目标时,实施所修改的详细安全政策。
13.一种包括可由处理器执行的计算机程序指令的计算机可读介质,其特征在于,所述指令用于将详细安全政策转换成一模型,所述详细安全政策是在一个或多个端点之间的消息交换期间实施的,所述一个或多个端点主宿在一分布式计算环境中联网的相应主体;以及评估所述模型,以确定所述详细安全政策是否实施了所述一个或多个端点的至少一个的一个或多个安全目标。
14.如权利要求13所述的计算机可读介质,其特征在于,所述详细安全政策指示了以下的一个或多个端点之间的信任关系、所述一个或多个端点的一个端点支持的服务、所述一个或多个端点的一个端点支持的行动。
15.如权利要求13所述的计算机可读介质,其特征在于,所述一个或多个端点是包括客户机和服务器的多个端点。
16.如权利要求13所述的计算机可读介质,其特征在于其中,用于转换与所述详细安全政策相关联的信息子集的所述计算机程序指令对创建所述模型是不可用的;以及其中,用于评估所述模型的所述计算机程序指令还包括用于自动模拟所述子集以确定所述至少一个端点的一个或多个安全目标是否独立于所述信息子集而实施的指令。
17.如权利要求13所述的计算机可读介质,其特征在于,还包括可由所述处理器执行的计算机程序指令,用于确定所述详细安全政策是否被修改;响应于所述确定,评估所述模型,以确定所修改的详细安全政策是否实施了所述一个或多个端点的安全目标;以及仅当满足所述安全目标时,实施所修改的详细安全政策。
18.一种计算机实现的方法,其特征在于,包括用方案核查或标识符范围查询、端点配置设置查询、政策分派查询、个别政策查询、政策兼容性查询或自定义查询的一个或多个查询详细安全政策,所述安全政策与主宿在分布式计算环境中联网的相应主体的一个或多个端点之间的消息交换相关联;以及响应于所述查询,生成一肯定或否定安全报告。
19.如权利要求18所述的计算机实现的方法,其特征在于,所述详细安全政策在配置文件或对象模型中。
20.如权利要求18所述的计算机实现的方法,其特征在于其中,所述肯定报告包括被分配政策的端点和行动的描述、踪迹中消息的经签署或经加密部分的指示、在接受消息之后发送者和接收者之间的协定的肯定状态、以及消息踪迹中出现的任何非标准头部的指示中的一个或多个;其中,所述否定报告包括签署或核查某一消息头部失败、相关消息失败、排印错误的指示的一个或多个以及对如何纠正易受攻击性的建议。
全文摘要
描述了用于核查分布式系统的安全目标的系统和方法。在一个方面,详细安全政策被转换成模型。详细安全政策是在一个或多个端点之间的消息交换期间实施的。一个或多个端点主宿分布式操作环境中联网的相应主体。评估该模型,以确定详细安全政策是否实施了一个或多个端点的至少一个的一个或多个安全目标。
文档编号H04L29/06GK1694419SQ200510070039
公开日2005年11月9日 申请日期2005年4月29日 优先权日2004年5月4日
发明者A·戈登, C·富尔内特, C·G·卡莱尔, K·巴尔加瓦恩, R·皮塞勒 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1