freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

百度安全的 OASP 技术是什么?
2018-04-13 17:06:07


大家好~我是史中,我的日常生活是开撩五湖四海的科技大牛,我会尝试各种姿势,把他们的无边脑洞和温情故事

讲给你听。如果你特别想听到谁的故事,不妨加微信(微信号:shizhongst)告诉我,反正我也不一定撩得到。



百度安全的 OASP 技术是什么?


文 | 史中@浅黑科技


在那个没有武松的平行世界里。

潘金莲诞下一子,其貌风流倜傥,挺拔魁梧。武大逢人便夸,此子前途无量。唯有一趟街外,西门大官人每日掩面狂笑。

没错,这事儿有点 bug,这位名为武小宝的孩子,应该叫做西门小宝。


Clipboard Image.png


但是,阳谷县医院的“出生证明”上,黑纸白字地写着:小宝亲爹乃是武大,上面还有武大当年按上去的手印。武大只能咬碎了牙往肚子里咽,感觉头上的帽子更鲜艳了

Clipboard Image.png

今天的中哥讲故事就到这里,它告诉我们两个道理:

1、隔壁老王偷鸡在所难免。


2、用来证明父子关系的“出生证明”,有时是温暖的港湾,有时却是冰冷的枷锁。

接下来进入正题:

在赛博世界里,同样有无数相爱相杀的父子——App 开发者和他们的 App 。


Clipboard Image.png


这些故事隐秘而不为人知,却百转千回却又波澜壮阔。

给我讲这些故事的人,就是百度首席安全科学家,韦韬。


Clipboard Image.png

韦韬


Let's ROCK

一、App 的出生证:应用签名


故事要从一个 App 的诞生开始说。

谷歌的 Android 系统规定,一个 App 得以诞生,要有两个条件:

1、必须要有“应用签名”(对应着武小宝的出生证明);


2、应用签名上必须附有开发者的“秘钥信息”(对应着老爸武大的指纹)。

Clipboard Image.png

↑↑一个 App,必须有应用签名,里面附有开发者的信息,我画了个图,你感受一下。↑↑


你可能会有个疑问,为什么要这样规定呢?知道一个 App 的爹是谁,有神马用呢?

韦韬说,这个信息对于和 App 协作的系统,有很重要的作用:

操作系统需要知道这个 App 的开发者是谁,然后决定给它多大的权限;


应用商店需要知道这个 App 的开发者是谁,然后决定是否让它上架,用什么态度推广;


杀毒软件需要知道这个 App 的开发者是谁,然后决定是重点监控还是直接开绿灯。


Clipboard Image.png

↑ ↑ App 中的签名,决定了它将被如何对待。↑↑


我想了两分钟。。。这不就是我们熟悉的拼爹嘛。。。人情冷暖世态炎凉,还真是在哪里都躲不过。

我总结,知道 App 的作者,从根本上说是为了“可追溯性”。举个栗子:

一个手机就像一个幼儿园,每个 App 都是一个小朋友,而操作系统就像老师,杀毒软件就像看门大爷。一旦 App 胆敢欺负其他“同学”,看门大爷就把它揍一顿,下次不让它进学校;老师就可以找来家长——开发者。


当然,如果开发者是某马姓土豪首富,那。。。孩子皮一点就皮一点嘛,聪明。。。

以上算是一派和谐景象。然而你中哥从来不喜欢歌颂和谐,接下来到了见证奇迹的时刻。


二、凶险的“隔壁老王” 


你有没有发现,应用签名机制其实挺悲壮的。一个 App 的应用签名走到天涯都不能变,亲爹的名字就像刺青一样写在孩子脸上。可谓家族荣辱,俱在此身。

说问题之前,先理解一下基础概念。韦韬给我简单科普了一下应用签名用到的“秘钥”技术:

