搜索
查看: 9345|回复: 151
收起左侧

[讨论] 沙箱针对性逃逸对策

  [复制链接]
B100D1E55
发表于 2018-6-11 00:24:31 | 显示全部楼层 |阅读模式
本帖最后由 B100D1E55 于 2018-6-11 04:53 编辑

之前曾经讲到杀毒软件永远无法做到运行前完全精确的查杀(事实上运行后同样困难),源于一个简单的证明:
假设一个程序包含两个函数foo()和bar(),在主函数中是这样的:
  1. main()
  2. {
  3.   foo();
  4.   bar();
  5. }
复制代码

其中foo()是正常代码,而bar()是包含恶意行为的代码。这个程序可能执行到foo()就永远循环而不会执行bar()(严格来说这样它就不是恶意程序),也可能正确返回后继续执行恶意的函数bar()(此时它是恶意程序)。根据停机问题的结论,任何图灵机都不可能判断foo()是否会执行结束,也就无法判断一个程序到底是不是真的会展现出恶意行为。
当然,以上只是一个理论构造,现实中的安软可以通过很多非精确的方式来逼近这个理论壁垒。例如,对于很多靠特征或者静态启发的安软,只要静态扫描到bar()的恶意内容就会报警(可以是特定的二进制特征,也可能是一些区段的异常熵值,等等)。动态启发则通过模拟执行程序来判断,但foo()可以运行很长时间以至于超过检测时间限制,这无法被虚拟机准确甄别出来。

/*******************************************/
近期越来越多安全厂商开始为企业客户提供云沙盘鉴定服务(BD, ESET, Dr.Web)。云沙盘的优势在于可以避开普通动态启发引擎的诸多限制。出于性能考量,动态启发扫描引擎对样本预执行的时长限制很严格,而能调度/仿真的资源很有限,相比之下,云沙盘则可以让样本在近乎实机的环境中展开恶意行为。事实上大厂现在都进行这样的部署,例如下图Office 365的防御策略
fig5-multilayered-ML-models-non-pe.png

在这个多层防御策略中,本地机器学习引擎能在毫秒内检测待测可以文档,而在云端,客户可以将本地提取的特征向量提交给云模型进行鉴定,响应时间也在毫秒级(p.s. 个人认为Avira基本上对大多样本也是这个策略)。当然,后续还有一个Detonation-based ML models,这个就是云沙盘,即让样本在云端的仿真环境执行并提取行为日志进行判断,由于运行样本本身需要不少时间,这个层级的响应就需要数分钟时间。

可能在一些人看来云沙盘似乎是一个非常保险的方法,因为其环境非常贴近实机,很多反扫描引擎的手法便无法生效。云沙盘可以不顾虑性能影响,收集更加细致的运行数据进行分析。但事实上从我个人来看,云沙盘对企业针对性攻击来说并不是什么灵丹妙药,其实局限性是相当大的,主要原因在于通用云沙盘构建的环境很难展开针对性恶意行为。

所谓样本的“针对性”,即一个样本在特定条件下才会展开行为。这个攻击面范围很广,从机器的用户名,到时间戳,到IP地址,有大量的方式可以让一个“定时炸弹”感知环境选择性引爆。比如如果我想攻击企业A的计算机,用某些方法我得知企业A计算机的用户名都有“PC-”的前缀,那么我可以写一个恶意程序,先检测用户名,当且仅当用户名开头是“PC-”的时候才解密恶意代码。而这样的样本放在云沙盘中往往就没法展开恶意行为,有很大概率会被鉴定为白文件。同理,我可以进行进程列表检测,当且仅当我看到qqprotect进程的时候才释放恶意代码,这样一来我可以很有效的针对中国区用户投毒,因为用qq的大部分是中国人,而中国人大部分电脑上都装有qq。相反,杀毒厂商云沙盘不一定构造这样的环境,自然无法展开对应行为。这些逃逸方法可以说是黑客对图灵机局限的很好利用。

作为娱乐,先列举一些黑客想出来的云沙盘逃逸方法:
1. 检测虚拟机:常见的有检测虚拟机注册表、厂商ID、虚拟机专属的硬件设备特征(MAC地址、VGA适配器厂商名称等)。
anti-sandbox-vm.png
对应的策略很多,比如抹除对应注册表特征等。但这个攻击面非常广,将每种可能性涵盖费时费力,在我看来只能是厂商后续逐步擦屁股猫鼠游戏。
当然也有的厂商直接让样本在实机执行,辅以一些透明度比较低的限权沙盘,比如Symantec就有这么做

2.时间攻击:一些权限指令在有hypervisor的环境中执行延迟远比bare-metal来的高,主要是因为hv在这当中需要截获指令并进行安全检查,必要的时候还需要进行一些仿真。
anti-sandbox-time.png
针对这类攻击,可以针对性地对这类不常见指令进行侦测(例如hybrid-analysis对这类指令的调用会放入可疑栏目中),也可以对系统时间进行伪装,但这里面攻击方法也非常多……

3.环境侦测:检测CPU核心数、检测硬盘大小(虚拟机环境一般硬盘会很小)、检测屏幕分辨率(虚拟机如果fit guest的话屏幕分辨率会很诡异)……
还可以检测最近打开的文件、安装过的程序等等
anti-sandbox-env.png

anti-sandbox-env2.png


