首页
社区
课程
招聘
[原创]SMM Rootkit初步 - 读写SMRAM(带你迈入CPU级Rootkit之门)
发表于: 2009-3-29 14:37 49973

[原创]SMM Rootkit初步 - 读写SMRAM(带你迈入CPU级Rootkit之门)

2009-3-29 14:37
49973

好吧,我承认标题有点夸大,不介意的都进来BS我把
就像 qihoocom 大侠说的,“SMM XX早就几万年前就不是什么秘密了”,不过国内讨论这个的到是鲜见,希望这篇文章能抛砖引玉吧。

之前看到rootkit.com上 Implementing SMM PS/2 Keyboard sniffer 那个代码,狠狠震撼了一把。于是开始研究SMM,半月下来总算有些收获。这里将如何读写SMRAM的方法拿出来科普一下,希望更多人能迈入编写SMM Rootkit的大门。
文章后面提供可以在VPC和VMware两大虚拟机中运行的代码,将演示如何在WinXP(SP2)中读写SMRAM。(本文只考虑最简单的系统环境,不涉及 SMM Space Locked(D_LCK)=1 时无法读写SMRAM的情况)另外,按 Ivanov 大牛的说法,这种方法局限性很大,只能在没有执行 Intel 修补方案的主板上运用(感谢两大VM模拟的都是I440BX )。

对硬件方面接触尚浅,文中若有疏漏之处,欢迎指正。

--------------------------------------------------------------------------------------------------------

首先放下PCI相关的诸多知识,我用最短的篇幅叙述读写SMRAM的过程。希望这篇文章能带你迈出SMM Rootkit的第一步。
首先说说什么是SMM(System Management Mode)。System Management Mode Hack中说:SMM是专门为电源管理设计的执行规则。当进入SMM后,系统的各个部件可以被关闭或者使用最低的功耗。SMM独立于其他的系统软件,也可以被用在其他目的...  该文章中文版点这里

了解SMM是什么东西就够了,这篇文章不会涉及太多SMM的东西。相反,读写SMRAM更需要的是PCI配置空间(PCI Configuration Space)方面的知识。
先讲讲两个访问PCI配置空间的I/O端口:CF8hCFCh
通过向 CF8h 端口写一个特殊的地址,我们就可以在 CFCh 端口上读写指定寄存器的值。这里要读的寄存器是位于配置空间偏移为 72h 的8bit寄存器——SMRAM (System Management RAM Control Register)

首先要介绍一下 CF8h 这个I/O端口。实际上 I/O CF8h 写的是CONFIG_ADDRESS寄存器,所以 CF8h又叫CONFIG_ADDRESS。其布局如下[1]:

按上图格式,31位置1(enable),假设I440BX的北桥82443BX位于Bus: 0, Device:0, Func:0(后面将教你如何确定芯片类型以及取得这几个值),这样配置空间的基址就是0x80000000。

通过I/O指令向CF8h写入0x80000000,就可以从 CFCh(CONFIG_DATA)中读出82443BX配置空间偏移为0的一个DWORD值了。而这个DWORD的高低16位分别是VendorIDDeviceID,如图:


下面在我们去读配置空间偏移为72h的SMRAM前,首先注意一个特性。不知道你注意到没有,回头看看CONFIG_ADDRESS的低2位,它们被定义为0。且不谈PCI规范上的大道理,说白了这个地方为0是为了限制你给出的地址——必须为4的整数倍。了解到这一点再看那个Register Number就比较好理解了,原来这个寄存器编号和偏移是这么对应的。

好了,那么偏移为72h (01110010) 的SMRAM,最后两位置零是70h (01110000),即位于编号为1C (11100)的寄存器上。所以只要向 CF8h 里写入0x80000070这个地址,此时从 CFCh 端口读出的数据就是包含SMRAM的一个DWORD了。



假设读出来的数据为DWORD 380A0000h (00 00 0A 38),对照上面82443BX寄存器表可知:

