-
-
[原创]记一次Android后门分析实战
-
发表于:
2018-12-14 20:26
7389
-
在分析某android设备时,偶然发现一处后门,经查证,应该是360的雷电OS中的一个组件,顺便分析一波
在系统里偶然发现一个system进程如下:
将其应用拖出来,解压之后目录如下:
这里主要分析ChiMaster.apk和chimahelper.apk
先分析其Manifest.xml文件:
可以看到其注册了广播BootReceiver监听开机android.intent.action.BOOT_COMPLETED,猜其是开机自启,并启动恶意服务,跟进该广播:
其作用是启动一个action为com.chima.android.policy.IPolicyService的服务,查看Manifest可知,该服务对应的是DaemonService,跟进该服务,找到其onCreate函数:
其中除了正常的初始化流程之外,还有一个a.a函数,跟进下该函数,发现该函数的作用是初始化了NewPolicyService这个类,如下:
继续跟进NewPolicyService这个类:
发现是IPolicyService的一个实现,我们看下IPolicyService,发现其是一个AIDL接口,并提供诸多高危函数:
而回到DaemonService,发现如下:
并通过onBind进行返回:
因此可以确定,DaemonService对外提供服务,通过IPolicyService定义的AIDL接口进行,而真正的实现函数在NewPolicyService这个类中,这里我们分析其中的两个函数executeCmdInShell和forceStopPackage
原本以为这些接口可以随意利用提权,结果发现了签名校验函数
跟进如下:
可以看到获取了调用者的Uid,v0是签名校验成功与否的标志位,该函数通过反射的方式调用了checkSignPermissionByAPI,并将调用接口的名称和调用者的uid传入了进去,直接找到checkSignPermissionByAPI的实现
经过重重调用,最终定位到了其签名白名单
因此第三方app无法调用,因此也无法提权,这里我做了下验证:
果然是签名校验失败:
从命名来看应该是强制关停某应用的,跟进其实现,这里中间绕过了一些细节:
可以看到是通过反射了ActivityManager中的forceStopPackage函数来实现的,这个只是一个代表,其中很多接口都是反射系统接口实现的
该接口从命名来看是执行shell命令的,跟进关键部分:
继续跟进,中间省略几处跳转,最终跟到了下面,v6_1是最终构造的参数,c是一个OutputStream
这里困惑了,执行shell命令为何会向OutputStream中写入?我们需要跟进这个c的赋值处:
这里我理解了,是一个本地的socket,执行shell命令的是一个native程序,通过localsocket进行通信,继续跟进通信的this.b的赋值处
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-12-15 13:45
被cloudstack编辑
,原因: