全球智能手机用户,主要可以分为两类,一类是华为、小米、三星等使用安卓系统的安卓手机,另一类则是使用独有iOS系统的苹果手机。
不同于安卓多样化的app分发渠道,AppStore作为苹果唯一的分发渠道,是苹果“硬件-操作系统-应用分发渠道-开发者-支付渠道-用户”闭环中的重要部分,在安全环节中起着至关重要的作用。
iOS的AppStore确实非常严格:所有不符合规范的应用,都有被下架的风险,甚至相应的开发者账户也会遭到封禁。
但事实上,尽管存在层层审核,一些菠菜、色情类黑产还是在iOS生态系统内四处潜伏。这些神仙app到底是如何做到的?
一切的开端,还得从不为人知的iOS签名讲起。
1
“签名”与“掉签”——黑产通行证和他们的梦魇
苹果iOS签名又称ipa签名,指的是给苹果手机中的应用文件(ipa文件)进行签名认证的操作。这个签名机制的意义在于,确保每一个安装到iOS上的app,都是苹果官方允许的。
AppStore严格的审核机制将不少app拒之门外,一直让开发者苦不堪言。为了能让自己的app不经过AppStore,直接下载安装在iOS设备上,一些开发者选择了获取苹果签名证书的方式。
这样的数字签名,是由数据加密算法实现的。以最简单的AppStore签名为例,苹果官方会生成一对密钥,公钥在iOS里内置,私钥由苹果后台保存。
当开发者上传app到AppStore时,苹果后台用私钥对app数据进行签名(加密),下载后,iOS设备用公钥验证这个签名(解密),如果签名正确,是苹果后台认证,即可正常安装使用。
(AppStore签名示意图)
简单来说,iOS签名就相当于是一张通行证,ipa应用文件想要进入iOS设备“境内”,就必须先拿到这张通行证证明身份。否则将被拦在门外,无法安装或正常使用。
除了乖乖上架AppStore,还有什么途径能拿到iOS签名?这其中最为人熟知的,就是企业签名和超级签名。
企业签名,是用苹果企业开发者账号生成企业发布证书,再进行签名。这类签名应用(比如说,某公司自己开发的打卡app)往往没有上传AppStore的太大价值,苹果不会对它们进行审核,同时因为安装设备数量不设限,分发省事,一度成为黑产团队眼中的“香饽饽”。
(企业签名应用安装时,需要先前往手机的【设置】-【通用】,信任证书再获签)
超级签名,则是使用个人开发者账号,通过自动添加、注册苹果设备的udid,生成描述文件进行签名,实现真机测试。同样不会经过苹果审核,也是黑产常用的iOS签名之一。
这两种签名看着挺香,但都也有各自让黑产们头疼的地方。
一本企业证书可以为多个app进行签名,但签得越多,频繁“掉签”的风险就越大——当被发现滥用,该企业签名会直接被封杀,对应的所有app都将无法继续使用,只能重新签名进行分发。“掉签”的频率有时是1天,有时是1个月,捉摸不定,非常不利于黑产批量使用。而掉签导致的app闪退,也让用户体验变得相当恼火。
(让黑产头秃的掉签现场)
跟企业签名相比,使用超级签名的应用相对更稳定。但一个明显的问题是,每个开发者账号只能添加100个苹果设备udid,当用户量大的时候,分发成本将会非常高。
在两种方案都不够理想的情况下,TestFlight横空出世!其自带的TF签名完美的解决了黑产的所有痛点,成为黑产届的新宠。
2
TestFlight——鱼与熊掌的兼得
先看看啥是TestFlight。TestFlight是一个供开发者使用的app内测平台,2014年被苹果收购,成为官方认可的内测应用商店。iOS的开发者们,可以将app的原型上传到这里进行测试,收集反馈后再更迭版本,以提高上架AppStore的审核通过率。
每一款上架测试的app,可以邀请最多100名内部测试员,和10000名外部测试员参与测试。每一个构建版本在上传后90天内,将保持可供测试的状态。
在一般的开发者看来,TestFlight是beta版app的集中试炼场。这里不仅有新生小众的作品,也有京东、B站、爱奇艺等我们常用的app,可以说是包罗万有。
而在黑产眼里,在TestFlight上架意味着能拿到苹果官方认可的签名证书。不需要信任证书,可直接下载使用,没有设备数量限制;即使安装链接在90天后失效,已下载的用户只要不卸载,app持续提供服务,就可以继续使用。
比企业签名稳定,也比超级签名成本更低,TestFlight因此成为黑产团队新的“香饽饽”。
(TestFlight曾经在免费榜App登上第一名,有猜测认为是黑产应用的“功劳”)
跟最常见的两种iOS签名不同,在用TestFlight分发之前,开发者需要先通过beta版app审核,确保符合AppStore审核指南。不过这种审核,远比在AppStore正式上架要宽松。
打个比方说,在TestFlight上架的某app现在是1.0版本,这个版本(version)可以有上千个小更新(build),但只有在第一次提交时会经历完整审核。而同一版本号下,只要没有重大更新,后续的小更新都能享受「宽松政策」,无须进行全面审核。
这种“稳定不掉签”的体验也很快引起行业注意。目前,国内已经出现了不少第三方服务商提供TestFlight上架服务,不仅能代签名,甚至表示可以通过技术手段突破下载人数等限制,最快20-30分钟就能通过审核。
(一些第三方提供的代签名服务)
就这样,TestFlight从开发者眼中”创意发挥空间更大的地下AppStore”,变成了黑产从业者眼里,一条可以钻空子的发财之道。
3
黑产TestFlight小教程——关键操作已隐去
第一步:披上马甲,伪装上架
虽说TestFlight后续审核宽松,但还是需要经历一次全面的初审。而为了成功上架,黑产一般会通过套壳app来使障眼法。
简单来说,就是在提交审核时伪装成“正经app”,比如说手电筒、指南针之类的工具应用,上架后再通过远程更新为网贷博彩、色情直播等页面。
鹅师傅在TestFlight下载了一款名叫“X车师傅”的app,就遇上了这样的套路。
介绍显示,“X车师傅”是某汽车服务旗下的维修工人使用的app,工人可以通过该app在线请假与报销,及时了解公司的最新通知,还可以在线接单。
听起来很是正经,甚至刚打开进入app的界面,也一本正经。刚打开的时候,是这样的。
(app内实现自动调整,秒变“真开车”app)
这种伪装app的背后原理,实际上就是苹果屡禁不止的“热更新”。
iOS的app更新,一般都只能通过AppStore下载安装。而热更新,则是悄悄绕过了严格的审核更新,以软件内部下载代码的方式,为app偷偷摸摸安装更新。往往也是一些黄色、暴力、赌博等擦边球内容。
这种过审后就改头换面的套壳app,说白了就是“欺诈”,不仅破坏整个生态体验,让应用商店们防不胜防,更有可能为用户的信息安全带来隐患。
上架TestFlight只是个开始,分发才是最关键一步。偷龙转凤成功上架后,黑产团伙还需要解决一个大问题:有且仅有10000个外部测试员名额,怎么变成“无限多”?
在TestFlight里,开发者可以通过两种常用方式邀请外部测试员:
相比起来,当然是第二种分发方法省事。在分发的同时,黑产从业者一般还会引导用户,在下载安装后点击“停止测试”,这样“来无影去无踪”,就不会占用有限的10000个外部测试员名额了。
只要已安装用户一直不卸载,该app持续提供服务,即使TestFlight上的下载链接到期失效,他也可以一直使用不受影响。对“搞黄色”的app们来说,也不需要担心90天测试有效期,真是一劳永逸好贴心。
这些操作,让TestFlight在业内有着“稳定不掉签”的传说,也是黑产能在这里无尽分发下去的一大原因。
其他套路:山寨App诈骗
今年4月,马来西亚警方接获6宗报案,称骗子假扮成警察、官员、银行职员等,以话术欺骗受害者通过TestFlight下载一个声称是马来西亚国家银行开发的app,输入银行卡账户和密码等资料,共骗走约70000美元。
(马来西亚警方展示诈骗团伙所使用的app)
看来,防不胜防不仅是应用商店,还有我们这些一般用户。
热更新伪装,钻空子分发,还有我们熟悉的诈骗套路,再加上第三方的帮助……你猜,黑产在TestFlight的路会不会越来越好走?
4
不要让开发者的乌托邦,变成黑产的新温床
开发者满怀激动地呈上作品,测试人员积极反馈,协作优化下一个版本……如此循环往复,促进整个app生态的健康发展。
这本该是TestFlight的存在意义和美好愿景,却因为黑产从业者加入,搅浑了一池子的水。
(AppStore审核指南中,针对“热更新”的2.5.2条款)
跟AppStore的层层打击相比,TestFlight的应对措施是相对缺失的。虽说每个app版本的首个创建版本都需要对照AppStore规范,进行全面审核,但过审后呢?并没有足够的管理精力和整顿力度跟上。
这就像是偌大的一座城,只在城门放了几员猛汉把守,一旦想办法绕进去了,从此路路畅通,可以胡作非为。
如果AppStore的同款措施能在TestFlight落实,相信也能扼杀不少违规app。
而作为一般用户,鹅师傅提醒你,应当时时警惕,认准AppStore和认可的开发者,不下载来历不明的app。