0xB3 再谈应急响应Pt.1 ——*nix主机应急响应

坑爹的十一假期终于完了,除了1号半夜遇到点糟心的事儿之外,其他的时间过得还好,基本上状态就是在吃吃吃喝喝喝玩玩玩,不过回归到正题,前面我们说了主机加固和安全监控,接下来肯定就是要进入安全运营最坑爹的两个环节——应急响应和纵深防御,前者是一件糟心的事儿,后者则是被很多人称为马奇诺防线(不懂啥意思的去百度吧),但是我先要摆明态度,纵深防御这个东西对安全运营来说可以说是刚需,具体为什么我们以后有时间在扯,现在先来说应急响应。

0x00 PDR模型:

说到应急响应,就不得不说一个模型也就是PDR模型,PDR是防护(Protection)、检测(Detection)和响应(Response)三个单词的首字母,安全运营的主要操作环节被分为防护、检测和响应三个主要的部分,其中应急响应是安全运营工作中一个相当重要的环节。

由于在防护和检测环节中通常比较成熟的特征都是针对已知特征来识别的,比如说YARA Rules、IOCs这些东西,因策应急响应可以弥补前面各个环节的不足重要组成部分。在信息安全不对等的攻防对抗中,攻击方通常掌握着主动性,而防御大多数时候都是被动的,掐指一算也就只有应急响应这个环节能和攻击方来一局人和人之间的PK。

画张图来说明一下PDR模型表示意义:我们现在需要四个时间作为参考的衡量,第一个是攻击者从发起攻击的时间到时间目前进展的时间,我们记为Attack Time(简称At,图中用红色标记),第二个是系统从攻击者触及防御的层面到完全获取内网权限的时间记为Protection Time(简称Pt,图中用蓝色标记),第三个是从攻击开始知道入侵检测体系和监控体系能够发现攻击者这段时间记为Detection Time(简称Dt,用浅蓝色来表示),最后一个是从发现攻击到对攻击行为采取措施所用的时间我们称之为Response Time(简称Rt,用原谅色表示)。接下来就是数学时间,针对不同的情况,我们可以这么表示:

At < Pt:攻击者还在对目标系统发起攻击,也就是我们的防御措施仍在延缓攻击者前进的步伐(这就是说为啥纵深防御是有效的)

At > Pt:攻击者已经完成了对系统的入侵,多出来的时间或许是擦屁股的时间

Dt < Pt - At:也就是说我们的主动防御体系能够在攻击者没达到目的之前能够识别攻击

Dt > Pt - At:防御措施无效,等你发现的时候人家已经达到目的了

Rt + Dt < At 同时 Rt + Dt << Pt:攻击者在攻击没达到目的的时候已经就死掉了。

Pt - At > Dt + Rt:防御措施有效,原因同上

Pt - At < Dt + Rt:防御体系已经尽力,但是还是系统还是被攻陷

Pt < Dt + Rt:这届信息安全部不行啊!

其实说这么多就是想说一句话:检测是响应的前提,响应是根据检测结果而进行一系列的处理,如果没有有效的检测,防御是相对静态的,响应也就没法进行,在整个PDR模型中,核心是检测。

大多数安全体系建设中,应急响应大多流程为:

准备阶段-》检测阶段-》抑制阶段-》根除阶段-》恢复阶段-》报告和完成阶段

0x01 *nix下的应急响应:

注:以下内容部分可以适用于其他的操作系统。

按照我们之前说的,针对*nix下的应急响应步骤理想情况下是:

断网-》通知信息安全团队及相关的业务和资源协调部门-》备份数据-》分析数据-》恢复系统

1.断网:也就是让受影响主机和其他外部网络保持一个隔离状态,因为有些蠕虫性质的病毒诸如WannaCry这种会大面积感染内网,减小受影响设备面积并把事情控制在一个可以容忍的程度是必要的,第二个原因:由于你也不知道攻击者把你的系统损坏到一个什么程度,所以不让他继续受损也是必须的,第三个原因就是敏感数据,你懂得。但是断网的时候记得将流量相关的数据做保存,因为这些流量数据中可能存在相关的C2数据或者是其他远控协议。

2.通知相关部门:诸如受影响的业务部门、资源协调部门(OPS、IT)、信息安全部门和CIRT小组,把情况反馈给这些部门,方便确定攻击发起的时间、被攻击的状态(这里推荐使用Kill-Chain去分析攻击的进程)和缓解方案。


3.备份数据:把受影响的系统数据进行备份,方便进行离线分析,但是这里记得要去咨询一下保密协议哦。


4.分析数据:分析攻击者在该系统上的行为、目的和造成的影响,比如说检查密码文件(/etc/passwd和/etc/shadow)来寻找一下异常的情况,比如说可以检查是不是有UID0或者是GID0这种,如果有除了root意外的某个用户被赋予了一个UID和GID,那么我们就找到了攻击者的一些遗留信息,用一个简单的命令就是 :

grep ‘:0:’ /etc/passwd

除此之外,也可以从/var/log/messages、/var/log/audit/audit.log或者其他与系统相关的日志文件去寻找一些攻击者留下来的数据,比如说我们发现web站点被人家贴了标语,我们查找的时候就可以通过web相关的日志来查看是有哪些IP地址曾经访问过这个站点,可以去查找一下有没有比较可疑的行为。此外我们还可以去看一下有没有异常的程序,比如说在3级引导上使用lsof > ~/lsof.out来输出系统中的哪些文件处于打开状态,这个的话就要看经验了。当然使用top、ps这些命令去查看正在执行的位置进程或者资源占用异常的进程也是方法。使用netstat命令查看端口状态可以查看是不是被挂了后门,比如说使用netstat -tuln或者是lsof -Pnl +M -i4,你就会看到一些信息:

5.恢复系统:彻底的分析完入侵的过程之后,我们就应该着手恢复受损的系统,但是修复的过程中一定要注意去替换掉所有的有关认证的用户名和密码,同时修复完成之后需要进行安全测试,防止类似问题再生。

——————————————————————————————————————————

One More Thing。。。

——————————————————————————————————————————

以上基本上就是*inx如何去做应急响应了,下次我们再来谈谈Windows怎么做。

编辑于 2017-10-09 15:03