FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序把安全装进口袋
深信服EDR安全团队,全年参与了各种重大流行病毒和安全事件的应急响应,在此,我们将团队一整年的思考和所形成的流程,共享出来,期望能给未来即将从事,或者长期从事应急响应、安全研究的人,一些启迪。
我们大致从八个方面阐述,分别是:应急响应的整体思路、应急响应的基本流程、应急工具集简介、系统日志及日志分析、威胁情报的作用、常见病毒及分类、理解漏洞和补丁、技能提升建议。
应急响应的整体思路,就是上层有指导性原则和思想,下层有技能、知识点与工具,共同推进和保障应急响应流程的全生命周期。
3W1H原则:3W即Who、What、Why,1H即How,做应急响应要带着疑问来做事,一定要收集清楚这些信息。网络拓扑是怎么样的?需求是啥?发生了什么事?你能做什么?用户用了什么产品?产品版本多少?病毒库版本多少?多少主机中了?主机是普通PC还是服务器?服务器是做什么的?……信息收集越多,对应急响应越有利。
易失性原则:做应急响应免不了要做信息收集和取证的,但这里是有一定的先后顺序的,即最容易丢失的据,应该最先收集,其它的依次类推。
要素原则:做应急响应,主要是抓关键证据,即要素,这些要素包括样本、流量、日志、进程及模块、内存、启动项。
避害原则:做应急响应,要做到趋利避害,不能问题还没有解决,反而引入了新的问题。譬如,自己使用的工具被感染而不知情;给用户使用不恰当的工具或软件造成客户主机出现问题;给别人发样本,不加密,不压缩,导致别人误点中毒,最极端的场景就是给别人发勒索样本不加密压缩,导致别人误点中毒。
应急工具集:应急响应必要的一套工具集合,可协助应急人员做分析,提高效率。
日志分析:能对日志进行分析,包括但不限于系统日志(Windows/Linux等)、应用日志、安全设备日志(防火墙、防病毒、态势感知等)。
威胁情报:安全事件可能不是孤立的,安全站点或搜索站点能找到安全事件的关联信息。
漏洞补丁知识:知道漏洞与补丁的关系,它们在应急响应中的角色,了解常见漏洞及补丁。
常见病毒及分类:知道病毒大致的分类以及常见的病毒。
样本分析:至少能对样本进行一次简单动态的分析。
操作系统知识:至少对Windows系统和Linux系统的有一定的知识储备,知道其基础的工作原理。
应急响应大致可以分为五个部分,其基本流程包括收集信息、判断类型、深入分析、清理处置、产出报告。
收集信息:收集客户信息和中毒主机信息,包括样本。
判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS等等。
深入分析:日志分析、进程分析、启动项分析、样本分析。
清理处置:直接杀掉进程,删除文件,打补丁,抑或是修复文件。
产出报告:整理并输出完整的安全事件报告。
勒索和挖矿事件,可以占比50%以上,而且这两种安全事件业务特征极其鲜明,因此可以单独提流程出来处置。
取证要素:取证并非毫无头绪的,病毒本身必然有网络行为,内存必然有其二进制代码,它要么是单独的进程模块,要么是进程的dll/so模块,通常,为了保活,它极可能还有自己的启动项、网络心跳包。
总之,可以归结为如下4点要素:流量、内存、模块、启动项。
流量分析可以使用Wireshark,主要分析下当前主机访问了哪些域名、URL、服务,或者有哪些外网IP在访问本地主机的哪些端口、服务和目录,又使用了何种协议等等。
例如,使用Wireshark观察到,主机访问了sjb555.3322.org这种动态域名,即可粗略猜测这是一个C&C服务器(如何判断一个域名是可疑域名,可以参考后文)。
Wireshark执行下“FollowTCPStream”操作,查看到当前Botnet主机正在加入一个IRC频道。另外,也可以从目的IP下手,可查到这是一个恶意IRC僵尸网络服务器。
网络流量这块,如果具体到对应建立的连接,也可使用TCPView工具进行查看。如下,我们使用TCPView查到了2条连接:
chenyu-57068a53.localdomain.2671->170.178.191.191:6667
chenyu-57068a53.localdomain.2674->amsterdam.nl.eu.undernet.org.6667
当我们分析病毒进程遇到困难的时候,其内存便是我们查找问题的最后一道防线。
以某Linux服务器应急事件为例子,如下图,我们找到三个病毒进程[ksoftirqd/7]的父子关系,可以看到,11275拉起了11276和11277,但11275是1号进程拉起来的,即init是其父进程。
这意味着,实际的父进程(原始病毒文件)在当前状态下是追查不到的了。
Linux环境下dump内存,可以使用系统自带的gdb,键入命令gdbattach11275,attach到病毒进程11275,在gdb环境下,使用dumpbinarymemoryfilestart_addrend_addr将11275有效内存空间dump下来。
譬如:file为输出文件,可以指定为11275.dump,start_addr是起始地址,end_addr是终止地址,例dumpbinarymemory/tmp/11275.dump0x138380000x13839000(这里仅仅只是举例,实际地址在gdb中获取)
对于内存文件11275.dump,采用命令strings-n811275.dump,获取长度8及以上的字符串内容,我们发现有如下一行:
/etc/security/ntps.conf这是在病毒运行内存里面发现的,要么是病毒配置文件,要么是原始病毒文件。
我们cd/etc/security并使用ls-al查看内容如下:
工欲善其事,必先利其器,所谓巧妇难为无米之炊,其实应急响应亦是如此。应急响应和安全研究人员,必须事先就备好完整一套的工具集,随时可以取用。
流量分析工具:常用的流量分析工具是Wireshark、TCPView,也可以使用科来网络分析工具,Linux下对tcpdump比较熟悉的,也可以使用tcpdump。
启动项分析工具:主要是AutoRuns工具,便于定位病毒启动项。
专杀工具:有些流行病毒家族,通常对杀软有抑制性,或者本身有感染性,需要专杀工具去查杀和修复正常文件。
辅助工具:WinHex、文件Hash工具、Everything搜索工具、Unlocker文件解锁工具等。
内存扫描工具:主要是MemScanner。
Windows系统日志:Windows系统自带的审计日志、操作日志、故障日志。
Linux系统日志:Linux系统自带的审计日志、操作日志、故障日志。
应用日志:包括但不限于Web应用等众多繁杂的日志。
Windows系统日志
日志路径:C:\Windows\System32\winevt\Logs
必看日志:Security.evtx、System.evtx、Application.evtx
Linux系统日志
日志路径:/var/log
必看日志:secure、history
多数日志都是可读易懂的,譬如很容易就能看出来,下面这个日志记录了ssh爆破过程。
在安全事件中,威胁情报有时候会给我们提供大量有用的信息,甚至直接推动了安全事件的快速响应。
威胁情报的元素,包括但不限于域名、URL、IP、文件Hash、文件路径、文件名、数字签名、备案信息、排名信息。
威胁情报的获取源
微步在线:x.threatbook.cn
腾讯哈勃:habo.qq.com
Virscan:virusscan.jotti.org
Jotti:virusscan.jotti.org
备案查询:beian.cndns.com
深信服安全中心:sec.sangfor.com.cn
深信服威胁分析平台:wiki.sec.sangfor.com.cn
深信服EDR安全软件中心:edr.sangfor.com.cn
内网IP利用特定的随机算法生成域名(DGA),同时黑客会利用该随机算法注册域名,这样就可以避免因为长期与某个域名或者IP通信而被封堵。
观察这些域名,可以发现,这些域名的“字符特征”看上去就是随机的。域名的发明(DNS)就是为了人类方便记忆而诞生的,所以,我们往往会去注册一些容易记忆且读起来朗朗上口的域名,显然例子中的域名就不具备这一特征。DGA这种反其道而行之的行为显然不是人访问网站发出来的,必然是病毒利用某种算法来实现的。
动态域名是子域名开放给其他人使用,并且子域名绑定的IP是可以动态获取的,大多数是免费的,因此常被黑客所使用,如abc.3322.org(3322.org就是动态域名提供者,子域名abc.3322.org可以被别人所使用)。
常见的动态域名提供商:
sjb555.3322.org就是一个动态域名,在VirusTotal上被标记为恶意的。
试想,企业级用户,无缘无故为什么要去访问一个刚刚注册的域名呢?
暗网,也叫Tor网络,此网络的访问、传输流量是不可追踪溯源的,因此是黑色产业链的温床。要访问暗网,要么病毒自己实现Tor客户端,要么通过Tor代理来访问Tor网络,而通过Tor代理访问的流量是未加密的,其直接使用Tor代理访问Tor站点服务器。
因此,暗网代理域名是可以被检测到的。
这里举个例子,我们在某台告警主机上,使用Wireshark抓网络网络,直接过滤DNS协议如下:
可以看到,此主机解析了大量.pw站点的域名,如koqqveoukgjc.pw,.pw是帕劳国家顶级域名,此国家是一个非常小的岛国,跟中国大陆都没有建交,国内企业有需要访问他们站点的可能性低到零(或者有业务在帕劳的可能性)。
勒索病毒:能对用户文件进行加密的病毒。
挖矿病毒:消耗用户CPU、GPU资源,进行大量运算,获取加密货币的病毒。
蠕虫:自动复制自身的副本到其它主机的病毒。
木马:隐蔽性强,多用于监控用户行为或盗取用户数据的病毒。
感染型病毒:能将自身恶意代码插入正常文件的病毒。
脚本病毒:使用脚本编写的病毒。
宏病毒:宏是微软公司为其Office软件包设计的一个特殊功能,由于其功能强大,使得黑客可以通过精心构造的宏代码来实现恶意操作,这些代码就叫做宏病毒。宏病毒常以垃圾邮件的方式对用户进行攻击,因为伪造的Office文档不容易引起用户的怀疑,所以当用户毫无防备的打开Office文档并启用宏之后,宏病毒便开始了运行,对用户主机进行恶意操作。
僵尸网络病毒:能形成大型的一对多,多对多控制的远程控制病毒。
以感染型病毒为例,需要知道并了解其原理:
正常PE文件的执行流程入下:
[1]从PE头中提取入口点地址EP。
[2]定位到EP处的PE代码。
[3]开始执行PE代码。
被感染的PE文件的执行流程入下,其中多了恶意代码环节:
[2]通过篡改EP或覆盖原始入口点代码的方式,使EP指向恶意代码。
[3]执行恶意代码。
[4]恶意代码执行完后,跳回到原PE代码处执行。
虽然感染的总体思路都是让宿主文件先执行恶意代码,执行完后再跳回到原始代码,但每种病毒家族实现的方式却不尽相同。我总结为四类,复杂度由低到高依次为:偏移式、覆盖式、加密式、混淆式。
专业术语:入口点EP(EntryPoint),原始入口点OEP(OriginalEntryPoint)。
偏移式是最多感染型病毒使用的感染方式,病毒会将恶意代码注入到宿主文件的一个空闲位置,然后修改PE头中的EP地址,使其指向恶意代码起始处。被感染文件运行后就会先执行恶意代码,恶意代码执行完成后,会获取OEP的偏移(每个病毒家族的OEP偏移值藏在不同的地方),然后将执行流跳回到OEP处,执行宿主文件原始代码。
漏洞和补丁,在应急响应中是不可或缺。如果黑客是通过某种漏洞入侵系统的,而在应急响应中,无法找出黑客所利用的漏洞,就会意味着,入侵行为可以反复发生。在终端侧,就会表现为病毒清理不干净,杀了又来,所以一定要找出漏洞。
找到漏洞后,就需要打上相应的补丁,这样才是一次完整的处置。
怎么查看系统补丁情况?以Windows为例,直接打开cmd,输入命令systeminfo即可获取。
漏洞是什么:漏洞是指一个系统存在的弱点或缺陷。
怎么来的:系统设计时的缺陷或编码时产生的错误。
有什么后果:黑客的侵入及病毒的驻留,数据丢失和篡改、隐私泄露,系统被控制并作为入侵其他主机系统的跳板,等等。
解决方法:打补丁。
多研读安全书籍:多研读安全书籍,推荐《恶意代码分析实战》等。
多逛安全论坛:推荐多看看Freebuf、看雪学院等。
多在安全沟通群里问:不懂就问。
多实践:多实践,出了安全问题,多尝试自己动手解决。
*本文作者:千里目安全实验室,转载请注明来自FreeBuf.COM