Android 进程注入危害与测试

本文作者: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,界面如下

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

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

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

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

0x02 开始 inject

准备一个测试 demo

AndroidDecod_com.example.androiddecod_1.apk

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

adb install AndroidDecod_com.example.androiddecod_1.apk

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

3、查看 demo 的进程及 PID 号

ps | grep com.example.androiddecod

这里能看到 PID 为 1473

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

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

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

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

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

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2018-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏郭耀华‘s Blog

linux下安装git提示”无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够)“

如图所示,输入命令:apt-get install git后提示权限不够 解决方法,在命令前加 sudo即可 sudo apt-get install git ...

43060
来自专栏喵了个咪的博客空间

PhalApi-RabbitMQ基于PhalApi专业队列拓展

PhalApi-RabbitMQ基于PhalApi专业队列拓展 ? 前言 RabbitMQ一直都是队列中的标杆,这次有幸PhalApi也能啃上RabbitMQ真...

32370
来自专栏中国白客联盟

Android动态调试(三)Xposed hook

14420
来自专栏FreeBuf

英特尔放出Linux微代码以修复Meltdown和Spectre漏洞

近日,Intel发布了最新版本的Linux处理器微代码数据文件,而这个补丁文件能够修复Intel CPU中的Spectre以及Meltdown漏洞。广大用户可以...

23660
来自专栏bboysoul

什么是EOF

EOF的意思是End Of File是文件尾的标志。在数值上来说就是-1。 当在文件操作的时候,碰到文件结束,或者数据读取错误是均会返回EOF。 在linu...

10620
来自专栏电光石火

EMLOG无插件实现网站源码压缩

在以往的Emlog优化教程中,相信都是使用的代码压缩插件,今天主要是分享插件的代码版本,也就是不使用插件,直接将代码丢在module.php中就可以,好吧,又消...

27750
来自专栏向治洪

android studio编译慢的问题

1.修改android studio的使用堆内存,根据自己电脑的内存,尽量设置的大一点,点击help->如下图: ? ?    2.接下来设置使用离线gradl...

25780
来自专栏康中良的专栏

crontab在一秒内刷新多次导致部分脚本不生效的问题分析

stat为系统函数调用,该函数取得的结构体的`st_mtime`的单位为秒。今天ob在几台DB上发现crontab中的监控任务,从来没有执行。但操作一下cron...

3.5K00
来自专栏linux驱动个人学习

中断标志位 IRQF_ONESHOT

18440
来自专栏Java成神之路

Idea_学习_09_Idea 方法自动生成参数默认名

生成方法后,还空着参数,可以使用 ctrl + alt + 空格 ,列出参数,然后选择参数即可。

12640

扫码关注云+社区

领取腾讯云代金券