70h    00
71h    00
72h    [COLOR="red"]0A    SMRAM
73h    38    ESMRAMC

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (79)
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
2
使用附件中的程序枚举PCI设备,代码参考自 遍历PCI设备 这篇文章:
http://hengch.blog.163.com/blog/static/10780067200822893345451/

例如这是我在VPC里的结果:
[80000000] 01 VID:8086/D:7192 B:00 D:00 F:00 06-00-00 (V:03)
[80003800] 02 VID:8086/D:7110 B:00 D:07 F:00 06-01-00 (V:01)
[80003900] 03 VID:8086/D:7111 B:00 D:07 F:01 01-01-80 (V:01)
[80003A00] 04 VID:0000/D:0000 B:00 D:07 F:02 00-00-00 (V:00)
[80003B00] 05 VID:8086/D:7113 B:00 D:07 F:03 06-80-00 (V:02)
[80004000] 06 VID:5333/D:8811 B:00 D:08 F:00 03-00-00 (V:00)
[80005000] 07 VID:1011/D:0009 B:00 D:0A F:00 02-00-00 (V:20)


这里主要关注的是VendorID和DeviceID(VID:8086/D:7192),以及最前方的地址信息(80000000)。关于这两个ID所代表的意义,我们可以到 http://www.pcidatabase.com/ 上进行查询。

例如我VPC 2007的设备信息:
440BX/ZX chipset Host-to-PCI Bridge
[80000000] 01 VID:8086/D:7192 B:00 D:00 F:00 06-00-00 (V:03)
PIIX4/4E/4M ISBridgeA
[80003800] 02 VID:8086/D:7110 B:00 D:07 F:00 06-01-00 (V:01)
PIIX4/4E/4M IDE Controller
[80003900] 03 VID:8086/D:7111 B:00 D:07 F:01 01-01-80 (V:01)
-
[80003A00] 04 VID:0000/D:0000 B:00 D:07 F:02 00-00-00 (V:00)
PIIX4/4E/4M Power Management Controller
[80003B00] 05 VID:8086/D:7113 B:00 D:07 F:03 06-80-00 (V:02)
S3 Graphics Co., Ltd - Trio 64/64V
[80004000] 06 VID:5333/D:8811 B:00 D:08 F:00 03-00-00 (V:00)
Digital Equipment Corporation - Fast Ethernet Ctrlr
[80005000] 07 VID:1011/D:0009 B:00 D:0A F:00 02-00-00 (V:20)


VMware VMware Workstation 6.0的:
82443BX/ZX 440BX/ZX AGPset Host Bridge
[80000000] 01 VID:8086/D:7190 B:00 D:00 F:00 06-00-00 (V:01)
82443BX/ZX 440BX/ZX AGPset PCI-to-PCI bridge
[80000800] 02 VID:8086/D:7191 B:00 D:01 F:00 06-04-00 (V:01)
82371AB/EB/MB PIIX4/4E/4M ISBridgeA
[80003800] 03 VID:8086/D:7110 B:00 D:07 F:00 06-01-00 (V:08)
82371AB/EB/MB PIIX4/4E/4M IDE Controller
[80003900] 04 VID:8086/D:7111 B:00 D:07 F:01 01-01-8A (V:01)
82371AB/EB/MB PIIX4/4E/4M USB Interface
[80003A00] 05 VID:8086/D:7112 B:00 D:07 F:02 0C-03-00 (V:00)
82371AB/EB/MB PIIX4/4E/4M Power Management Controller
[80003B00] 06 VID:8086/D:7113 B:00 D:07 F:03 06-80-00 (V:08)
VMware Inc. - 9500MGS NVIDIA
[80007800] 07 VID:15AD/D:0405 B:00 D:0F F:00 03-00-00 (V:00)
BT958 SCSI Host Adaptor
[80008000] 08 VID:104B/D:1040 B:00 D:10 F:00 01-00-00 (V:01)
VMware Inc. - ??
[80008800] 09 VID:15AD/D:0790 B:00 D:11 F:00 06-04-01 (V:02)
Am79C970/1/2/3/5/6 PCnet LANCE PCI Ethernet Controller
[80020000] 10 VID:1022/D:2000 B:02 D:00 F:00 02-00-00 (V:10)
ES 1371 AudioPCI
[80020800] 11 VID:1274/D:1371 B:02 D:01 F:00 04-01-00 (V:02)
VMware Inc. - Standard Enhanced PCI to USB Host Controller
[80021000] 12 VID:15AD/D:0770 B:02 D:02 F:00 0C-03-20 (V:00)


我只找到I440BX的设计手册,几台实际机器用的芯片乱七八糟(SIS、VIA、NVIDIA都有),网上又下不到相关的资料,实在是无法把程序写得更通用
如果哪位好心人有在其他芯片组的主板上找SMRAM的资料,也请拿出来分享一下。

抱歉,昨天忙中出错,已经把附件 PCI设备枚举.rar 传上来了
上传的附件:
2009-3-29 14:38
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
板凳观望·~
2009-3-29 14:43
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
4
LZ很强大,只能学习
2009-3-29 14:58
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
5
没那回事,我也希望和大家讨论一下(哪怕不是SMM方面,我倒是觉得SMRAM中保存的那些寄存器值得仔细看看),也许有些新收获。
自己一个人看CPU、PCI手册实在是痛苦,今天另一个帖子里被qihoocom大侠提点了一下,感觉茅塞顿开。下周继续看如何越过“SMM LOCK这个叹息之壁”
2009-3-29 15:04
0
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
这个必须的顶
2009-3-29 15:28
0
雪    币: 8201
活跃值: (2701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
业余爱好,看看而已
2009-3-29 16:03
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
8
这个还是很不错的. 都快到硬件层了. 多分享分享,哈哈
2009-3-29 16:20
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
只能收藏,无法学习
2009-3-29 16:57
0
雪    币: 7115
活跃值: (639)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
10
  标记 学习。。。
2009-3-29 20:14
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
有新东西了,谢谢分享。慢慢看。。
2009-3-29 20:23
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
12
太强大了!俺水平有限,不能学习,只能收藏了!
2009-3-29 20:32
0
雪    币: 235
活跃值: (17)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
支持啊,很大的进步,希望继续深入下去,争取早日搞出一个简单的CPU Rootkit。
2009-3-29 20:49
0
雪    币: 214
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
真的不好学习
2009-3-29 22:51
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
望尘莫及学习下
2009-3-29 22:57
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
azy
16
对某些人无语了,辩不过就删帖,看雪啊。。。
2009-3-29 23:03
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
17
赶快膜拜,加强学习,对SMRAM这方面完全没有接触
2009-3-29 23:11
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
18
为什么前面那个讨论贴没有了?
2009-3-30 00:00
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
19
我觉得伊万大叔你可以删掉自己的观点,但别人的合法讨论是应该保留的
2009-3-30 00:03
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
21
楼上很强大啊,讨论问题还能生气(╰_╯)#
2009-3-30 10:15
0
雪    币: 270
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
我是来顶LZ的 太强大了
只有学习的份了...............
2009-3-30 10:33
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
24
关于TXT那篇论文我也下过,不过塞文件夹里忘看了 还是先把现在看的两篇吃透好了...
讨论而已,大家各抒己见。

不过,昨天听 Ivanov 大牛的一席话确实深有感触,之前都没注意到Intel新板子的补丁问题。
回头又翻了一下别人的文章,确实有提到在BIOS里做的补丁情况(2005年后的都给锁上了):


之前看文章太粗心了
上传的附件:
2009-3-30 10:45
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
azy
25
原来是喝高了。。。
2009-3-30 16:31
0
游客
登录 | 注册 方可回帖
返回
//