Android 进程注入危害与测试

移动安全 2019-11-10

本文作者:pa55w0rd(信安之路知识星球成员---续费作品) 信安之路知识星球过期用户可以通过投稿一篇文章,入选公众号发布即可免费续一年

0x00 写在前面

源于跳槽到甲方一个人的安全部,之前我做渗透测试几乎都是 web 和移动 server 端的,客户端只会拿 apktool、dex2jar、drozer 等工具反编译一下看看源码和四大组件安全。公司要求我对移动客户端进行安全评估,看了一篇 360 的关于 Android 应用的评估报告,发现有很多的测试项我都没有测试过,并且网上的细节资料很少,偶得一款 inject 工具,尝试了一些 app 都能成功,把过程记录一下。

项目地址:

https://github.com/matrixhawk/Poison

工具编译方法:

http://blog.csdn.net/qq1084283172/article/details/53869796

代码注入主要分为静态注入和动态注入两种,静态注入针对的是可执行文件,通过修改文件内容实现代码注入,比如修改 smali 文件二次打包。动态注入针对进程,通过修改寄存器、内存值等实现代码注入。相对于静态注入,进程注入不需要改动源文件,单需要最高权限,如 Android 的 root 权限才能够进行进程注入操作。

Android 下的进程注入效果是类似于 Windows 下的 dll 注入,Android 系统使用的是 Linux 内核,因此进程间是弱相互作用,不存在 Windows 下类似于 CreateRemoteThread 作用的函数,可以在其他进程空间内创建线程来加载我们的 .so 文件,所以我们所采用的方法就是依赖于 linux 下的 ptrace() 函数,将目标进程作为我们进程的子进程操作目标进程的寄存器和内存来运行我们加载 .so 文件的代码将 .so 链接到目标进程,最后让目标进程的执行流程跳转到注入的代码执行。

如果 Android 客户端没有对进程进行有效的保护,攻击者就可以向从 Native 层面向客户端进程远程加载任意 .so 链接库,从而侵入客户端进程的进程空间,以搜索、篡改敏感内存或干涉客户端的执行过程。

0x01 环境准备

进程注入需要处理器使用的是 arm 架构,于是使用 AVD 自定义创建模拟器,其中下载 sdk 进行安装后,及自带AVD:

1、启动 AVD,界面如下

img

2、点击 creat 后,如下选择配置即可,注意 cpu 架构是 arm 并且选择 android4.4

img

3、安卓虚拟设备创建完成,点击 start 启动

img

4、启动过程非常耗时,当启动好之后,界面如下

img

环境已将搭建好了,接下来就可以测试了

0x02 开始 inject

准备一个测试 demo

AndroidDecod_com.example.androiddecod_1.apk

1、安装 demo 程序,并在模拟器中运行

adb install AndroidDecod_com.example.androiddecod_1.apk

img

2、上传 poison 注入程序及 libmobisec.so 文件到 /data/local/tmp 目录下,并给予执行权限

adbpush poison /data/local/tmp
adbpush libmobisec.so /data/local/tmp
adbshell chmod777/data/local/tmp/poison
adbshell chmod777/data/local/tmp/libmobisec.so

img

3、查看 demo 的进程及 PID 号

ps | grep com.example.androiddecod

img

这里能看到 PID 为 1473

4、通过 poison 工具把 libmobisec.so 注入到该进程

/data/local/tmp/poison /data/local/tmp/libmobisec.so 1473

5、查看该进程,注入成功

cat /proc/1473/maps | grep libmobisec.so

img

0x03 如何防止进程注入

Android 中注入需要调用 ptrace,然后执行注入 so 中的函数。因此,防止 Android 注入可以通过以下方式:

1、ptrace 附加失败

2、修改 linker 中的 dlopen 函数,防止第三方 so 加载

3、定时检测应用加载的第三方 so 库,如果发现是被注入的 so,卸载加载的 so

0x04 参考资料

Android 进程的 so 注入--Poison

https://blog.csdn.net/qq1084283172/article/details/53869796

Poison 项目源码

https://github.com/matrixhawk/Poison

PTARCE 函数

http://man7.org/linux/man-pages/man2/ptrace.2.html

进击的 Android 注入术

https://blog.csdn.net/l173864930/article/details/38456313


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论