手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室

概述

Linux环境下的恶意软件大部分以shell脚本作为母体文件进行传播,而且,同一个病毒家族所使用的的恶意脚本往往具有极高相似性,新变种的脚本大部分是在旧变种脚本的基础上进行修改,新增或替换部分关键恶意代码,同时,不同家族之间的恶意脚本也可能出现代码互相借鉴,部分重合的情况。

该如何揭示病毒家族中恶意脚本之间的关系呢?接下来,我们就通过手工搭建一个简易的恶意脚本分析系统,来实现对恶意脚本之间关系的研究。

系统功能

系统的功能如下,主要为3个:

  • 使用yara检测脚本对应的病毒家族。
  • 计算脚本与样本库中每个样本的相似度。
  • 提取脚本新增/改动的恶意代码。

通过以上3个环节,就能检测出该脚本所属的家族,与其最相似的样本,以及新改动的恶意代码,从而快速定位到本次病毒变种更新的恶意项(C&C域名/文件路径/进程名等)。

图片[1]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

使用方法

系统结构由3部分组成,yara规则库、病毒样本库、功能代码,后者运行后会读取规则和样本内容进行检测。

图片[2]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

系统运行效果如下,测试的脚本为7月份新发现的H2Miner新变种,该变种与1月份变种ex.sh的相似度为97%,与5月份变种sa.sh的相似度为93%。同时,相比于1月份的变种新增了18行代码,更改了8行代码。

图片[3]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

然而,待检测的脚本有可能是新的病毒家族,已有的yara规则无法匹配成功,这时候系统会遍历该脚本与样本库中每一个样本的相似度,筛选出相似度最高的家族。

图片[4]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

系统运行完成后,会生成一个html报告,用于可视化显示脚本之间的具体差异。

图片[5]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

显示效果如下,高亮显示脚本与相似样本间具体的新增/更改/删除恶意代码行。

图片[6]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

原理分析

3个核心功能分别由yara_scan函数、check_similarity函数、parse_modification函数实现,若check_similarity没有计算出相似度高的关联样本,则不执行parse_modification函数。

图片[7]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

yara_scan函数

通过yara库,调用rule_db里的yara规则对目标脚本进行扫描,返回匹配到病毒家族名。

图片[8]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

目前支持的检测的病毒家族如下。

图片[9]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

check_similarity函数

调用开源difflib库的SequenceMatcher函数进行文本相似度计算,筛选出相似百分比最高的样本。PS:若前面yara检测出对应的病毒家族,则只计算该家族目录下的样本相似度,否则,计算所有家族样本的相似度。

图片[10]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

样本按照发现日期进行存放,便于整理其中关系。

图片[11]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

parse_modifcation函数

最后,使用difflib.context_diff函数提取差异(新增/更改/删除)代码,并使用difflib.HtmlDiff生成详细报告。

图片[12]-手工搭建的Linux恶意脚本分析系统 – 作者:深信服千里目安全实验室-安全小百科

总结

Linux恶意脚本大部分没有进行混淆,使用开源库difflib进行文本比较是个简单高效的方法,通过该系统,可以快速的分析新型恶意脚本的更新部分,以及与其他病毒家族脚本的关系。

来源:freebuf.com 2020-08-20 21:45:18 by: 深信服千里目安全实验室

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论