0xA2 应急响应、防御模型与SDL

很多人认为应急响应就是脸上被黑的机器去查查什么情况,是不是被中了botnet病毒、是不是被人中了rootkit等,是不是被挂了webshell等。应急响应这件事情是一件技术含量非常高的事情,处理好了万事大吉,处理不好的话就很容易把系统搞崩溃,甚至引起一些不必要的情况。应急响应这件事儿,CSO和安全运营工程师的点其实不太一样,其实原因还是因为两个人的职责不一样,CSO是非常特别以及极其不愿意自己的公司名字出现在SRC或者补天这些漏洞平台上,毕竟出现了的话领导是要过来请你喝茶的。其实应急响应是有一个流程的。大致流程如下:

Phase 1:准备阶段
  • 这里的准备就是准备用来检测的工具和人,比如说ls、losf、ss、ifconfig这些东西
Phase 2:检测与分析阶段
  • 紧急事件监测:包括防火墙、系统、web服务器、IDS/WAF/SIEM中的日志,不正常或者是执行了越权操作的用户,甚至还有管理员的报告(可以是邮件也可以电话短信什么的你可以看到听到的东西),我们要从这些数据中判断出受灾面积和攻击者入侵的点,然后才能谈下面的。
  • 应急响应初期:要根据上面监测的到的结果初步判定事件的类型,并且需要定义此次安全事件的级别。之后要做的是投入相关的资源进行分配,在此期间要把该安全事件的处理方式和进度告知管理层得到他们的支持,之后来组成一个临时的应急响应小组(后期可以专人专做)
  • 安全事件分级:其实就是决定什么对自己最重要,为紧急事件确定优先级充分利用现有资源(这里需要注意,不是所有的安全事件都要投入这些资源去完成)
  • 调查:这里就是调查整个事件的原因,取证追查,漏洞分析,后门检查,收集数据并分析
Phase 3:攻击缓解、根除和业务修复
  • 这里的目的主要是首先先控制受害范围,不要让攻击的影响继续蔓延到其他的IT资产和业务环境,切记不要直接一股脑的投入全部精力到封堵后门。紧接着要做的是去寻找根源原因,彻底解决,封堵攻击源,把业务恢复到更张水平
Phase 4:攻击跟踪
  • 这里要根据各种监控去确定没有其他的攻击行为和攻击向量,紧接着就是开会反省此次事件,写报告,持续改进工作流程和工作缓解


其实这个就是应急响应中非常有效的PDCERF模型(参考NIST SP800-61):Prepare(准备)、Detection(检测)、Containment(抑制)、Eradication(根除)、Follow-Up(跟踪),这个模型用来描绘应急响应是非常科学的。
应急响应工作的顺利进行很大程度上依赖前面文章中提到那些数据映射关系和资产映射关系图,快速定位和准确找到负责人可以增加事件应急处理的效率,尽快解决应急响应带来的影响。

对于防御模型来说,其实安全建设的马斯洛层次很好的描绘了防御模型的建立和迭代:
LV0:不设防:也就是没有任何安全措施
LV1:认为自己是安全的:通过一些较为基础的安全措施做到基础的ACL,并且系统不存在任何的明显的漏洞。但是不具备复杂时间的应急响应,需要购买安全服务。这里评价的标准是:有一个信息安全团队并且保证交付的代码、服务器的环境没有明显的漏洞,并且做过渗透测试。
LV2:基本的应急响应:有攻防的能力,并且可以在不依赖外部安全服务的情况下做到能对大型信息安全突发事件进行抢救和修复,但是安全防护的体系并没有完全建立。这里评价的标准是:有一个攻防能力较强的安全团队,并且具备应急响应的能力。
LV3:安全体系建立:到了这个阶段,安全工作应该具有一个完善的体系,能够覆盖全生命周期,开发与运维的环境有一个必要的流程,在一些业务和资产的架构上都会考虑安全问题,检测和安全防护手段能够根据不同的攻击场景针对性的调整。这里的评价标准包括:具备一个完整的纵深防御体系并且能够覆盖日常的应急响应和安全防护。
LV4:除了保证基本的架构、应用和数据的安全之外,还能够在业务层面上也具有一个系统化的安全解决方案,这时候对抗的方式不仅仅来自于平时攻击的时间,还要关注业务逻辑方便的安全和跟高级别的攻击者(比如高级攻击者和黑产团队)的对抗。这里需要建立更高强度的风控体系和域安全措施,诸如安全域、账号体系、基础服务等。
LV5:高级安全手段:以上层次基本上满足了吃饱吃好的要求,到了这个阶段就是前面说的吃出逼格、吃出花样的时候了。这个阶段要引进业界先进的技术诸如态势感知、威胁情报体系、机器学习、深度学习、人工智能等业界前沿的技术来加入到安全管控体系中,也就是我们常说的最佳实践。这里要具备完整的纵深防御体系,要具备和攻击者精确对抗,能够完全了解谁在攻击我们,并且优化攻击拦截的成功率、及时性、准确性和自动化程度。