目前通用的做法是使用非对称加密的秘钥:秘钥分为一个私钥一个公钥,用公钥签名,用私钥检验。任何一个应用签名,只要用手里的私钥一比对,就立刻知道这是不是自己的儿子。秘钥是以现代密码学为基础的,就连世界上最先进的计算机,都没办法破解。


所以,坏人要想破解伪造某个应用签名,理论上比伪造 TFBoys 的签名难一亿倍。

Clipboard Image.png

↑↑易烊千玺的↑↑

↓↓我模仿的↓↓


Clipboard Image.png


刚才这段,你看懂了么?没看懂也没关系,总之你只要记住:只要程序开发者的私钥在手,就能保证出去的都是亲儿子,隔壁老王绝无可趁之机。

然而现实世界是,开发者的私钥在以各种姿势泄露。。。

韦韬细数了私钥泄露的一些姿势:

1、野生 App


许多开发者把应用的测试版和正式版使用同样一个私钥签名。这本身不是问题,但是这会造成在开发过程中,团队的很多人都可以接触到这个私钥。这样一来就难免有人见财起意,把私钥偷偷卖给黑产,让一些不法分子搞出一些冒牌 App,也就是“披着羊皮的狼”。


由于用了真的某企业签名,没有任何毛病,所以应用商店、Android 系统、杀毒软件都不能很好地区分李逵和李鬼,如果这个 App 在用户手机上偷钱、窃取隐私,往往逍遥法外很久才会被发现。


2、超级野生 App


更让小伙伴惊呆的是,很多国际互联网巨头的私钥也曾经泄露过。要知道,对于这些富二代 App,系统一般会给予非常高的权限,应用商店也不会费力审核,杀毒软件甚至直接用“白名单”的方式放行。


一旦他们的私钥泄露,黑产据此做出假的 App,在市面上几乎是畅通无阻。


注意,此时对于这些大公司来说,最生不如死的不是泄露本身,而是他们所有安装量数亿的正常应用和那些冒牌 App 使用的是同一个证书私钥。他们如果选择废掉原来的私钥,所有的 App 都无法更新了。这就相当于跟这几亿老用户 Say Byebye。。。


Clipboard Image.png

↑↑同样的指纹,同样的签名,被坏人利用,造出了邪恶的野生的 App↑↑


大公司的私钥,很多都有严密的保护机制。私钥存在一台专用的离线电脑,放在一间单独的密室里,企业 CEO、开发总监、管理员分别拿一把钥匙,他们合在一起才能够打开那间密室的门,但就是这样,秘钥还是会泄露。

至于小公司,种种管理不严更是家常便饭。结果就是:在市场上形成了一套完整的产业链:

只需要几万块钱,就能买到一个信誉不错的企业私钥,加上一条龙的 App 推广服务,包你满意。

就这样,无数坏人混进了纯洁的开发者队伍。网络上流传的 App,很多“出生证明”都是假的,亲爹其实是隔壁老王,隔壁老赵,隔壁老孙。。。

说到谷歌 Android 奇葩的应用签名制度,还会导致很多莫名其妙的问题:

比如:应用签名是不可更改的。

假设今天腾讯把微信卖给了阿里巴巴,那么对不起,以后所有的微信版本升级,还得继续用腾讯的应用签名。这就像武大把小宝过继给了西门大官人,每次开家长会,学校还要求武大去,这就相当尴尬了。

当然,非要换应用签名也不是不行,你需要用新的签名重新开发一个App,然后在旧的 App 里提示用户,下载新的 App,然后删掉旧的 App。此时用户的反应大概率是:


Clipboard Image.png


再比如:应用签名还是有“有效期”的。

你没看错,这个起到“出生证明”作用的签名,居然是有有效期的。韦韬说,一个应用签名的有效期,是开发者自己定的,但是一旦有效期到期,这个应用就相当于判了死刑,不能继续更新。

于是,谷歌建议,开发者应该设定25年甚至更长的有效期。

但是就像上面所说,如果设定时间过长,一旦把 App 转手,还得硬着头皮给人家去开家长会。

