查看: 5339|回复: 15
收起左侧

[分享] BitDefender恶意程序命名规律

  [复制链接]
B100D1E55
发表于 2019-6-16 02:23:34 | 显示全部楼层 |阅读模式
本帖最后由 B100D1E55 于 2019-6-16 13:27 编辑

BD的恶意程序命名比较神奇,但总体上来说它仍旧遵循CARO命名法则

家族名.组名.主要变种名.次要变种名[:修饰语]

其中在99年的时候家族名部分又增加了平台标识,比如Win32/Win64之类的字眼来表明是什么平台的恶意程序

其中贯彻CARO最典型的厂商是ESET/Kaspersky之类的老厂,比如ESET对Wannacry的命名:


Win32/Filecoder.WannaCryptor.B

Win32/Filecoder为家族名,代表是win32下的勒索,组名为WannaCryptor,变种名为B

其中这里命名依据可以五花八门,比如可以根据作者名字(例如CIH是作者首字母缩写)、传播方式、诱饵手段、代码内的信息、日期、使用的技术手段等等,详情参考BitDefender早期一份科普文档:https://download.bitdefender.com/resources/files/Main/file/Virus_Naming_Whitepaper.pdf

当然随着恶意程序数量爆炸性增长,不可能给每一种都单独命名,所以就出现了各种机器自动命名。一般来说命名依据要么是通用的恶意类别,要么就是检测到恶意程序的分拣器的名字。

使用恶意类别的命名最常见的是ESET,比如GenKryptik.XXXX, Kryptik.XXXX, Injector.XXXX,Generik.XXXXXX。其中前缀是通用类别,例如GenKryptik和Kryptik都代表混淆器检测(Gen则代表自动机特征提取,鲁棒性和准确度不及Kryptik),又例如Generik是通过非DNA特征识别的通用特征提取。而后缀则是系统自动分配的一个标识符,用来表明子组别(聚类)。当然也有常见类别但非极为流行的通用毒名,最常见的就是FileCoder.XXX, Agent.XXX
这种命名方式有很多好处,特别是XXX部分聚类的识别上。比如如果哪天看到了一个“新”毒被ESET检测出来,但是发现VirusRadar上面的初始入库日期却是n年前,那么有可能这个程序并不是真的“新”,也有可能恶意程序作者进行了一些代码回收再利用。也因此VirusRadar的入库日期并不能成为判定ESET当期是否能查毒的依据。对于已知家族的判定,他们经常在后台微调这些特征以覆盖更多同类家族,这种微调不会在毒库更新日志体现出来。因此假设有一个FileCoder.AA在5年前入库,并不代表手头最新的那个FileCoder.AA就一定能在5年前就被检测出来。

GenKryptik之类的命名仅仅是一个表层命名,并不代表这个恶意程序的本质。比如我使用GenKryptik.AAKJ这个类别的混淆器给一个wannacry毒进行混淆,扫描引擎的检测名会是GenKryptik.AAKJ而不是Wannacryptor这个名字。

制作这种家族特征的好处在于扫描引擎在进行脱壳的时候只需要识别出初期AAKJ的特征即可报毒,这样可以大幅降低扫描仿真的深度提高性能,也能提高检测率。例如如果我只给wannacryptor入库,如果未来其被混淆导致扫描引擎没法脱壳出wannacryptor的特征就可能miss。加入了Kryptik特征后只要用这个混淆器混淆任意家族恶意程序杀毒都能识别出来,增加了广谱识别能力。但是代价则是潜在的误报和库大小,因为混淆手段无极限。从ESET Virusradar每期毒库日志来看Kryptik和GenKryptik基本占了更新大头。此外如果误把一种常见的打包工具误认为是黑产混淆器,则会连带误报所有使用那种打包工具的程序。最典型的就是之前ESET对AutoIT Dropper的误报,或者易语言家族通用报毒。

而BD则是另一种命名:分拣器命名。虽然BD也有具体命名的时候,但如今这块所占比重已经非常小:
例如这个帖子里的毒一开始BD Miss,后来估计人工分析入库后命名为:File.Application.BitCoinMiner.AIT。
除此之外大部分情况都是根据检测出来的机器学习模型命名的,类似智量报毒的命名方式。这里列出常见的几种命名和对应模型:

