0x0 背景
安全本质是人与人之间的对抗,攻防技术的更新迭代促进了行业的发展。虽然都是做在安全技术的研究,但是发现其实二个方向的工作思路上还是有较大的区别;防御者从多个维度针对某一类攻击手法进行全面剖析提出一个能够覆盖大多数攻击场景下面的方案。攻击者往往在多次攻击测试之后,只需要有跳跃性思路能够利用一些出其不意的姿势从一些技术点上突破防御即可,攻防技术相辅相成,相互进步。笔者在机缘巧合下从一个web安全的安全服务小菜鸡入到了一个安全检测的坑也有好几年了,简单谈谈自己从事安全检测的一些思考和想法,有误的地方欢迎大家指出批评。
0x1 知识积累
对于很多甲方用户来讲做安全也就是采购一些安全产品或者购买一些安全服务,应该也有很多大型企业或者互联网、金融企业会选择自己搭建自己安全平台的建设,毕竟还是自己熟悉自己的业务。安全产品的也是完成从传统的防火墙到UTM、下一代防火墙的转变,近几年还提出了态势感知这种新类别的产品。
一个安全产品往往是凝聚了大量安全人员和开发人员的心血,有很多东西也是笔者之前做渗透时候没有接触到的。依稀记得之前利用Metasploit做MS08-067的漏洞利用的时候,只是简单的几个命令一敲,search、use、set payload、rhost、rport、lhost、lport最后一个终极大招exploit最后用力地的一回车,shell到手执行几个命令后带着微笑的去写渗透测试报告了。遇见域内服务器权限不够的时候,也就是一个MS14-068完事。
Sql注入遇见被拦截的时候,先试一下sqlmap自带的tamper或者自己学着从大牛那里看来的文章像模像样的写一下,最后执行一下whomai返回一个nt/system的时候内心也是充满成就感的,遇见被查杀的webshell就上github或者安全论坛跪求大佬给一个免杀马,实在不行就问一下客户能不能给开个白名单。
当时也是因为比较菜其实也没有认真去研究过这些漏洞产生的原因、以及过程中的流量特征或者被攻击端主机上的一些行为特征、也没有思考应该如何做痕迹清理和免杀,更没有考虑过如何去识别这些攻击行为和检出这些webshell。安全检测的思路却是在研究这些攻击行为的特征,无论是流量特征还是主机的行为特征,真正的去理解这些攻击手法产生的原因,一个MS17-010漏洞需要理解到具体的SMB协议里面的一些字段以及相关的含义,攻击利用的数据包长什么样子,返回数据包的字段有什么异常,和正常的区别在那里。
一个MS14-068的提权漏洞的研究也需要理解Kerberos的本身的工作机制,协议的理解是个繁琐的工作往往需要大量的时间,也逐渐理解KDC的认证流程了之后,也就知道所谓的银票、黄金票据到底是怎么回事,也开始理解为什么mimikatz被成为神器的原因。之前一直以为mimikatz就只是一个抓windows的工具而已,后面发现它也是域内渗透的一个神器。
做检测的确没有做渗透那么好玩相反工作还很枯燥,没有那种攻破某一个站点getshell后、从administrator到nt/system后,内网漫游拿到域控管理员服务器后的那种成就感,相反你设计的检测方案被绕过漏报的时候,就是妥妥的黑事件一枚了却也没有因此而感到沮丧,喜闻乐见后续可以继续在方案里面进行完善。
0x2 应急响应
做技术预研的时候经常会没有头绪有一种间歇性迷茫的感觉,安全人员还是需要很多技术、案例或者攻防知识的输入来了解当前的流行的攻击手法。应急响应就是一个最直接的方式,跟踪客户处的一些安全事件从流量、日志、业务的多个维度进行溯源分析黑客的行为。过程中还能收获不少的病毒样本、黑客工具、各种免杀马甚至是一些0day也说不定,更多的还是了解攻击手法,那些EXP是常用的、那些是常见的入口点、常见的内网穿透有那些姿势。
做好应急响应却也不是一件容易的事情,往往需要有一些windows、linux的使用技巧和一些安全知识,还包括一些常见的远控木马、病毒家族、日志分析能力、流量分析以及一些操作系统的安全知识。在无文件攻击没有出来之前,笔者一直都不知道windows还有Powershell这么个东西,也不知道还有那么多RAT工具和常见的飞客蠕虫、XORDDOS、Ranmit之类的病毒。对一些windows的攻击手法也需要一些涉猎和研究,比如最常见的进程注入啦、dll劫持、驱动病毒、Rootkit之类的,在处理客户问题的时候就发现真的是林林总总什么情况的都有。
还有一些常见的web漏洞经常就发现一些异常进程是apache、IIS、weblogic之类的进程拉起来的,需要熟悉一些常见的RCE漏洞、上传漏洞、未授权访问之类的。
通过接触真实的攻防事件作为输入源,才能更好的为检测工作提供思路和方法,也避免了闭门造车、思路也是天马行空的。
0x3 机器学习
现在诸多安全厂商都在提AI+安全的概念,一些AI的算法在安全检测上面还是有很大的应用空间。之前在分析飞客蠕虫的病毒时候第一次注意到DGA这种绕过威胁情报的方法,思考过针对于这种行为的检测方法。利用传统的检测方法,在特征识别结合一些行为分析来检测这种行为,检出率还是比较有限也需要消耗大量的分析成本。
这个时候在 AI的算法有大量的样本训练集之后,通过一些数据的处理和算法的选取上就比较有优势,在安全检测的很多其他点上也有很多的应用面,目前互联网上也有很多的介绍文章,github上也有很多开源项目,感兴趣的可以认真研读一下看代码毕竟比看文章更直观一些。当前常见的AI算法都已经集成在一些框架里面,比如开源的tensor flow应用起来门槛也不是太高,通过安全人员提取好相关的特征之后麻烦一点的也就是数据的预处理、算法选取和一些参数模型的优化上面。而最后决定一个方案优劣的主要因素,个人感觉还是在一些特征提取的工程上面,特征提取的准确度往往比算法模型更加重要一些。作为安全人员,还是需要了解一些常见的机器学习算法不然都不好给领导吹水,查阅饭后翻一翻说不定还有新发现,这里比较推荐周志华老师的西瓜书,堪称经典。
0x4 黑产牟利与APT
在应急响应的过程中经常会遇见一些黑产团伙流下的痕迹,由于热门虚拟货币的流行导致挖矿、勒索成为黑产主要的盈利方法。层出不穷的挖矿病毒,各种各种的勒索病毒攻击手法也是各种各样,抓到一些病毒样本的时候找到钱包地址在交易平台一查才发现人与人之间差距竟然如此明显,自己辛辛苦苦几十年还真的不如他们随便玩玩。
有时候也会思考通过抓取到的病毒样本和工具,然后修改一下钱包地址,自己也转行算了。毕竟是根正苗红的白帽子,每次也都是想想就算了,然后如孔乙己一般排出九文大钱告诉自己:君子爱财,取之有道。勒索病毒还是很直观判断的,毕竟全盘都被加密了,只要通过加密的提示文档和加密的后缀名确认一下相关的病毒家族即可毕竟想免费解密还是有点难的,挖矿病毒也容易发现了,打开进程任务管理器一下那些占用高的进程一个一个确认一遍总能发现点异常。不得不说黑产团伙们还是很努力勤奋的,各种漏洞都能利用一遍版本迭代更新的速度也快,很快就可以出了一个新的变种。
之前总觉得APT什么的只是存在一些安全报告当中,但是其实可能某一个应急响应处理客户问题的过程当中接触的病毒样本、某些隧道通信流量、某一种攻击行为的分析过程中其实就是一个APT组织留下的痕迹。通过对这些高级威胁的研究往往能够为安全检测提供更多的思路,比如一些常见的免杀技巧、绕过检测的方法、代码混淆的技术等等,总会让人感觉居然还能这么玩的惊奇。他山之石、可以攻玉,很多小技巧、漏洞的组合拳在特殊场景下面的作用还是很大的。
分享一个非常nice的github项目,里面包含了最近几年的各类APT的跟踪报告:
https://github.com/CyberMonitor/APT_CyberCriminal_Campagin_Collections
0x6总结
依稀记得13年有幸读到了古典老师的书谈论到关于兴趣的话题。兴趣是你以最高级(est)的形式投入到当下(ing)的事情之中(inter)去,让自己完全身在事物其中。当真正完全投入到当下的事情中去时,不管这个事情多么简单卑微,你都能感受到无穷的乐趣。
有时候换个工作岗位和工作方式,离开舒适圈拥抱另一个可能,尝试一些新的研究方向说不定还有超出预期的收获。