手机应用入侵日记(上)

本文由91ri小编v2djia原创翻译,小编月巴又鸟修改。

———————————————————————————————————————-

[0x00] – 简介

 

[0x01] – 应用监测

[0x01a] – 不安全的数据存储

[0x01b] – 反编译程序安装包

 

[0x02] – 中间人攻击

[0x02a] – 工具准备

[0x02b] – 中间人攻击

 

[0x03] – 服务端攻击

[0x03a] – 扫描

[0x03b] – 获取权限

[0x03c] – 绕过杀毒软件

[0x03d] – 拿下系统!!

[0x03e] – 没有结束!!

 

[0x04] – 致谢

 

—————————————————————————————————————————

 

“在过去的几年中,我们见证了手机从简单到复杂的飞速发展。随着这些设备变得越来越智能、手机网络速度越来越快。人们不仅仅用手机来发信息,打电话。而是更多的用来发邮件、上网冲浪、玩游戏、查询航班信息以及网银业务。

公司也开始为客户开发专属的应用以提供各种服务。如今,我们通过手机应用能将文件同步到云端,登录社交网站,甚至和青蛙聊天(注:指游戏“会说话的青蛙”)。

因为手机存储、处理、传输的数据往往是重要或者隐私的东西,所以就要确保手机有良好的安全控制机制。“

——SANS渗透测试博客

 

 

为了研究安卓应用(安卓是由google和开放手机联盟开发的基于linux平台的操作系统。其上应用由Java编写、安卓操作系统软件栈由一系列运行在Dalvik虚拟机(DVK)上的Java应用组成)。我们对其进行了渗透测试。

本文对我们的测试技巧进行了总结。安卓上的应用主要功能与著名的Apple icloud类似:将照片、视频、联系人同步备份到个人云上。

让我们开始吧! ( ̄▽ ̄)

 

[0x01] –应用监测

 

“通常情况下,一个客户端软件安装在手机上,作为前端与用户进行交互。软件包可以通过应用商店,或者软件开发者的网站上下载,这些应用就有可能包含很多的漏洞。

这里要指出,如果要对客户端设备进行测试,我们就需要把设备进行root或者越狱。这是因为系统一般情况下不会允许你访问所有的本机上的文件。另外,软件包软件包还有可能会通过逆向工程进行反编译、修改,你肯定不希望自己安装的软件有种种限制吧。”

——SANS渗透测试博客

我们第一个任务就是监测应用软件的运行状况。这样做是为了了解该应用是如何工作的,然后试着从本机上存储的文件找到敏感信息,甚至挖掘出更多的信息,所以软件包会被反编译为源码格式。

 

[0x01a] – 不安全的数据存储