File.XX: 明确入库的毒,一般是监督学习模型,这其中又包含Graftor、Ursu之类的常见名字
GenericKD:离散家族通用拉黑,鲁棒性最差,类似ESET的Generik.XXXXXX,一般数周后有聚类属性的样本会被Gen之类的通杀特征覆盖。这种检测是静态检测,意味着性能消耗小
Gen.Variant:广谱特征查杀,一般带有明确家族名。例如Gen:Heur.Ransom.HiddenTears.1提取的就是HiddenTears(github上一个C#开源ransomware)的广谱特征。其中这里面又有常见的名字包含Razy,Zusy,Kazy,个人猜测这些也是机器学习模型的名字(例如Gen:Variant.Symmi对应下面Symmi模型),也有可能是下列模型的umbrella term,但是目前并没有相关确切情报
Gen:Trojan.Heur.XX:Kernel-based机器学习检测模型,其中XX代表模型名称
Suspicious.Cloud: 云端非监督机器学习拉黑,一般是因为云端样本引爆后内存dump和已知恶意程序内存dump相似。这种检测貌似只有执行或手动扫描的时候才会触发,可能是为了减轻云端查询压力
Symmi:Rule-based机器学习模型检测
Barys:Rule-based机器学习模型检测
Skyline: 线性回归模型检测
Miata:Bagging算法机器学习模型检测
Miura:决策树模型机器学习检测
Zexa: 人工神经网络检测模型
ZelphiN:人工神经网络检测模型
NN:深度神经网络模型

还有很多其他模型,如果未来有遇到新的会归纳整理在这里

BD自称有30层以上机器学习模型检测(当然大部分在云端),这里需要注意的是这些检测有一个匹配顺序。对于客户端而言,先进行的是GenericKD匹配,没有匹配上的会进行广谱匹配。例证是通过修改GenericKD样本可以改变其报毒名(一般是Gen),这样匹配的主要原因在于GenericKD所需算力最小,对恶意程序的识别越能在扫描初期发现性能代价越低,这也是为什么BD性能测试成绩不会太难看的原因之一,代价则是库很大。但在当今内存越来越大的趋势下用体积换速度还是比较合理的策略。

此外,Gen之类的报毒背后可能就是Miura,Zexa之类的模型检出,只不过在客户端更常见的是通过云端下发整理好的Gen特征进行匹配。这些模型的检测也会相互覆盖,之前见到过一个样本被三个模型检测出的情况。多个模型的好处就在于提高了绕过机器学习模型的难度,但多个模型也可能代来误报问题,这也是为什么ESET的多模型使用一票否决的投票策略。

在杀软入云后很多检测方面的改进终端用户并不能直接感受到,但这些往往是安全厂商最重要最核心的进步。这些进步有时候从报毒名或许可以知晓一二。未来看到BD新的(滚键盘)报毒名那有可能是云端又有了新的鉴定成员,哈哈

更多关于BD机器学习方面的研究成果,参考:

https://research.bitdefender.com/tag/machine-learning/

https://bit-ml.github.io/

恶意程序命名的科普文章:

https://www.opswat.com/blog/what-can-we-learn-anti-malware-naming-conventions
还有看上去很酷炫的实时威胁地图……

https://threatmap.bitdefender.com/














评分

参与人数 7人气 +17 收起 理由
Picca + 3 精品文章
ziqianweiyang + 1 精品文章
WhiteCruel + 3 感谢提供分享
KK院长 + 1 版区有你更精彩: )
Jirehlov1234 + 1

查看全部评分

B100D1E55
 楼主| 发表于 2019-6-28 11:06:38 | 显示全部楼层
本帖最后由 B100D1E55 于 2019-6-28 13:04 编辑
Jirehlov1234 发表于 2019-6-16 11:29
感谢科普。
另外BD偶见DeepScan和MemScan打头的报法,咱不知道啥意思。
以前问过https://bbs.kafan.cn/th ...

由于这个问题的确是挺有趣的所以今天又做了几个实验。

其实看到官人答复的时候我马上猜测到DeepScan应该就是BD通过B-Have那个动态启发引擎跑出来的结果(他们很笼统地说archive,但是显然这里archive指的应该是壳),所以我稍微找了一个样本实验了一下。

