一.微内核架构

- QNX操作系统由微内核以及一组协作的系统服务进程组成
- 服务进程与操作系统内核是相互隔离开的,当服务进程出问题时并不会影响内核
- 微内核提供软件总线供各个软件模块进行通信和协作
- 内核只提供最小化的基础/公共服务
- 高度模块化设计带来良好的系统隔离性,为微内核的可靠性提供了保障

- 进程间通信是QNX内核提供的核心功能
- 用户可以通过开发定制化的应用程序来增强系统功能
- 用户程序与系统程序通过进程间通信进行协作构成一个有机的整体
- 操作系统以一种扁平化的结构组织
- 操作系统通过路径管理器等系统服务支持用户的服务的动态加入

微内核架构的 trade off
-
Benefits
-
resilience and reliability 弹性和可靠性
-
ease of configuration and reconfiguration 易于配置
-
ease of debugging development 易于调试开发
-
Scalability 可扩展性
-
Cost: System overhead
- More context switches 更多上下文切换
- More copies of data 更多数据拷贝
二.进程管理

- 进程管理器和内核共同组成了procnto,与内核共享同一个地址空间
- 负责进程管理,创建和结束
- 负责内存保护,地址空间管理
- 负责路径名字管理pathname management
- 以及一些基础的资源管理器
三.资源管理器

- io func layer,提供了所有POSIX对文件可以进行的io操作;
- res mgr layer,提供了登记路径名,接收数据并分发给io func执行具体操作;
- dispatch layer,识别不同的输入信息,然后转给不同的处理函数进行处理;
- thread pool layer,提供了一个线程池管理,可以配置实现多个线程进行资源管理。
四.线程调度-线程状态

调度示例

- 线程优先级从低到高0(idel)->255
- 内核总是选择从ready状态任务队列中优先级最高的线程抢占CPU运行
五.Security-概述

- 系统安全源于系统设计;
- 系统架构也主要决定了系统的安全性;
- 系统安全以类似洋葱的形式立体构建,层层防护。
六.Security-Filesystem Security
文件系统完整性怎么保证?
QNX Trusted Disk,可信文件系统,只读文件系统,其会对文件的完整性进行校验,通过该文件系统可以扩展secure boot 的过程。一般在其中存储基础的系统服务,关键应用服务,以及一些固定的配置文件。

七.Security Boot概述
- 安全启动基于信任链
- 信任根 Root of trust:基于芯片级不可算改的Boot ROM和OTP
- 整个启动过程通过上一级对下一级逐级进行完整性和合法性的校验
- Bootloader阶段一般依赖于芯片公司的解決方案
- QNX IFS之后的文件系统使用QNX的解决方案
- 校验过程一般是先对目标内容先进行hash,然后再对hash进行验签

八.Security Policy MAC


九.Security-Pathtrust
怎么阻止非信任的程序执行呢?

十.Security-DOS & APS
嵌入式的拒绝访问攻击怎么应对?
- 当一个恶意程序以高优先级运行可能会把整个系统的CPU资源耗尽,导致其他较低优先级的任务无法及时的执行;
- 通过使能自适应分区调度后,可以将系统分成不同的区,如把第三方的程序分在一个单独的调度分区中并限定一个合理的资源,这样即使有异常实施DOS攻击也不会影响到其他分区中的任务正常执行。

十一.Security-Access Control DAC
-
指定服务单独的用户ID和组ID:
-
在POSIX权限的基础上可以进一步调节访问权限;
-
只有root程序能使用该功能。

十二.Security-程序加固方案
怎么让开发的程序不被病毒感染?
- 该类保护比较倾向于是在程序编译阶段,做编译参数的加固以提升程序的安全性;
- Stack protection 堆栈保护;
- RELRO(Relocation Read-Only)保护动态库加载的全局符号表GOT;
- ASLR(Address Space Layout Randomization)随机地址布局;
- Memory allocation check 检测内存申请和释放,如重复释放
- Fortified System Functions强化系统功能,检査内存越界访问
- Compiler defenses其他的编译器防御参数,如-fPIC
- 随机数使用,建议使用 QNX randon服务而非ibc的接口
- 使用命令 qchecksec来检查程序的安全加固状态
- Resource manager加固,启动权限,消息检测和权限检测