为了开展我们的第一个任务,我们需要建立一个安卓渗透测试平台(安装Android SDK,Android Emulator还有Burpsuite),接着使用ADB(Android Debug Bridge ,http://developer.android.com/tools/help/adb.html)来连接我们的手机。ADB是是一个非常强大的命令行工具,能够让我们与安卓设备或者模拟器进行命令交互。

首先,我们登录到手机终端上,然后使用ADB在调试模式下用”adb devices”命令连接到手机上。

 

 

 

 

然后我们使用”adb shell”命令来连接手机后访问内部目录。

 

在我们做进一步的深入之前,我们需要确认目标应用安装包的真实名字,它通常以“.apk”文件的形式存放在”/data/app/”中。

我们发现我们的目标应用”com.silentm.msec-v12″的真实名字是”/data/app/com.silentm.msec-v12.apk”。

最后,“/data/data”中该应用的文件夹最有可能就是该应用的敏感信息存放位置了。不出所料,我们在”/data/data/com.silentm.msec-v12/shared_prefs”中找到了如下的重要信息。

 

 

 

 

我们在文件PREFS.xml中找到了我们的用户名和密码,但是密码是经过加密的,不过仔细看下就会发现不过是经过base64加密而已,我们能够轻易的进行解密。”NXBsdXM0PTEw” > “5plus4=10”

 

 

[0x01b] – 反编译程序安装包

 

接下来,为了深入理解该应用程序的工作机制,我们需要得到程序的源码。对于安卓应用,可以通过反编译安卓程序包(.apk)来实现。

安卓程序包(“.apk” 文件)实质上是ZIP文件.包括AndroidManifest.xml, classes.dex, resources.arsc和其他部分。你可以重命名程序包,然后可以使用好压等以ZIP文件打开来查看其内容。

我们通过”adb pull”命令来从手机中解压安卓应用:

 

 

 

下一步,我们将使用dex2jar(http://code.google.com/p/dex2jar/)来反编译我们得到的“.apk”文件。dex2jar能够将”.dex”转换成可读的Java语言的”.class”文件。

 

注意! “class.dex”文件存放在我们上面提到的每个”.apk”文件中。可以通过将”.apk“文件转换成”.zip”文件来证实这一点,这样你也能了解”.apk”文件的结构。

 

 

 

最后我们使用JD-GUI (http://java.decompiler.free.fr/?q=jdgui)用来阅读反编译后得到的源码(由dex2jar生成的”.jar”文件)。本例中就是”com.silentm.msec-v12_dex2jar.jar”这个文件。

 

注意:JD-GUI是一个图形界面工具,我们可以用它查看“.class”文件。你可以通过JD-GUI来浏览重构的源码,这样能够直接查看源码中的方法,还有域喔。

 

最终,我们发现”Config.class”存储了硬编码的信息。代码如下:

 

 

 

在此说明一下!! 我们在源码中发现了 URL 和FTP的用户名以及密码(难以置信!!). 现在我们知道了该应用使用FTP协议向云端服务器传输图片,短信,联系人信息。因为它是硬编码的,而且FTP是不安全的协议,所以这种方式来传输数据是极其危险的。

 

 

 

[0x02] – 中间人攻击

    

     “攻击的第二个层面就是攻击客户端与服务器通信的通道。尽管应用程序在采用越来越安全的传输方式来传送敏感信息,但实际中并不总是这样的。在测试中,我们可以使用HTTP代理来中断并且修改信息。

如果应用程序不适用HTTP协议来通信,那么可以使用透明的TCP以及UDP代理,如Mallory。通过使用代理,可以中断、分析以及修改客户端与服务器之间的通信。”

­                                                            ——­SANS渗透测试博客

 

因为我们已经知道我们的应用使用的是HTTP协议,下一步就是安装一个HTTP代理工具,比如ZapProxy或者burpsuit(本例中选择burpsuite)。

为了演示对该应用实施的中间人攻击,演示的关键是有一个web代理来中断请求。以此为出发点,我们的会使用与普通web渗透测试类似的技术。

我们用burpsuite(http://www.portswigger.net/burp/)来拦截每个HTTP请求以及响应。通过拦截HTTP请求,我们发现了发送给服务器的敏感信息(用户名和密码),因为它使用HTTP协议来传输明文信息(通信中的中间节点都能看到这些信息,该应用真实太烂了!!),如下所示。

 

Burpsuite: HTTP 请求

 

 

另外,在HTTP响应中,我们同样找到了令人惊奇的信息:某人的email账号还有密码(之后我们发现是一个管理员的email)赫然显示在我们面前!

 

Burpsuite: HTTP 响应

 

 

总结一下,我们现在能够嗅探到以明文(既不是SSL也没有加密)传输的用户名还有密码,还有在HTTP响应中的管理员的邮箱账户”mseccloud@gmail.com”和密码”M[Sec)0/”。

 

到这里,我们的攻击已经完成了一半了。前面是收集信息的阶段,收集到目标越多的信息,能使你在后面的攻击越顺畅。无数的惨痛案例告诉我们,不收集信息就攻击目标的,到后来只能事倍功半,而且还会很容易让对方管理员知晓你的攻击行为。

 

 

原文链接:http://www.exploit-db.com/papers/26620/

 

 

本文由网络攻防研究室(http://www.91ri.org)原创翻译,转载请注明出处。