内网穿透——Android木马进入高级攻击阶段(二)

内网穿透——Android木马进入高级攻击阶段(二)

360烽火实验室

一.概述   

移动互联网时代的到来,企业内部数据越来越有价值。近年来,黑客以移动设备为跳板,入侵企业内网,窃取企业数据资产的趋势愈发明显。近日,360烽火实验室发现一批感染了一种名为“MilkyDoor”的恶意代码,这是继去年6月份首次出现的“DressCode”[1]恶意代码后,又一种利用移动设备攻击企业内网的木马。然而,与“DressCode”不同的是,“MilkyDoor”不仅利用SOCKS代理实现从攻击者主机到目标内网服务器之间的数据转发,而且利用SSH(Secure Shell)协议穿透防火墙,加密传输数据,进而实现数据更隐蔽的传输。

SSH协议[2]又称为安全外壳协议,其使用的传输机制是TCP/IP,通常使用的都是服务器的TCP端口22,并对经过连接传输的数据进行加解密操作。可以使用SSH对其他应用程序在别的TCP端口建立的TCP/IP传输进行加密与解密。这一过程称为端口转发。利用SSH转发,其他一切基于TCP的不安全协议都可以变得安全。

二.地域分布

360互联网中心数据显示,截至2017年5月份,“MilkyDoor”木马传播量已达到3万之多,其分布在世界160多个国家,其中土耳其、俄罗斯、印度、美国属于重灾区,中国的企业内网也面临着“MilkyDoor”木马的严重威胁。该木马在全世界的分布情况如下图所示:

图1 “MilkyDoor”木马在全世界的分布情况

三.详细分析

“MilkyDoor”木马攻击内网的主要过程如下:

  • 木马(SSH客户端)主动连接到攻击者主机(SSH服务器),建立一个SSH安全连接,并设置端口转发方式为远程端口转发。
  • 木马作为SOCKS服务器创建一个Socket,等待位于本机的SSH客户端的连接,连接成功后就可以读取到SSH服务器发送的,且经过SSH客户端解密过的数据。
  • 木马根据接收到的目标内网服务器IP和端口,与内网服务器建立一个数据传输通道。
  • 木马收到内网服务器发送的数据后,通过SSH隧道转发给攻击者。

(一)SSH远程端口转发

“MilkyDoor”木马采用远程端口转发[3]实现数据加密传输,整个过程步骤如下:

  • 木马主动与攻击者主机建立一个SSH安全连接。
  • 攻击者主机将数据发送到它的R端口上。
  • 位于攻击者主机端的SSH服务器接收到R端口上的数据后,将其加密并转发到位于木马端的SSH客户端上。
  • SSH客户端解密收到的数据并将其转发到木马监听的L端口上。

通过上述过程,攻击者可以将数据加密传输到木马端。如下图所示:

图2 攻击者利用远程端口转发传输数据的过程

  (二)SOCKS代理

“MilkyDoor”木马实现了一套SOCKS协议在内网服务器和攻击者主机之间转发流量。通过SOCKS代理,攻击者会通过感染了该木马的移动设备连接目标内网服务器,并将发送给处于内网中的移动设备的数据转发给攻击者,从而实现数据的窃取,转发过程如下图所示:

图3 利用SOCKS代理转发数据过程

(三)建立SSH安全传输隧道

木马运行时,一旦接收到手机解锁动作后,会启动ServiceWorker服务。该服务会首先从远程服务器上下载配置文件。该配置文件包含了攻击者主机的IP、木马作为SOCKS服务器要监听的端口、木马连接攻击者主机(SSH服务器)的口令、密码等重要信息。同时更新本地配置文件,并通过Handler机制将更新结果发送回ServiceWorker服务中,如果更新成功,那么开启子线程,在子线程中开启SS服务,同时,需要将配置文件中socks参数传递给该服务,这个参数在连接攻击者主机,设置远程端口转发都将用到。代码如下图所示:

图4 启动SS服务,将socks参数传递给该服务

在SS服务内部会执行一个异步任务,该任务首先根据socks参数读取用户名,主机IP,用户口令,远程端口等信息,然后连接攻击者主机,同时设置端口转发方式为远程端口转发,这样,木马发送到该端口的数据都会被SSH加密并转发到攻击者主机的端口。这个过程是由JSch包[4]里提供的接口实现,它是一个SSH2的纯Java实现。允许你连接到一个SSH服务器,并且可以使用端口转发、X11转发,文件传输等。该过程代码如下图所示:

图5 连接SSH服务器,设置远程端口转发

    (四)窃取内网服务器数据过程

木马创建一个服务端Socket,接收攻击者主机的连接,一旦建立连接,那么木马与攻击者建立了一个数据传输通道。于是先启动子线程,子线程首次运行时,会读取攻击者主机传送过来的数据,它包括请求版本、攻击指令、目标内网服务器端口、IP,用户名。经分析处理,该数据格式如下图所示:

图6 攻击者主机请求报文格式

然后,木马会根据接收到的指令进行相应的操作,代码如下图所示:

图7 木马根据攻击者指令触发相应的操作

如果是CONNECT指令,那么根据传入的目标内网服务器的IP和端口连接内网服务器。此时木马作为客户端与内网服务器建立起了一条信息通道。这样从攻击者主机到木马,从木马到内网服务器的两条传输通道均建立起来。

如图8所示(其中h,i为输入流,j,g为输出流),两条传输方向相同的文件流形成了一条单向传输通道:输入流h,输出流i组成一条向攻击者主机传送数据的传输通道;输入流g与输出流j组成一条向内网服务器传送数据的传输通道。

图8 输入输出数据流向图

实现数据转发的a(InputStream ,OutputStream)方法如下图所示:

图9 数据转发过程

结合图8与图9不难得知,通过调用a(h,i),就会将内网服务器的数据发送给攻击者;调用a(g,j)就会将攻击者传送过来的数据发送给内网服务器。

当攻击者想窃取内网FTP服务器的数据时,会继续发送BIND指令。此时木马会首先创建新的Socket A,等待目标FTP服务器的连接;读取从攻击者主机发送过来的PORT指令,一旦接收到该指令,就主动连接到Socket A。然后内网FTP服务器通过这条数据连接通道传输数据。这样,攻击者通过木马完成了对FTP文件服务器上数据的窃取。

四.总结建议

与“DressCode”木马不同的是,“MilkyDoor”木马利用SSH加密传输数据,而且其恶意代码隐藏在android.system包下,具有很好的隐蔽性,大大加强了检测的难度,一旦有移动设备中招,将很难检测出来。因此,企业应加强防范措施,严格限制不可信的移动设备接入企业内网,禁止智能终端设备与企业内部服务器处于同一个局域网内。

 

引用

[1] [技术分享]内网穿透——Android木马进入高级攻击阶段:

http://bobao.360.cn/learning/detail/3254.html

[2] SSH协议介绍:

http://blog.csdn.net/macrossdzh/article/details/5691924

[3] 实战SSH端口转发:

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

[4] com.jcraft.jsch (JSch API)

https://epaul.github.io/jsch-documentation/javadoc/

 

360烽火实验室

360烽火实验室,致力于Android病毒分析、移动黑产研究、移动威胁预警以及Android漏洞挖掘等移动安全领域及Android安全生态的深度研究。作为全球顶级移动安全生态研究实验室,360烽火实验室在全球范围内首发了多篇具备国际影响力的Android木马分析报告和Android木马黑色产业链研究报告。实验室在为360手机卫士、360手机急救箱、360手机助手等提供核心安全数据和顽固木马清除解决方案的同时,也为上百家国内外厂商、应用商店等合作伙伴提供了移动应用安全检测服务,全方位守护移动安全。

发表评论

电子邮件地址不会被公开。 必填项已用*标注