对于BD的静态匹配,对程序的小改动(包括功能破坏)基本不会改变报毒名。而静态报法就是Gen开头的那些和GenericKD之类的检测

例如对于一个恶意程序倘若将其代码控制流切分成四段S1~4

S1+------>S2+------->S3+------->S4


其中S4是核心恶意代码,前面的是一些非主要功能代码,倘若我对程序进行patch变成这样

          +-----------+
          |           |
          |           |
          |           |
          v           +
S1+------>S2+------->S3         S4


本质上这个程序无害,但是BD的Gen仍旧会匹配
其实实际情况比这个稍微复杂一点,一般除了函数trace,动启虚拟机也扫描展开后的内存,比如很典型的就是字符串以及一些元数据特征(我猜测BD的MemScan就是如此),进阶的技术包括同时代码函数的离散程度(例如ESET的智能DNA特征)。所以如果这个程序完全不加壳,上述这样ESET之类的也会报毒(因为初始载入内存就立马被匹配到)。因此要测试就需要对一个简单的加了壳的程序在解密路径前进行这样的改动来测试。ESET因为基本是纯动启,控制流一改十有八九就不报毒

BD有具体报毒名的报法就不一样了,这些特征被加入到动态启发虚拟机当中,一般这些要么是非常流行的毒,要么就是比较久远已经被整理过的。现实当中大部分感觉都只会自动加静态特征

离题了……

所以对于DeepScan这类来说,首当其冲的特征就是:如果我把初期运行的控制流搅乱后(如上图),那么BD就扫描不出来了。这个基本上说明了DeepScan是动态启发报法。我大概试了5个样本都是这么回事

当然这样仍旧不够意思,我就想能不能自己造一个DeepScan的例子。挑选合适的入库样本是最重要的——其必须是BD虚拟机入库且不被静态模型覆盖的程序。这里我选取的是一个接近PUA的恶意程序,而且年代比较久远,BD报毒名是:Generic.Perfloger.52CA3CDB (ESET报毒名为Win32/KeyLogger.PerfKey.AR Application)。

然后就是改样本了。当然直接改裸程序的控制流没什么用,需要给程序进行加壳。
UPX之类的自然不予考虑,一开始我打算用yoda's protector不过发现BD对yoda静态杀得非常狠,对kkrunchy这类的壳索性直接匹配壳报毒,所以放弃

于是改用一个vs编译的简单压缩壳,BD报毒名改成了:GenPack:Generic.Perfloger.ECABA75E,说明BD的壳通用匹配算法识别到了Packer,此外也说明冒号前缀代表的不是毒名而是一个检测方法,而后缀也不是什么家族,就是hash一样的东西。

之后我尝试在压缩壳的基础上加了花指令和ASPack的压缩算法,BD报毒名就变成了:DeepScan:Generic.Perfloger.A5FF5F5C

由此可见DeepScan代表的是一种动态脱壳报法,和毒特征本身无关,主要是看在哪一个扫描深度检出(免杀对抗)。而MemScan应该类似,但因为mem loader做起来更麻烦而本人时间有限这里就不测试了

顺带一提ESET对这个实验中所有样本都报了和原始毒一样的毒名,大概这就是动态启发的一个好处。

最后值得一提的是对这些loader进行控制流修改(改残废),则基本会被Kernel-based静态机器学习报毒,可以说如果我是免杀者这会让我很火大……但在实验中这些静态匹配也带来了不少误报。我觉得正是因为对静态检测的大量使用让BD、Avira、Avast之流在AV-C之类的测试中傲视群雄,但随之而来的误报问题也会给一些用户代来困扰吧

原始样本:https://www.virustotal.com/gui/file/f650174245758f66f1de3afb4ca40952254c81a8183ebf4014c268a8b4fa643c/detection (50/69)

简单压缩壳样本(GenPack):https://www.virustotal.com/gui/file/7b6ff81dc8aad57d0ddbfa1a9dcb1c634f90fa02e05cf861e6d40be84fc79b62/detection (34/68)

多重压缩壳样本(DeepScan):https://www.virustotal.com/gui/file/25ffb20890f3958b120334925ec0cc4d4189cface69c5cd2574f55244b99e80f/detection (37/69)

这里且不吐槽这么无聊的壳为什么报毒厂家一下少了很多,看看熟悉的几家的报毒名:

Avira:从明确报法变成了Dropper,我猜基本是匹配压缩壳
Avast, AVG: 应该也是匹配压缩壳
微软:和ESET一样本地引擎还保留了动启,所以报毒名始终一样
Symantec: ???
Comodo:显然特征胡乱提取
Ikarus: 弱壳还是能检测,加花一下就变得奇怪了起来
Kaspersky:???这几年动启都懒得跑了吗



评分

参与人数 2人气 +4 收起 理由
Jerry.Lin + 1 版区有你更精彩: )
Sailer.X + 3 版区有你更精彩: )

查看全部评分

Sailer.X 该用户已被删除
发表于 2019-6-16 09:39:12 | 显示全部楼层
本帖最后由 霄栋 于 2019-6-16 09:40 编辑

感谢科普。

从我的个人体验来看,Suspicious.Cloud(云拉黑)这类报法在监控、手动扫描、执行阶段都可能触发,而且细究起来,不同的数字后缀(常见1,8;偶尔有2,4;其它的数字后缀我没有遇到过)似乎也有一定的含义。

另外BD早期的滚键盘系列是Trojan.Generic.XXX,之后加入GenericKD系列,后来新入库以GenericKD为主。根据BD OEM厂商EMSISoft的说法,这是一种自动机入库。

近期(其实已经有一段时间了)新的滚键盘系列逐渐增多,即GenericKDS系列,这个系列有些在中间加了一个分类名,描述了一些特征,如:
1.反沙盘 (TROJAN.ANTISANDBOX.GENERICKDS.32058794)
2.自动运行(TROJAN.AUTORUNS.GENERICKDS.32058803)
3.密码窃取(TROJAN.PASSWORDSTEALER.GENERICKDS.41373266)
4.勒索软件(TROJAN.RANSOMWARE.GENERICKDS.32058758)
5.漏洞利用(TROJAN.EXPLOIT.MSOFFICEEXCEL.GENERICKDS.41370556)等等。

但也有继续滚键盘加数字的 :TROJAN..GENERICKDS.32058419

但这个分类名也并非KDS系列专属,有些KD后缀的检测也有了分类,如:
1.自动运行(TROJAN.AUTORUNS.GENERICKD.41372409)
2.密码窃取(TROJAN.PASSWORDSTEALER.GENERICKD.32059285)

不过多数KD后缀还是没有分类的。

看BD最近的入库记录,滚键盘以KD最多,KDS次之,偶尔有些Generic。

PS :以前看BD库更新记录可以找FS的DB-Tracker,可惜FS换了Avira引擎。好在还有ESTsecurity,可以去https://en.estsecurity.com/securityCenter/dbupdate/BIT/1 看 BD库的更新记录

评分

参与人数 2人气 +6 收起 理由
B100D1E55 + 3
Jerry.Lin + 3 版区有你更精彩: )

查看全部评分

85683213
发表于 2019-6-16 10:56:43 | 显示全部楼层
以我以前的使用经验,云是跟avc或atc连结在一起,上报的时候会同时传一些行为或档案关联性资料

至于像GenericKD这种滚键盘的命名以现在引擎和病毒码的实现方式我觉得非常不合适
因为所有的病毒名称都会载入到内存,像是TROJAN.GENERICKD.XXXXXXXX这种字串就占了几百MB的内存
(avast简化到极限,所以内存占用少)

其实把病毒名称云端化应该是一个不错的选择,等到侦测到病毒之后再取得就好
Jirehlov1234
发表于 2019-6-16 11:29:08 | 显示全部楼层
本帖最后由 Jirehlov1234 于 2019-6-16 11:31 编辑

感谢科普。
另外BD偶见DeepScan和MemScan打头的报法,咱不知道啥意思。
以前问过https://bbs.kafan.cn/thread-2129324-1-1.html
B100D1E55
 楼主| 发表于 2019-6-16 11:36:43 | 显示全部楼层
Jirehlov1234 发表于 2019-6-16 11:29
感谢科普。
另外BD偶见DeepScan和MemScan打头的报法,咱不知道啥意思。
以前问过https://bbs.kafan.cn/th ...

MemScan应该指的是内存特征,DeepScan我也不大清楚。BD关于这方面基本不科普是个大问题
B100D1E55
 楼主| 发表于 2019-6-16 11:41:00 | 显示全部楼层