4. 破坏行为监控:摘钩子、unaligned call、等等。这类对于不透明的沙盘来说问题不算太大,对于公共沙盘来说,写一些测试程序可以轻松修谈到虚拟环境的一些特性,如果他们还给不打码的系统截图就更方便了

5. 超时大法:比如sleep()函数,一般而言目前沙盘对这类函数都有一定绕过手段,但达到类似目的方法非常多,也是一个“擦屁股”的领域。
anti-sandbox-sleep.png
当然还有一种手法叫API hammering,主要是用来攻击系统监控。例如针对性密集调用一些被密切监控的函数,这些函数一般实机下没有监控所以运行速度很快,但是在带监控的虚拟环境下会很慢。恶意程序可以借此拖慢程序在沙盘中的运行速度,借此超时。类似的方法也用在JS解码上
anti-sandbox-js.png

6. 环境侦测:检测时间、用户名、时区设定……不赘述
anti-sandbox-artifact.png

7.用户交互检测:检测鼠标是否有移动,需要用户进行特定操作才展开行为等等。其实之前毒区有一个破坏MBR的就类似,需要用户点击“退出”之后才会破坏MBR,而自动沙盘如果不懂得去点击那个按钮就无法跑出对应行为。

针对6,7甚至是1和3这样的软肋,不同的厂家选择了不同的解决方法。

趋势等厂商允许企业客户自定义沙盘环境,也就是说客户可以将这类沙盘布置成和企业普通计算机一样的环境,这样一来,用户名检测大法之类的选择性执行方法在企业定制的沙盘中同样会展现行为。当然,这个方法局限性仍旧很大,比如对时间戳的检测就没法很好避免

对于7,普通沙盘一般都已经有一些模拟鼠标活动、模拟点击常见按钮(比如“yes”“next”“是(Y)”)的功能,但是局限性仍旧很大

还有一类,就是以VMRay为代表的符号执行技术,VMRay称之为“倒带”(Rewind)。
其实类似方法在早年就提出,比如07年有一篇引用500+的论文“Exploring Multiple Execution Paths for Malware Analysis”就提出了这样的构想:在执行待测样本的时候,是否能自动化地探索多条控制流来提高一个程序的代码覆盖率?例如对于下图程序
sample_program.png
其中程序会读取一个数字到y,计算后赋值给z,根据z的结果运行结果会不同。在这里假定ERROR为成功执行恶意代码,而SUCCESS则是在条件不满足时异常退出,可以有这种情况(成功执行):
succeed.png
但如果y不是6,对应ERROR行为就无法展开。而符号执行在这里要做的类似于方程求解:
symbolic.png
用lambda替代y,侦测到if else条件分支后,根据不同的分支判断结果列出方程反相推导出lambda的数值,将程序倒带回分支部分,插入解使其运行另一个程序分支。
通过对这类分支的多路径检查,沙盘可以更全面地展开所有可能的行为:
branches.png

在07年的论文中,作者讨论了实现这一思路的具体难处,包括如何完整的对程序进行快照和倒带,这里面有很多系统工程的内容这里不赘述。当年的实现仍旧有一些局限,比如其只能跟踪变量线性的变化,更复杂的不行。或者单纯hook一些异常退出的函数来触发倒带等等……

在VMRay沙盘系统的实现中,VMRay使用了Intel的Processor Tracing技术(Skylake及之后的处理器支持)。基于硬件的支持带来了很多好处,例如支持PT技术的处理器可以跟踪更多条件分支,而早年的一些技术比如LBR只能跟踪最多32个条件分支。此外,PT支持直接将日志记录到物理内存,避免了对缓存和TLB的污染,而且可以过滤大量日志噪声。

  • 首先,VMRay使用PT手机的信息来判断待测程序中是否存在尚未执行的代码区域
  • 然后,对这些未执行区域进行过滤(比如异常处理就可以丢弃)
  • 对于可以的条件分支进行跟踪,比如在获取系统时间等syscall后面的条件分支
  • 对这些分支使用符号执行,推导出触发分支的解
  • 将程序倒带回那个分支,注入求得的解进行另一个控制流的行为展开

ida0.png
上图这个程序,先用GetSystemTime()获取当前时间,然后检查时间是否是2010年 10月,如果不是则立马退出程序

当VMRay的分析算法发现40915c这个代码块没有被执行,就往回追溯,发现有两个条件分支指向这块区域。进一步发现系统时间是条件判断的一部分。

对第一个分支跳转条件进行求解,得到SYSTEMTIME.wMonth需要是0xa,通过倒带运行隐藏路径1
ida1.png

对第二个分支跳转进行求解,对应解可以是wMonth=0xb且wYear=0x7d9,通过倒带运行隐藏路径2
ida2.png


OK,其实我也出于好奇测了一下杀软扫描引擎到底是否有这种能力。其实这个答案基本上是否定的,因为性能要求太高……不过懒惰的我还是实验了一下。实验材料是之前论坛很火的Tilde ransomware,我写了一个简单的xor解密器,先将文件xor加密之后用程序释放出来运行。这方法不能更老了,不过这么做的目的主要在于规避杀软的特征查杀,看看哪一家扫描引擎能查出毒。之后,我进一步给解密路径增加了判断条件,让其通过检查用户名的方法只针对我的其中一个虚拟机运行,虚拟机内运行结果如下图:
bomb.png

