恶意文件检测的理想与现实比对记录
2023-9-2 12:29:53 Author: OnionSec(查看原文) 阅读量:22 收藏

昨天上午又参与了一次部门内部的简单项目分享会,在新的环境从3月份至今也参与了三四起类似的会议了,每次从他人身上都能收获到一些可以学习借鉴的小经验。除了这个方面,在整体效果上与之前的几次会议呈现的效果类似,由于很难全面的站在对方的角度给出信息,因此还是欠缺了一些比较重要的点,未来还需要不断地调整不足的地方,希望下次有一些小进步。经过回顾上次的分享会后的需要改进点以及当时领导给的针对性建议,这次分享过程从自身思路展开来看比上次有了点点进步,在这期间脑子里不会像以前那样空空如也了,有了一点条理,脑子里把握节奏的程度也能七七八八了。

万幸,有一点点的进步就已经算是好事情了,如果原地踏地或退步了可能就需要寻找自身原因了。本文会记录点自己从恶意文件检测方向的效果出发,目前关注到鉴黑的能力,也就是AI应用中的二元分类。自己在业余时间基于机器学习制作了一个检测模块,主要是希望能应用在工作环境帮助我解决部分问题的笔记。

我想解决的问题是挖掘出更多的漏报恶意文件,如何解决这个问题呢?

每个人都有自己的思路,见仁见智。在知识理论储备这块学习完了三本书,其中一本精读,一本是泛读,最后一本是侧重查阅。期间也会有空在家就会阅读论文,这个过程也是没办法避免的。因为只有熟悉一些相关知识才能理解当前的问题是什么,真实社会环境中的现状如何等等。

当初是考虑到传统的动态沙箱检测肯定会有解决不了的问题,因此实现背景是从响应速度看,能在第一道防线静态检测中直接检出为黑会比后续的动态检测要更有价值,这是基于防御哲学或APT活动中杀伤链的流程得到的,每一个成功的攻击活动都存在一环接一环的恶意数据流动,作为防御者只需要在这些环节中能及时发现或阻止就能挫败攻击者的目的,同时越接近攻击最初环节,并能发现与阻止攻击者后得到的价值越大。静态检测的前期动作避免了因对抗沙箱或沙箱环境不适配等客观因素而导致的无法检测和漏报问题,性能上静态检测远远优于动态检测,沙箱的检测耗时是需要分钟级别的,静态检测大体上只需秒级。但转念一想,为了达到最佳效果,我们为啥不把这些都结合起来呢?因此业界肯定是都会结合动静态检测维度进行检测增强恶意文件检测能力。

完成后经过一个多月的打磨并测试现实效果,这个demo检测模块测试期间没有特别离谱的效果波动,趋向于平稳。统计了下demo检测模块在Windows环境下平均检测一个文件花费0.5秒,模型是在自己在今年护网前期训练完的一个版本,随着后续地不断打磨还有一定的成长空间。利用线上真实数据作为验证数据集,得到测试效果如下,在万分之五的误报率条件下,模型鉴黑检出能力可达到80%左右,在千分之五的误报率条件下,鉴黑检出能力可达到90%左右。

除了测试结论,我还需要得到一些实战结论,因此借着前几周国家级护网演习活动的数据(大部分是全免杀或强免杀样本,少部分是存在沙箱对抗的样本)来进行验证,在检测效果上自己的检测模块确实比公开的引擎维度检测多贡献30%左右,当然因为现实世界的数据随机分布问题,因此一次短时间窗口的数据验证也没法得到比较准确全面的检测能力维度,所以后续继续进行了多次模拟真实世界数据的验证实验。

免杀或对抗类的数据效果如下:

从攻击者的角度看,最新攻击的样本肯定是免杀样本居多(总不可能拿去攻击的恶意文件不做免杀测试吧?因此基于这个常识得到这个结论),不乏有对抗动态检测(通常是沙箱)的样本。

1、护网期间每天单独收集外部红队样本进行模拟检测(着重收集全免杀或强免杀只有1家引擎检出的样本),36个样本被模块检出9个为黑,检出率为25%。

2、利用内部每天反馈给我的红队样本,201个样本(大部分是免杀样本或少数引擎检出的样本,以及部分是沙箱无法跑出C2的样本)被模块检出61个为黑,检出率为30.34%。

3、获取了最近时间的私有攻击样本进行模拟测试,保证误报率的前提,与检测护网红队样本环境一致,1282个漏检文件被模块检出194文件为恶意文件,检出率为15%。

自己测试的数据效果如下:

1、某数据来源有25个文件,都属于恶意文件,模块(保持误报率低于千分之五)可以检出3个,其中一个是可被沙箱检出,其余两个是沙箱都检不出的样本,这一点看确实对我有点点帮助。

2、自己模拟真实环境的恶意文件随机分布,拿到3197个文件,模块(保持误报率低于千分之五)可以检出296个文件,检出率为9.25%,说明目前模块肯定是存在漏报的,毕竟是比较粗糙的模块,还需提升空间,对这个结果自己是知道原因的。

3、最近一个多月会偶尔拿真实数据测试模块的误报情况,误报率都低于千分之五,最佳的一次成绩是误报率万分之五。在误报率方面没有太大的波动,这给了我一点点信心。想起来这其实也是之前为了解决误报率高的问题而不断打磨的结果,确实投入了一些心血,最大的困难是如何降低误报率的同时保障检测能力依然保持优秀,属于既要又要的哲学难题。

以上均是理想情况下的表现,回到现实当中后我进行了一点心得总结。

首先这个事情对我的帮助是什么呢?

之前摸索AI的时候把自己的部分技能经验赋予到模型上了,确实相当于0.5个我来帮助我应对工作,我一个人一天也只能看几十个未知文件(这里并不是说人很弱小,只是因为人的创造力是无限的,机器是机器,要发挥作为人的长处)。而基于模型的检测模块平均检测一个文件需要0.5秒,一天可以轻轻松松7万数量的分析能力,机器不会累,所以目前效率粗略看快达到1.5倍。如果未来我还继续喜欢研究AI,估计会随着自己知识理论或动手能力的增加,检测模块也还会成长。

为什么会摸索AI解决现实问题,是想着低投入尽快获取到效果,这确实是个有点猥琐的方法。现实不会因为你做的技术难而给你照顾,只看效果。虽然可能人情味少一些,但因为现实社会环境是很复杂的,也没法去逆潮流。传统方法肯定是有价值的,因为已经被前辈们经历过且证明了,我们继续去模仿即可,于是把每个方法的长处结合起来就能得到一个更健壮的整体系统了。前段时间当在家里本地安装了好几次开源沙箱失败后,最后一次成功了,并感受到它带来的帮助后,以前的一些想法也会随着外界环境的变化而变化,这也是正常的一个心路历程,因为我们的目标是星辰大海。 


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyMTUwMzI3Ng==&mid=2247485290&idx=1&sn=3c25798dd7d9f35f5735226901538cb3&chksm=f9db5029ceacd93ff75db0bb4d93f1bedf9cce7d21f9138bbf0f2fb537aa65f89167f753ca46&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh