Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

A Measurement Study of Google Play

论文下载

作者搞了个playdrone的东西,是针对google play的大规模爬虫和应用程序分析框架。他主要使用四项技术:

  1. 使用常见的黑科技来绕过play为防止对其内容索引采取的安全措施,这些技术包括简单的字典攻击,反编译和重构play客户端使用不安全的通信连接来和play服务器通信去抓取、理解和复制必要协议。
  2. playdrone使用高级语言和框架提供并发和分布式的过程。他使用Ruby和Sidekiq异步框架和Redis键值存储。架构非常牛逼,简单增加服务器就能提高爬虫效率。
  3. playdrone把反汇编的源码和元数据放在git仓库里,提供一个对每个app的版本管理系统来跟踪play内容的演化。
  4. playdrone利用了Elasticsearch分布式实时搜索和分析引擎并使用基于play API的索引方案来分析和探索play里的内容和元数据。

作者用这个爬了110万个程序,并反编译了88万个免费程序,分析了超过1000亿行反编译代码。playdrone可以用来探索四个之前对分析和理解安卓app未解决的问题。

  1. 大规模描述play里的app的内容特点,讨论了打分,下载量的关系,play如何分类app以及怎么影响app的可见度,并展示随着时间play里的内容演化过程,以及app发布更新和移出的周期,并发现几乎所有的下载量集中在一小部分的免费程序上。
  2. 第一个大规模的针对库使用的代码分析,展示了在受欢迎和不受欢迎的app中库使用的区别,以及在最流行的app里的native库使用,超过半数免费app使用广告库,并发现跨平台框架app在现在的play里还是只有很小一部分。
  3. 描述了个新的简单的方法来高效的检测play里程序的相似性。他们使用apk结构相似性的方法,只考虑资源文件和assets之类的,而不是代码分析,这种方法更适合大规模分析,结果显示25%的app内容有重复,包括app克隆等等。
  4. 研究了关于授权密钥的使用。他们发现开发者总是把这些密钥存在app里,容易被反编译获取,并会被恶意用户用来盗取服务器资源或如AWS,facebook服务的用户数据。结果显示开发者的无知可能会影响OAuth开源标准的有效性,他们提供工具给google,让他们扫描app中是否存有这些key。

和google play的交互:首先因为play对app爬虫有限制,所以作者在Amazon Mechanical Turk上搞了个项目,让很多人帮忙注册了几百个google帐号。还用了death by captcha来解决各种验证码。然后用了一些play的非官方API,网上很多类似的项目。然后因为和play服务器的交互协议是加密的,因此他们baksmali了play app,把https都改成http,做了个proxy中间人,发现协议里会发送设备信息,为了不被黑名单,他们就改各种WiFi MAC和IMEI等。

爬虫框架:分布式多机器的Sidekiq任务调度,Redis键值存储器,Amazon EC2代理,Git版本控制管理,Elasticsearch分布搜索分析引擎,Nginx前端网络服务器。这样做有四个好处:

  1. playdrone可以使用高级语言ruby,这样开发维护比较方便,还支持sidekiq,redis,elasticsearch各种框架。
  2. 使用各种奇技淫巧躲避play的爬虫限制,包括使用多个帐号,使用中间代理等。
  3. git可以管理版本,跟踪单个app的演化情况。
  4. web前端方便搜索和分析app。为了爬所有的app,由于不管怎么搜索,play只返回500个搜索结果,所以用了多个语言1百万个关键词搜索。爬下来分析框架用各种插件分析,如apktool和jd-core,dex2jar之类的,还写了个对public.xml文件中资源文件名的哈希来做相似性检测。

爬虫性能:ruby很强大,代码只有2000行。第一次爬,十台服务器,爬了两天,还包括代码反汇编,3.9TB的内容,79万个,平均一个5M。后面每天爬,爬了两个月,方法一样就是不用下载一模一样的了。最后96万个,5.3T,7万个最后没有了。五个月后又搞了次,大概110多万个。相比有25%增长。

play的描述:前10%的app对应了96%的下载量,前1%有78%。最多的是这个personality,关键词是wallpaper,please和like,他们发现这里面都是垃圾app,所以壁纸应该专门做个分类。另外play的分类很有问题,比如social和photography,health和fitness,business和productivity,music和audio都差不多。

Fig

超过百万下载量的app,作者做了个打分排名:

Fig

库的使用:越是流行的app使用native库的比例越是高,用来提高性能等。java库的使用情况如下图:

Fig

相似性检测:类似人用视觉判断两个app是否相似,他们用assets,资源文件之类的看,包括图像,声音,UI布局或者app设置等。比较的时候除去了第三方库,并使用Jaccard index。25%相似的。然后考虑签名,发现158204个中有115896个是一个作者的,26.7%的是克隆。随机挑选了400个人工验证,发现5%是误报,用Piggybacked只能检测出400个中的79%。

Auth问题:很多app把auth token存在app里,直接反汇编能拿到,就能获取用户信息甚至是操控服务等。用的方法就是在反汇编的代码里直接搜索关键词和正则表达式匹配。

Fig

最知名的包括Airbnb直接存了Facebook,Google,LinkedIn,Microsoft和Yahoo的OAuth token在app里,拿到就可以直接操作和获取用户的email和好友列表等,他们汇报了facebook,facebook吊销了airbnb的授权,迫使他更新了程序。另外twitter的教程里直接告诉开发者放这个在app,不像facebook告诉开发者说不能在app里放,所以twitter使用的少但发现问题的更多。