首页
社区
课程
招聘
[原创]用frida扫描安卓应用的fastjson gadget
发表于: 2024-2-28 16:51 2983

[原创]用frida扫描安卓应用的fastjson gadget

2024-2-28 16:51
2983

问题描述

fastjson有过一些严重的RCE漏洞。虽然官方表示对安卓没有影响,但是也不完全是。分析过程请见这篇文章。


https://zhuanlan.zhihu.com/p/682797594


目前没有安卓环境上通用的fastjson RCE方法,但是由于每个应用的代码不同,仍然可能存在fastjson反序列化的漏洞。可能存在的漏洞类别有很多,从RCE到敏感信息泄露都有可能。


想要实际挖掘fastjson的漏洞的话,需要有两个条件:

  1. 存在fastjson任意类反序列化功能(低版本默认开启)

  2. 存在可利用的fastjson gadget,在反序列化代码执行后能造成较大的影响。例如非安卓平台的com.sun.rowset.JdbcRowSetImpl就是利用了jndi,达到了RCE的效果

事实上难点在于第二点。原因如下

  1. 能被fastjson反序列化的类有一些限制条件

  2. 符合条件的类一般都无法造成实际安全影响

  3. 符合条件的类非常多

分析思路

首先找到fastjson反序列化的条件。找到具体哪些类可以被fastjson反序列化,哪些函数可以被执行,以及哪些数据可以被更改。


然后构造一个工具,可以用来找到可利用的类和方法。


由于找到的类会很多,需要自动化排除无实际影响的frida gadget(这个问题暂时遗留)

研究步骤

fastjson反序列化参考文章:https://paper.seebug.org/994/


首先我们自己构造一个安卓应用,使用低版本的fastjson,然后构造一些类,并实验哪些类的哪些代码是可以被执行的。


具体过程不在本文详细描述,直接说结果吧。假如我们有这么一个类

public class Gadget {
    // 类本身不需要被任何地方调用,只要存在、classloader能找到,就可以
    
    public boolean b = true;  // 可更改。类型不限,public,非static
    public static int i = 0;  // 不可更改
    
    public Gadget() {
        // 可执行
    }
    
    private Gadget() {
        // 可执行。private也可以。
    }
    
    public void setI(int var) {
        // 可执行:public,非static,只有一个参数,方法名为setXXX
        // 返回类型无限制,如果参数不是基本类型也可以(比如Bundle也是可以调用的)。
    }
    
    public static void setJ(int var) {
        // static 不可执行
    }
    
    private void setK(int var) {
        // 不可执行
    }
    
    public int getI() {
        // 可执行。public,非static,无参数,方法名为getXXX
    }
}


为了能更好地挖掘漏洞,我们用frida进行自动化扫描。当然,如果能通过反编译等方式得到源码,也可以使用静态分析,来对java的ast进行分析和扫描。


我认为动态分析和静态分析无法互相代替。除非能拿到源码,否则一定会有反编译失败的情况。就算有源码,也存在kotlin、groovy和java三种语言需要扫描。


那么以下是我的frida工具。


https://github.com/harryfyx/fastjson-gadget-android-scanner


使用方法如下:

  1. 准备一个frida+python的环境,安装adb

  2. 在frida_script.py中填入相应的device和process,可以通过adb获得


  3. 得到所有的已加载的类(frida无法得到全部的类。由于这一步会扫出来很多的类,我们先将其保存)


  4. 根据类的列表(上个步骤扫描出来的,也可以手动添加),判断哪些是符合fastjson gadget条件的,然后将结果存入文件


  5. 将得到的类和方法,进行人工筛选

此工具可以用来扫描大量的frida gadget,但仍然会有遗漏。扫描出来的gadget具体能产生的影响也需要人为判断。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 3535
活跃值: (31016)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-2-29 10:27
1
游客
登录 | 注册 方可回帖
返回
//