测试自然是断网的,一开始也没传VT不然就要遇上拉黑大法好了
以下列出主流杀软的检测结果

原始Ransomxor加密xor加密+用户名判断
AviraYNN
BitDefenderYNN
Dr. WebYYY
ESETYYY
火绒YYN
KasperskyYYN
NortonYNN
Windows DefenderYYN

这个结果……基本符合预期,但是也有些神奇的地方

之所以说符合预期是因为已知Avira没有怎么用动态启发,而Dr.Web, ESET, 火绒,WD已知都有动态启发引擎,从结果来看卡巴也有一些动态分析。但是没想到BD和诺顿跪了,看来他们的扫描………………

可怕的是ESET和Dr.Web连带用户名判断的样本都查出来了,而且精确报出了原始毒名。如果我冲动一点的话恐怕就要归纳说ESET和Dr.Web扫描引擎有检查程序多条控制流的能力了。

但实际上并非如此。更多的测试表明ESET和Dr.Web的扫描引擎只是针对简单的xor做了一些对抗处理,特征入库后简单的single-key xor仍能被检出(还是不容易的,点个赞),我对加密函数稍微加一点线性变换两个引擎就跪了。
接下来用用户名判断的样本测测几个在线沙盘:

Threatexpert:跪了
HybridAnalysis:跪了
Cuckoo:跪了
VMRay:尚未拿到试用资格

其实也很正常,这些公共沙盘背后的厂家就算有对应的技术,也不会开放给普通用户。

顺便用这个样本来看看VT哪家拉黑快(这个样本广度近似为0,测试的时候又是断网,厂商唯一捕获的可能是VT上):

xor加密样本第一次上传:
nofence.png
大约6小时后
no_fence_xhrs.png

xor+用户名判断的样本第一次上传:
user_fence.png
大约6小时后:
user_fence_xhrs.png
在这里,6小时后额外检出的厂家之所以能发现病毒有几种可能性:1)客户端没有简单xor对抗但是云端有 2)这些厂商剽窃了第一批检出厂商的结果
到底是怎么回事任君自由想象。可能有人认为还有可能性3),即云端有符号执行检查,我之所以没列出这条是因为下面的测试:

xor+线性变换加密+用户名检查
对于这个样本,动态如果能检出很可能有类似符号执行的多控制流检查能力,先看看初次上传:
Cylance不算,这货报的是我用的编译器……
ult_xor.png
6小时后:
ult_xor_xhrs.png
难道CrowdStrike沙箱跑出对应行为了?这里其他厂商没检出可能纯粹是因为他们不在VT拉黑狂魔列表里

额外的一些思考:
符号执行是挖掘隐藏控制流的灵丹妙药吗?其实并不是。在上文可以看到,符号执行可以对简单的条件判断进行逆向求解,但如果这个解被用在更深层次上我相信符号执行是无能为力的。例如在上文xor解密器的案例中,如果将外界输入值作为恶意代码的解密密钥,那么就算符号执行引擎能跑解密代码路径,也无法解密出正确解(因为它不知道正确的key是什么)。这个情况下条件判断的难度化归到了解密payload本身,因此符号执行也就无用武之地。
总体来说,符号执行可以解决“如果满足条件X我就采取A行动”这类控制流隐藏手段,但没法解决“如果满足条件X我就用X采取A行动”这类问题,因为难以简单自动求得什么样的“X”能引导出正确结果。除此之外,一个程序的分支众多,攻击者完全可以大量增加特定分支数量来增加分析的负担进行逃逸。因此多层防御(特别是实时行为/内存监控)至关重要。上文简单的xor解密器已经放倒了几家厂商的扫描,如果后续没有防御层的话就很酸爽了


评分

参与人数 18原创 +2 分享 +3 魅力 +1 人气 +19 收起 理由
star-ray + 1
尘梦幽然 + 1
914525753 + 1 精品文章
引领四基生活 + 1 版区有你更精彩: )
绯色鎏金 + 2 原创内容

查看全部评分

B100D1E55
 楼主| 发表于 2018-6-12 11:43:50 | 显示全部楼层
本帖最后由 B100D1E55 于 2018-6-12 11:49 编辑

结果补充(6月11日更新)——之所以不直接编辑原帖是因为防止二次被吞……

今天突然想起来测试的时候漏掉了一个东西。。。对xor解密器报毒的杀软不一定都有动态执行能力,因为很有可能只是对xor进行了针对性处理。因此最好的检验方法就是测试一下xor+线性变换+无用户名检测的样本,结果如下:
linear+xor.png
这个结果有一点意思,对比xor+无用户名检测的样本而言减少了3家检出,分别是Cybereason,Dr.Web,Sophos AV
由此可见这三家当初的检出都是靠静态而不是动态,特别是之前我误以为大蜘蛛是动态检出,现在看来大蜘蛛连动态虚拟都没跑,囧rz

