分享

计算|可信计算测试成为提升美国军事应用软件安全性的重要手段

 大国重器元器件 2020-09-11

引言

军事系统中应用软件是作战人员执行各项任务的基础,其代码的可信安全十分重要。所有其它软硬件只用于安全启动军事应用软件,一旦启动,这类软件便独立运行。软件设计人员需特别留意以确保其功能符合预期。

大多数军事应用软件都是为执行特定的任务或运行特定的算法而定制的,目前,相对于开源软件甚至是大多数商业软件,很少有软件工程师能查看军事应用软件代码。因此,对于软件的功能是否符合预期进行特别留意就非常困难。因为通常只有很少一部分的系统开发者有机会查看其应用代码。

这就可能导致未知的缺陷,使情况变得更加糟糕。因为通常来说升级其应用代码的机会很少,而且遥不可及。军事系统中的应用代码属于特定技术规范;一经测试,系统就会被部署,与通用系统相比,重新测试的次数要少得多。

让问题更为复杂的是,部署后的系统将难以进行技术更新。受到时间、预算以及任务要求的制约,一旦这类软件投入使用,几乎不可能对其进行升级。即使用户发现了代码问题或者安全漏洞,重新部署系统的成本也无法想像。

另一方面,在部署之前发现、修复和测试软件问题所需的时间和成本要少得多;系统开发者从一开始就必须对应用代码做出正确决断。

计算机硬件在保护操作系统和可信计算应用的管理程序方面的作用

军事应用软件可以分为几个类别:库、中间件和用于执行特定功能的定制代码。定制的中间件需要特别仔细的审查,因为它经常被广泛回收重用。中间件提供了将库与应用程序结合在一起的黏合剂,其任何漏洞都可能使整个系统易受恶意网络攻击的影响。

软件工程师最好对系统进行组织管理,这样系统功能和输入端自然就会各自有序进行。对应用程序中的用户和内核空间进行正确分配也是很重要的。程序设计者应将内核空间中的运行代码数量降至最低,以减少安全漏洞。内核空间具备高权限,能够深入访问系统资源,因此这要求开发人员合并相关功能。这样,他们就不需要访问应用的其他部分。

转移大量数据也会产生安全问题。大型数据集倾向于在可信之处进行移动,因为大量数据在高速转移过程中的加密效率很低。此外,某些系统必须共享大量数据,特别是当算法的可执行部分位于多个位置时;很难以安全的方式验证和确认这些数据。

对算法进行划分是更佳解决方案,将某部分的算法视为黑匣子,应用软件对其内部工作原理无从了解。应用程序可以命令这些黑匣子运行算法的特定部分,并收到一个简单的是或否作为答复。这在应用之间提供了更加明确的信息流。这种数据流很容易被核实,因为它能验证系统收发的信息的有效性。这种方法还有助于封装信息以支持加密和身份验证。

系统设计者应根据安全边界逻辑分明地定义信息流。最好减少逻辑互连的数量和复杂性,因为每个连接都是可能的渗透点。设计者必须检查、锁定、测试以及验证每个连接,同时考虑采用安全信息传递机制,确保数据来自受信来源。

操作过程中维护网络安全的可信计算硬件特性

安全编码实践从一开始就是设计中的应用安全性的重要部分。使用主要软件语言的标准程序可以最大限度减少程序员错误带来的安全漏洞。最著名的例子是CERT,其他的有MISRADO-178CIEC61508ISO 2626262

使用安全编码也可以消除无意错误的可能性。一种机智的方法是让所有应用程序编程人员了解、遵守规则,并提交同行评审。自动化工具可以扫描代码并验证是其否遵守规则。若是与编码规则一致,编程人员也可穿梭于不同项目之间,而不会引起不必要的安全问题。

资金限制会导致程序缩水,当这种情况发生时,程序管理人员可能会取消安全性测试。然而,这样做可能会导致严重的缺陷和漏洞。为程序的前端测试做好预算工作是非常重要的。

静态代码分析是分析应用组件协同工作的一种方法,它用工具检查代码是否存在任何的潜在问题。软件工程师通常可以使用相同的插件工具,以确保安全标准的统一性,进行静态代码分析。这些工具包括CoveritycppcheckKlocworklintParasoftUnderstand。这些工具有的适用于多种语言,有的基于特定于语言,有的是商业的,还有一些是免费的开源软件。

使用动态代码分析工具可以帮助软件开发者分析应用程序在测试条件下的运行情况。动态代码分析监测系统正在做什么,并在后台工作,使系统开发人员能够对程序进行正常的输入和输出测试,确保一切正常工作。软件工程师可以虚拟、模拟化动态代码分析,或将其作为可执行代码封包。

可信引导:确保嵌入式计算系统可靠性的关键策略

静态和动态代码分析从不同角度看问题,产生不同的结果。静态代码分析通常会上报更多的错误,因为它会标记所有细微的错误。另一方面,动态代码分析可以保证相同的错误不再发生,并确保在不同执行线程之间正确地共享数据。提供动态代码分析的工具包括BoundsCheckerdmallocParasoft Insure+PurifyValgrind

对应用代码开发者来说,另一个重要的决定就是采用回归测试还是持续性测试。在应用经过验收测试或其他进一步的测试之前,回归测试可能发现不了明显故障。

持续性测试在持续的基础上运行测试,以尽早发现问题。它包括一个安全专用的测试设备,以快速识别软件更改,打破了某些应用的安全限制。尽管这可能会增加前端成本,但它可以降低后端成本。

基于COTS的可信计算:着手开发下一代关键任务电子产品

有些处理器,如英特尔SGX,具有内置的安全特性。该处理器要求软件开发者在应用程序中创建独立区域,以便处理器能够正常工作。如果程序员需要密钥来加密某些数据,他可以将变量放入程序库,并在必要时将其传送出去。因特尔 SGX还为相同的操作提供了高级别的安全性。独立区域将加密密钥与其他系统功能分离,可以防止网络攻击者威胁系统安全。

另一个具有安全特性的专用处理器是Arm TrustZone,它允许Arm处理器将内存、操作系统和应用程序分离至受信任和不受信任区域。TrustZone确保只有可信区域才能访问可信数据。

密码学的一个主要原则是不可单独构建;它很复杂,容易出错。使用已有的、易得的、并且通过用户反馈不断更新的东西会更加安全明智。要利用操作系统中已有的安全库,如OpenSSLIPsec

大多数软件操作系统都支持强制式策略(MACs),它允许开发者创建配置文件,以明确不同人群如何使用应用程序及其资源。支持这种策略的操作系统有SE LinuxWindows完整性级别。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多