评价企业安全建设做的好与坏的标准就是ROI(投资回报率),也就是能够利用较低的成本来防御较高成本的网络攻击,举个例子,别人打你一波DDoS需要花10块钱,而你防御住这个10块钱的攻击和对你造成的影响只有1毛钱,这说明攻击防御是有效的;反之,如果你防御这些攻击对你造成的影响和防御成本是100块钱,这样你的ROI就有问题了,防御可能需要继续优化或者重新思考。而对于一个安全负责人来说,影响投资回报率的因素如下:
  • 系统化:具备一个系统化的蓝图,对安全建设有着大局观和感性认知
  • 管理体系化:这里详细说其实是两部分,也就是工具链建设(管理工具)和团队建设(管理人),体系化有助于安全建设,并且能够增加响应能力。
  • 机遇与风险并存:做安全一定要能接受风险,并不是一个checklist的问题,checklist只能帮助你去建设并不能彻底杜绝安全问题,安全问题是人祸,一定程度上也会存在“天灾”。
  • 安全定位:要知道自己几斤几两,企业现有的安全措施在整个行业来说是什么水平,如何提高水平。
  • 能力匹配:安全团队的发展一定要跟得上公司的扩张速度,不能该激进的时候保守。
  • 大局观:安全不是一个团队的事情,是整个公司的事情,与各部门积极配合和沟通是必要的。

对于SDL来说,SDL其实在网上已经有很多的文章来介绍SDL的事情了,首先肯定的是SDL是个好东西,它能够减少软件本身出现的漏洞和数量,并且还能够降低严重级别。说到SDL我们就得扯一扯安全培训的事情,安全培训在很多企业内部其实是往往被忽视的,尤其是很多外包企业,具体原因是什么你们懂得。不重视SDL的后果其实能直接反映的是很多大型传统企业诸如通信、能源、金融等行业很多系统都是使用SSH(Struts+Spring+Hibernate)开发的,一旦Struts出了0day,这些企业肯定安全部门是要加班的,这里面很重要的一个原因就是因为没有对系统的安全性问题提前研究,换句话说就是开发阶段没有考虑这些事情(鉴于这些系统基本上有一大部分都是外包的)。这点在互联网公司,由于部分大型互联网公司SDL推进的比较好,所以有些影响特别大的漏洞都会有相应的预案,能够很快的修复漏洞。扯远了,我们继续来说安全培训的事情,对于安全培训来说,培训的内容应包括以下方面:
Part 1:安全设计:包括减小攻击面、深度防御、最小权限原则、服务器安全配置等
Part 2:威胁建模:概述、设计意义、基于威胁建模的编码约束
Part 3:安全编码:缓冲区溢出(针对C/C++)、整数算法错误(针对C/C++)、XSS/CSRF(对于Web类应用)、SQL注入(对于Web类应用)、弱加密
Part 4:安全测试:安全测试和黑盒测试的区别、风险评估、安全测试方法(代码审计、fuzz等)
Part 5:隐私与敏感数据:敏感数据类型、风险评估、隐私开发和测试的最佳实践
Part 6:高级概念:高级安全概念、可信用户界面设计、安全漏洞细节、自定义威胁缓解
以上内容选择性培训,根据规模、能力、要求等多方面满足安全要求。

鉴于很多企业没有推进SDL,但是我们可以通过攻防驱动的概念来补充这一部分,所谓的攻防驱动包含以下内容:
  • 事前基线:安全编码标准、安全设计
  • 事中措施:代码审计、发布前的安全测试
  • 事后机制:http全流量ids、web日志分析、流量实时审计等
  • 事件驱动:发现了新问题就督促开发部门赶紧修复

对于威胁建模来说,微软STRIDE基本可以满足,所谓STRIDE就是Spoofing(假冒)、Tampering(篡改)、Reputation(否认)、Information Disclosure(信息泄露)、DoS(拒绝服务)、Elevation of Privilege(提权)。对于SDL部分,no one could say it better than Microsoft!所以直接贴链接了:
威胁建模 (STRIDE)
Microsoft Security Development Lifecycle (SDL) - Process Guidance (SDL)

小结:这一部分笔者还是没有贴出来过多的干货,毕竟安全这件事,三分技术七分管理,人才是应该管理的对象。
编辑于 2017-04-24

文章被以下专栏收录