9.3.2 攻击面最小化分析过程
1.分析系统各个特性的重要程度
软件产品的受攻击面是一个混合体,不仅包括代码、接口、服务,也包括对所有用户提供服务的协议,尤其是那些被未经验证或远程的用户都可以访问到的协议。
对任何一个系统特性(特别是服务、守护进程、像ActiveX控件以及Java插件等移动代码、始终运行的应用等),首先要研究一下是否有80%以上的用户需要这个特性,如果不是那么该特性就该被关闭、不安装或者禁用。除了全局特性外,还应当深入考虑到组成全局特性的子特性,例如GET、POST、HEAD等各种HTTP动作等,因为这些特性都是可能被攻击者利用的攻击点。
2.分析攻击者可能从哪里访问这些特性
分析潜在攻击者的位置。如图9-5所示,可以匿名远程访问的代码与只有本地管理员可以访问到的代码相比其受攻击面一定广泛得多。
图9-5 可访问程度增加受攻击面
研发人员应该对应用中的每一个单独的功能认真权衡,并决定谁可以在默认情况下从哪里(远程、远程但限于某特定地址范围或子网、地区本地或者链路本地地址[IPv6]、仅本地方式等)访问该部分代码(匿名、用户或者一个特定用户组、管理员)。可以要求有效用户账户必须通过身份认证和授权机制。在应用中最低限度也要用到诸如操作系统、应用所依赖的类库(如微软.NET Framework、Java Runt-ime库等)的自身安全机制。
通常情况下可以通过防火墙来限制网络的访问连接,但还是建议多加一层防护机制以备防火墙被禁用之需。另外一种限制网络访问的方式是通过在本地机器、本地子网、用于IPv6网络的地区本地或链路本地等不同的默认配置中进行切换,可以只为需要额外增加连接请求的用户或者环境设置为“无限制”。
3.降低特权
分析各功能模块所具有的运行权限,例如:匿名用户、普通用户、管理员用户。如果程序运行在本地系统或者Root环境中,一旦出现漏洞并被攻击者利用将造成灾难性后果,因为溢出代码也会有同样的权限。因此,仅仅授予程序完成工作所需的最小权限即可,切勿滥用权限。
通过分析并降低攻击者可能具有的操作权限。降级权限的示例见表9-1。
表9-1 降级权限减小受攻击面示例