还真是恶意满满的设定啊。。。


三、爬满全身的牛虻 


刚才说得这么热闹,好像都是开发者和系统商的烦恼,你已经搬来板凳坐下准备吃瓜了吗?图样图森破。

我告诉你,这些伤痛,最后都是你来背。


Clipboard Image.png

别瞅了,就是你。


根据韦韬的介绍,我给你还原一个场景:

Round1

你:在某个游戏论坛,下载了一个看上去有点意思的游戏A。

游戏A:被安装到了 Android 手机上。

Round2

你:满脸幸福地玩着游戏A。

游戏A:一边应付着你,一边在后台下载了“伪造应用B”。(注意!应用B是一个你衣食住行经常用到的 App。伪造应用B是坏人根据应用B泄露的证书开发出的一模一样的应用。)

伪造应用B:用自己替换掉了真正应用B,由于所用的应用证书一模一样,并且版本号更高,所以系统、杀软都没有提示异常。

Round3

你:玩了半天,发现游戏A也并不是那么有意思,于是卸载。

游戏A:卒。

伪造应用B:代替了真正应用B的位置,成为了你手机中的一员,它的日常是这样的:

1)在自己的界面里插入广告,甚至给你弹窗广告。


2)Root 你的手机,然后各种贴心地帮你在后台下载其他 App。。。


3)偷取你的手机号、聊天信息、支付信息、位置信息、收货地址,然后卖给诈骗团伙。


4)在你手机休息的时候,用残余的电量挖点门罗币,贴补它的家用。。。

K.O.

Clipboard Image.png
Clipboard Image.png


别以为这只是一个耸人听闻的个案,你用来看这篇文章的手机,也许就在承受这样的痛苦。但你却被蒙在鼓里,全然不知。

一个死板的签名机制,引来了一堆恶心的手机寄生虫。我们大多数人,就像泥潭里的黄牛,只能偶尔甩甩尾巴,赶走爬满全身的牛虻,然而不到一秒钟,它们又悉数回来,继续吸血。

我们的世界,还挺绝望的。


四、OASP:为 App 找爸爸 


别哭,中哥是不会把你放在绝望的大坑里的。

所谓国家兴亡匹夫有责,大神责任更重。韦韬决定做点什么。

说到这里,我应该再仔细介绍一下韦韬。

他是百度首席安全科学家,百度安全实验室(X-Lab)的领头人。(有关韦韬的介绍,可以出门左转,看中哥之前发布的文章《韦韬:我们的战斗》)这个团队 Base 在美国硅谷,是百度安全研究的特种部队。

在世界顶级黑客大会上,韦韬和同事连续三年向全世界黑客揭露了赛博世界的“生态级”安全风险。

三年的主题分别是:

借助 Android 广告库的黄金时代,黑客可发起响尾蛇精准定位攻击;


移动设备指纹的滥用与泄露;


自适应系统热补丁:共建开放合作生态,对抗Android陈年漏洞攻击。

以上这些议题,对应了 Android 生态林林总总的问题,它们被韦韬称为“Android 生态的白血病”。

2017年,韦韬又在国内顶级安全会议之一的 MOSEC 上,提出了“白血病”续集——安卓签名机制的问题。(在这里稍微介绍一下 MOSEC,这是由国内越狱大神盘古团队发起的安全会议,在世界移动安全领域有很大的发言权,参加一下,绝对不虚此行。)

针对这些问题,百度安全 X-Lab 发起成立了 OASES 联盟,这是一个包含几种开源技术的“智能终端安全解决方案”。其中用来解决“应用签名”问题的技术,就叫 OASP。OASP 是 Online App Status Protocol 的简称,意思是“在线 App 状态协议”。

听名字有点不明觉厉吧?OASP 是怎样解决应用签名的问题呢?

1、在原有签名基础上,加了一个“二层签名”,这个二层签名是允许更换的。


