-
深入
<
/p>
SMRAM
:
SMM
重载
作者:
Loic
Duflot, Olivier Levillain, Benjamin
Morin
,
Olivier Grumelard
译者:
riusksk(
泉哥
)
原文出处:
CanSecWest 2009
概要
·前言
·SMM
简介
·利用
SMM
执行攻击
·潜在用途:提权方案,
rootkit
·局限性
·绕过
D_LCK bit
·内存缓冲(
Memory caching
)
·缓冲中毒(
Cache
poisoning
)
·应用与演示
·影响
·对策与结论
·前言
System Management Mode(SMM)
是
x86
与
x86-64
的
CPU
操作模式
,
在
CanSecWest 2006
大会
上已有人演示了如何利用
SMM
来提升权限的
,其它更为详细的资料可参考
Phrack
杂志上
Ivanlef0u
与
Branco
(BSDDeamon)
等人发表的文章。在
Bla
ck
Hat
briefings
2008
(Sparks,
Emb
leton)
大会上,有人展示了首个
SMM
rootkit
,从这些
presentations
/papers
可以得出
一个结论:如果可以修改
SMRAM
的内容,那么攻击者可以做各种有趣的事情(至
< br>
少对他们
而言),但
SMRA
M
在常规情况下都是受限制的。本文的目的就是演示如何绕过这些限制。
·SMM
简介
PC
架构
什么是
System Management Mode?
SMM
属于
16
位模式,用于主板控制和电源管理,比如:
·热管理(
Thermal
management
)
·笔记本电脑的电源管理(有时由高级配置和电源管理接口
AC
PI
调用)
只有当
< br>CPU
收到硬件系统管理中断
SMI
(
System Management Interrupt
)时,才进入系统
管理模式。
SMI
均由蕊片组
(
chipset
)
p>
产生,
它通过向
Advanced
Power
Management
Control
Register
(AMPC)
写入数据来产生
SMI
(outl(something, 0xb2))
,这只需要具备输入
/
输出
权限即可做到。
System Management Mode
entry
关于入口,所有的单一
CPU
寄存器都将其保存在“memory
saved
state
map”,而它自己又
保
存在一个称做
SMRAM
的内存区域中。
SMRAM
位于
RAM
中,每一个<
/p>
SMI handler
均由
SMRAM
执行。当
SMI
handler
执行“rsm”汇编指令时,
CPU stat
e
将恢复到保存在
SMRAM
中的操<
/p>
作模式,
即返回前一个操作模式,
接着把
控制权归还给中断程序。
当运行在
SMM
的管理软件
被中断时,操作系统甚至
未能获知。
SMRAM
地址
SMRAM
地址由
CPU
中的
SMBASE
寄存
器指定,
该寄存器无法被访问到,
它的内容被复制到
SMRAM
saved state
map
,并且只有当
CPU state
重储时才改变,它也可用于多
CPU
系统。
< br>
实际上,
SMBASE
p>
地址通常为:
·0xa0000:legacy SMRAM
location
·0xfeda0000 (+/
-
0x8000):high SMRAM location
·其它:顶段内存
TSEG (Extended
SMRAM)
SMI
handler
基址位于
SMBASE + 0x8000
(
固定偏移量
)
SMRAM
安全模式
System Management Mode
下的代码拥有相应操作平台下的充分权限(甚至超过操作系统内
核的权限
)
,
当系统未处于
SMM
时,
应当防止
SMRAM
被
访问,
以防止
SMI
handler
修改
SMRAM
中存储的内容。因此只
有当
CPU
处于
SMM
下时,
legacy SMRAM, high SMRAM and TSE
G
才能
被访问,
chipset
中的
D_OPEN
bit
被设置的情况除外。
(译注:
pcitweak
用于读写
PCI
配置空间信息,格式如下:
pcitweak -r
PCI-
ID
[
-b
|
-h
]
offset
pcitweak
-w
PCI-ID
[
-b
|
-h
]
offset value
)
SMRAM
保护机制
防止
SMI
handler
被修改的主要机制就是设置
D_LCK
p>
位,当
D_LCK
位被设置时,
chipset
中
SMRAM
的
configuration bits
将变成只读
p>
(
包含
D_OPEN
bit)
。
·利用
SMM
执行攻击
*
权限提升方案:
·可参考
CanSecWest 2006
presentation
·实用的提权
方法(受限的内核
root
权限,限制某些服务程序进入内
p>
核)
*Rookits:
·可参考
Sparks,Embleton Black
Hat 2008 presentation
·Rootkits
可在
SMI ha
ndler
中隐藏功能(例如
keylogger
)
*
绕过基于<
/p>
D-RTM
(动态测量根)可信任平台的限制:
< br>
·可参考
Rutkowska
与
Wojtczuk Black Hat
Federal 2009 presentation
*
从这个角度看,我们认为攻击者可在
SMRAM
中隐藏一个
p>
rootkit
。
·局限性
SMM
rootkits
存在的局限性:
·它们无法存在一个平台中的
reboot
;
·很难设计一个通用的
SMM rootkit
(
SMM
代码特定于每个平台),
·很强的局限性(个人观点):大部
分操作平台在启动时均设置
D_LCK
位,以防
止
SMM
被修改,
目前,还没有什么可行的方法可以绕过
D_LCK bit
。
·绕过
D_LCK
bit:
芯片组转换机制
芯片组转换机制可以修改物理内存映射,完成各种转换机制:
·可参考
Blackhat
2008
大会上
Wojtczuk
与<
/p>
Rutkowska
关于
Q35
chipset
的
presentations
,
·也可参考
Duflot
与
Absil
在
PacSec
2007
大会上的关于
graphics
aperture
(GART)
functionality
的
presentation
。
但一
些芯片组转换机制已经过时了,
它的转换表可被锁定
(使用与<
/p>
D_LCK
相同的
lock
bits)
。
另外,我们还可采用其它更好的方法
来绕过
D_LCK
bit:
缓冲中毒(
Cache
poisoning
)
缓冲体系
缓冲体系通过缓冲我们所需
的内容来加速内存访问。
下面是针对一个
x86
处理程序的缓冲体
系的描述(例子):
·内存缓冲
CPU
< br>内存缓冲需要同步执行,它可以指定不同的内存缓冲策略(内存类型),比如:
* WB: write back.
* WT: write through .
* UC: not cacheable.
它主要负责指定哪块内存区域需要被缓冲,
以及哪块内存未被
< br>CPU
中的内存管理单元
(负责
逻辑,
虚拟和物理地址间的转换)所指定的。
两种指定不同内存
缓冲策略的方法:
页目录和
页表(困难的方法),还有
MTRR
(容易的方法)。
·被缓冲的内存类型
·MTRRs
的使用
MTRRs (Memory Type Range
Registers)
属于
Model Specific
Registers (MSR)
,它有两种
不同类型:
fixed
与
variable
。“Fixed
MTRRs”可用于指定被
BIOS
使用的传统内存区域
(
legacy memory
areas
)的缓冲策略,“Variable MTRRs”可用于指定其它物理内存
区域
的缓冲策略。
fixed MTRR
(
例如
MTRR_FIX16K_A0000)
结构:
variable MTRR
结构
(
例如
MTRR_PHYS_BASE0)
:
因此,
访问控制点存在于芯片组中,
而芯片组并未“看到”缓冲器里面发生了什么。
运行在
CPU
上的代码可以决定缓冲策略。另外,芯片组甚至不知道什么是真正
的
SMRAM
(
CPU
只识
别
SMBASE
)。
p>
·SMRAM
与缓存
不缓存
SMRAM
,
这是种明智的做法,
特别是当
SMRAM
地址空间与其它地址空间
(
legacy
SMRAM
)
发生冲
突时
,
除了
chipset
documentation
中清楚说明的:
high SMR
AM(0xfeda0000)
才可被
缓存。假设
SMRAM
内存区域是由
CPU
以
WB
的形式缓存的,那么当
SM
I handler
执行时,它
将会被“复制”到
CPU
指令和数据缓冲存储器中。如果
SMM ha
ndler
没有刷新缓冲存储器,
那么它将把控制权返还给操作
系统,
这时
SMI
handler<
/p>
有可能会在
CPU
的数据缓冲器中逗留<
/p>
(很短的时间)。
缓冲器中的
SMI handler
篡改
SMRAM
< br>当
CPU
并未处于
SMM
时,
CPU
并不能对
SMRAM
执行写操作。
但如果
SMR
AM
以
Write
Back
方式被缓存时,
CPU
只能对缓存内容执行写操
作,而不对内存执行写操作。
-
-
-
-
-
-
-
-
-
上一篇:电脑主板各部件详细图解
下一篇:DIY电脑主板插槽芯片和接线图解(免费)