Mirai变种中的DGA

分享到:

发布时间:2016-12-12 16:02:57

作者:360网络安全研究院

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

那个导致美国断网的Mirai 又出现带DGA变种,内置了域名生成算法。

连续导致美国和德国断网事件的Mirai恶意软件,不仅感染并控制了越来越多的摄像头等联网设备,组成潜在威胁更大的僵尸网络,其自身还不断出现新的变种,近日360网络安全研究院全球首次确认了早先Mirai 7547端口传播样本中的DGA机制。

概要

两个星期前,360网络安全研究院发现2个新的感染载体(也即TCP端口7547和5555变种)被用来传播Mirai恶意软件。

<A Few Observations of The New Mirai Variant on Port 7547>

研究院的Ye Genshen快速设置了一些蜜罐,并且很快取得收获:11月28日一天就捕获了11个样本。 迄今为止,我们的蜜罐已从6个托管服务器捕获了53个独立样本。

在分析其中一个新样本时,研究院的同事Qu Wenji发现一些类似DGA的代码,并猜测变种中包含有DGA功能,这个猜测很快就从我们的沙箱数据中得到验证。详细的逆向工作显示,在通过TCP端口7547和5555分发的Mirai样本中确实存在DGA特征。本文中将介绍这些最新的发现,将我们找到的DGA的属性总结如下:

1.  使用3个顶级域名:online/tech/support;

2.  L2域名固定长度12字符,每个字符从“a”到“z”中随机选择;

3.  域名仅由月、日和硬编码的种子字符串确定;

4.  每天只生成一个域名,因此最多存在365个 DGA域名;

5.  DGA域名仅在硬编码的C2域名无法解析时使用。

通过逆向获取的DGA知识,我们在程序中重新实现了DGA,并用它来预测所有365个可能的域名。当进一步确认这些域名的注册信息时,我们发现其中部分域名已经被MIRAI作者注册,列表如下:

图0, 已经被注册的DGA域名

值得一提的是,作者 dlinchkravitz@gmail.com在更早时间已经注册了其他Mirai C2域名:

zugzwang.me email dlinchkravitz@gmail.com

样本和分析

本文中用作说明的样本如下:

1. MD5: bf136fb3b350a96fd1003b8557bb758a

2. SHA256: 971156ec3dca4fa5c53723863966ed165d546a184f3c8ded008b029fd59d6a5a

3. File type: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped

样品做了去符号处理但未加壳。根据以分析Mirai样本经验,我们很快就确定了其主要模块。比较代码发现,resolvcncaddr函数的CFG(流程控制图)与先前发现的样本非常不同。 新版本的CFG如图1所示。

图1, 新版本的resolv_cnc_addr 流程控制图

在函数开始处,由于在样本中硬编码了多达3个C2域名,所以生成随机数以从第一和第二个C2域名中随机选择一个,如图2所示。

图2, resolv_cnc_addr 函数第一部分

如果被选中的C2域名无法解析,则bot并不解析未选择的域名或第三域名,而是将根据当前日期判断是决定是否去执行DGA代码分支还是去解析第三个C2域名,如图3。

图3, 决定是否进入DGA 代码分支

从上述代码片段我们可以看出,如果当前日期在11月1日和12月3日之间,将去解析第3个C2域名。否则将执行DGA代码分支。这可以理解为作者不希望DGA域名在12月4日之前被启用,这也恰好被前文提及首个被注册的Mirai DGA域名对应于12月4日所映证。 DGA主函数名为dgagendomain。域名完全是基于种子数字和当前日期生成的。种子通过调用strtol()从硬编码的十六进制格式字符串进行转换。看起来字符串“x90x91x80x90x90x91x80x90”是一个错误的配置,这会导致strtol()总是返回0。

代码中通过调用time()和localtime()的C库函数得到本地日期。但只有月和日被使用,如图4所示。

图4, dga_gen_domain 函数片段

L2域名是通过反复执行图5所示的代码块来生成的。其长度由$ t5和$ t2确定,它们的值在图4中设置,从中我们可以确定L2域名长度是12。

图5, 生成L2域名的循环代码片段

TLD(Top Level Domain)由寄存器$S0中的残余值确定,如图6所示。 我们可以看到在这里使用了3个TLD。

图6, 确定TLD 的代码分支

 

IOC

目前,DGA相关的特性存在于如下样本,所有这些DGA样本中的种子字符串和算法都完全相同:

  1. 005241cf76d31673a752a76bb0ba7118
  2. 05891dbabc42a36f33c30535f0931555
  3. 0eb51d584712485300ad8e8126773941
  4. 15b35cfff4129b26c0f07bd4be462ba0
  5. 2da64ae2f8b1e8b75063760abfc94ecf
  6. 41ba9f3d13ce33526da52407e2f0589d
  7. 4a8145ae760385c1c000113a9ea00a3a
  8. 551380681560849cee3de36329ba4ed3
  9. 72bbfc1ff6621a278e16cfc91906109f
  10. 73f4312cc6f5067e505bc54c3b02b569
  11. 7d490eedc5b46aff00ffaaec7004e2a8
  12. 863dcf82883c885b0686dce747dcf502
  13. bf136fb3b350a96fd1003b8557bb758a
  14. bf650d39eb603d92973052ca80a4fdda
  15. d89b1be09de36e326611a2abbedb8751
  16. dbd92b08cbff8455ff76c453ff704dc6
  17. eba670256b816e2d11f107f629d08494

样本中的硬编码C2域名如下:

  1. zugzwang.me
  2. tr069.online
  3. tr069.tech
  4. tr069.support

我们将密切关注DGA变种的后续变化,敬请关注后续更新。

附:360网络安全研究院对Mirai追踪过程

360网络安全研究院基于对美国和德国两次断网事件以及mirai僵尸网络的理解,梳理了Miral追踪的脉络(以下均为北京时间):

2016-11-07,kenzo发布了一个针对7547端口上路由器等设备的TR-069/TR-064相关的安全公告;

2016-11-26 21:27:23 360网络安全研究院首次探测到mirai僵尸网络发起了针对 7547 端口的扫描;

2016-11-26 ~ 2016-11-28,端口7547上的mirai僵尸网络规模积累到足以影响大面积网络;

2016-11-27 17:04,360网络安全研究院监测到又出现一个变种,和26日的新变种类似,这次的变种出现了扫描TCP端口5555的行为。

截至到2016-11-28 telekom 德国电信累积大约90万个路由器被mirai僵尸网络的扫描过程打宕,网络大面积受影响;

2016-11-28 ~ 至今 telekom 德国电信在自身网络范围内采取措施遏制mirai僵尸网络的扫描过程。

截止到12月9日,360网络安全研究院设置的蜜罐已从6个托管服务器捕获了53个独立样本。

2016年12初,在分析其中一个新样本时,360网络安全研究的Qu Wenji发现一些类似DGA的代码,并猜测变种中包含有DGA功能,这个猜测很快就从我们的沙箱数据中得到验证。

本文由安全客原创发布
转载,请参考转载声明,注明出处:
https://www.anquanke.com/post/id/85102

DGA域名——可以每天只生成一个域名,因此最多存在365个 DGA域名;的更多相关文章

  1. 原创:无错版!让DEDE只生成一个RSS文件,不分栏目

    DEDE为每一个栏目都独立创建一个rss文件, 如果用户要整站订阅相当不方便.  所以需要修改让dede只生成一个rss. 网上大部分帖子要么是抄, 要么是有问题少了步骤. 今天特意整理下. 分享.. ...

  2. git 如何revert指定范围内的commit并且只生成一个新的commit?

    答:一共分成两步 一. revert多个commit并生成多个新的commit git revert <old commit>^..<new commit> 二. 使用reba ...

  3. tomcat实现多端口、多域名访问(只针对一个tomcat)

    说明:这个部分介绍如何在tomcat中进行配置,使同一个应用可以通过不同的端口号进行访问. 在某些需要进行安全控制的场景中会应用到.例如:不同地址段只能通过某个端口访问. 2 找到tomcat的主目录 ...

  4. Visual Studio 2012网站如何只生成一个DLL文件

    简介: 在Visual Studio 2005,2008,2010版本中,都有Web Deployment工具将网站进行发布,所有代码文件和库文件发布,生成为一个动态链接库文件,而在Visual St ...

  5. Android 只开启一个Activity实例

    在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...

  6. (转)Android 只开启一个Activity实例

    在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...

  7. spark中saveAsTextFile如何最终生成一个文件

    原文地址: http://www.cnblogs.com/029zz010buct/p/4685173.html 一般而言,saveAsTextFile会按照执行task的多少生成多少个文件,比如pa ...

  8. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  9. vue打包之后生成一个配置文件修改接口

    前言: 我们的vue代码打包上传到服务器之后, 要是数据接口 以后换了域名什么的,是不是需要重新去vue文件里修改接口. 能不能生成一个配置文件,里面可以配置域名或其它什么字段之类的,这样以后换了域名 ...

随机推荐

  1. javascript 函数初探 (六)--- 闭包初探#3

    相关定义与闭包: 实际上,每个函数都可以被认为是一个闭包.因为每个函数都在其所在域(即该函数的作用域)中维护了某种联系. 但在大多数的时候,该作用于在函数体内被执行完之后就被自行销毁了.---除非发生 ...

  2. 【spring boot】注解@SpringBootApplication 相当于 @Configuration、@EnableAutoConfiguration 、 @ComponentScan 三个的作用

    注解@SpringBootApplication 相当于 @Configuration.@EnableAutoConfiguration . @ComponentScan 三个的作用 代码示例:Git ...

  3. Linux Distribution

    来自为知笔记(Wiz)

  4. meta标签多种用法

    <meta name=”google” content=”notranslate” /> <!-- 有时,Google在结果页面会提供一个翻译链接,但有时候你不希望出现这个链接,你可 ...

  5. 前言(CSDN也有Markdown了,好开森)

    实战出精华 在具体的C++网络编程中提升你的逼格 John Torjo Boost.Asio C++ 网络编程 Copyright © 2013 Packt Publishing 关于作者 做为一名权 ...

  6. logstash+es+kibana+redis搭建

    环境信息: CentOS 6.5 redis 3.0.4 logstash elasticsearch kibana 服务端ip:192.168.0.65 客户端ip:192.168.0.66 关系结 ...

  7. C# HTTP请求后对gzip页面实现解压缩

    1.通过socket页面请求后的receive内容不能经过string后再进行解压缩处理 会造成错误的gzip幻数报错 推荐使用流处理 2.正确分析返回内容 分割header和页面代码部分 3.对页面 ...

  8. C# 知识点随手学习网站推荐

    http://www.studyofnet.com/news/list-8881.2-1-1.html

  9. Laravel建站02--配置Laravel

    Laravel项目的根目录下有.env文件,如果没有可以把.env.example改名为.env 这个文件是配置文件,可以把app_key.数据库.redis缓存等配置信息写在这个文件里. 目前5.4 ...

  10. React Native组件解析(二)之Text

    React Native组件解析(二)之Text 1. 概述 Text组件对应于iOS的UILabel,Android的TextView,用来显示文本.但是Text组件的内部使用的并不是flexbox ...