这里更有意思的是Ikarus和Avast(AVG)都检出了,传统观念认为这几家都是纯静态,真的是这样吗?
其实检验的方法很简单,我只要在解密前加上一些延时代码即可,比如counter loop 100000次
linear+xor+cntr.png
对比一下,歇菜的有Avast(AVG),ESET,Ikarus
从这个对比可以看出Avast(AVG)以及Ikarus很可能拥有代码模拟执行功能,会对程序进行初步的展开并对衍生物/内存等进行静态启发,但是这个展开过程执行的指令数量很少。而ESET这么快歇菜了我个人猜测是因为ESET采取了“分类处理”,即对不同类别的样本扫描时长不同。用过ESET的同学都会发现ESET扫不同PE样本耗时差别很大,说明ESET内部可能有一个判断机制,对某些类别的样本会加长沙盒内模拟执行的时长,而某些样本则会简单处理。其实ESET库体积变大也和这方面有关,将运行初期行为/meta特征入库之后扫描引擎可以在展开更少行为的情况下判毒,而毒库小的动态引擎反倒需要收集更多的行为才能判别,因此扫描更慢。

最后的最后,将counter loop 延长到鬼畜的10亿次(就算counter loop这么长,在实机中也就是一眨眼的功夫,因为这个流程的IPC近似为1)
linear+xor+cntr_long.png
大家都歇菜了,除了某个误报王

所以这里的结论是:Avast(AVG),Ikarus有基本代码模拟执行能力;大蜘蛛对这个系列样本的检出不是靠动态启发而仅仅是特征匹配;卡巴、ESET、微软的动态扫描超时阈值各不相同(顺带一提,火绒也能跑很长的counter loop,但敌不过更鬼畜的数字……)

预告:预计顺利的话下一次将更新vmray的结果

评分

参与人数 3人气 +3 收起 理由
191196846 + 1 版区有你更精彩: )
wangkaka + 1 测试辛苦了
驭龙 + 1 这个回复应该置顶,人气送上第二个

查看全部评分

B100D1E55
 楼主| 发表于 2018-6-13 11:15:20 | 显示全部楼层
本帖最后由 B100D1E55 于 2018-6-16 08:13 编辑

结果补充(6月12日更新)——之所以不直接编辑原帖是因为防止二次被吞……

首先是一个坏消息:和vmray估计谈崩了,所以应该拿不到试用资格

然后是一个好消息,也就是本楼更新的内容,我想感兴趣的同学应该会觉得有意思

还记得主楼那个只有Cylance检出的样本么(xor+线性变换+用户名判断),它是一个标准的条件炸弹,只会在我的其中一个虚拟机引爆。上传vt除了Cylance的误报外没有任何厂家检出,六小时后增加了crowdstrike,而今天,也就是24小时候我看到了更新的结果:

updated_detection.png

可以看到新增了安博士、ESET、Dr.Web的检出。其中安博士报的是明确的毒名,而Dr.Web也是,很有可能他们的样本收集端检查了多条执行路径,发现了隐藏暗门。而ESET的云端也非常可能又这种能力,不过它选择则将毒入库为混淆器,而且是自动机生成的混淆器特征。顺带一提,ESET基本不从VT拉黑样本,我估计它是在我编译的时候后台LiveGrid自动上报的(不过我没有在那台机器上引爆样本,所以他们应该是自己云端自动跑出了行为)

updated_detection_new.png

在漫长的无检出窘况以ESET等的入库为代表结束之后,1个小时后立马增加了McAfee、TrendMicro。你们觉得他们是靠自己本事检测出来的呢?还是靠偷其他厂商结果检测出来的呢?呵呵

报毒原理分析:
现在拥有了一手的源码,可以研究一下ESET对于一些基本免杀手段的抗性如何:

在这里我不想贴出源码,不过我大致描述一下我程序的流程:
1.注册窗口控件
2.检测用户名
3.if条件判断是否执行解密路径
4.释放真的恶意文件并执行
5.额外的一些窗口控件函数

首先,我试着插入counter loop,loop数量为1000000000000000(再往上到long long int上限也就没意思了)。尝试了各种地方都不管用。也就是说如果被ESET入库的话counter loop绝对是想绕就能绕。也可能不是执行绕过,而是直接观测了syscall
然后我试着在counter loop中加入各种混淆的syscall,也不管用。也就是说如果被扫描引擎盯上了,这些雕虫小技基本歇菜了。

接下来我逐步把代码comment掉,看comment到哪个程度开始不报毒。首先我把整个恶意代码payload给屏蔽掉一部分,仍旧报毒,说明Kryptik系列的确仅仅是启发初期混淆行为,而不管你到底后来到底干了什么坏事还是好事
把条件判断换掉,依旧报毒,说明他们的扫描引擎某种程度上能无视条件判断,把不同分支内的syscall给展开
屏蔽掉文件写入,不报毒了。到这里我这个混淆器已经废了
调换部分行为顺序,依旧报毒,看来对行为顺序调换有一定抗性
去掉窗口空间里面的一条messagebox(本来是在error handling路径里),不报毒了。
编译器参数各种更换,报毒依旧。

经过各种折腾我基本归纳出这条新入库混淆器特征看的东西:
首先它不提取静态字符串特征,我试着替换不同行为对应的字符串参数都没用
其次,它主要看展开后的系统API行为,例如这个样本它盯着这几个要素看,满足所有的就报毒:
1. 要注册窗口控件
2. 注册窗口失败后要弹出一个提示框
3. 需要有打开和关闭文件输出流的行为
4. 需要有额外几个窗口控件的相关函数

