# 谈谈物理服务器的安全

- URL: https://wuming.si/blog/1042/
- Author: Aaron
- Published: 2015-10-18
- Language: zh-Hans
- Categories: Uncategorized
- Originally published at: http://blog.wo.ai/archives/1042

随着虚拟技术与云计算的火热，越来越多的人将注意力放在了虚拟机与虚拟网络的安全上面。当然确实也是目前一个趋势与发展方向，但虚拟化的安全与物理设备的安全就如同一个天平的两端，过于重视一端就可能遗漏了另一端的问题。今天我想聊聊物理服务器层面的安全问题。

**为什么大家容易忽视物理服务器的安全问题？**

我认为有以下几个可能的原因：

  * 服务器设备通常放置于相对安全的机房当中，通常在企业防火墙后面
  * 能接触到设备的人员比较有限
  * 对于物理设备上发现的问题通常用户无法解决，或是无法通过安装防御软件来解决
  * 不容易被攻击，毕竟这个时代能攻击到物理设备的方式远没攻击虚拟设备的多

所以用户不关心，运维人员也不关心，厂家也省事。但这样真的没问题了吗？显然不是。俗话说“外贼易防，家贼难防”，假设某个运维人员偷偷的植入了一段BIOS启动代码，可以说市面上所有的安全软件都是无法检测出来的。这也是为什么要有Secure Boot技术，一种在系统的启动阶段进行保护，使得操作系统运行在一个可信的物理环境上的技术。这里只举一个例子来说明物理设备的安全问题，尽管没那么明显但是一般都是非常严重并且难以处理的问题。

**物理服务器安全的方方面面**

大家都知道服务器有一部分部件与PC相似，如CPU，内存，磁盘，网卡，显卡，风扇等，但还有一部分是特有的，如传感器，PSU，RAID卡，固件芯片等。另外服务器也有一些内嵌的软件模块，如BIOS，BMC以及厂家自己研发的嵌入式软件。所有的这些都可能存在漏洞问题，如内存的Row Hammer漏洞，CPU的S3读取PCH模块脚本未被保护问题等。还有一部分涉及到的是嵌入式软件的问题，通常服务器是需要以24×7的强度来运行的，这对服务器的稳定性提出了很高的要求。因此服务器内有大量的传感器来监视服务器的健康状态，如温度传感器，风扇传感器，PSU传感器等，所以厂家通常会开发一些嵌入式软件来监控这类的设备，这里最出名的莫过于板载控制器（BMC）了，基本上主流两路以上的服务器都会具有BMC。此外还有其他外围的设备如显卡，RAID卡，网卡等板卡设备。在进行更细致的分析前，请大家看一下与服务器安全相关的全景图:

[![](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/187cde0861_aa213e02jw1ex5oi2ez32j20ph0l3abz.jpg)](http://moonzwu.github.io/img/Server-Security.jpeg "谈谈物理服务器的安全")  
**物理服务器安全之硬件部分**

对于硬件层面的安全问题主要集中在可信计算方面，建立一个安全可信的运行环境是可信计算的主要目的。TPM安全芯片是目前业界的主流解决方案，也是很多上层安全技术的基础。它解决以下几个问题：

  * 存储，管理秘钥，如BIOS密码，硬盘加密密码等
  * 生成秘钥，使用不同的加密算法来创建
  * 磁盘加密，为上层提供磁盘加密功能，如Windows的Bitlocker
  * 以及其他加解密相关的支持，如生成随机数

TPM本质上是一个安全的协处理器。服务器上CPU众多，为什么还需要一个这样的协处理器呢？加解密工作是一个非常耗CPU的任务，如果你的程序里有进行加解密运算，你一定要警惕它的性能问题。记得早前的一个做信用卡卡号处理的项目，当数据量少时一切正常，一旦数据量大到一定程度，CPU就是100%。当时我们分析了各种原因，有人说是内存太小导致频繁磁盘交换，有人说线程太多，任务切换过于频繁等。最后拿性能剖析工具一查，才知道是加解密模块吃掉了所有CPU计算资源。因此对于服务器来说，尽管CPU很多但是还是需要一个专业干加解密的硬件设备。

说到TPM就不得不提TCG（可信计算组），这是一个由主流设备生产厂商发起的组织，主要的目的是解决当时业界已经面临的个人计算平台安全问题。具体的历史可以查看维基百科，但也不是所有人都认同可信计算的，主要的争论点是采用可信计算方案相当于个人的信息对这些厂家来说是公开的，也就是一个对厂家公开的后门。所以在国内，政府的要求是采用TCM而不是TPM，TCM与TPM功能类似，唯一不同是加密算法是采用国内研究机构开发的。安全嘛，只有自己人才可信：）。

**物理服务器安全之嵌入式软件部分**

说起来软件程序面临的安全问题基本都很类似，不管是嵌入式软件，应用软件，web系统，你所面临的安全问题大多有以下几种：

  * 加解密算法是否足够安全
  * 网络连接是否安全
  * 数字签名与证书相关的安全
  * 存储是否安全
  * 程序越界问题
  * 注入攻击问题
  * 代码漏洞问题
  * 权限控制问题

BIOS作为现代计算机的基础软件，几十年来地位就没变过。但与它相关的技术倒是发生了一些变化，从早期的汇编，C，EFI到现在的UEFI，从功能角度来说丰富了不少。嵌入式软件终于也可以画出一些相对漂亮的界面来给用户了。也正是由于它比较基础对于它的保护是必不可少的，了解病毒历史的读者可能还记得90年代的CIH病毒，这个病毒影响意义深远。而Secure boot技术的目的就是让BIOS在引导系统启动的时候具备足够安全性。看一下Secure Boot的过程：

![](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/e550c5a514_aa213e02jw1ex5oi3hz83j20fy0adwf4.jpg)

由于BIOS程序对外没有网络访问的能力，所以安全问题相对来说简单一些，主要是UEFI的漏洞问题。

而BMC就不一样了，这个功能强大的家伙问题也是最多的。可以这么说物理服务器涉及到的安全问题有一大半是出在BMC身上。你可能会问都有哪些问题？我只能说几乎上面提到的所有问题，因为它就是一个用于处理硬件问题的web应用。BMC有哪些功能，看看这张截图：

![](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/9116008be5_aa213e02jw1ex5oi4udbqj212j0jbwku.jpg)

它使用一个微型的嵌入式Linux内核，并通常带有一个web栈。BMC对外支持多种协议，如HTTP，IPMI，SNMP，CIM等等。而这里面用的最多的，并且安全性最差的就是IPMI协议了。IPMI协议是一个事实上的服务器管理标准协议，几乎所有的服务器都会支持它（当然有的服务器如果没有BMC，通常也会有AMT技术做替代）。而被广为诟病的是IPMI协议中RAKP使用的SHA1进行秘钥哈希运算问题，这是一个已知的并且广泛存在的问题。我们只能通过禁用IPMI的远程访问来绕过它，但是如果没有远程的能力，对于具有成千上万台服务器的数据中心来说，单单是关机/重启这样简单的操作就是一个恶梦。因此各大厂商采用HTTP协议来替代IPMI的远程访问（有些厂商采用CIM接口，但是CIM的兼容性是很大的问题）。那么引入HTTP就引入了所有HTTP可能遇到的安全问题，如中间人攻击，证书伪造，跨站攻击，脚本注入，DDOS等，安全问题也变得日益严峻。为了解决这些问题，引入HTTPS是最好的方案。在大多数情况下，HTTPS可以避免中间人与证书伪造等问题。说到这里又不得不提OpenSSL，作为业内著名的开源安全库已经有很长的历史了。它是实现SSL的主要模块，也可以说HTTPS实现的基础。但是在最近的一年里OpenSSL接连报出几个大的漏洞问题，如Heart Bleeding，Freak Attack等，给广大厂商和用户带来了很多麻烦。虽然OpenSSL的补丁不断，但是官方已经声明在2015年年底停止对0.9.8分支的支持，2016年底停止对1.0.0和1.0.1分支的支持。这是好事也是坏事，好事是我们不需要再为旧版本漏洞担忧了，而坏事是你不得不为升级库比进行大量测试。

BIOS与BMC是服务器上嵌入式软件的两个主要部分，当然还有其他的如厂商自行研发的部署软件等，还有驱动的问题等不一而足。另外遇到的挑战是通常更新这些补丁需要重启服务器，而对于需要持续运行的服务器来说重启是比较困难的。因此现实的情况是很多服务器都是带着大量的安全漏洞在跑的，幸运的是服务器管理网络与业务网络是物理隔离的，被外部攻击的可能性比较低。

**物理服务器安全之其他内容**

从概览图里可以看出来，与服务器安全相关的内容有很多。如标准，美国有美国的标准，中国有中国的标准。通常来说美国的标准比中国的全面而且严格一些，如美国标准对固件更新就有明确的安全规定。所以大家在采购服务器的时候可以询问一下所符合的标准。另外还有测试方法与工具，测试原则，漏洞管理等。目前来说对于物理服务器安全问题的解决，还是以厂家提供的补丁为主，建议用户对严重的问题进行及时的更新，并密切关注各个厂家的安全响应页面（可以搜索PSIRT关键字来了解）。

最后，个人觉得安全问题归根到底还是人的意识问题。单有工具没有安全意识也是白扯，就像一个全副武装战士，掉进敌人挖的坑里也是没救的。所以提高安全防范意识是人们的首要任务。

  * 如果是开发团队，引入安全验证过程，采用漏洞扫描工具Nessus，AppScan进行安全检测。
  * 如果是运维团队，关注业界安全漏洞网站，采用工具进行定期的扫描，增加审计过程
  * 如果是个人用户，除了安装杀毒软件外，就是不要登陆不了解的网站。下载程序时注意网站提供的哈希码，这是防止程序被篡改的关键。
  * 

[谈谈物理服务器的安全](http://blog.jobbole.com/93134/)，首发于[博客 – 伯乐在线](http://blog.jobbole.com)。
