精华内容
下载资源
问答
  • [{"txt":"安全首席专家","link":"https://www.aliyun.com/service/chiefexpert/security"},{"txt":"中间件首席专家","link":"https://www.aliyun.com/service/chiefexpert/middleware"},{"txt":"系统与平台首席专家...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户的数据库应用系统进行性能和风险评估,参与配合进行数据压测演练,提供数据库优化方面专业建议,在业务高峰期与用户共同保障数据库系统平稳运行。","link1":"https://www.aliyun.com/service/optimization/database","link":"https://www.aliyun.com/service/chiefexpert/database","icon":"https://img.alicdn.com/tfs/TB1a5ZfonnI8KJjy0FfXXcdoVXa-100-100.png","btn2":"数据库紧急救援服务","tip":"还有更多专家帮助您解决云上业务问题:立即查看","btn1":"云上数据库优化服务","link2":"https://www.aliyun.com/service/databaserescue","title":"数据库专家服务"}],"search":[{"txt":"安全首席专家","link":"https://www.aliyun.com/service/chiefexpert/security"},{"txt":"中间件首席专家","link":"https://www.aliyun.com/service/chiefexpert/middleware"},{"txt":"系统与平台首席专家","link":"https://www.aliyun.com/service/chiefexpert/platform"},{"txt":"存储首席专家","link":"https://www.aliyun.com/service/chiefexpert/storage"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"link":"https://www.aliyun.com/product/rds/mysql","icon":"rds_mysql1","contentLink":"https://www.aliyun.com/product/rds/mysql","title":"云数据库RDS MySQL版","des":"云数据库RDS MySQL版 MySQL 是全球最受欢迎的开源数据库,阿里云MySQL版 通过深度的内核优化和独享实例提供稳定极致的数据库性能,同时灵活的部署架构及产品形态,可满足不同场景下的数据库需求。","btn1":"了解详情","link1":"https://www.aliyun.com/product/rds/mysql","btn2":"管理控制台","link2":"https://rdsnext.console.aliyun.com/#/rdsList/cn-hangzhou/basic/","btn3":"在线咨询","link3":"https://www.aliyun.com/core/online-consult?spm=5176.8789780.7y9jhqsfz.115.47ea55caeL2Mfu&from=OVtXEBmlH8","infoGroup":[{"infoName":"最新活动","infoContent":{"firstContentName":"MySQL 1年仅19.9元","firstContentLink":"https://www.aliyun.com/database/dbfirstbuy#J_9036464270","lastContentName":"ECS+MySQL 0.7元/日","lastContentLink":"https://www.aliyun.com/1111/enterprise"}},{"infoName":"快速入门","infoContent":{"firstContentName":"选型指南","firstContentLink":"https://help.aliyun.com/document_detail/164594.html?spm=a2c4g.11186623.6.551.56b67384ispvvk","lastContentName":"上手指南","lastContentLink":"https://help.aliyun.com/document_detail/26124.html?spm=a2c4g.11174283.2.16.51795b83pbkzav"}},{"infoName":"最佳实践","infoContent":{"firstContentName":"X-Engine的应用场景","firstContentLink":"https://help.aliyun.com/document_detail/148402.html?spm=a2c4g.11186623.2.14.3f592685zjuUxu#concept-2364901","lastContentName":"读写分离功能","lastContentLink":"https://help.aliyun.com/document_detail/96073.html?spm=a2c4g.11174283.2.53.42db5b83VvZvMJ"}},{"infoName":"产品推荐","infoContent":{"firstContentName":"云数据库PolarDB","lastContentName":"云原生数据仓库MySQL","firstContentLink":"https://www.aliyun.com/product/polardb","lastContentLink":"https://www.aliyun.com/product/ads"}}]}],"visual":{"textColor":"dark","topbg":""}}

    {"$env":{"JSON":{}},"$page":{"env":"production"},"$context":{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户的数据库应用系统进行性能和风险评估,参与配合进行数据压测演练,提供数据库优化方面专业建议,在业务高峰期与用户共同保障数据库系统平稳运行。","link1":"https://www.aliyun.com/service/optimization/database","link":"https://www.aliyun.com/service/chiefexpert/database","icon":"https://img.alicdn.com/tfs/TB1a5ZfonnI8KJjy0FfXXcdoVXa-100-100.png","btn2":"数据库紧急救援服务","tip":"还有更多专家帮助您解决云上业务问题:立即查看","btn1":"云上数据库优化服务","link2":"https://www.aliyun.com/service/databaserescue","title":"数据库专家服务"}],"search":[{"txt":"安全首席专家","link":"https://www.aliyun.com/service/chiefexpert/security"},{"txt":"中间件首席专家","link":"https://www.aliyun.com/service/chiefexpert/middleware"},{"txt":"系统与平台首席专家","link":"https://www.aliyun.com/service/chiefexpert/platform"},{"txt":"存储首席专家","link":"https://www.aliyun.com/service/chiefexpert/storage"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}},"simplifiedDisplay":"newEdition","newCard":[{"link":"https://www.aliyun.com/product/rds/mysql","icon":"rds_mysql1","contentLink":"https://www.aliyun.com/product/rds/mysql","title":"云数据库RDS MySQL版","des":"云数据库RDS MySQL版 MySQL 是全球最受欢迎的开源数据库,阿里云MySQL版 通过深度的内核优化和独享实例提供稳定极致的数据库性能,同时灵活的部署架构及产品形态,可满足不同场景下的数据库需求。","btn1":"了解详情","link1":"https://www.aliyun.com/product/rds/mysql","btn2":"管理控制台","link2":"https://rdsnext.console.aliyun.com/#/rdsList/cn-hangzhou/basic/","btn3":"在线咨询","link3":"https://www.aliyun.com/core/online-consult?spm=5176.8789780.7y9jhqsfz.115.47ea55caeL2Mfu&from=OVtXEBmlH8","infoGroup":[{"infoName":"最新活动","infoContent":{"firstContentName":"MySQL 1年仅19.9元","firstContentLink":"https://www.aliyun.com/database/dbfirstbuy#J_9036464270","lastContentName":"ECS+MySQL 0.7元/日","lastContentLink":"https://www.aliyun.com/1111/enterprise"}},{"infoName":"快速入门","infoContent":{"firstContentName":"选型指南","firstContentLink":"https://help.aliyun.com/document_detail/164594.html?spm=a2c4g.11186623.6.551.56b67384ispvvk","lastContentName":"上手指南","lastContentLink":"https://help.aliyun.com/document_detail/26124.html?spm=a2c4g.11174283.2.16.51795b83pbkzav"}},{"infoName":"最佳实践","infoContent":{"firstContentName":"X-Engine的应用场景","firstContentLink":"https://help.aliyun.com/document_detail/148402.html?spm=a2c4g.11186623.2.14.3f592685zjuUxu#concept-2364901","lastContentName":"读写分离功能","lastContentLink":"https://help.aliyun.com/document_detail/96073.html?spm=a2c4g.11174283.2.53.42db5b83VvZvMJ"}},{"infoName":"产品推荐","infoContent":{"firstContentName":"云数据库PolarDB","lastContentName":"云原生数据仓库MySQL","firstContentLink":"https://www.aliyun.com/product/polardb","lastContentLink":"https://www.aliyun.com/product/ads"}}]}],"visual":{"textColor":"dark","topbg":""}}}

    展开全文
  • HTTP PUT方法利用的几种方式

    千次阅读 2020-12-24 14:14:37
    HTTP PUT方法利用在本文中,我们将会利用metasploitable2靶机上的HTTP PUT漏洞。通过此漏洞你可以轻而易举的向服务器上传恶意文件,并可以在meterpreter shell中获得整个服务器的访问权限。上一篇文章我们讲过了如何...

    HTTP PUT方法利用

    在本文中,我们将会利用metasploitable2靶机上的HTTP PUT漏洞。通过此漏洞你可以轻而易举的向服务器上传恶意文件,并可以在meterpreter shell中获得整个服务器的访问权限。

    上一篇文章我们讲过了如何使用Curl,Nmap和OpenSSL来测试HTTP方法。如果服务器启用了HTTP PUT方法,我们就可以利用它来上传指定的资源到目标服务器上,比如webshell或者恶意软件。

    基本要求

    ·攻击者IP–192.168.179.141

    HEAD,GET,POST,CONNECT,这些方法是完全安全的,至少就HTTP方法本身而言是安全的。当然了,虽然请求本身可能也会有恶意参数,但参数跟方法是分离的,所以通常而言只应该启用这些方法。

    PUT,DELETE这些方法最初是用来进行文件管理的。然而一些web服务器保留了最初的配置,依然支持这些方法。如此一来,你就可以任意修改或删除服务器文件系统中的文件了。

    显然,如果启用了这些方法,你就容易遭到文件上传漏洞的攻击。

    另外,如果你有业务需求必须启用这些方法,那么应该严格限制文件访问权限。

    OPTIONS方法,这是一个判断方法,返回消息主要用于调试或者检查服务器其他方法是否启用。

    TRACE方法,这个方法比较出乎意料,它是响应体中返回的判断方法,即整个HTTP请求。这包括请求体,也包括请求头,比如cookies和认证头等。

    进入正题

    识别HTTP服务器最简单最基本的形式就是查看HTTP响应头中色server字段。可以使用Netcat客户端发送HTTP请求来获取服务器的HTTP响应头。

    展开全文
  • 各类TEE(例如TPM和Intel SGX)提供了强大的可信计算硬件基础,但他们并不直接保证软件的安全性。诸如缓冲区溢出等内存安全问题为攻击者提供了侵入TEE的可乘之机。因此,软件内存安全保护极其重要。MesaTEE(源自...

    各类TEE(例如TPM和Intel SGX)提供了强大的可信计算硬件基础,但他们并不直接保证软件的安全性。诸如缓冲区溢出等内存安全问题为攻击者提供了侵入TEE的可乘之机。因此,软件内存安全保护极其重要。MesaTEE(源自“Memory Safe TEE”)除了遵循混合内存安全模型(Hybrid Memory Safety)用Rust等内存安全语言重构关键组件,还对其他的C/C++代码进行了静态扫描、动态测试和形式化验证。

    静态扫描通过分析程序编码模式,能快速报出浅层漏洞,但会有相对较高的误报和漏报;以模糊测试(Fuzzing)为代表的动态测试通过提供随机改变的输入来触发问题,准确率高,但很难完整覆盖程序的所有状态,难以证明程序是无缺陷的。因此在高安全需求场景下,静态扫描和动态测试是不够的,需要形式化验证用严格的数学方法推演程序的完整状态空间符合安全设计规范,证明程序在设立条件下一定不会出问题。因此形式化验证是安全实践里非常重要的一环。

    百度安全实验室在云计算、区块链、自动驾驶等工业级场景的部署里都有形式化验证的实践。例如在MesaTEE TPM项目里,形式化验证对TPM核心软件栈(tpm2-tss 2.1.0版本)进行了验证,保证了该项目约6.7万行代码在MesaTEE调用场景下不会出安全问题。验证期间发现并修复空指针引用、越界读写、内存泄露等等多种共计140+处安全缺陷,验证过的tpm2-tss版本发布在了GitHub上(https://github.com/mesalock-linux/tpm2-tss-verified)。除此之外,在内存安全的Python解释器MesaPy项目里,形式化验证保证了C backend的代码在MesaPy所有使用场景下是内存安全的。验证期间发现并修补了包括空指针引用,整数溢出等14处安全缺陷,验证方法和结果也发布在了GitHub上(https://github.com/mesalock-linux/mesapy/tree/mesapy2.7/verification)。

    一.形式化验证介绍

    形式化验证是指使用严格的数学方法来推理验证程序是否符合安全规范的过程。该方法具体包括源码准备、基于抽象解释(Abstract Interpretation [1] [2] [3],下文简称AI)的值域分析(Value Analysis)、最弱前置条件验证(Weakest Precondition)和程序缺陷报告等阶段。如下图所示。

    8b7955b2daf4cadedb0c900bc4e26524.png

    图1  形式化验证方法流程

    1.1 源码准备

    理想情况下,形式化验证需要在程序的完整代码上进行。这里不仅包括目标程序本身的源代码,还需要依赖的第三方库的源代码。然而很多情况下第三方库没有给出源码,或者第三方库的源码过于庞大无益于关注程序主体的安全性,这种情况可以对项目中调用依赖库的函数写抽象描述辅助验证。

    接下来是要确定需要验证的目标函数,为目标函数写测试用例。形式化验证任务中,测试用例中的函数参数用Interval表示,来覆盖所有可能取值。同时,还要覆盖到函数调用的所有场景,如下面示例:

    fe49be5ef9ca5132527f007e8c68a253.png

    我们可以从项目自带的Unit Test和Integration Test入手,来编写Interval版本的测试用例。这两类测试用例一般会涵盖项目中关键函数和关键功能逻辑,从这里入手能够覆盖验证目标,保证验证质量。

    1.2 基于抽象解释的值域分析 (Abstract Interpretation Based Value Analyis)

    在这个阶段中,分析人员对源代码的标注(Annotation),配置分析策略(Analysis Policy),然后依赖抽象解释(Abstract Interpretation)技术来执行执行值域分析(Value Analysis)。分析引擎会对标注的源码进行分析,插入运行时错误检查(Runtime Error Check)语句标注,分析程序控制流、数据流并计算程序中变量的所有可能取值,验证标注属性的真假。分析过程中无法确认为真的标注属性所对应的语句归类为未定义行为(Undefined Behavior),在实际分析过程中,可能需要分析人员对Undefined Behavior加入额外的标注属性来消减误报。接下来,最弱前置条件分析引擎(Weakest Precondition)会验证这些人工额外标注,将最终发现的Undefined Behavior将呈报给分析人员,进行最后确认。

    a. 抽象解释 (Abstract Intepretation)

    抽象解释是指使用另一个抽象对象域(Abstract Domain [3])上的计算,来抽象逼近程序具体对象域(Concrete Domain [3])上的计算。抽象语义涵盖所有可能的情况,是具体程序语义的超集,因此如果抽象语义是安全的,那么具体语义也是安全的。每一个抽象对象域规定了抽象对象(或变量)之间的运算规则体系(Lattice)[3]。最常见的抽线对象域是Interval Domain [3],它的运算规则与具体数值计算规则相似(如下面示例所示)。由于Interval Domain易于理解并且计算复杂度不高,所以实际程序验证分析任务中采用Interval Domain来进行Value Analysis。

    f9b79641a49701c7ac6ff4dc5f530950.png

    Abstract Interpretation对变量的计算推演可能存在Over-approximation [3]。原因是为了保证程序在合理时间内分析结束,分析引擎常常会扩展变量的值域,以减小计算复杂度。这样,由于变量值域扩大,在Runtime Error Check时可能由于它不在合法数值范围内而报告为Undefined Behavior,但实际上变量真实取值并没有超出合法范围。这种情况需要由稍后介绍的程序标注来消减误报。

    b. 分析策略(Analysis Policy)

    AI-based Value Analysis在计算推演过程中会记录变量的取值情况。随着程序分析的不断深入,变量的取值会随着程序分支而划分开来,在各自分支分别计算推演。最终会使得在某程序点上,变量取值出现很多种可能。理论上,对于任何程序,分析时保留变量的所有取值情况将会产生最为精准的结果,但是随之而来的是巨大的空间和时间开销,难以保证分析在合理的时间内结束。这时需要设定合理的分析策略,来实现分析消耗时间和分析结果精度的平衡。

    我们用State来代表一个变量取值的所有可能。实际分析中,通常设定一个State Level,表示任意程序点允许保存变量状态的最大数量,如果某点处,变量所有取值情况的数量超过了设定,就需要合并状态。此外,变量之间关系记录的细致程度,也会对验证分析结果产生影响。这一点主要体现在函数之间相互调用时,子函数返回时如何记录多个返回变量State之间(函数有返回参数时认为有多个返回值)的关联关系(State Split)。下面的示例代码分别展示了State Level和State Split设定对分析结果的影响。

    fdecdec07b9fd978c131151cc6343862.png

    如果State Level限定很小(比如1),那么在L处,x取值为 x ∈ [1..9],y取值为 y ∈ [6..10]。但如果状态空间足够大(State Level大于等于2),那么x和y的取值会进一步细化,拆分为 y == 6 ⋀ x ∈ [1..4]或者 y == 10 ⋀ x ∈ [5..9]这两个状态。可见State Level越大,分析粒度越细,结果越精确。

    94fa815f79d1241f8820df2e88dfe5c7.png

    上述代码中,当State Split的粒度设置较低时,在(3)处会报出“使用danlging pointer hd”的Undefined Behavior,原因是它认为在(2)处已经free掉了hd,(3)处不应该再使用。然而经过分析我们可以发现,(2)的free只有当(2)处err为true时才会执行。这种条件下,(2)处free执行后,(3)处分支根本不会执行。当State Split粒度调高时,Value Analysis会记录err和hd的关系,就不会产生误报。

    虽然更高的State Level和更细致的State Split粒度能为我们带来更为准确的分析结果,但在程序代码量庞大而且逻辑复杂的情况下,这两个策略设置过高,可能导致分析无法在合理时间内结束。所以实际分析中,需要评估State Level和State Split,达到分析效果和分析时间的平衡。

    c. 程序标注 (Annotation)

    程序标注是利用形式化描述语言(如ACSL [3])来描述程序语义,辅助分析引擎生成验证约束。在实际的验证分析过程中,有时由于受限于分析粒度的设定,Value Analysis阶段无法产生十分精细的结果,产生Undefined Behavior的误报,这时就需要分析人员加入Annotation,辅助分析过程产生更准确的分析结果。而这些Annotation的正确性,也需要在下文的最弱前置条件验证中验证。

    在下面例子中,假定没有配置很高的分析粒度,L1处x和y之间的大小关系不会被记录下来,在程序中L3处,会产生“x可能超出数组T的合法范围“的误报。如果,在L3处加入//@ assert 0 < x < 10这个约束,就可以引导分析过程来消除该误报。

    452c3f93f78aff02281e07cf0808b077.png

    除了assert,程序标注还包括函数合约(Function Contract)和循环不变式(Loop Invariant)等。函数合约描述函数的输入和输出的约束;Loop Invariant描述循环的约束,帮助Value Analysis更好的理解程序中复杂循环的语义,有助于消减分析过程中产生的误报。

    d. 运行时错误检测(Runtime Error Check)

    Value Analysis分析引擎会加入Runtiem Error Check要求程序符合特定属性。例如在下面示例中,在内存数据访问操作之前,value analysis会加入类似于/*@ assert ret: mem_access: \valid_read(); */对访问地址合法性判断的标注属性。如果内存地址的值域不在合法范围之内(比如为NULL),就报出Undefined Behavior。

    e9c602e3ecba50932512df75e745a32f.png

    1.3 最弱前置条件验证(Weakest Precondition)

    函数合约和Runtime Error Check相关的标注属性在Value Analysis过程中验证。然而,有些assert标注是分析人员为了辅助Value Analysis加入的,例如//@ assert 0 < x < 10。这类约束条件,Value Analysis始终认为它们为真。为了确保这些约束条件自恰,必须单独对这部分约束进行验证。最弱前置条件(WP, Weakest Precondition)正是用来验证这些约束的。

    Weakest Precondition [5]可以形式化描述为wp(S, R)。对于某程序位置P,S为从P处开始执行的语句,R为从P处执行语句S后所达到的约束条件(Postcondition)。wp(S, R)表达的含义是,在执行语句S之后,为了能让R符合特定的Postcondition,P处所需要满足的最弱前提条件。换言之,WP求解工具可以根据R和S,求解出P处要满足的最弱前提条件。

    这样,对于每一个向Value Analysis提供的assert标注,通过WP都可以求得它的最弱前提条件。如果所有前提条件都能满足所在上下文的约束,就能得到自恰的保证。

    二.案例分析

    2.1 TPM 验证分析

    我们用形式化验证的方法,借助形式化验证工具TIS [6]对若干工业级别的项目进行了分析实践。这些项目涉及云计算、区块链、自动驾驶等。其中,以TPM可信计算的核心软件栈tpm2-tss(https://github.com/tpm2-software/tpm2-tss)项目为例,我们验证了该项目2.1.0版本的代码,共验证了约1300个函数 / 约6.7万行代码,发现并修补了包括空指针引用、内存泄露,越界读写等在内的140+多处程序缺陷。下面是在验证过程中发现的程序缺陷(左图)和对应的修补方案(右图),这些程序缺陷均已经报给开发者并得到最终确认,并已在最新代码中修补。

    示例1:空指针引用

    6507ba14a2862e66e9319197c501b0a0.png

    示例2: 内存泄露

    add8913b0d8c4fce59bad04f949297c3.png

    示例3:循环条件错误导致数组越界读

    71223217061244cc5bb9be7a848ef458.png

    示例4:free错误导致内存破坏

    75ab97826a5849360ae76d80b2b3dcb4.png

    2.2 Mesapy 验证分析

    Mesapy(https://github.com/mesalock-linux/mesapy)是基于pypy的内存安全Python解释器。我们结合多种形式验证工具smack[6], seahorn[7] 和 TIS[5]对Mesapy backend的C库函数(共计5044行代码)进行了验证,发现并修补了包括空指针引用,整数溢出等14处程序缺陷。下面是在验证过程中发现的安全缺陷案例。

    示例1:空指针引用

    8aa0115cd52c17625029b5dc3375180c.png

    示例2:整数溢出

    f40b6367cc74d5abbebe45b93c71ed95.png

    三. 形式化验证实践经验分享

    虽然形式化验证方法能够检测和消除安全缺陷,但具体应用时也存在局限和需要考量的地方。主要体现在如下几个方面:

    3.1 分析时间和分析精度的取舍

    正如前文反复提及,程序验证任务不仅需要保证很高的精度,也要保证分析任务在合理时间内结束。在实际验证过程中,我们发现对于一些验证目标,设定较低的State Level和State Split策略,并不会对分析精度产生任何影响。而对于一些非常耗时的验证目标,通过调整上述两个参数,能够在理想的分析时间内结束,再辅以少量的人工确认,也能够实现验证目标。

    此外,如果确定验证耗时是在特定的子函数上,可以对这个子函数写Function Contract,并且在验证时使用Contract,也能够提升分析效率。但如前文所述,给函数写Contract需要确保对函数语义完全的理解,否则会适得其反。

    另外为了提升分析效率,我们也可以对耗时的子函数进行改写。例如下面的例子:

    1565246444879492.jpg

    假设分析children函数非常耗时,通过函数定义发现它会通过参数返回两个int,那么我们可以用Interval去改写。如果能够验证y和z在所有可能取值情况下是正确的,那么在它们各自真实取值情况下也一定是正确的。

    1565246444525187.jpg

    3.2 需要适量人工参与

    形式化验证很难全自动完成。受限于要验证约束条件的复杂程度和证明器的验证求解能力,有些验证约束条件无法验证,以Undefined Behavior的形式报告出来,此时需要人工确认这些是否是真正的安全缺陷。这一步的工作量会与分析策略的设定有关,分析粒度越大,此步骤需要人工参与的工作可能越少。此外,Over-approximation也有可能引入误报,也需要人工参与剔除掉这部分误报。

    3.3 测试用例影响验证质量

    验证效果也取决于提供的测试用例的质量。编写测试用例的原则是尽可能提升分支验证的覆盖率。总体而言,在编写测试用例时可以用Interval来为参数赋值,覆盖它所有可能取值,这种方式也有助于提升代码验证覆盖率。对于具有复杂类型的参数(例如结构体变量中嵌套包含其他的结构体),有时也需要结合函数实现逻辑,来决定哪些变量需要赋值为Interval、哪些可以保留Concrete赋值,因为并不是所有变量都使用Interval就一定能带来最好的验证效果,Interval推演计算会对分析时间带来显著的开销,延长分析时间。

    3.4 验证给与的保障

    最后需要说明的是,实践中采用的形式化验证,并不能保证验证过的程序不存在任何安全缺陷——它能够保证的是,对于特定的验证对象(特定版本目标代码,和特定版本依赖库),验证给定的测试样例所能触发的代码,一定不会存在指定验证策略(例如缓冲区溢出检查、整数溢出检查等等)所约束的安全问题。但凡”软件被形式化验证过,所以绝对不会出任何安全问题“的声明,都是夸大、不严谨的。

    总结

    本文诠释了形式化验证的原理,分享了MesaTEE对实际工程项目进行形式化验证的经验,特别是对TPM核心软件栈和MesaPy C backend的验证。为了让业界少走弯路,我们列举了采用形式化验证需要考量的问题。实践证明,通过形式化验证来保证代码安全虽然成本昂贵,但通过精心设计还是切实可行的。相比于利用静态分析或动态测试的方案来评估程序安全性,形式化验证还是能够更透彻地发现程序安全缺陷,并且保障程序在给定约束下是安全的。

    作者:王明华,冯倩,张煜龙,韦韬

    [1]. Abstract Interpretation: http://www.cs.utexas.edu/~isil/cs389L/AI-6up.pdf

    [2]. A gentle introduction to formal verification of computer systems by abstract interpretation. https://www.di.ens.fr/~cousot/publications.www/CousotCousot-Marktoberdorf-2009.pdf

    [3]. Abstract Interpretation and Abstract Domains. http://www.dsi.unive.it/~avp/domains.pdf

    [4]. ACSL Mini-Tutorial. https://frama-c.com/download/acsl-tutorial.pdf

    [5] Weakest Precondition. https://en.wikipedia.org/wiki/Predicate_transformer_semantics

    [6]. TIS. https://trust-in-soft.com

    [7]. Smack. https://github.com/smackers/smack

    [8]. Seahorn. http://seahorn.github.io

    更多内容请移步:

    展开全文
  • 数据库:是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序共享。数据库存放数据是按数据所提供的数据模式存放的,具有集成与共享的特点。数据库管理系统:一...

    满意答案

    数据库系统的基本概念

    数据:实际上就是描述事物的符号记录。

    数据的特点:有一定的结构,有型与值之分,如整型、实型、字符型等。而数据的值给出了符合定型的值,如整型值15。

    数据库:是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序共享。

    数据库存放数据是按数据所提供的数据模式存放的,具有集成与共享的特点。

    数据库管理系统:一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是数据库的核心。

    数据库管理系统功能:

    (1)数据模式定义:即为数据库构建其数据框架;

    (2)数据存取的物理构建:为数据模式的物理存取与构建提供有效的存取方法与手段;

    (3)数据操纵:为用户使用数据库的数据提供方便,如查询、插入、修改、删除等以及简单的算术运算及统计;

    (4)数据的完整性、安生性定义与检查;

    (5)数据库的并发控制与故障恢复;

    (6)数据的服务:如拷贝、转存、重组、性能监测、分析等。

    为完成以上六个功能,数据库管理系统提供以下的数据语言:

    (1)数据定义语言:负责数据的模式定义与数据的物理存取构建;

    (2)数据操纵语言:负责数据的操纵,如查询与增、删、改等;

    (3)数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等。

    数据语言按其使用方式具有两种结构形式:交互式命令(又称自含型或自主型语言)宿主型语言(一般可嵌入某些宿主语言中)。

    数据库管理员:对数据库进行规划、设计、维护、监视等的专业管理人员。

    数据库系统:由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台(软件)五个部分构成的运行实体。

    数据库应用系统:由数据库系统、应用软件及应用界面三者组成。

    文件系统阶段:提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享的能力。

    层次数据库与网状数据库系统阶段 :为统一与共享数据提供了有力支撑。

    关系数据库系统阶段

    数据库系统的基本特点:数据的集成性 、数据的高共享性与低冗余性 、数据独立性(物理独立性与逻辑独立性)、数据统一管理与控制。

    数据库系统的三级模式:

    (1)概念模式:数据库系统中全局数据逻辑结构的描述,全体用户公共数据视图;

    (2)外模式:也称子模式与用户模式。是用户的数据视图,也就是用户所见到的数据模式;

    (3)内模式:又称物理模式,它给出了数据库物理存储结构与物理存取方法。

    数据库系统的两级映射:

    (1)概念模式到内模式的映射;

    (2)外模式到概念模式的映射。

    4.2 数据模型

    数据模型的概念:是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架。描述了数据结构、数据操作及数据约束。

    E-R模型的基本概念

    (1)实体:现实世界中的事物;

    (2)属性:事物的特性;

    (3)联系:现实世界中事物间的关系。实体集的关系有一对一、一对多、多对多的联系。

    E-R模型三个基本概念之间的联接关系:实体是概念世界中的基本单位,属性有属性域,每个实体可取属性域内的值。一个实体的所有属性值叫元组。

    E-R模型的图示法:(1)实体集表示法; (2)属性表法; (3)联系表示法。

    层次模型的基本结构是树形结构,具有以下特点:

    (1)每棵树有且仅有一个无双亲结点,称为根;

    (2)树中除根外所有结点有且仅有一个双亲。

    从图论上看,网状模型是一个不加任何条件限制的无向图。

    关系模型采用二维表来表示,简称表,由表框架及表的元组组成。一个二维表就是一个关系。

    在二维表中凡能唯一标识元组的最小属性称为键或码。从所有侯选健中选取一个作为用户使用的键称主键。表A中的某属性是某表B的键,则称该属性集为A的外键或外码。

    关系中的数据约束:

    (1)实体完整性约束:约束关系的主键中属性值不能为空值;

    (2)参照完全性约束:是关系之间的基本约束;

    (3)用户定义的完整性约束:它反映了具体应用中数据的语义要求。

    4.3关系代数

    关系数据库系统的特点之一是它建立在数据理论的基础之上,有很多数据理论可以表示关系模型的数据操作,其中最为著名的是关系代数与关系演算。

    关系模型的基本运算:

    (1)插入 (2)删除 (3)修改 (4)查询(包括投影、选择、笛卡尔积运算)

    4.4 数据库设计与管理

    数据库设计是数据应用的核心。

    数据库设计的两种方法:

    (1)面向数据:以信息需求为主,兼顾处理需求;

    (2)面向过程:以处理需求为主,兼顾信息需求。

    数据库的生命周期:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。

    需求分析常用结构析方法和面向对象的方法。结构化分析(简称SA)方法用自顶向下、逐层分解的方式分析系统。用数据流图表达数据和处理过程的关系。对数据库设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。

    数据字典是各类数据描述的集合,包括5个部分:数据项、数据结构、数据流(可以是数据项,也可以是数据结构)、数据存储、处理过程。

    数据库概念设计的目的是分析数据内在语义关系。设计的方法有两种

    (1)集中式模式设计法(适用于小型或并不复杂的单位或部门);

    (2)视图集成设计法。

    设计方法:E-R模型与视图集成。

    视图设计一般有三种设计次序:自顶向下、由底向上、由内向外。

    视图集成的几种冲突:命名冲突、概念冲突、域冲突、约束冲突。

    关系视图设计:关系视图的设计又称外模式设计。

    关系视图的主要作用:

    (1)提供数据逻辑独立性;

    (2)能适应用户对数据的不同需求;

    (3)有一定数据保密功能。

    数据库的物理设计主要目标是对数据内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度有效利用存储空间。一般RDBMS中留给用户参与物理设计的内容大致有索引设计、集成簇设计和分区设计。

    数据库管理的内容:

    (1)数据库的建立;

    (2)数据库的调整;

    (3)数据库的重组;

    (4)数据库安全性与完整性控制;

    (5)数据库的故障恢复;

    (6)数据库监控。

    参考资料:http://www.exam8.com/computer/ShowArticle.asp?ArticleID=18424

    00分享举报

    展开全文
  • 常见的电脑故障及排除方法电脑常见故障检测一般应遵循:先软后硬的原则,下面是YJBYS小编整的常见的电脑故障及排除方法,希望对你帮助!1、问: U盘和移动硬盘无法正常安全删除应如何解决?答:在xp下使用usb设备...
  • 形式化的描述语言有多种,如一阶逻辑,Z语言,时序逻辑等。采用形式方法可以有效提高系统的安全性、一致性和正确性,帮助分析复杂系统并且及早发现错误。形式化验证是保证系统正确性的重要方法,主要包括以数学、...
  • 生产计划排产计划的模式几种?生产计划排产计划操控中三种模式:事先操控方式方法、事中操控方式方法和事后操控方式方法。 一、事先控制方式方法 充分利用前馈实践经验实施操控,重中之重放到事先计划与决策。...
  • 年前到某著名大学参加学术活动,无意中听到该校两位老师闲聊,现在还记得的一句话就是“形式方法已经不行了”。看来真是隔行如隔山,评价自己不熟悉的领域,而且随便说,难免出错。在对形式方法了解的更多的...
  • 泛型就这么简单

    2021-01-17 14:30:47
    前言从今天开始进入Java基础的复习,可能一个星期会一篇的,我写博文的未必都是正确的~如果写错的地方请大家多多包涵并指正~今天要复习的是泛型,泛型在Java中也是个很重要的知识点,本文主要讲解基础的概念,...
  • 1.传统非接触式涂层厚度测量方法 ...如图2所示,有几种光热反应的测量方法。例如:检测样品表面红外辐射的光热辐射法、利用麦克风以声波形式检测样品周围气体的热膨胀方法(麦克风光声法)、利用压电元件
  • 形式化验证工具调研

    2021-08-03 20:46:12
    形式化验证主要分为:模型检测(又称模型检验)和定理证明两种方法。 以下为调研后整理的笔记。 (其中模型检测工具部分,引用了博主yisun03的这篇博客。) 模型检测步骤与工具 模型检测的步骤: 1. 抽象出系统的数学...
  • 定义 DNS劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,...域名解析(DNS)的基本原理是把网络地址(域名,以一个字符串的形式)对应到真实的计算机能够识别的网络地址
  • C#调用DLL的几种方法

    千次阅读 2020-12-28 22:33:44
    即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现。 动态链接库是不...
  • 这一年来,网络安全行业兴奋异常。各种会议、攻防大赛、黑客秀,马不停蹄。随着物联网大潮的到来,...安全牛整合多位资深安全顾问的一线咨询经验,首次公开发布《网络安全体系方法论》,旨在给企业或机构提供一个最佳实
  • str为字符串s为字符串str.isalnum() 所有字符都是数字或者字母str.isalpha() 所有字符都是字母str.isdigit() 所有字符都是数字str.isspace() 所有字符都是空白字符、t、n、r检查字符串是数字/浮点数方法float部分>...
  • 同时对黑盒测试的几种方法进行的比较,最后介绍了常用的几种黑盒测试的工具。 一:1.等价类划分 在软件测试中,穷举法虽然是最安全最保险的一种方法但成本代价高,一般是不可取的。我们可以通过等价类划分方法花费...
  • 摘要:图片上传是网站常用的程序模块,本文浅析php判断图片后缀格式的7方式。正文:使用php判断文件图片的格式$imgurl = "/img/readers.gif";//方法1echo $ext = strrchr($imgurl,'.');echo '';//方法2echo $ext1 ...
  • 给我们提供了5数据的存储方式1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 网络存储数据不同的业务逻辑,或者需求,用不同的实现方式,以下是这中数据...
  • 访问控制的几种模式

    千次阅读 2021-06-20 22:51:32
    由客体的属主对自己的客体进行管理,由属主自己决定是否将自己的客体访问权或部分访问权授予其他主体,这种控制方式是自主的,也就是说,在自主访问控制下,用户可以按自己的意愿,选择地与其他用户共享他的文件。...
  • 这里写目录标题系统弱口令检测Joth the Ripper ,...系统弱口令检测 Joth the Ripper ,简称JR ... 安装JR工具 安装方法:make clean 系统类型 主程序文件为 john 检测弱口令账号 获得Linux/Unix服务器的shadow文件 执
  • 为此我们推出CT-Scan,其主要原理是基于代码的形式验证,简单说就是对程序代码进行数学建模,并进行推理,解决代码的正确性,安全性等问题。 CT-Scan能高效地把代码转化为等价的分离逻辑公式,并归结为命题逻辑,...
  • 工作中使用的是TP框架,在工作之余接触了一下Yii框架和Laravel框架,为了更好的了解几种框架,此处总结一下几种框架各自的优势及缺点。写在前面:最近发现了一款国产php框架,名叫神农php框架,刚刚起步,已经发布了...
  • 2018/06/13 重新编辑排版什么是跨域?同源策略是由 Netscape ...当浏览器执行一个脚本时会检查是否同源,只有同源的脚本才会执行,如果不同源即为跨域跨域的几种方式在实际项目中,经常会遇到在一个域名下请求另外...
  • 跨域的7方式

    2021-01-10 14:39:32
    JSONP(json with padding)是一借助script元素实现跨域的技术,它不会使用XHR对象。 script 元素以下两个特点 1.它的src属性能够访问任何URL资源,不会受同源策略的限制。 2.如果访问的资源包含js代码,那么在...
  • PHP检测一个数组没有定义的方法步骤php中定义数组的方法:1、PHP定义数组的格式:数组名=array();如:$aa=array();//这样就定义了一个数组,之后给元素赋值:$aa[0]="9016";$aa[1]="9017";$aa[2]="9018";2、PHP...
  • 该文阐述了应用计算机软件安全检测技术时应注意的问题,并以此为切入点分析了计算机软件安全检测技术的具体应用方法,旨在为同行业的相关人士提供参考与借鉴。关键词:计算机软件 安全监测技术 方法中图分类号:TP...
  • 上次分享的基础题:53道常见NodeJS基础面试题(附答案),这次来点难的,看看你能答对个?1、Node模块机制1.1 请介绍一下node里的模块是什么Node中,每个文件模块都是一个对...
  • 请说一下泛型的作用,泛型类和泛型方法有什么区别? 2. 题目剖析 关于泛型,对于初学Java的学生来说,其实并不是很容易理解,刚开始的时候,可能拿不准这个泛型到底是干嘛的。但是开发时,泛型用的还是很多的,...
  • 实现互斥的几种方案

    2021-08-13 19:13:53
    在单处理器系统中,最简单的方法是使每个进程在刚刚进入临界区后立即屏蔽所有中断,并在就要离开之前再打开中断。屏蔽中断后,时钟中断也被屏蔽。CPU只有发生时钟中断或其他中断时才会进行进程切换,这样,在屏蔽...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,528
精华内容 93,011
关键字:

安全检查方法有几种形式