从这里看到业界标杆扫描引擎的能力和局限:
就抗混淆能力而言,这个引擎能无视常见超时大法,无视行为顺序交换,无视额外混淆的行为等等,基本上可以只盯着这些行为特征看,满足了就报毒。而当我把程序大部分改动过不报毒后已经破坏了原始功能,可以说就算是自动机特征,抓的关键行为也非常准确了(虽然有少许辅助判断函数改了后对功能影响不大且不报毒,但程序规模变大之后就不好定位了)

就精度而言,这个自动机提取的特征算比较独特(满足上述所有特征的普通用户接触到的程序很难想象会存在)。其实特征提取的奥义就在于要提取尽量和正常程序不像的特征(特异性强),但要尽可能多覆盖同家族恶意程序(广谱性强)并抓住恶意行为重点。注意,我这里观测到的五个条件还是很有限,估计还有引入其他meta特征,但是我就不折腾了。特异性和广谱性本质上其实相互违背,这里平衡点在哪里就要看厂家调教的能力

其实上述所有免杀的尝试都指向了同一个结果:能抗超时等等不是因为针对性跳过了counter loop,而是根本无视了它。这里联系到我之前和ccboxes同学谈到的temporal和spatial查毒的两种方法(这纯粹是我个人土论),我想懂的人已经知道是怎么回事了总体来说ESET检测手段真是以不变应万变,既偷懒又厉害

esetdna.png
ESET白皮书中DNA特征的示意图,和我测试的情况基本相符

但是,在理解了这条特征报毒原理后,我是否可以刻意构造一个程序,它什么坏事都不做,但是会被这条特征报毒呢?我试了一下,可以!

这说明理论的瓶颈就摆在那里,完全精确的判毒是不存在的,各家厂商都只能用各种手段逼近这个理论极限,而ESET显然是对样本挖的比较深的厂商之一。从行为特征入手产生误报的几率比表层要小不少,当然这也需要建立在拥有海量白特征的基础上。
一个引擎完全做到抗手工免杀是不可能的,但好的引擎抗水平一般的自动免杀是可能的。当程序规模变大之后,这些特征将更复杂,报毒依据更繁多,只要逼着黑客手工免杀,就能避免恶性毒大规模传播。好的杀软虽然不能完全抹除恶意程序的存在,但可以大幅提高批量生产恶意程序的成本,这么来看,杀软厂商的“擦屁股”虽然是不可避免的,但也还是有意义的
后续衍生作品参见:https://bbs.kafan.cn/thread-2125195-1-1.html


评分

参与人数 6人气 +6 收起 理由
欧阳宣 + 1 假装看懂的路过
pal家族 + 1 版区有你更精彩: )
ccboxes + 1 版区有你更精彩: )
191196846 + 1 学习了
wangkaka + 1 好久看不到这样的技术贴了

查看全部评分

B100D1E55
 楼主| 发表于 2018-6-11 00:43:52 | 显示全部楼层
popu111 发表于 2018-6-11 00:42
感觉大佬这次文章有些意犹未尽啊

话说现在的云在线沙盘,对公众公开的那种,用的虚拟环境真的是假的不能 ...

还在更新呢好玩的在后头
B100D1E55
 楼主| 发表于 2018-6-11 10:26:07 | 显示全部楼层
驭龙 发表于 2018-6-11 09:36
NS的表现,确实是让人出乎意料啊

估计只搞简单特征匹配了
B100D1E55
 楼主| 发表于 2018-6-11 10:27:40 | 显示全部楼层
cloud01 发表于 2018-6-11 09:41
看来ESET的确是对大蜘蛛青出于蓝而胜于蓝。启发领域牛逼的当之无愧。

还好,算法做了针对性处理而已,暂时没有看到什么能让我惊掉下巴的黑科技
B100D1E55
 楼主| 发表于 2018-6-11 10:44:35 | 显示全部楼层
驭龙 发表于 2018-6-11 10:35
说实话,赛门铁克这几年搞的SDS引擎已经提高基因效果了,但还是跟其他基因引擎有差距,而且现在大多数威 ...

我记得诺顿n年前扫描就一直很疲软,很多时候都靠Sonar。近几年ML加入后检出率会好看一点,但是误报……
B100D1E55
 楼主| 发表于 2018-6-11 11:23:38 | 显示全部楼层
本帖最后由 B100D1E55 于 2018-6-11 11:37 编辑
191196846 发表于 2018-6-11 10:41
我双击AVIRA时候 像你说的 一般都是提取特征向量到云端匹配,响应时间大概3-5秒

但也有少数情况是直接UP ...

APC我也挺佩服,虽然他们的策略和ESET/火绒之流感觉几乎是背道而驰,但能充分发挥静态的优势(也就是他们所谓的fingerprint)做这种快速响应我个人觉得算是相当妙的招数,而且性能开销小。误报方面我用的不多所以没法评论,我的直觉是误报肯定比动态系多,但应该不会多到影响大部分用户使用的地步。估计如果APC是整个文件上传可能是放云做更细致特征提取了(包括动态沙盘)。我认为APC的好处在于兼顾了效率和隐蔽性。也就是通过特征向量把响应速度提高到秒级让实时云鉴定变成可能,而通过和云的紧密结合逼着黑客交样本(因为免杀本地已经变得鸡肋了,而不联网也不知道APC杀不杀,这样使白方也有一定的信息优势,当知道了APC的结果之后样本或样本特征已经被捕获了)
总体而言我对nightvision印象还是很不错的,而且一直感觉ESET之流或许可以借鉴一下,如果技术许可的话。