85683213 发表于 2019-6-16 10:56
以我以前的使用经验,云是跟avc或atc连结在一起,上报的时候会同时传一些行为或档案关联性资料

至于像Ge ...

我觉得GenericKD的确在实现上没有ESET那类DNA特征来得好,不过我想他们应该有定期清理这类的特征。GenericKD内存占用高但是查询速度快,不像ESET那种一定要每个都动态启发一遍才能出结果。至于Avast那种Evo-gen/malware-gen似乎是混合了弱鸡虚拟机启发的特征,但之前测试的时候发现想过并不难……BD虽然GenericKD非常弱鸡,但是Gen之类的相对好一点
B100D1E55
 楼主| 发表于 2019-6-16 11:50:51 | 显示全部楼层
霄栋 发表于 2019-6-16 09:39
感谢科普。

从我的个人体验来看,Suspicious.Cloud(云拉黑)这类报法在监控、手动扫描、执行阶段都可能 ...

本人还是BD萌新一个(上次用BD还是BD刚换logo那时候),目前位置还真没见到KDS报法,估计样本还不够多。

感谢DB-Tracker链接

BD扫描非常迷,有的时候恶意程序解压马上就被杀,有的时候要过很久。至于Cloud的确可能如你所说,我目前一般是在执行或者右键的时候才会看到。




先查静态库,后跑动态虚拟机则是板上钉钉的事情了。其实卡巴貌似也用了这种性能优化手段,不像ESET非常硬核地几乎全部纯动态鉴定

BD报毒名真是五花八门,可见其后台基于各种机器学习算法分拣器有多少可惜他们基本不怎么披露这些后台鉴定器的细节

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 1人气 +1 收起 理由
Sailer.X + 1

查看全部评分

B100D1E55
 楼主| 发表于 2019-6-21 02:16:09 | 显示全部楼层
霄栋 发表于 2019-6-16 09:39
感谢科普。

从我的个人体验来看,Suspicious.Cloud(云拉黑)这类报法在监控、手动扫描、执行阶段都可能 ...

这几天多测了一些样本:

1. GENERICKDS的特征强度不比KD好到哪里去,改改就过
2. GENERIC之类的分类的确符合他们云端沙盘的行为鉴定结果
3. GENERIC还有一个家族是KDZ比较神奇,之前报KDS的改了之后有可能会报KDZ,具体强度还没测试
4. 新毒/离散毒(比如近一两天的)如果是KD拉黑,简单改改过了之后就没有后续侦测了,只能靠主防。老一点的改了之后一般会被Gen模型覆盖所以还好

评分

参与人数 1人气 +1 收起 理由
Sailer.X + 1 感谢解答: )

查看全部评分

feiren
发表于 2019-6-25 17:41:58 | 显示全部楼层
用BD主要在ATD之前的13-15年,GenericKD是最常见的,Mem和Deep是那时没见过的,也可能是个人环境吧
B100D1E55
 楼主| 发表于 2019-6-27 22:32:45 | 显示全部楼层
Jirehlov1234 发表于 2019-6-16 11:29
感谢科普。
另外BD偶见DeepScan和MemScan打头的报法,咱不知道啥意思。
以前问过https://bbs.kafan.cn/th ...

我前两天问了一下他们官人,这个是答复:

报毒名中Deepscan得前缀代表当扫描引擎深入到档案中检测到缓存在内部得恶意程序,而MemScan代表在内存中检测到恶意程序特征

好吧这个答复还是比较模糊,我大概来来回回问了3次才从他们那里憋出这句话。大致来看DeepScan应该指的是对某些类型archive解包后扫描到的东西,如果以后遇到deepscan报法不妨看看是不是外面有常见archive包裹,比如NSIS之类的。至于memscan的话我想应该是他们动态启发虚拟机展开后内存匹配特征,毕竟他们大部分报毒都是静态检测。所以memscan一般后面跟明确毒名而不是滚键盘。当然这些均是我个人结合他们回答的猜测,不保证没错

评分

参与人数 2人气 +3 收起 理由
Jirehlov1234 + 2 感谢解答: )
Sailer.X + 1 感谢解答: )

查看全部评分

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

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-5-10 17:46 , Processed in 0.129663 second(s), 21 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

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