2、关键在于:在二层签名里,除了附上开发者信息,还附上了一个网页链接。

它基本的工作原理是:

Android 系统、应用商店、杀毒软件可以分别校验两层签名,只有两层签名都对的时候,才会给应用放行。

没明白的话,我举个栗子:

想象你家有两扇门,第一扇门的锁不能更换,第二扇门的锁可以更换。


如果你第一扇门的钥匙被坏人配了一把,那么你至少还有第二扇门保护自己的安全。


如果你第二扇门的钥匙被坏人配了一把,那么你只需要给第二扇门换锁,两扇门又可以同时保护你的安全了。

但顶尖安全研究员构想出来的 OASP 远不止这么简单。注意,前方高能,神奇的地方要来了。

极限情况之一

如果你的智商实在捉急,第一扇门和第二扇门的钥匙,同时被坏人配了去,你家是不是就要失窃了呢?

韦韬的答案是:NO!

这时,那个神秘的网页链接就要发挥作用啦。

按照 OASP 的规则,这个网页链接,就是开发者用来发布秘钥是否被盗的。开发者一旦发现私钥被盗,就可以把被盗信息同步在这个网页上,这样无论是 Android 系统、应用商店还是杀毒软件,都可以看到私钥被盗的消息,从而对这个 App 严加盘问,判断它是李逵还是李鬼。

伪造 App,卒。


Clipboard Image.png

通过第二层签名,可以查询一个由开发者维护的网页链接,告诉你这个 App 是不是安全。

(这里我要补充说明一下,很多时候杀毒软件不能及时发现 App 的问题,是因为如果对每一个 App 都采用最严格的安检程序,会消耗极大的资源,导致系统崩溃。所以他们会根据 App 的签名进行取舍,这并不是嫌贫爱富和偷懒的表现,而是无奈之举。)

极限情况之二

不知道你发现没有,刚才的逻辑里有一个小漏洞。

一旦坏人拿到了两层签名秘钥,实际上他是可以改动这个网页链接的。也就是,它可以自己搞一个链接,附在第二层签名里,让校验它的人看到的信息是假的。

这种情况下,是不是你家就失窃了呢?

韦韬的答案是:NO!

校验的过程,不仅仅是校验链接里的信息,还会校验这个链接是不是属于开发者的公司。举个例子, 系统看到两层签名里,都标明自己是百度的 App,但是指向的验证链接,却是一个无名公司的网址。这种情况就可以判断,一定是两层签名都被盗了。

伪造 App,卒。


Clipboard Image.png

通过第二层签名,可以查询这个链接的所有者到底是不是属于开发者,从而达到锁定链接的效果。


极限情况之三

如果你的两层签名的秘钥同时丢了,连网站的 HTTPS 证书也丢了,黑客可以同时伪造你的 App 和你的网站而不被别人发现,这个时候开发者估计要凉了吧?

韦韬的答案是:NO!

这种属于不太会发生的极限情况,黑客可以利用秘钥生成新的校验链接,也会在“野外”流传一段时间。

但是,大多数杀毒软件有一个机制,那就是会在野外探测最近传播的 App,从而形成自己的资料库。想象一下,杀毒软件在野外探测到的某款 App,明显分为两类:其中90%都指向了同一个校验网址,而只有10%指向了另一个校验网址,那是不是说明指向另一个校验网址的 10% 是可能有问题的呢?

于是,杀软可以对这些“少数派”进行严格排查。

伪造 App,还是卒。

Clipboard Image.png

如果两个链接都显示自己属于开发者,那么可以从他们的比例判断真伪。


烧脑的部分终于结束了。。。

烧脑是有点烧脑,不过话说回来,要解决一个复杂的问题,不来一点猛药怎么行呢?

“为 App 找爸爸”的 OASP 技术就是这样实现的。猛药已备,接下来的任务就是让人服下去。


五、OASP 的长征 


仔细想想,百度安全实验室想要做的,不是升级一个节点,而是升级一个生态。