携带恶意代码的PE的确是可以归类到恶意文件,但如果我的恶意程序中bar()是被加密的,那么静态启发光看bar()是看不出什么端倪的。其实现在静态启发,甚至是动态启发,都疯狂盯着解密/混淆部分杀,主要也是因为不给bar()加密都对不起群众。报injector也类似,因为不管怎么加密解密最终都要有个运行方法

嗯这样说来我会再弄几个样本看看APC的情况
B100D1E55
 楼主| 发表于 2018-6-11 11:24:57 | 显示全部楼层

前一段忙成狗,然后进入咸鱼状态,这两天由于和别人刚好讨论到这个问题心血来潮写了一下,估计马上又要进入忙成狗的状态
B100D1E55
 楼主| 发表于 2018-6-11 11:47:03 | 显示全部楼层
2605276004x 发表于 2018-6-11 11:36
我Kaspersky双击过的几十个样本,大部分大约30来分钟就能响应。但是其中有的UDS直接 拉黑,有的UDS+准确报 ...

其实这些产品一般都有一些后台检测机制,初次就算扫描等表面不报毒但是后台可能通过各种方法已经找到近似家族了,这种不用很累很麻烦就可以快速拉黑。麻烦的是已知家族外的那些,为了压误报很可能需要人工分析,目测就是无法响应/响应很慢的那一类。因为处理这类样本有个优先级,广度高/人工上报的优先级高,坛里什么自制毒、玩笑程序之类的优先级一般都高不起来
B100D1E55
 楼主| 发表于 2018-6-11 12:05:25 | 显示全部楼层
191196846 发表于 2018-6-11 11:46
是的,其实我个人不看好本地动态启发

虽然有非常多优势,但是其短板实在是太明显了:模拟执行带来的性 ...

大厂都在往云走,包括ESET也早废了New Heur PE之类的检出而改用云沙盒+人工来处理这类新毒。其实回头想想这种本地“高启发”检出只会增加误报而对于检出新兴恶意程序并无卵用,因为黑客要是知道自己的作品被市占率高的产品检出New Heur肯定会回炉重改直到不报为止,这就是杀软信息不对称上的困境。有了云之后明显好多了。

至于你说特征提取,其实动态启发才是提取的最深的,静态或多或少会有问题。我觉得ESET等坚持动态启发必然有自己的理由(比如误报等)。不过你说的性能问题是确实存在的。比如我试了一下火绒的启发,虚拟执行可以跑10亿次counter loop不腰疼,但是代价就是扫描那个文件耗时奇长无比……更不用说如果动态启发引擎自己有漏洞,那么执行的时候可能恶意代码还会借此直接高权限执行,WD的引擎已经不知道被捅了多少次了,ESET以前也被发现过这类问题

APC上传5秒应该是用大模型静态检出。我认为APC流程大致上是这样的:本地如果没检出,1)先提取基本的特征向量传云端,如果映射到难搞定的检测区域,2)那么上传整个文件提取以在云端提取更多特征向量用大模型hash,3)如果还是映射到难搞定的区域就跑动态沙盒。所以估计你那个样本估计在步骤2就被检出了

评分

参与人数 1人气 +1 收起 理由
191196846 + 1 今天人气都给你了;期待更新(你挖的坑)逃.

查看全部评分

B100D1E55
 楼主| 发表于 2018-6-11 12:19:31 | 显示全部楼层
本帖最后由 B100D1E55 于 2018-6-11 12:27 编辑

yes! 编辑掉
B100D1E55
 楼主| 发表于 2018-6-11 12:21:38 | 显示全部楼层
欧阳宣 发表于 2018-6-11 12:01
好厉害,膜拜。您现实中是学这部分的专业么?我data science方向都觉得这些东西好高阶

并不是,我的专业其实离这块有点距离,不过crypto/signal/os这类基础课还是学过的,所以平时瞎读这类资料问题不大
B100D1E55
 楼主| 发表于 2018-6-11 12:24:24 | 显示全部楼层
Karna 发表于 2018-6-11 12:05
感觉红伞这个就真的是策略优势了,但不知道非脚本小子怎么看了,CIA倒是说要红伞不怎么难过,难绕过的BD最 ...

其实如果能反向估测出判毒依据(比如熵值特征之类的),免杀红伞我相信不难。一般来说表层二进制免杀统计特征等问题都不大,自己可以写工具混淆,而真正比较难的是行为层的免杀。这也是为什么一些杀软坚守动态不动摇。
B100D1E55
 楼主| 发表于 2018-6-11 12:25:45 | 显示全部楼层
wangkaka 发表于 2018-6-11 12:09
bd的启发看来是纯静态了,在很早以前360曾买了bd的启发库,那是后bd就是纯静态启发,现在这么久了,还是这 ...

我也好奇啊,不是以前有什么B-HAVE技术吗,难道现在为了性能弱化了扫描?
B100D1E55
 楼主| 发表于 2018-6-11 12:32:02 | 显示全部楼层
191196846 发表于 2018-6-11 12:19
我倒是没见过(3)……至少我看不出来

