[空想] 改造 FreeBSD 变成移动设备操作系统

2017-08-05 17:56:58 +08:00
 noli
目的:兼有开放性,以及安全性。

FreeBSD 也是一个重要的开源操作系统。
FreeBSD 的 Jail 本身就是一个非常好的操作系统级别的安全基础。

拿 FreeBSD 改造成一个开放型的 另一个 iOS,
搭配 C/C++ Rust Swift ObjC Golang 等等的可生成原生二进制应用的 App

会不会有前景呢
11209 次点击
所在节点    奇思妙想
75 条回复
noli
2017-08-09 10:46:07 +08:00
@hjc4869

那阿里干脆自己基于 Freebsd 改一个移动设备 OS 算了,事实上他们也是这么做的,YunOS 好像就是一个兼容了 Android 的,据说是从 BSD 改的。

但显然,加了这么流氓的内核模块,破坏平衡的玩法,没人愿意跟他们玩。
hjc4869
2017-08-09 10:47:47 +08:00
@noli 你把自由交给了用户,你怎么知道用户不会为了用支付宝放弃自由?为什么那么多用户宁愿给通讯录权限也要用那些不给权限就闪退的 app ?其实是一个道理。
hjc4869
2017-08-09 10:49:46 +08:00
用户永远是弱势群体,这个做再好的 OS 也没法改变,区别只是被 app 开发商还是被 OS vendor 还是被 OEM 坑。
noli
2017-08-09 10:58:08 +08:00
@hjc4869

我不是很理解你说什么。

用户当然永远是弱势群体,没有专业知识没有专业技能来保护自己的权益。用户当然也可以用人民币投票,要自由还是要支付宝。

然而,我一直都在说的就是,提供一个 好的 OS 环境,能够双赢。
iOS 上老老实实的支付宝就是一个实证,无论我们对这个事实的原因,甚至谁为因谁为果,有多大的争议。

然后我提出了一个 iOS 之外保持开放性同时保证用户安全的提议,就是参考 FreeBSD jail 甚至直接从 FreeBSD 改。

所以我不知道你那么悲观的,用户只能永远被坑的信念是哪里来的。也不是很理解你发表这种哀叹和我说的有什么关系。
hjc4869
2017-08-09 11:07:59 +08:00
@noli iOS 上支付宝的老实并不是因为 iOS 基于 BSD,或者系统上怎么怎么安全,而是因为其封闭性,app 不老实就得下架,用户根本用不了不老实的 app。

你根本上就理解错了。
noli
2017-08-09 11:19:31 +08:00
@hjc4869

封闭性是什么?是诅咒吗?是超能力吗?还是物理法则?

技术人就说技术话题,iOS 的封闭性就是要靠技术保证的。iOS 没有 Sandbox,或者有 Sandbox 但是像 Android 那样允许随随便便 Access 敏感数据,再多的审核也没有用。

再更进一步,你有没有想过是不是只有审核才能保证 App 对用户隐私的安全性?

你没有。
你根本就不理解什么是封闭性开放性,你只是在用你自己不理解的名词组成一个句子。

我不介意你反对我的观点,但是单方面输出你不加思考的成见,让我觉得你没有要讨论的诚意。
hjc4869
2017-08-09 11:22:46 +08:00
@noli 我觉得你的这个回复用来形容你自己再合适不过了。
既然你都这么回答了,这个话题也没有继续讨论的必要了。
祝你早日找到你的第一个客户,实现你的开放理想。
hjc4869
2017-08-09 11:24:31 +08:00
顺便,Android 的权限管理一点都不比 iOS 差,本质上 app 权限模型都是相同的,权限分的非常细,每个 app 能用什么 API,系统都能控制。你根本不理解 Android。
noli
2017-08-09 11:37:29 +08:00
@hjc4869

你很理解 Android,Android 什么权限都能控制,那你告诉我华为大战微信这么狗血的事情是怎么发生的呗。
Android 权限控制很细致,我不否认,用 XML 定义的嘛。哈哈哈哈~

没有二进制上的安全,任何其他安全机制都是虚的。
这是我对安全的理解。

如果你觉得你对 Android 安全的理解比我多,就拿出来吧。
hjc4869
2017-08-09 12:03:24 +08:00
@noli 你说的话让我觉得跟你谈我对操作系统的理解是严重的浪费时间。
还是打住吧。
zhicheng
2017-08-09 13:40:23 +08:00
@noli 我还是那句话,你用宗教的心态去做技术,就已经没有讨论的必要了。

Linux 和 BSD 是替代品,没有谁对谁错。如果你觉得用 BSD 就是对的,用 Linux 就是错的,请参考这个回复的第一条。

苹果用 BSD 并不是直接把 BSD 拿来用,而是进行了大量的裁剪和定制,用 BSD 可以改,苹果用 Linux 就不会改了?并且据说苹果当年在做 Darwin 的时候优先考虑的是 Linux。Google 的 Linux 内核也是经过自己修改过的,sandbox 这个东西 Linux 本来就有第三方的实现,不是什么难到上天的技术。Mac 用 BSD 最多的其实是 User Space 的东西。两个是完全不一样的内核,如果你说 Darwin 不是完全的 microkernel 我同意,但你也不能说它不是 microkernel。苹果把两个技术融合到一起已经和 BSD 跟 Linux 不同了。

我从来没有说我推崇 Linux,是你以为我在推崇 Linux。当然我的错误在于我以为你想讨论问题。如果你觉得 BSD 好,那你就坚持用好了。

bottom line: 我既没说 BSD 不好,我也没说 Linux 好,我不认为这两个其中任何一个比另一个更好。技术都有自己的方向和市场策略。如果我要做一个通用的消费电子类的产品一定会用 Linux (尤其是以开放为卖点) 。如果我要做一个封闭的产品并且需要保密硬件参数和信息那我很可能会选 BSD。如果我要做一个以安全为主的产品,那我很可能会选择从一个 L4 分支中定制。
noli
2017-08-09 14:18:46 +08:00
@zhicheng

我至今没有理解,我哪个行为让你认为我是用宗教的心态做技术。然后又说锤子钉子,我也是 N 脸懵逼的
你给我扣个帽子然后又在这层里面打帽子,让我觉得你的行为很无聊。

不过没关系,我们可以抛开这些次要矛盾继续讨论。

我先声明一下,我个人确实对 FreeBSD 观感甚好,对 jail 的概念比较欣赏。
为了不让讨论的话题变成毫无意义的空中楼阁,我就把 FreeBSD 里面的 jail 机制以及其对 App 隔离的效果,作为一个参考模型来讨论。
但我绝不认为这种程度的敬意,应该被理解为 BSD 宗教。

当然,我还是坚持批判 Android 中的 Linux 权限机制的。
Linux 并不是没有成型的好的安全模型实践,AppArmor 和 SELinux 都是两个比较老牌的,然而并没有受到多大的好评和关注。

请注意,这就是我批评的重点,Linux kernel API 本身其实并没有多少 安全相关的。

不像在 FreeBSD 中,jail 就是一个 kernel 的功能,现成的标准,不需要任何第三方实现,kernel 就有这样的功能。(当然 kernel 剪裁后是另外一回事)。

由于 linux kernel 对 应用隔离 关注度不高,所以我认为 linux 内核社区这么做是短视和肤浅的。

如果这个批评仍觉得勉强,那 cgroup 和 lxc 之后的 docker,关注的依然是 运维部署隔离 着手的便捷性,而不是面向普通用户比较关注的 app 数据安全。
据此,我的看法是,Linux 社区以及基于 linux 上的 Android 并不是一个真正关心像手机用户这样的使用场景的用户。

如果你觉得这样的批评冒犯了你,那言尽于此吧——尽管你不承认,但在我看来这就是 linux 洗脑教。

理论上来说,任何一个 kernel 集成任何一种 sandbox 机制,都不是难上天的事情。开源的软件嘛,有无限的可能。
唯一阻止这些可能的,就是开源社区里的人,是人们的想法和偏好选择,导致了不一样的开源软件之间有差异。

Linux 社区声称自己最有黑客精神,什么都可以搞什么都可以实现。
但是结果是搞什么都搞个半桶水,桌面是这样,手机系统也是这样。

我只是比较不客气认为 linux 社区充满了短视和狂热而已。

回归主题:

如果 @zhicheng 你要做 多样性和开放性的同时,保证用户数据的安全性,符合你说的消费类移动设备的 OS
那样怎么改嘛?

我觉得 FreeBSD 的 Jail 是值得参考的模式。
你认为改一个 安全机制很容易,麻烦你提个建议吧。
noli
2017-08-09 14:26:16 +08:00
@hjc4869

