0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将实时Java添加到MILS操作系统

星星科技指导员 来源:嵌入式计算设计 作者:DR. KEVIN NILSEN 2022-11-10 16:46 次阅读

多独立安全级别 (MILS) 操作系统支持安全部署多个应用程序,每个应用程序表示属于不同安全领域的数据。编写用于使用 MILS 操作系统部署的软件需要注意主流操作系统上不需要的细节。在 MILS 操作系统中集成 Java 虚拟机 (VM) 可简化 MILS 应用软件的开发。

通常,多独立安全级别 (MILS) 操作系统是更通用的实时操作系统的特殊配置,旨在简化支持多个独立安全级别的软件系统的开发。这种系统在军事场景中尤其常见,例如,同一计算机系统可能需要将属于一个国家政府的绝密数据与属于北约等政府联盟的机密数据隔离开来(图1)。

图1:配置为限制分区之间信息流的安全 MILS 操作系统

pYYBAGNsulKAVma5AAB5AvL0wvM782.jpg

从概念上讲,MILS 操作系统维护逻辑分区以隔离内存、CPU 时间和特定应用程序可访问的其他资源,并限制在不同逻辑分区中运行的应用程序之间的交互。为一组特定的应用程序配置 MILS 操作系统允许开发人员建立控制分区之间交互的规则。例如,规则可能声明仅允许分区 A 将消息传递到分区 C 和 D。

MILS 分区的理想是降低证明系统足够安全所需的安全审核成本。操作系统的分区实现由操作系统供应商认证为安全,此认证的费用由所有被许可方分担。鉴于操作系统可以保证在不同分区中运行的应用程序之间没有通信,因此了解和记录每个应用程序的安全敏感行为所需的工作量要少得多。将 Java 虚拟机 (VM) 添加到 MILS 操作系统可极大地简化应用程序软件到 MILS 环境的移植和开发。

案例研究:在 MILS 环境中部署软件的实用性

为了便于安全审计以确保独立分区之间没有通信,开发 MILS 操作系统的公司通常会将操作系统提供的服务集限制为在 MILS 分区内运行的应用程序。每个 MILS 环境在有效执行 Java 虚拟机方面都面临着不同的挑战。让我们看一下应军事和航空航天工业客户的要求将实时虚拟机产品移植到特定的商用现货 (COTS) MILS 操作系统时遇到的一些问题。

在此 MILS 操作系统中遇到的限制中,此 MILS 操作系统为确保系统安全而实施的一些约束包括:

无法写入程序的文本段。

系统没有提供用于设置环境变量的命令行工具。

该系统不支持本地图书馆的动态链接。

虽然不是此 COTS MILS 操作系统的一般限制,但我们客户的目标平台缺少文件系统。

鉴于这些限制(这是深度嵌入式 MILS 部署的典型限制),很明显,在大多数现成的应用程序在此环境中运行之前,需要大量的移植和集成工作。Java的可移植性提供了显著降低这种移植和集成工作成本的潜力。

Java 与 MILS 应用的相关性

Java与安全软件的开发特别相关,因为该语言比C和C++更强烈。自从早期开发专注于互联网应用程序的Java语言以来,安全性在其设计中一直至关重要。例如,Java禁止指针和非指针数据类型之间的强制,并且禁止指针算术。此外,每次访问 Java 数组都会执行数组边界检查。抛出异常,而不是允许软件应用程序超出数组有效数据的末尾。同样,Java 运行时环境会检查堆栈溢出并引发异常,而不是允许线程践踏超出线程分配堆栈末尾的内存。通常,Java 语言中内置的这些安全功能完全消除了通常在特洛伊木马和病毒软件的实现中利用的绝大多数漏洞,这些漏洞通常会感染 C 和 C++ 应用程序。

Java的一个优势与在MILS环境中实现新软件功能的挑战特别相关,因为与更传统的语言相比,Java显着减少了实现,移植和将独立开发的软件组件集成到工作应用程序中所需的工作量。代表性项目发现,开发人员在开发新功能时的效率通常是其两倍,而在使用 Java 而不是 C 或 C++ 工作时,重用软件组件的工作效率通常提高 10 倍。这是因为 Java 语言支持更高级别的抽象,更具可移植性,并且鼓励比 C 和 C++ 更紧密的封装。这些好处的价值在经验报告中得到了强调,如图 2 所示。

图2:Java与开发专用、安全的专用系统的相关性

pYYBAGNsulOAJ9T3AACEKhwMn70421.jpg

内置的跟踪垃圾回收功能(可自动回收与应用程序不再相关的动态分配对象的内存)是一项 Java 功能,它使将独立开发的 COTS Java 组件集成到 MILS 应用程序中变得特别容易。每当一个对象由一个组件分配并由其他组件使用时,C 或 C++ 工程师都需要设计和实现一个协议,用于检测对象的使用寿命结束并回收其当时的内存。使用Java,自动检测和回收死对象,并且回收的内存会自动进行碎片整理,这是大多数自动垃圾收集技术的宝贵副作用。除了减少开发和集成软件组件所需的智力工作外,此功能还消除了调试与悬空指针、内存泄漏和内存碎片相关的许多常见内存管理编程错误的需要。

