为什么要有ME?

这个世界并不是充满了计算机专家,事实上大多数人连简单的安装操作系统都完成不了,术业有专攻,这很正常。电脑爱好者们可以应付一般的电脑问题,但是处理复杂的证书问题和有上千种原因的死机问题往往无能为力。如果能够远程由IT专业人士协助解决问题就好了!远程管理成为了解决问题的良方。
远程管理分为带外和带内管理两种:
带外管理(Out-of-band management,OOB):使用独立管理通道进行设备维护。无论被管理设备是否处于开机状态,只要已经通电并联网,就可以远程监控和管理设备,包括远程关机、远程开机、远程重启、远程更改BIOS设置、远程安装操作系统等。带内管理(In-Band Network Access,IBN):是指使用常规数据通道来管理设备。这种管理要求被管理设备不仅要通电、联网,而且必须已经开机、运行了客户端程序等。
我们经常使用的Windows远程桌面、VNC、SNMP和Telnet等等都属于带内管理。而各种KVM(注意这个不是虚拟机世界的KVM),BMC和AMT就属于带外管理。
带内管理的优点是便宜,不要增加什么硬件,安装个软件就可以了。缺点也很明显,OS死掉了就无解了,所以大部分安装、死机问题并不能靠带内管理解决。
KVM是一种带外管理解决方式。这里举个KVM设备的例子(见参考资料1)
Spider KVM
从图上可以看到它有VGA和USB的输入,同时还有VGA和USB输出,并可以连接网络。它的工作原理大致是把目标计算机的部分输入和显示输出重定向到管理机器上或者网络中,管理员可以登录这个KVM设备,就可以看到目标机器的显示结果和用虚拟USB设备输入内容。真是十分方便,我们BIOS工程师在调试目标服务器机器时,经常借助KVM,避免做到大型服务器旁边(十分吵,像飞机场)。KVM可以解决部分问题,例如安装操作系统等等,但是更新BIOS等就无能为力了。
服务器领域很早就引入BMC(Baseboard ManagementController),它借助IPMI(Intelligent Platform Management Interface)来进行带外管理。这里不打算展开讲,争取今后在专栏里面另写文章专门介绍。我只是简单说一下它的原理。它是一个单独在服务器主板上的芯片:
它有自己的处理器(一般是ARM),有自己的固件,并且如同KVM一样,Hook了部分USB、显示和部分IDE/SATA等等。在上电后它会独自运行,通过各种总线控制风扇,监控温度、和BIOS固件等通讯,共同管理主板。现在每个服务器主板缺省都带着BMC,它为服务器管理、部署和监控带来了极大方便。
终于该我们的正主出场了。大家都知道,大型公司都有IT部门,专门负责维护电脑,帮助安装操作系统、处理各种千奇百怪的死机和不工作的问题。据统计有80%以上的问题都十分愚蠢,譬如没有插电源、不知道CD ROM是啥等等(有人问客服是不是那个放咖啡的槽子,大家可以看看The Old New Thing, 微软的Blog上面有不少吐槽)。这也很好理解,毕竟还有很多不是IT产业的大公司,IT公司里面也不是各个都是高手。大型公司每年都耗费巨资用于IT服务,譬如重装电脑、安装Patch等等。而中小型公司更加头疼,他们临着类似于大型企业所面临的复杂 IT 挑战,但是中小型企业往往没有较大的预算或 IT 专家员工。怎么办呢?
作为PC界的老大,有感于PC领域的现实需求,于是Intel在PC中引入了类似BMC的概念:有一个专门的处理器,带外进行计算机管理。开始是引入AMT技术(Intel Active Management Technology,英特尔主动管理技术,参考资料2),后来又整合其它技术,推出vPro(博锐,参考资料3)。
看到带有vPro的徽标,就表示可以使用vPro的AMT远程管理技术。它的框架图如下:
后来ME加入了更多安全、校验、防盗和电平信号管理等等新功能。

ME在哪里?

与网上大多数瞎说的不同,ME并不在CPU内核中。它最早在北桥里:
北桥消失后,它被放到了南桥PCH中:
为什么有的人会认为它在CPU中呢?
部分SOC的酷睿产品,南桥被放入CPU Package中。因此ME也随着被放入CPU的Package中,这并不意味着ME是CPU内核的一部分,这种做法和单独的PCH并没有本质区别,PCH和CPU还是两个Die。这种设计简化了主板,节约了成本,但是误导了部分IT爱好者。CPU Package设计是一个很有趣的方向,改天写一篇文章介绍一下,这里按下不表。部分ATOM产品中,ME的部分功能被真正植入CPU Die中。但它也并不在CPU core和uncore中,而是在类似南桥的south cluster中。这个ME阉割版也并不含现在被广泛讨论的AMT功能。

ME干了哪些事

ME有自己的处理器,它是一款32位的ARC MCU。也有部分片上RAM,但是主要RAM是BIOS在启动时在住内存上挖下来专门给它的。这种方式叫做UMA:
BIOS不仅仅为ME分配内存,也为内置GPU用同样的方法分配内存。
和BMC一样,它脱离于CPU独自运行,有自己的操作系统(具体不详,BMC一般是Linux)。由于电源部分被它管理,在主板有电,但CPU尚未上电的时候,它可以开启电脑。在开机后它和BIOS协同工作,并在OS启动后和ME的操作系统驱动程序一起工作,完成AMT、KVM、电源管理、电平管理等等功能。
AMT典型应用是,当大家晚上关闭电脑回家后,IT人员在晚上Push最新的Windows patch到电脑上,利用晚上的时间安装完毕,大家第二天早上来时就可以直接工作省时省力,完全不耽误工作。或者需要重装电脑,告诉IT你的工位,IT就可以远程帮你重装操作系统,不用抱着沉重的电脑跑来跑去,岂不美哉?
ME后来又加入了更多的功能,包括安全管理(fTPM等)、电平管理、电源管理等等高级功能。

ME是不是唯一的法外之地?

大家都默认主板上有BIOS固件这个事情,如果我说一般的电脑里面单独的固件可以有近十个到几十个,是不是很多人都要惊掉了下巴?好吧,我就举几个例子:
网卡。网卡有单独的固件,有自己的控制器,控制器有些还是ARM。Intel南桥的网卡固件甚至和ME的固件一起被包含在BIOS固件中。显卡。这个应该是常识了。实际上几乎所有PCIe设备都有自己的固件和处理器,处理器有的是ARM,有的是MCU,还有用FPGA做的。硬盘。高级硬盘甚至用了Intel的Atom处理器。传感器。很多传感器有固件,并有MCU控制。Sensor Hub。SH最早普遍应用在手机上,慢慢地也被平板电脑、笔记本电脑甚至PC上采用。它的固件设计还较传感器复杂一点。
还有很多,包括PMIC、PMC等等都含有固件。事实上,让各个部分自我管理是计算机设计的发展趋势,CPU把任务off load出去,让设备自己完成好再通知自己,有利于CPU集中注意力干大事,同时节省用电。

一些谣言

ME是Intel不可告人的后门。实际上AMT曾经被Intel广泛宣传过,并被作为一个很有价值的技术被推广到很多计算机厂家,并受到广泛欢迎,尤其是中小企业。Intel官网上有很多介绍。AMD在芯片中也有单独的固件。ME可以干任何事情。实际上它有很多限制,并不能随便访问主存。BIOS为它单独分配了内存,这些内存被保留,OS并不知情。ME通过一般办法并不能访问被分配空间之外的其他内存(当然也有例外)。我们可以认为它的内存访问和内置GPU内存访问没有本质区别,GPU也有自己的运行单元,为什么没有被诘难?它的USB、IDE/SATA重定向、网口控制也并不是对所有都有效。事实上,和它对应的BMC在服务器领域已经应用更长时间,而服务器对安全更加在乎,为什么没有这么大反对声呢?ME可以控制CPU,是ring -3。实际并不行,两者是互相独立工作的。这个说法是纯粹的吸引眼球的标题党干的,ring的概念只在X86上有,ARC并不会存在。ME控制网口为了留后门。ME中的AMT既然作为带外管理,必须联网,这是理所应当的。ME很容易被篡改。ME受数字签名保护,实际上它是fTPM等等安全手段的提供者。ME可以访问硬盘数据。部分有问题,ME固件并不能在操作系统环境下独自访问硬盘,否则会有冲突。可以访问硬盘的是ME的操作系统驱动。事实上硬件驱动大部分都是ring 0的,可以访问任何东西。ME的驱动也不例外,如果不信任驱动,那也不要安装主板驱动了。Intel强制安装ME。ME有好几个版本,主板包含哪种ME,这是OEM的选择。ME不能关闭。实际上很多主板BIOS中都有ME关闭的功能:
关闭后ME会进入一个低功耗状态。

结论

我们可以把ME想象成Intel在PC上推出的免费BMC。它方便了中小企业做带外计算机管理。它有自己的处理器和操作系统(固件)。任何操作系统都有Bug,ME的操作系统应该是个RTOS,必然也有Bug和漏洞,这个没有什么奇怪之处。对ME最不爽的人是操作系统提供商,他们希望一切都在掌握之中。人们总是恐惧不了解的东西,也许ME开源会让大家放心,但有时候贸然的开源会让部分黑客有机可乘。到底开源有利于安全还是不利于安全,这个问题有很多讨论,也不在本文的范围内。如果大家感兴趣,改天写一篇个人如何开启和使用AMT的文章,其实KVM功能对个人用户还是十分有用的。
欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!
用微信扫描二维码加入UEFIBlog公众号