顺带补充一个,binary code sign 是任何一个支持像 App Store 这样的分发安装第三方应用 OS 所必须考虑的基本内核功能。Linux 内核曾经有过 DigSig,但是后来也没当回事了。

说实话,连这样的 bin 分发数据安全保证都没有,Linux 以及经基于 Linux 的 Android 谈安全,简直就是自欺欺人。

当然,讲真,FreeBSD 也没有。
幸好 iOS 和 WP 都有呢。
hjc4869
2017-08-09 14:49:35 +08:00
@noli apk 有签名。
Linux 确实不注重安全,但并不代表所有 Linux-based 的 OS 都不能做到安全。
对于 modern app model,一般都是签名整个包,而不是签名其中的 binary,包括 Windows 的 UWP apps 现在也是这样做。Android 在这一点上并没有缺陷。
hjc4869
2017-08-09 14:53:15 +08:00
另外,Linux Desktop 的包管理器也是签名整个包。
zhicheng
2017-08-09 15:13:40 +08:00
@noli 你可以参考 Android,它有数亿的安装量。当然你觉得 Android 是垃圾。

其实下面的话我并不想说,但你用了反问句,那我也要用几个反问句。

为什么用 Linux 就不能实现“多样性和开放性的同时,保证用户数据的安全性”?
为什么不用 jail 就不能实现“多样性和开放性的同时,保证用户数据的安全性”?
为什么从功能机时代就没有一家商业公司使用 FreeBSD 作为移动操作系统?
为什么 Google 和 IBM 甚至微软向 Linux 投入巨大的人力物力?
为什么苹果没有使用 jail 作为 sandbox 的实现?

我还是那句话,我是来讨论技术的,不是来站队的。你没必要攻击我,或者你攻击我 FreeBSD 也不会一夜之间取代 Linux。你说 Linux 短视和狂热,我代表不了 Linux 不去反驳你。但我从你身上看到了 FreeBSD 的狂热。

站在我的角度,sandbox 真不是难的上天的技术,操作系统内核本身也不是难的上天的东西,那么多科学家做了那么多研究,也有那么多的工业系统的实践,就是会让一个技术变得越来越简单。

多研究技术,少谈些主义。你要是有能力用 FreeBSD 做移动系统,那就做一个比 Android 更好的让别人闭嘴,没准到时候 Google 还会投给你几十亿美金。
noli
2017-08-09 15:33:39 +08:00
@hjc4869

Android 的 APK 是有签名,可惜的是 Android 并不阻止内存页成为可执行区
也就是说,下载一段外来的代码 JIT 成 bin 后可以执行。
那么任何 APK 签名都是摆设,只要注入攻击者的代码就可以改变 App 原作者期望的行为。
进而冒充 原 App 开发者的功能欺骗用户。
简单来说就是中间人攻击 + 注入。
又,Android 由于丑陋的权限设计( UX 不佳也有很大功劳),用户为图方便动不动就 root,以 root 身份执行注入的恶意代码,简直爽得不能再爽,
什么安全设计都白费。
最近好了点,各大 ROM 终于醒悟。后门不光自己能用,也能被别人爆菊,不再轻易提供 root

iOS 只允许 JS JIT 并且 JS 也只允许从持有开发者指定的 HTTPS 网站上下载。
可以很大程度保证,JIT 出来的 bin 是 app 原开发者想要的行为。
虽然 iOS 这么干比较怂,但好歹还是保护了用户和开发者的。
再加上原本的沙盒,能够较大程度确保 App 和用户数据 的安全。

如果按照严格执行 jail 的模型,把 静态 APK 以外的 JIT 出来的 bin 放在 子 jail 中执行,根本就不需要担心。
开发者可以借助系统或者第三方 SDK 来校验,JIT 出来的功能是否就是自己注入的功能,而不是其他人注入的。
这样不光 JS 可以 JIT (借助 HTTPS 证书验证),任何其他语言都可以 JIT。

在这点上 .net 的模型可能是最安全的,因为每一个 assembly 包括动态从外界获取的分发版本,都可以让开发者签名。也就是所谓的 binary 级别的 code sign。
noli
2017-08-09 16:04:58 +08:00
@zhicheng

我觉得我们对“能”字的理解有差异。

在你看来,假设你说 Linux 是“万能” 的,你的“能”字是“应然”。我同意,Linux 可以改造成任何想要的样子和功能,理论上它没有任何先天限制或者不足。

但我认为 Linux 在消费者级别的用户面前是“无能”的,我的“能”是“实然”。譬如说,Linux 比起 Windows 比起 MacOS X 不能提供一个稳定易用的桌面,基于 Linux 的 Android 不能保证用户数据安全和 App 开发者的数据安全。

所以我这样回答你的问题:

Q: 为什么用 Linux 就不能实现“多样性和开放性的同时,保证用户数据的安全性”?
A: Linux 应该可以做到但现在没有做到,但鉴于很多其他 Linux Alternative,例如 iOS, FreeBSD 已经做到了,参考已经做到的,不是一个更好的选择吗?

Q: 为什么不用 jail 就不能实现“多样性和开放性的同时,保证用户数据的安全性”?
A: 我并不否认 jail 以外的安全机制能够实现,就好像我没有排除过 AppArmor 或者 SELinux 或许可以。但是他们不如 jail 的实践经验丰富以及方案成熟。更重要的是,AppArmor 和 SELinux 并不是 Linux 主流,只是部分厂商维护的功能。但 jail 不是。

Q: 为什么从功能机时代就没有一家商业公司使用 FreeBSD 作为移动操作系统?
A: 问题不成立,阿里的 YunOS 是 FreeBSD 改,PS 上面的 OS 是 FreeBSD 改,2 楼的网友回复已经说过了。他们没有声称是 FreeBSD 是 BSD 协议的原因。

Q: 为什么 Google 和 IBM 甚至微软向 Linux 投入巨大的人力物力?
A: 我在 31 楼 给出过我的回答,我复述一遍:GPL 也是一个让大公司愿意投入的因素——因为保证了自己的投入不仅仅是为竞争对手做嫁衣,而且保证竞争对手的投入也可以为自己所用。 这是 GPL 在法律上保证他们安心协作的原因,然而这不是一个技术问题而是一个法律问题或者政治问题,不能说明 Linux (的代码、功能)优秀。

加点私货:OpenSolaris 如果活了下来,Linux 算个毛啊,Sun 对 Solaris 的投入也不小,能说明什么吗?

Q: 为什么苹果没有使用 jail 作为 sandbox 的实现?
A: 因为苹果不需要开源,iOS 也不是一个开放的系统,App Store 需要审核才能发布 App,所以不需要 jail 能提供的灵活程度。但是我想做一个开放的系统。
hjc4869
2017-08-09 16:07:36 +08:00
@noli 如果是 app 自己不注意导致的 RCE,那么对 iOS app 同样有效。iOS 虽说系统不让你乱调用 mprotect,但是开发商如果不怕审核不过,还是可以自己嵌入一个解释器,比如纯 C 写的 python,如果用了这些东西还不注意自己校验完整性,一样被劫持就 RCE,想干啥就干啥。
iOS 对 JS 的规定也是靠审核而不是系统安全级别的技术实现的。前段时间那么多 app 用 JSPatch 被下架,都是这个道理。
noli
2017-08-09 16:33:30 +08:00
@hjc4869

并不是你说的那个道理。

iOS 本身就允许你自己嵌入类似 python 解释器,lua 解释器,并不违反上架要求。大量游戏都是用 lua 脚本并且 热更新的,你觉得他们是怎么上架的?

但是包括 pypy,luajit,CLR 等等这些是不可以的。

因为解释器能够调用的系统 API 是可以静态检查的,在链接的时候已经写死了,肯定可以检查出是不是有用到私有 API 或者敏感的功能。不开放出来的系统 API 一样调用不了,调用了就不让上架。

但是 JIT 出来的 code 是无法静态检查的而动态检查代价太大。
并且可以绕过 iOS 上架审核并调用 私有 API,那么 iOS 的审核也就废掉了。

JSPatch 之所以被禁是因为后面这一点,JIT 出来可以调用 私有 API 的东西,例如运行时注入修改函数入口地址。
这个才是 JSPatch 被禁止的原因。
实际上,iOS 的 JavascriptCore 也是 JIT,但因为这是 苹果自己的实现,肯定不会调用自己的私有 API,所以可以放心提供给开发者。

苹果如果真的用了 jail,那么什么私有 API 调用根本就不是问题,到内核那里就防住了。

所以你的说法“ iOS 对 JS 的规定也是靠审核而不是系统安全级别的技术实现的” 就是错的,App Store 审核才不看源代码,都是二进制级别的检查。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/380666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX