Android进程注入工具 --Poison

× 文章目录
  1. 1. 0x00 描述
  2. 2. 0x01 环境准备
  3. 3. 0x02 开始inject
  4. 4. 0x03 如何防止进程注入
  5. 5. 0x04 参考资料

0x00 描述

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

1
2
3
4
5
6
项目地址:
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,界面如下
    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 
    

    demo

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

     adbpush poison /data/local/tmp
     adbpush libmobisec.so /data/local/tmp
     adbshell chmod 777 /data/local/tmp/poison
     adbshell chmod 777 /data/local/tmp/libmobisec.so
    

    上传工具并赋予权限

  3. 查看demo的进程及PID号

     ps | grep com.example.androiddecod
    

    查看pid

    这里能看到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 参考资料