分析activity安全检测实践
在学习移动安全中的一些测试经验,记录一下
以想看app为例
https://app.mi.com/details?id=com.xiangkan.android&ref=search
使用drozer测试暴露的activity
run app.activity.info -a com.xiangkan.android
得到:
Package: com.xiangkan.android com.bikan.reading.activity.SplashActivity Permission: null com.xiaomi.assemble.control.DistributeActivity Permission: null com.tencent.tauth.AuthActivity Permission: null com.bikan.reading.activity.DummyActivity Permission: null com.xiangkan.android.MiPushWakeActivityActivity Permission: null com.ledong.lib.leto.main.FunctionActivity Permission: null com.bikan.reading.social.SocialShareActivity Permission: null com.xiangkan.android.wxapi.WXEntryActivity Permission: null Target Activity: com.bikan.reading.social.SocialShareActivity
反编译客户端后,由查找函数getStringExtra,为什么要这个函数?由于我们希望分析的是activity接收数据之后的安全,如果activity都没有接收任何参数,那顶多是去测测能不做客户端的绕过,运行下,如果对应的activity不敏感,那也就没啥卵用,但是如果接收参数,我们就可以分析下参数在客户端逻辑中都有哪些风险了。而getStringExtra就是接收String类型的参数,这种类型最容易出现风险。
通过jd-gui全局搜索这个函数确认到com.bikan.reading.activity.DummyActivity,是暴露的,且接收参数数据的
进入DummyActivity找打onCreate函数,是创建Activity的入口函数,他接收ref参数,为push值得时候,执行a函数
a函数没有参数,所以找到它,它接收uri参数,然后接受两个a(String),a(Uri)函数的过滤,
最后进入SplashActivity
然后会启动SplashActivity,并为它传递url参数的值,也就是DummyActivity中Uri的值
那么确认DummyActivity接收两个参数ref和uri
adb测试:
adb shell am start -n com.xiangkan.android/com.bikan.reading.activity.DummyActivity --es ref push --es uri https://www.baidu.com
执行后,啥动静也没有。
因为过滤了,刚才提到的两个过滤a函数。
其中a(Uri paramUri)中WebRiskChecker类,限制了地址中域名的白名单
adb shell am start -n com.xiangkan.android/com.bikan.reading.activity.DummyActivity --es ref push --es uri https://www..mi.com
想看就打开了https://www..mi.com
其实这样问题就不大了,主要问题就是域名的限制太大,因为不能保证这些域下的内容都是安全的,比如有url跳转,就可以配合使用。虽然问题不大,记录下分析过程。