Upload
addison-riddle
View
59
Download
0
Embed Size (px)
DESCRIPTION
Overshadow Tech. Agenda. 要解决的问题. 内存中的 code & data 保护 不改变现有操作系统 不改变被保护的程序. 假设前提. 任何 OS 不被信任. 关键思路. 内核 (OS Kernel) 只能看到密文 (Encrypted Page) 受保护应用能看到明文( Decrypted Page ). 一个客户机物理页( GPPN )对应多个实际物理页 (MPN), 从而对同一客户机物理地址根据 Context 不同而展现不同的内存内容. 基本流程图. 1 , 5 : OS 读 / 写,对内存加密,成为密文。 - PowerPoint PPT Presentation
Citation preview
Overshadow Tech.
Agenda
要解决的问题• 内存中的 code & data 保护• 不改变现有操作系统• 不改变被保护的程序
假设前提• 任何 OS 不被信任
关键思路• 内核 (OS Kernel) 只能看到密文 (Encrypted
Page)
• 受保护应用能看到明文( Decrypted Page )
• 一个客户机物理页( GPPN )对应多个实际物理页 (MPN), 从而对同一客户机物理地址根据 Context 不同而展现不同的内存内容
基本流程图• 1 , 5 : OS 读 / 写,对
内存加密,成为密文。
• 3 : APP 读,解密,并赋予只读属性
• 2 , 4 : APP 写,如果是从密文状态( 2 ),则解密。如果是从只读状态( 4 ),解密。
Overshadow Architecture
Hardware
VMM
Apps
OS Kernel
Uncl oaked Shi m
Cl oaked Shi m
Cl oaked App.
VMM 层主要作用:• 判断当前所处
Context
• 提供加密 / 解密功能
Overshadow Architecture
Hardware
VMM
Apps
OS Kernel
Uncl oaked Shi m
Cl oaked Shi m
Cl oaked App.
• Uncloaked Shim– kernel 与 cloaked app.
之间的数据交换
– 用于从 kernel 陷入回 VMM 的代码(因此可以返回 Cloaked Shim ) (trampoline)
Overshadow Architecture
Hardware
VMM
Apps
OS Kernel
Uncl oaked Shi m
Cl oaked Shi m
Cl ocked App.
• Cloaked Shim– Cloaked Thread Conte
xt (CTC) 存放于此– Cloaked Dispatch Han
dler (proxying the system call)
– 一个用于加载 Cloaked App. 的 loader
Overshadow Architecture
Hardware
VMM
Apps
OS Kernel
Uncl oaked Shi m
Cl oaked Shi m
Cl oaked App.
• Cloaked Application– 被保护的第三方程序
任务 (Scenario)
• 启动过程 ( 加载过程 )
• 中断与异常处理• 系统调用
任务 - 启动过程 ( 加载过程 )
任务 - 中断与异常处理1. 发生 Fault ,控制
移交到 VMM 层。
任务 - 中断与异常处理2. VMM 层保护当前
App. 的寄存器到CTC 中。将中断返回 IP 和使用 SP 指向弹簧函数(Uncloaked Shim)
移交控制到 OS前清空通用寄存器
任务 - 中断与异常处理3. OS 正常中断 / 异
常处理4. 弹簧函数会调用
self-identifying call 回到 VMM 层
5. VMM 层恢复 App.的寄存器,交还控制权
任务 - 系统调用• 与中断 / 异常处理最主要区别:
–涉及 Cloaked App. Data 与 OS Kernel的交互
• 因此涉及 App Data 的加密 / 解密并与 OS 交互• 与 VMM 的交互更复杂
任务 - 系统调用1. App 发生 Syscall ,
控制移交到 VMM层。
任务 - 系统调用2. VMM 层保护当前
App. 的寄存器到CTC 中。将 IP 指向 Syscall Proxy , SP 指向Private Stack (两者均在 Cloaked Shim中 )
移交控制前不清空寄存器
任务 - 系统调用3. Syscall Proxy 会
向 VMM 层发出调用 OS Syscall 的请求根据需要复制 Syscall 所需Argument 到Uncloaked Shim中
任务 - 系统调用4. VMM 层保护当前
CTC 中的通用寄存器到 CTC 中。将返回 IP 和使用SP 指向弹簧函数(Uncloaked Shim)
移交控制前清空不会被该Syscall使用的寄存器
任务 - 系统调用5. 常规 OS Syscall
调用6. 弹簧函数会调用
self-identifying call 回到 VMM 层
任务 - 系统调用7. VMM 层恢复第 4
步保存的寄存器。通过设置 IP 和 SP恢复 Syscall Proxy 在 Cloaked Shim 的执行。
任务 - 系统调用8. 执行 Syscall
Proxy 剩下的代码,把 Uncloaked Shim 中的 Syscall执行结果加密装回到相应寄存器 / 内存中(重装)移交控制权到VMM
任务 - 系统调用9. VMM 层恢复第 2
步保存的寄存器。(包含调用结果)恢复 App 的执行
未解决的问题• Overshadow 貌似不能解决不让 OS 知道按
下键盘哪个按键的问题。换句话说overshadow 只是用来保护 application 的数据的,不能保护外部中断数据
一些想到的问题• 在 windows 上实现 overshadow 不仅要考
虑 syscall ,还要考虑 exception
• 我觉得不一定要在 Ring 3 上实现PELoader, 把 Cloaked Shim(PELoader) 放到 VMM ?(我们假定 OS 是不可信任的)
一些想到的问题• 我觉得我们的 PEloader 做法应该是 Hook
Subsystem API( 参见 Shim Memory/Cloaked Shim)
(Hook 住被调用的 API 后直接与 VMM 进行相应的通信 )