升级一个节点,就像教育一个人不闯红灯;


而升级一个生态,就像教育所有国人都不闯红灯。

二者难度差多大,可想而知。

刚才说过,OASP 在谷歌原生的应用生态之上,又覆盖了一层新的生态,所以 OASP 要想起作用,就需要生态的参与者——开发者、操作系统、应用市场、杀毒软件——都进行配套的技术升级。虽然技术上改动很小,但要调动那么多小伙伴,还是任重道远。

翻开历史文献,很多 Android 生态的演进,都是由谷歌直接推动的。那么,谷歌难道不知道应用签名规则存在这么多 Bug 吗?为什么这么多年都没有改进官方的 Android 系统?

韦韬告诉我,其实他和团队早就因为这个问题和谷歌进行过交流,不过谷歌并没有马上行动。分析起来可能有两点原因:

一来,应用签名的滥用问题在美国并没有中国这么普遍,谷歌并没有亲身感受;


二来,改善应用签名问题并不是谷歌现阶段的技术重心,于是谷歌决定先“保守治疗”。

之后的故事就是,百度 X-Lab 决定身体力行,先用自己的行动帮助谷歌改善应用签名的生态。从2017年5月 MOSEC 以后,韦韬就开始带着兄弟们做研究,参考了国际上很多顶尖的安全签名办法,在2017年底推出了 OASP。

其实,OASP 在中国的推广,并没有想象中那么困难。

因为大家已经受够了原来证书机制带来的痛苦,早就需要一个新的构架。借助 OASES 联盟已经有的众多家会员,目前 OASP 已经有很多伙伴响应。团队已经和一些手机生产商、应用商店联合进行测试,估计用户很快就能用到 OASP 生态体系的手机了。

另外,OASP 还有一个重要的特点:采用了“去中心化”的规则。

在这套体系里,App 开发者、Android 定制系统、杀毒软件、应用市场,大家都是因为遵循共同的规则才联合在一起。没有一个人可以掌控大权,所以也没有人能够被黑产收买、没有人能够被黑客控制。这才从根本上保障了 OASP 的公平性。而公平,是一个游戏的基础。

既然是去中心化的开源联盟,就意味着 OASP 的发起者并不能获得商业利益。所以百度 X-Lab 和这些研究员是不会从中获得金钱收益的。

也许有人觉得奇怪。

无利不起早,为什么百度安全实验室要这么热衷地推广一个“为 App 找爸爸”的技术联盟呢?

我觉得有两个原因:

1)百度旗下的诸多应用,例如搜索、金融 App,每天都在和黑产作斗争。很多时候,这些业务需要一个安全的手机环境才能保障安全。而安全的环境,不是百度一家就能搞定的,需要 OASP 这样的“找爸爸联盟”。

2)从理论上来说,应用签名技术并不局限于 Android 上。在未来万物互联的各种设备上,会有各种应用出现,而这些应用都需要一个可靠的机制来“验明正身”,OASP 的野心,正是解决未来世界的难题。

我更愿意相信,百度安全研究员站在高处,他们看到了可怕的,我们无法承受的未来。无论在过去还是现在,先知永远肩负责任,他们比庸众更别无选择。


 既然安全研究员在无私奉献,我就把 OASP 在 Github 上的页面附在这里,感兴趣的小伙伴可以去点个星星支持下

https://github.com/baidu/OASP

依稀记得看《水浒》时,读到武松斗杀西门庆,直叹天理昭彰,报应循环,惩奸除恶,大快人心。

有武松的世界,还是挺好的。


Clipboard Image.png



再自我介绍一下吧。我叫史中,是一个倾心故事的科技记者。我的日常是和各路大神聊天。如果想和我做朋友,可以关注微博:@史中方枪枪,或者搜索微信:shizhongst

不想走丢的话,你也可以关注我的自媒体公众号“浅黑科技”

Clipboard Image.png

# 黑客 # 百度 # APP
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者