一种基于Janus漏洞的持续隐蔽攻击方法
2020-11-26刘春玲井靖戚旭衍
刘春玲 井靖 戚旭衍
(信息工程大学网络空间安全学院 河南省郑州市 450000)
1 引言
近年来,Android 应用安全漏洞频发[4],存在暴露用户敏感信息、银行财产信息、监听、欺诈用户输入等威胁。Janus 漏洞是Android平台爆出的核弹级漏洞,恶意攻击者利用该漏洞,可以任意地修改APK 中的代码,却不需要对APK 进行重新签名。目前有大量的Android 漏洞原理及修复的研究[1-3],但鲜有还原入侵过程及恶意入侵对用户信息窃取情况展示,本文提出一种在Android 系统上利用漏洞实现隐蔽入侵并进行数据回传的方法,从Android 签名机制上入手,实现在不修改原装APK 验证签名的情况下,对APK 进行修改并植入可持续存活的后门。通过隐蔽的传播方式,伪装成正版升级程序,保持原有功能不变,隐蔽继承原APK 已经拥有的权限,甚至替换原装应用,实现后门的不可删除性。最终实现在目标不知情下,实现录音、拍照、读取文件等数据回传和隐秘窃听的功能。
2 Janus漏洞原理分析
2.1 Janus漏洞原因
Android 系统具有自己一套独特的签名机制。开发者在发行应用的时候,需要先使用自己独特的私钥对应用签名,如果试图对这个应用的某一个文件进行修改,就会破坏APK 原来的签名,这时就必须重新给APK 签名,否则无法通过Android 的安装检测。安卓在4.4 中引入了新的执行虚拟机ART,可以直接运行优化后的dex 文件。当art 虚拟机解析一个APK 文件时,先解析头部的magic 字节来判断文件类型,如果是代表dex 文件的字节头,就会将该文件加载成dex。如果不是,就会将该文件以包含dex 文件的Zip 文件来解析。ZIP 文件的读取方式是通过在文件末尾定位central directory,然后通过里面的索引定位到各个Zip entry,每个entry 解压之后都对应一个文件。Janus 漏洞构造一个APK,从其头部看是一个Dex 文件,从其尾部看,是一个APK 文件,Android V1 签名使用的是传统JAR 签名方式,建立在对Zip 文件内的所有entry 进行校验,防止APK 内部的entry 被篡改,但是无法校验整个Zip 文件是否被篡改。因此可以突破Android 签名的防篡改作用,实施攻击。
2.2 Janus漏洞利用过程
本文具体的漏洞利用分为3 步:
(1)从设备上提取目标应用的APK 文件,并在该提取出来的APK 文件中,添加后门。从修改后的APK 文件中提取出dex 文件。将恶意攻击DEX 文件放在前,原始APK 文件放在后,直接拼接成新的APK 文件。
(2)修复新的APK 的ZIP 格式部分和DEX 格式部分中的偏移值和文件长度字段。安卓系统在安装时用ZIP 的读取机制从末尾开始进行文件的读取,读取到了原始的APK 内容,并且以V1 的方式进行校验,认为这个文件是正常的,没有篡改,APK 安装成功。
(3)修复后重新修改为APK 文件。为了更加隐蔽的进行攻击,先在原有APK 上添加后门,然后打包编译后,将其中的classes.dex文件提取出来,再拼接上原始的APK。在运行时,Android 的ART虚拟机从文件头开始读取,发现是一个DEX 文件,直接执行,这样就可以在原始APK 签名的情况下,同时满足原始APK 所具有的功能,隐蔽地附带执行我们所添加地后门程序,在用户不知情地情况下,执行攻击文件进行入侵。
3 基于Janus的连续隐蔽攻击方法
本文通过手工注入的持续连接攻击、利用快传软件隐蔽攻击、基于中间人攻击的隐蔽攻击三种方式实施基于Janus 的连续隐蔽攻击。
3.1 基于手工注入的持续连接攻击方法
为实现隐蔽的在目标设备中植入木马,本文通过手工分析注入的方式在目标APK 中注入后门,在保持原来应用功能不变的情况下实现在后台隐秘运行木马程序
本文通过修改修改metasploit 框架下的payload 源码,添加保持持久化连接的功能。主要通过以下两部分实现:
(1)在Service 销毁时自动重启。
(2)添加AlarmManager 使Payload.start( )定时执行。
在ondestory 方法中添加服务销毁重启的指令,可以实现在用户将APP 关闭,导致连接断开、服务关闭时,马上重新启动服务并重新建立会话连接。缺陷是服务不会重新运行,会话无法重新连接。解决思路是通过定时提醒的方法来重复执行service,从而在重启service 的过程中不断建立新的会话从而保持连接持续。
实验验证无论APP 是否开启,只要用户开机并保持网络连接就可以实现通信会话始终连接。
具体流程先通过Metasploit 框架生成使用tcp 通讯方式的木马APK,其次使用反编译工具APKtool 对目标文件以及payload.APK文件进行反编译提取木马APK 中核心的代码文件,并组合到目标APK 中,然后将木马APK 中核心代码文件结合到目标APK 反编译后的smali 源码文件中。最后在目标APK 的启动源码中注入hook并增加调动木马相关服务的smali 指令,通过AndroidManifest.xml找到相关的启动指令位置,并同时在其中增加应用程序权限。最后对反编译后的APK 源码文件进行重新编译。即可生成带后门的APK 文件。
3.2 基于快传软件的隐蔽传输
Android 系统会备份安装在本机的APK 文件,其中系统APK安装在/system/APP 目录下,用户APP 安装在/data/APP 目录下。而快牙之类的快传软件正是将这部分备份后的APK 提取出来,然后通过网络进行传输。当一台手机上已经安装有修改后的APK 时,系统也会将此修改后的APK 完整备份在系统中,当使用快牙软件进行手机间互传时,就会将修改后带有后门的APK 传输至对方手机。
3.3 基于中间人攻击的隐蔽攻击方法
中间人攻击指在内网范围内,攻击主机通过ARP 欺骗的方式,欺骗局域网内其余主机,冒充网关,截获局域网内的数据,从而将其余用户访问的下载链接地址重定向为攻击主机的http 服务器地址。如果在攻击主机的http 服务器上放置下载APK 的链接,当用户访问指定网页时就重定向到用户的APK 上,从而实现APK 劫持下载。
用户下载软件分成直接下载和间接下载两种方式,针对两种不同的下载方式,可以采用不同的劫持手段。通常在手机端下载APK 时,网站出于安全考虑并不会直接给出直接下载地址,而是采用间接下载的方式,针对这种下载的方式,我们可以通过替换302 Moved Temporarily 数据包中的Location 属性的下载程序地址,从而完成下载劫持。而采用直接下载方式的网站,需要先将200 ok 的响应数据包,修改成302 Moved Temporarily 数据包,并添加location 属性,同时定向到目标地址,从而实现劫持。
4 测试与验证
4.1 测试环境及步骤
本文采用v1 签名机制的Android 5 和Android 6 为目标Android系统测试用例,实现在不改变v1 签名的情况下对Android 目标手机的恶意软件传播,实现获取系统信息、隐蔽拍照、隐蔽录像、隐蔽录音、系统截图、获取手机联系人、获取手机通讯录、获取手机短信、发送短信等数据回传等隐蔽攻击。
4.1.1 制作恶意软件
选用受众较多的uc 浏览器APK 为测试用例,将正版的uc 浏览器手动注入后门后,使用自动化脚本进行注入,注入成功后生成目标为uc1 的APK。通过getmorepackinfo.jar 分析这两个包签名,可以发现这两个包文件的签名仍然相同,成功实现在不修改文件签名的情况下修改APK。
4.1.2 恶意软件隐蔽传播测试
使用小米note 和Oppo R7 测试恶意软件的快牙传播(操作系统分别为Android6.0 和Android5.1.1),在小米上安装原版uc APP,oppo 手机上安装注入后门的uc1 APP,然后把oppo 手机中的uc1 浏览器安装包传送给小米,小米收到后进行升级安装并显示安装成功。
4.1.3 中间人攻击测试
将APK 放置在https 服务器上地址即为本机IP 地址,访问IP地址时即可下载APK,修改etter.dns 文件将www.baidu.com 的映射替换成本机地址,这样目标主机访问百度时就会变成访问本机地址,从而能够弹出下载APK 的提示,然后使用ettercap 软件进行dns 欺骗,设置目标主机为目标1,网关为目标2,开启dns_spoof 功能进行欺骗。
4.1.4 恶意文件替换测试
(1)替换多权限软件。大多数用户常用的软件,为了能够实现更多的功能,都会被用户赋予大量敏感权限,针对这部分APP的攻击,替换的APP 会继承被替换的APP 所拥有的权限,隐蔽获取用户敏感权限。
(2)替换系统APP。系统APP 在常规情况下无法修改,但可以更新系统APP,利用Janus 漏洞制作带后门的系统APP 就可以对系统APP 进行更改,从而将后门植入系统APP 中,同时受到系统的保护,具备无法删除的特性。
4.2 测试结果与分析
植入用户系统的APK,在保持原有功能的情况下,可以实现获取系统信息、隐蔽拍照、隐蔽录像、隐蔽录音、系统截图、获取手机联系人、获取手机通讯录、获取手机短信、发送短信等数据回传功能。以上构成一整套完整的漏洞利用体系,可以实现在用户升级应用的时,隐蔽地在目标设备上植入木马并实现信息窃取。
5 总结
针对安卓系统签名验证机制和应用编译模式特性造成的Janus漏洞,本文提供了一整套的漏洞利用流程。
首先是针对Janus 漏洞的原理和构成条件,将恶意dex 文件和目标APK 进行结合,从而在不修改签名的情况下修改APK 程序。其次利用手工为APK 程序增添后门的方法,在保持原有APK 功能的情况下,注入具有数据回传功能的payload。最后针对measploit框架木马容易掉线的问题,提出了改善木马的存活能力的办法,在应用关闭或服务关闭的情况下能够迅速重启建立连接。然后通过快传软件或者中间人攻击的手段进行传播,并通过替换高权限APK,实现在用户不知情的情况下继承原APK 所拥有的敏感权限,或替换系统APK 享受系统软件防用户删除的特性。最终植入用户系统的APK,在保持原有功能的情况下,可以实现获取系统信息、隐蔽拍照、隐蔽录像、隐蔽录音、系统截图、获取手机联系人、获取手机通讯录、获取手机短信、发送短信等数据回传功能。以上构成一整套完整的漏洞利用体系,可以实现在用户升级应用的时,隐蔽地在目标设备上植入木马并实现信息窃取。