因此,能够用Java语言实现MILS应用程序是非常可取的。该语言比 C 和 C++ 等传统传统语言更安全,它减少了实现定制功能所需的工作量,并且在重用和集成独立开发的软件组件期间节省了大量成本。

将 Java VM 移植到 COTS MILS 环境

要在 MILS 分区中部署 Java 软件,首先需要在 MILS 分区中安装 Java 虚拟机运行时环境。Java 虚拟机提供标准 Java 库、Java 类装入器、Java 字节码解释器和/或实时 (JIT) 编译器,以及跟踪垃圾回收器的实现。有了 Java 虚拟机,Java 编程的所有传统优势都很容易获得。

鉴于 MILS 环境提供的服务通常比同一操作系统的类似非 MILS 配置少得多,因此已配置为在传统或实时操作系统上运行的虚拟机产品可能不会在 MILS 分区中运行。最近,一位客户要求我们为特定的 COTS MILS 操作系统环境提供虚拟机支持。

由于 MILS 环境施加的 MILS 限制,有一些 Java 功能无法得到支持。但在大多数情况下,所描述的虚拟机技术的 MILS 配置支持所有标准版 Java。以下五个部分构成了 Java 配置的基本原理和可用解决方法的案例研究。

#1 – 高保证网络堆栈 (HANS)

根据其支持提高安全性的目标,客户选择的 MILS 操作系统在分发时可以选择使用高保证网络堆栈。此网络堆栈在隔离的 MILS 分区中运行,允许它以非常高的优先级运行,而不会影响为其他 MILS 分区预算的公平 CPU 时间份额。将网络堆栈放在自己的小分区中,可以将堆栈与单个应用程序中的错误隔离开来。不同分区中的应用程序可能会崩溃并重新启动,而不会影响 HANS 的完整性。此外,HANS 消耗的 CPU 时间和内存资源受到其运行分区约束的限制。这为网络堆栈实现提供了针对拒绝服务攻击的某些保护。

鉴于专用于 HANS 实现的内存量和 CPU 时间受到 MILS 操作系统的限制,只有 HANS 分区本身受到另一台计算机的网络通信请求的影响,以高于其准备处理的速率与此计算机进行交互。虽然在这种情况下,HANS 可能会丢弃数据包,但在其他 MILS 分区中运行的应用程序不会受到拒绝服务攻击的影响。

虚拟机与此 MILS 环境的集成支持 HANS 的使用,从而适应了 HANS 和标准网络堆栈 API 之间的少量差异。特别是,HANS 未枚举为特定 MILS 虚拟板配置配置的网络设备。相反,命令行选项允许系统集成商提供已配置网络设备的列表。域名服务函数 gethostname() 和 hostGetByName() 也不被 HANS 支持。Atego Perc Ultra 虚拟机技术的 MILS 集成为客户提供了在必要时使用这些服务的专有基于表的查找来实施这些服务的机会。

#2 – 不调试已编译的代码

由于 MILS 环境禁止写入文本段,因此无法在静态编译并链接到运行时映像的 Java 代码中设置断点。

但是,需要调试功能的 Java 开发人员可以使用几种方法。首先,由于Java是一种可移植的编程语言,因此通常可以在功能更全的平台上完全调试应用程序,然后将调试后的应用程序部署在MILS平台上。其次,如果在 MILS 环境中调试是绝对必要的,那么仍然可以调试以解释字节码运行的 Java 应用程序。

#3 – 没有动态加载本机库

许多 Java 应用程序由 Java 和本机代码的组合组成,通常用 C 或 C++ 编写。当本机组件是 Java 应用程序的一部分时,最常见的是在 Java System.loadLibrary 服务的指导下动态加载本机代码。此服务在实时虚拟机的 MILS 集成中不可用。相反,系统集成商可以选择静态链接本机库。

#4 – 专用虚拟文件系统

为了支持缺乏文件系统支持的 MILS 平台,我们实现了虚拟文件系统作为 MILS 端口的一部分。此虚拟文件系统允许 Java 应用程序创建、写入和读取存储在内存中的文件数据。虚拟文件系统的可用性使得测试虚拟机实现和将现成的 Java 代码移植到 MILS 平台上变得更加容易,否则这些平台将缺少文件支持。

#5 – 没有环境变量

环境变量通常用于保存关键配置数据,以方便用户。环境变量指定的配置选项不需要在每次启动应用程序时在命令行上重复。由于 MILS 环境不为用户提供设置环境变量的能力,因此这种便利性通常不可用。相反,MILS Java 应用程序通常以命令行参数的形式接收配置数据。

Java降低了成本,增加了MILS软件系统的可靠性

