原创作者:墨贝科技
前言
有米SDK收集隐私信息事件最早由sourcedna披露,sourcedna发现,在iOS平台下,有米SDK会搜集已安装应用列表、当前应用等信息,并且,有米SDK使用私有API来实现此目的。该行为导致使用有米SDK的相关应用被下架。
对安卓平台下的应用来说,获取已安装应用列表、当前应用等信息是司空见怪的,并且做为一款广告SDK,为避免推广已安装应用,获取已安装应用列表也是合理的。且这些信息在官方看来,也不算隐私信息,因此安卓也没使用权限来限制对这些信息的访问。
我们之所以进行此次技术分析,是因为我们的动态分析工具居然未发现这款应用有搜集已安装应用列表的行为。为找出其中的原因,我们对此应用进行了分析。
有米SDK基本信息
我们从官方下载了Demo,取其中的NormalDemo-2015-10-10.apk进行分析。Figure 1为这款应用的基本信息:
Figure 1
静态分析发现,这款应用的确有获取已安装应用的行为Figure 2。
Figure 2
分析过程
我们从应用检测结果的第二个“Query package name”开始,分析其调用来源、信息传播过程。
信息获取过程
分析表明,程序一启动,有米SDK即调用getPackageManager().getInstalledPackages(0)来获取已安装应用信息。Figure 3- Figure6显示了这个调用的过程。
Figure 3
Figure 4
Figure 5
Figure 6
信息泄露
信息泄露的过程是我们这次分析的重点,通过这次分析,我们希望了解为什么动态分析工具无法追踪这些信息。从获取已安装应用信息开始,我们得到下面一些信息。
Figure 7
Figure 8
Figure 9
编码过程非常复杂,我们也就是在这里失去了对污点的追踪分析。具体的编/解码过程都在其fc_k348类中。
Figure 10
当然,有米SDK为了隐秘完成这个过程,做了其他更多的工作。比如,将隐私数据提交域名进行了混淆。
Figure 11
解密后的地址为:http://track.dmp.youmi.net/v1/android/packages,对于这个域名,我们也在动态环境中进行了验证。
Figure 12
总结
有米SDK为获取已安装应用信息做了大量的工作,来“隐秘”的获取“隐私”数据。在我们看来,为进行应用推广,又不至于引起争议,可以将需要推广的应用列表从云端push下来,本地判断是否需要弹框推荐这种方案更为可行。
有米SDK通过自定义的编码过程对数据进行编码,绕过了大部分污点传播分析框架,这也是目前动态分析框架所普遍面临的问题。
参考
[1] https://sourcedna.com/blog/20151018/ios-apps-using-private-apis.html
[2] http://www.cnbeta.com/articles/440107?force=1
[3] https://www.youmi.net/sdk/android/15/youmi_android_sdk_v5.3.3_2015-10-10.zip
* 作者:墨贝科技,本文属FreeBuf原创奖励计划文章,未经许可禁止转载