红伞MISS的样本貌似要手动上报才杀(不过很少MISS,国内某语言 ...

我觉得遇到3不容易,不然红伞那么一些雇员根本忙不过来。

哇红伞很实诚……看来我要多用用红伞。之前只是稍微玩一下,我对他们那个界面感到蛋疼,但最蛋疼的还是BD,虽然酷炫但是不直观

APC那个我要好好想一想有没有什么有意思的,测试idea不定期产生,所以别催我填坑
B100D1E55
 楼主| 发表于 2018-6-11 12:37:05 | 显示全部楼层
欧阳宣 发表于 2018-6-11 12:21
APC强力是没错,但是作为红伞的最后防线我自己是没法放心的,会配合mbam来用,有一点基于静态规则的类hips ...

有的,我其实文章里提到趋势有这么做(你可以搜搜趋势Tipping point产品线的宣传资料)

对,红伞APC虽然强,但过了就惨了。我现在基本还是EDR/Cuckoo互换着用,打算等ESET那个云沙盒出了就抛弃Cuckoo。其实这两天Cuckoo更新后功能上已经有点像app.any.run了,可玩度不低
B100D1E55
 楼主| 发表于 2018-6-11 20:58:40 | 显示全部楼层
wangkaka 发表于 2018-6-11 12:33
2011年的bd可以说完全静态,现在的bd只剩拉黑了,启发基本看不到了。。。现在唯一让我提的起兴趣的就剩es ...

其实还是有启发的,一般已知家族Trojan GenericKD被免杀了后续还有可能有Gen系列特征匹配,当然我觉得估计是静态启发了……其实不给报毒名也可能是放烟雾弹,尽量减少对黑客暴露的信息,虽然我觉得有些厂商很明显不是这么回事
B100D1E55
 楼主| 发表于 2018-6-11 21:04:45 | 显示全部楼层
Karna 发表于 2018-6-11 12:34
只能说不同的检测模型有各自的优势和局限了(?)多层防护确实必不可少,同时还得考虑误报和性能
...

对的,所以做出好的安全软件不容易啊……

其实专门针对企业的产品误报率反倒会更高,主要是因为企业需要更严格的安全审查,而且企业一般有专门的IT管理员可以判断误报之类的,再加上企业电脑一般软件环境比较稳定,不会动不动来个破解软件、绿色软件,所以初期排除掉就差不多了。

其实卡巴肯定不仅是靠着VT收集样本,只不过其对VT响应的优先级的确比较高。基本所有大厂都有你说的这类客户端探针,ESET 11开始LiveGrid就更频繁地上传样本了,而且HIPS组件和扫描引擎后台遇到可疑程序会自动上传对应信息,BD等也类似。
B100D1E55
 楼主| 发表于 2018-6-11 21:07:01 | 显示全部楼层
黑暗的背叛者 发表于 2018-6-11 13:40
加密和混淆都反逆向手段,另外掺杂部分非典型编译器实现和汇编指令能更进一步提高难度,然而有些逻辑简单又 ...

我之所以仍旧不太信任静态主要也是因为这个原因。有一些东西从表层很难看出什么端倪,还有刻意构造误报样本的潜在风险在里面……
B100D1E55
 楼主| 发表于 2018-6-11 21:12:03 | 显示全部楼层
ccboxes 发表于 2018-6-11 17:17
所以还是要多层防御,尤其是行为防御,即使是红伞这种云,我也并不是很放心,虽然单纯有多层防御并不意味着 ...

ESET一向不认同用白名单压误报(他们用白名单主要是为了性能优化),主要论点是如果不做签名拉白的话(毕竟拉白越多潜在风险越大)常规软件的自动版本迭代会导致新版本推出初期在客户机上产生潜在误报。我觉得这个观点是有道理的,我自己用某些靠着信誉云的行为检测软件偶尔还会报Dropbox版本迭代后的“可疑行为”。
B100D1E55
 楼主| 发表于 2018-6-11 21:17:22 | 显示全部楼层
www-tekeze 发表于 2018-6-11 20:32
我也完全赞成云端快速响应+本地行为防御这种策略,过于倚重某一头都不可取! 目前我用的火绒,云端就是个 ...

嗯,其实火绒如果引擎查杀率能更上一层楼的话算是很不错的软件。我也对火绒有不少期待(谁叫我粉动态系,难得有一个国产的动态引擎),希望他们能早点部署一个高效的云。
popu111
发表于 2018-6-11 00:42:42 | 显示全部楼层
感觉大佬这次文章有些意犹未尽啊

话说现在的云在线沙盘,对公众公开的那种,用的虚拟环境真的是假的不能再假。感觉企业定制用还好,可以直接整机copy走,然后按照规则清除部分数据拿来做模拟环境,但是似乎没有这么干的,大概都更注重明面上的数据安全一些。
驭龙
发表于 2018-6-11 09:36:07 | 显示全部楼层
NS的表现,确实是让人出乎意料啊
cloud01
发表于 2018-6-11 09:41:33 | 显示全部楼层
看来ESET的确是对大蜘蛛青出于蓝而胜于蓝。启发领域牛逼的当之无愧。
驭龙
发表于 2018-6-11 10:35:17 | 显示全部楼层
B100D1E55 发表于 2018-6-11 10:26
估计只搞简单特征匹配了

说实话,赛门铁克这几年搞的SDS引擎已经提高基因效果了,但还是跟其他基因引擎有差距,而且现在大多数威胁都是靠Trojan.gen2等这种拉黑,或者那种本地机器学习,样本分类方面真的比不上ESET或者WD呢
cloud01
发表于 2018-6-11 10:40:37 | 显示全部楼层
B100D1E55 发表于 2018-6-11 10:27
还好,算法做了针对性处理而已,暂时没有看到什么能让我惊掉下巴的黑科技

也不错了 ,特别超前的外星科技估计也难有,还有闲情逸致能做个精处理就不错了,长年累月下来效果还是不错的。毕竟安全行业是有限的智慧加误报平衡对抗无限智慧和无底线。除了WINODWS架构重新设计,以便于HIPS更好的拦截。现在的系统文件重要的不重要的都混在一起,真没办法。win10的防御相当于是把重要的都进行保护但又比较伤害用户。只能寄希望与国产系统 吸收WINDOWS的缺点和HIPS的要求来开发设计了。系统程序放一个文件夹,启动必须的系统文件和进程单独放一个文件夹,软件开发行业也需要规范,不要向WINDOWS文件夹和SYSTEM32乱写DLL,不要乱加驱。
191196846
发表于 2018-6-11 10:41:42 | 显示全部楼层
我双击AVIRA时候 像你说的 一般都是提取特征向量到云端匹配,响应时间大概3-5秒

但也有少数情况是直接UPLOAD到APC,然后响应时间Analyze也是差不多3-5秒就出结果了

以上两种情况改Hash都过不了,而且有时候新文件APC能直接给出准确的报毒名

我一直觉得APC很神奇,我不知道他们云用了多少检测手段,但是几乎很少MISS的样本

误报的话:平常见不到;我自己改过一个白文件的Hash 后 没有报(等待时长3-5秒),但是我遇到过一个恶意样本有有效数签就直接被过了……所以……


================================
AVIRA现在虽然是“单层防御”,但他扫描流程大概是这样的:

特征匹配-》静态启发-》本地ML-》云匹配-》云自动上传分析

至少从我双击样本区的情况来看,效果还是很不错的

大佬你怎么看?AVIRA的NightVision

======================================

还有一个小问题:

那些携带恶意代码的PE不应该也直接归类到恶意文件吗(有潜在风险释放)?那静态启发,就如你文章开头所说,也是可以识别出bar(),这样的侦测方式不就能一定避免本地动态启发带来的性能问题吗?

==================================

那个xor加密/xor加密+用户名判断,你可以在APC连上后双击看看……
屁颠屁颠
发表于 2018-6-11 10:45:41 | 显示全部楼层
B大  把你的技术文章的url汇总下发我
我要给你建一个独立的汇总帖
驭龙
发表于 2018-6-11 10:51:00 | 显示全部楼层
B100D1E55 发表于 2018-6-11 10:44
我记得诺顿n年前扫描就一直很疲软,很多时候都靠Sonar。近几年ML加入后检出率会好看一点,但是误报……

是的,就是因为SDS引擎优化特征库以后,才逐渐融入ML杀的,不过误报确实是。

尽管如此,诺顿的扫描方面,还是不算很强
pal家族
发表于 2018-6-11 11:07:40 | 显示全部楼层
又有新文章了
2605276004x
发表于 2018-6-11 11:36:48 | 显示全部楼层
我Kaspersky双击过的几十个样本,大部分大约30来分钟就能响应。但是其中有的UDS直接 拉黑,有的UDS+准确报毒名,有的还不能响应。玄之又玄
191196846
发表于 2018-6-11 11:46:32 | 显示全部楼层
B100D1E55 发表于 2018-6-11 11:23
APC我也挺佩服,虽然他们的策略和ESET/火绒之流感觉几乎是背道而驰,但能充分发挥静态的优势(也就是他们 ...

是的,其实我个人不看好本地动态启发

虽然有非常多优势,但是其短板实在是太明显了:模拟执行带来的性能问题

无论缓存做得多好……还是会有很大影响

我个人还是喜欢把那些复杂需要大量消耗的技术统统丢到云端,端点受到的性能影响最小化,毕竟如果杀毒软件严重拖慢电脑性能的话,那和病毒有什么差别?

AVIRA在平衡这方面就做得挺不错的

个人觉得,云化是未来趋势;最明显在做这方面的就是卡巴斯基;但是改个Hash就过UDS,这个我也是不接受的;特征提取是关键

云化的同时特征提取必须做好,以最小的性能代价提取最核心的特征(这个就拼算法的优劣了),在最短的时间内响应,这个是我心目中的未来杀软应该要走的路

而本地动态启发这项技术……我认为放在云端才是最妥当的决定

我选杀软的时候,其实第一考虑的是性能而不是检测率 目前最符合我预期的就AVIRA(可惜他的交互)

=========================
APC自动上传后就分析个5秒左右就有结果了……我都不知道是怎么做到这么快的
欧阳宣
发表于 2018-6-11 12:01:19 | 显示全部楼层
好厉害,膜拜。您现实中是学这部分的专业么?我data science方向都觉得这些东西好高阶

评分

参与人数 1人气 +1 收起 理由
尘梦幽然 + 1

查看全部评分

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛|优惠券| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 苏ICP备07004770号 ) GMT+8, 2018-8-22 14:00 , Processed in 0.078722 second(s), 7 queries , MemCache On.

快速回复 返回顶部 返回列表