在 MILS 操作系统分区中启用 Java 开发非常有意义。虚拟机技术(如Atego Perc Ultra)使得在MILS上运行标准版Java成为可能,为利用多个独立安全级别的项目提供成本节约和可靠性优势。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10550

    浏览量

    207714
  • 操作系统
    +关注

    关注

    37

    文章

    6412

    浏览量

    122333
  • JAVA
    +关注

    关注

    19

    文章

    2919

    浏览量

    103376
收藏 人收藏

    评论

    相关推荐

    微内核实时操作系统的介绍

    微内核实时操作系统(Microkernel Real-Time Operating System, μRTOS)是一种专为实时设计的操作系统。它采用微内核架构,以提高
    的头像 发表于 05-11 17:13 200次阅读

    带你认识实时操作系统(rtos)

    实时操作系统(RTOS)是为嵌入式系统实时应用提供一个稳定、可预测和高效运行环境的操作系统实时
    的头像 发表于 04-16 16:30 452次阅读
    带你认识<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>(rtos)

    再谈嵌入式实时操作系统

    程序的可移植性得到了增强,系统开发的工作量减轻的同时也提高了开发效率。对实时性和可靠性日益增长的要求正在塑造某些现代领域的嵌入式实时操作系统的发展方向,例如航空航天、工业控制、汽车电子
    的头像 发表于 04-09 17:27 382次阅读
    再谈嵌入式<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>

    怎么把stlink server添加到keil里?

    stlink server的使用说明里面是支持keil5.25的。怎么把stlink server添加到keil里?
    发表于 03-27 07:28

    如何F-RAM™添加到现有的PSoC™ Creator项目?

    我们在PSoC™ Creator 中有一个 PSoC6 项目,并希望 QSPI F-RAM™存储器添加到TDA5235_868_5_BOARD中。我很难找到如何在F-RAM™ PSoC
    发表于 03-01 12:14

    FCX3是否具有PTS或SCR添加到映像帧的功能?

    问题 1) FCX3是否具有PTS或SCR添加到映像帧的功能,如随附的USB规范中所述? 如果可能,请提供有关如何配置每个 PTS 和 SCR 的详细信息。 问题 2) CAN FCX3 支持1080x1280@120fps传输带宽? 如果这很困难,请让我知道实际使用
    发表于 02-26 08:23

    如何TC1798器件添加到MDK KEIL?

    我正在尝试使用 KEIL MDK(µVision)为英飞凌TC1798编程,但我不确定如何TC1798器件添加到MDK KEIL。 谁能帮我拿到 .pack 或者.zip 对于 TC1798?
    发表于 02-01 08:18

    详解实时操作系统和非实时操作系统

    实时操作系统,当外界事件和数据产生时,系统能以足够快的速度予以处理,其处理结果能在规定的时间内控制生产结果或对系统做出响应,并控制所有实时
    的头像 发表于 12-26 09:54 2723次阅读
    详解<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>和非<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>

    什么是实时操作系统(RTOS)

    实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统实时应用程序需要在特定时间内做出预测的响应,因此 RTOS 专注于提供对时间约
    的头像 发表于 11-23 17:14 2373次阅读

    安装python怎么添加到环境变量

    Python是一种简单易学的脚本语言,广泛应用于开发各种类型的应用程序。为了在Windows操作系统上使用Python的命令行工具,需要将Python添加到系统的环境变量中。本文将向您详细介绍如何在
    的头像 发表于 11-23 16:40 1092次阅读

    Mentor PADS将PCB封装直接添加到PCB的教程

    一般,批量添加封装到PCB板上有以下方法: 第一步:点击菜单栏“ECO模式--添加元器件”如图,点击以后弹出如图界面。 1)元件类型 PCB封装必须得添加完元件类型,才能通过ECO模式添加到
    的头像 发表于 11-07 07:45 3749次阅读
    Mentor PADS将PCB封装直接<b class='flag-5'>添加到</b>PCB的教程

    实时操作系统的滴答Tick设置多少才合适?

    实时操作系统的滴答Tick设置多少才合适? 介绍实时操作系统中Tick的设置。 在实时操作系统
    的头像 发表于 10-29 16:33 604次阅读

    到底啥是实时操作系统呢?它到底实时实时呢?

    到底啥是实时操作系统呢?它到底实时实时呢? 实时操作系统(Real Time Operatin
    的头像 发表于 10-29 16:33 842次阅读

    西门子博途S7-1200:将模块添加到机架的方法

    在网络视图中将设备从硬件目录添加到组态后,即可向设备中添加模块。
    的头像 发表于 09-04 15:22 5209次阅读
    西门子博途S7-1200:将模块<b class='flag-5'>添加到</b>机架的方法

    linux是实时系统还是分时操作系统

    大家平时玩单片机基本上对于µC/OS、FreeRTOS、ThreadX这些操作系统非常熟悉了,他们都属于实时操作系统(RTOS),在工业领域比较广泛;
    的头像 发表于 08-18 09:48 1523次阅读