DGA域名——可以每天只生成一个域名,因此最多存在365个 DGA域名;
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样本中的种子字符串和算法都完全相同:
005241cf76d31673a752a76bb0ba7118
05891dbabc42a36f33c30535f0931555
0eb51d584712485300ad8e8126773941
15b35cfff4129b26c0f07bd4be462ba0
2da64ae2f8b1e8b75063760abfc94ecf
41ba9f3d13ce33526da52407e2f0589d
4a8145ae760385c1c000113a9ea00a3a
551380681560849cee3de36329ba4ed3
72bbfc1ff6621a278e16cfc91906109f
73f4312cc6f5067e505bc54c3b02b569
7d490eedc5b46aff00ffaaec7004e2a8
863dcf82883c885b0686dce747dcf502
bf136fb3b350a96fd1003b8557bb758a
bf650d39eb603d92973052ca80a4fdda
d89b1be09de36e326611a2abbedb8751
dbd92b08cbff8455ff76c453ff704dc6
eba670256b816e2d11f107f629d08494
样本中的硬编码C2域名如下:
zugzwang.me
tr069.online
tr069.tech
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域名;的更多相关文章
- 原创:无错版!让DEDE只生成一个RSS文件,不分栏目
DEDE为每一个栏目都独立创建一个rss文件, 如果用户要整站订阅相当不方便. 所以需要修改让dede只生成一个rss. 网上大部分帖子要么是抄, 要么是有问题少了步骤. 今天特意整理下. 分享.. ...
- git 如何revert指定范围内的commit并且只生成一个新的commit?
答:一共分成两步 一. revert多个commit并生成多个新的commit git revert <old commit>^..<new commit> 二. 使用reba ...
- tomcat实现多端口、多域名访问(只针对一个tomcat)
说明:这个部分介绍如何在tomcat中进行配置,使同一个应用可以通过不同的端口号进行访问. 在某些需要进行安全控制的场景中会应用到.例如:不同地址段只能通过某个端口访问. 2 找到tomcat的主目录 ...
- Visual Studio 2012网站如何只生成一个DLL文件
简介: 在Visual Studio 2005,2008,2010版本中,都有Web Deployment工具将网站进行发布,所有代码文件和库文件发布,生成为一个动态链接库文件,而在Visual St ...
- Android 只开启一个Activity实例
在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...
- (转)Android 只开启一个Activity实例
在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...
- spark中saveAsTextFile如何最终生成一个文件
原文地址: http://www.cnblogs.com/029zz010buct/p/4685173.html 一般而言,saveAsTextFile会按照执行task的多少生成多少个文件,比如pa ...
- 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...
- vue打包之后生成一个配置文件修改接口
前言: 我们的vue代码打包上传到服务器之后, 要是数据接口 以后换了域名什么的,是不是需要重新去vue文件里修改接口. 能不能生成一个配置文件,里面可以配置域名或其它什么字段之类的,这样以后换了域名 ...
随机推荐
- javascript 函数初探 (六)--- 闭包初探#3
相关定义与闭包: 实际上,每个函数都可以被认为是一个闭包.因为每个函数都在其所在域(即该函数的作用域)中维护了某种联系. 但在大多数的时候,该作用于在函数体内被执行完之后就被自行销毁了.---除非发生 ...
- 【spring boot】注解@SpringBootApplication 相当于 @Configuration、@EnableAutoConfiguration 、 @ComponentScan 三个的作用
注解@SpringBootApplication 相当于 @Configuration.@EnableAutoConfiguration . @ComponentScan 三个的作用 代码示例:Git ...
- Linux Distribution
来自为知笔记(Wiz)
- meta标签多种用法
<meta name=”google” content=”notranslate” /> <!-- 有时,Google在结果页面会提供一个翻译链接,但有时候你不希望出现这个链接,你可 ...
- 前言(CSDN也有Markdown了,好开森)
实战出精华 在具体的C++网络编程中提升你的逼格 John Torjo Boost.Asio C++ 网络编程 Copyright © 2013 Packt Publishing 关于作者 做为一名权 ...
- logstash+es+kibana+redis搭建
环境信息: CentOS 6.5 redis 3.0.4 logstash elasticsearch kibana 服务端ip:192.168.0.65 客户端ip:192.168.0.66 关系结 ...
- C# HTTP请求后对gzip页面实现解压缩
1.通过socket页面请求后的receive内容不能经过string后再进行解压缩处理 会造成错误的gzip幻数报错 推荐使用流处理 2.正确分析返回内容 分割header和页面代码部分 3.对页面 ...
- C# 知识点随手学习网站推荐
http://www.studyofnet.com/news/list-8881.2-1-1.html
- Laravel建站02--配置Laravel
Laravel项目的根目录下有.env文件,如果没有可以把.env.example改名为.env 这个文件是配置文件,可以把app_key.数据库.redis缓存等配置信息写在这个文件里. 目前5.4 ...
- React Native组件解析(二)之Text
React Native组件解析(二)之Text 1. 概述 Text组件对应于iOS的UILabel,Android的TextView,用来显示文本.但是Text组件的内部使用的并不是flexbox ...