August 9, 2019

那些总是想要和别人强行发生关系的僵尸网络之Emptiness

背景 2019年06月23日我们捕获了一个全新的DDoS僵尸网络样本,因其启动时设置的进程名以及C2中有emptiness字样,所以我们将其命名为Emptiness。Emptiness由golang编写,当前发现的样本包Windows和Linux两种平台版本。在溯源过程中,我们发现其作者长期维护着一个mirai变种僵尸网络,早期的Emptiness自身没有传播能力只有DDoS功能,是由mirai loader来完成样本植入的,后期的版本增加了ssh扫描功能,可独立完成Emptiness自身样本的传播。我们还注意到其不断修改mirai变种和Emptiness的CC协议,也许是为了对抗安全研究人员跟踪其僵尸网络攻击行为。 Emptiness的那些事 我们猜测其最早出现时间应该是2019年06月09日,遗憾的是当时我们并没有成功下载到http:[//blogentry.hopto.org/emptiness相关的样本。下图是我们捕获这个URL的时间, 2019-06-23日我们首次捕获到该僵尸网络样本v1版本 2019-06-26日我们首次捕获到该僵尸网络样本v1.1版本 2019-07-03日我们曝光了其DDoS攻击行为 2019-07-06作者更新v2版本样本,并在样本中留下了一匹”羊驼”。表示想要和我们强行发生关系。 Emptiness样本分析 通过上线包,支持的指令,资源加密等特征的变化,可以得知其作者正在积极的进行迭代开发,我们将捕获到的样本分成3个版本,以下是它们的详细对比图: 3个版本都使用了标准UPX壳,使用upx -d 即可脱壳。脱壳后知道这个家族是用Go语言的编写的,主要逻辑在main包里实现,函数对比如下图所示,根据函数的功能,下文将从主机行为,数据编码&加密,CC流量这3个维度来剖析Emptiness。 各版本函数对比图 主机行为 Emptiness在主机行为层面,并无太多特色,都是些常见操作,比如确保单一实例,修改进程名,关闭watchdog,清理history记录,删除系统命令,关闭系统服务之类。唯一值得一提的是会通过main_killer_init函数结束占用特定端口的进程。 目的:杀死竞争对手bot,关闭常见可感染端口,达到独占受害者机器的目的 杀死进程实现方法 V1 & V1.1 fuser -k -n tcp […]
August 9, 2019

Emptiness: A New Evolving Botnet

Background Our honeypot system captured a new DDoS botnet sample on 2019-06-23. We named it Emptiness which comes from the running process name as well as […]