Posts

Showing posts from July, 2018

X-Sec Antivirus开发者日志 - 写在2.2.0.1发版之后

在沉寂了将近4个月之后,总算是发版了。

除了升级日志里提到的那些内容,造成程序体积明显增大的原因还有一部分来自我给程序加入的小彩蛋。
彩蛋仅可以在特定人生日(并不包括我,目前只有2人)当天触发,触发方式为在主界面左上角的“X-Sec Antivirus”上单击右键。软件太死板了不大好,偶尔来点小惊喜嘛~

至于这次发版,也算是再一次证明了我身上的一个魔咒:大版本发布后必定会出现影响用户体验的bug,只有“谁发现的”和“修复时间长短”之分,至于这个bug到底是怎么回事,听我慢慢道来~

这次更新可谓是非常大了,重构了GUI,引擎加入64位版本,当然,也把升级模块整个重写了一遍。
重写升级模块的绝大多数工作并非由我完成,而是由我的队友完成。这次的bug,锅应该他背(虽然bug最后是我修的),因为出问题的代码都是他写的(滑稽

1.在升级模块自更新hash校验失败之后直接抛了个异常出去,并且没用catch处
理...然后我改成了弹窗警告,并且在返回值里表明了升级过程出现问题。虽说这种情况很少发生(主服务器升级现在也走的是HTTPS),但是让用户看到程序直截了当地GG总归是不大好的。

2.这个实在是不知道从哪儿开始吐槽,主要是升级模块和GUI联动的时候,升级模块返回值的问题。在不同返回值的处理方式以及什么时候该使用什么返回值的问题上漏掉了一些情况,导致用户可以通过日志看到一些奇怪的内容(比如正常升级成功了却提示升级失败,明明没有新的病毒库主程序却重新载入了病毒库)

当然,话得说回来,这次重构的主要功臣是我的队友。原来我也写了大量的界面代码,后来就更多的是维护病毒库和更新引擎了。大部分界面代码的任务都交给了他,界面代码上我只是负责修bug的2333333333333

从零开始搭建Cuckoo Sandbox-Part3

Image
本篇文章的最后一部分仍然首发于我的博客。
仍然给出SRC上对应文章的地址:https://sec.xiaomi.com/article/49

上一篇文章结束后,我们算是把Cuckoo Sandbox搭建并调教好了。这一章我们主要来看看Cuckoo的行为签名。 行为签名可以说是直接决定了Cuckoo究竟可以标记出多少恶意行为甚至是直接标记出样本所属的恶意软件家族,但是在这里我们并不会讨论具体某个恶意软件家族的规则应该怎么写,我们只会提到几个编写及使用行为签名时需要注意的地方。 虽然根据Yara的文档:http://yara.readthedocs.io/en/latest/modules/cuckoo.html,Yara是有Cuckoo模块的,可以根据Cuckoo的行为记录创建检测规则,并且Cuckoo在处理的时候也可以匹配Yara规则,但是Cuckoo模块仅能利用上Cuckoo提供的一部分行为记录(文件/注册表/互斥体/网络),因此我个人更倾向于使用Cuckoo内置的行为签名。 先给出官方提供的行为签名的相关文档:https://cuckoo.readthedocs.io/en/latest/customization/signatures/,看完以后我只有一个感想:“这么少的么?”。另外查看源码发现,Signature类下面并没有“list_signatures”这个成员函数,因而在文档的尾部的那段代码是有问题的。 官方的文档都这样了,咱们也只能靠自己了。虽说是整个文章的最后一部分了,但是这个部分不会太长。 一个吐槽首先必须得感谢Cuckoo的那一批社区签名库,真的是节省了我不少的精力,不需要从头开始,而且里面不少的签名写的非常棒,也不乏一些逻辑较为复杂的规则。 只不过,里面有不少的规则,有一些迷之问题,大家可以花一些时间好好看一看,应该会发现不少,比如正则/没写“regex=True”(rat_fynloski.py);另外还有一些并没有太大作用的规则,有一部分是在对咱们中国几大特产的检出上。 但是在这里,我们只提一个规则:creates_null_reg_entry.py。这条规则的目的是用来检出一些首字节为0x00的注册表项(该手段常用于恶意软件隐藏注册表痕迹,详情可以去网上自行搜索)。如果你有留意处理行为记录所在的命令行窗口输出的各种信息,你会发现这个python…

从零开始搭建Cuckoo Sandbox-Part2

Image
这次我决定给我的博客一个机会,Part2将会首发在这儿。
仍然给出SRC上对应文章的地址:https://sec.xiaomi.com/article/47

在上一篇文章的结尾,我留了个坑。在这篇文章,我们将会把这个坑连同我下面提到的几个问题,一并解决掉。 如果你在提交样本时主动选择正确的文件类型让Cuckoo Sandbox进行分析并且成功拿到了分析报告的话,你会留意到以下几个问题: ·“文件类型”一栏是空的 ·ssdeep值是空的 ·正常情况下提交包含数字签名的文件进行分析,在分析报告里会提到文件已被签名(如果你安装了社区版行为签名库),但是这里也是没有的 ·程序执行过程中弹出的提示有一部分无法自动点击 ·Office/PDF文档即使指明文件类型也无法分析(分析过程瞬间完成,分析报告里包含错误信息。仅特定情况下会出现) 实际上,上一篇文章留下的坑,和我上面提到的五条内的第一条是同一个问题。让我们逐个解决掉它们吧。 文件类型识别如果你有留意到运行“cuckoo -d”命令对应的命令行界面输出的信息,你会发现Cuckoo Sandbox会把[Cuckoo工作目录]\analyzer对应系统的整个文件夹拷贝到虚拟机然后才会开始分析流程。而文件类型识别的相关代码也的确在这里面,入口是[工作目录]\analyzer\windows\analyzer.py 通过分析这个python脚本里run函数的代码,我们很容易得知在第543行(由于代码做过修改,实际的代码行数不见得是我这边实际提到的值,大家可以在相关行附近找下,后续提到的代码行数均适用此规则)的if语句便是开始了文件类型的判断,实际上这个if语句只是判断你是否有在提交样本时手工指定文件类型(这决定Cuckoo Sandbox启动并分析文件的方式),而在这里便出现了一个bug。 如果你愿意修改代码把self.config.package的type打印出来,python会告诉你这是个string(不管你是否在提交样本时手工指定文件类型),那么这就意味着这个if语句是根本进不去的,也就永远无法触发Cuckoo自动判断文件类型。 原因找到了,修复方案也就明了了: <code>if self.config.package in [None, "None", "default", "&q…

从零开始搭建Cuckoo Sandbox-Part1

Image
原文地址:https://sec.xiaomi.com/article/45
当然,原文作者也是我。相当于在这儿发只是转载一次而已。

在今年3月份的时候,因为同事的一句话,我下定决心要搭一个Cuckoo Sandbox来帮助我减轻病毒分析的负担(只不过事实证明有了这玩意之后我比以前更累了)。正好去年12月换了新的笔记本,旧的笔记本闲置了下来,借此机会可以利用上。 旧笔记本换下来之后被我顺手重装了Windows 10,其实在很早之前我就有过搭建这玩意的想法,可惜在网上苦苦搜寻,却没有什么有效的资料能够助我一臂之力,网上大多讲述的是Cuckoo Sandbox在Ubuntu下的搭建(官方的文档也是这种环境),而Windows平台下的搭建的相关资料却异常稀少(官方的文档里只是一句“To be documented”)。但是,在今年3月份我重新燃起欲望的时候,我在网上终于搜索到了一篇文章,当然还有不少的油管视频,文章就是这个:https://www.trustwave.com/Resources/SpiderLabs-Blog/Cuckoo--Linux-Subsystem--Some-Love-for-Windows-10/。整篇文章分为三大部分,第一部分主要讲Cuckoo Sandbox的搭建(也就是当前你看到的这篇),主要的内容几乎都来自于上面那篇文章,少量的地方有一些差异,而第二/三部分都是资料里所没有的。 其实在我写这篇文章的时候,Cuckoo Sandbox已经更新到2.0.6了,只不过我这边安装的是2.0.5,同时我为了能让它的绝大多数功能在Windows上正常工作,改动了不少的源码,所以我并不是很乐意升级。我们这里所述的内容仍是针对Cuckoo Sandbox 2.0.5的,虽然我相信大部分内容仍对2.0.6适用。 让我们开始吧😊 初期准备1.Windows 10 64-bit:怎么激活我不管,我们其实需要的是Windows 10开始有的Linux子系统(Windows Subsystem for Linux),它能帮我们节省大量的精力 2.Python 2.7(主机和虚拟机都要安装,主机安装64位版本):Cuckoo Sandbox的官方文档内提及它支持Python 2.7,3的支持还在路上 3.VirtualBox 4.虚拟机硬件配置:个人建议是至少配备2核+1…