一些无奈的安全问题(一)

信息安全 4751 Views

进入正文前说下:文章最后我列出了未来会写的一些文章方向:)

—————————-

引子

我研究问题喜欢研究到本源,比如互联网上的安全问题,到头来是人类自己不安全,人类自己不安全到头来是“自私的基因”决定的,基因到头来就可以扯出哲学啦。

人类文明的各类分支都有“公理”存在,即那种不证自明的说法,基于这些“公理”就可以构建一套基本定理,然后是推论,然后是规范体系,然后是其上的“生态系统”。

上面这些唧唧歪歪是“一些无奈的安全问题”系列文章的出发点。今天是系列文章的第一篇,主题是“特性导致的安全问题”。我的系列文章是跳跃的,所以下篇可能写其它方面的……

特性导致的安全问题

今天在我的一个“黑客”群里进行了一个讨论:关于“特性导致的安全问题”,这个问题我能在各种编程语言里都找出例子,不过“懒人在思考”里我尽量不用专业术语(因为受众1/5才是黑客)。举个例子:

网站基本都会有后台,网站管理员通过后台登录网站,在后台发布内容等操作。

那么黑客也喜欢找这个后台,然后通过暴力破解、社工猜测、表单绕过、身份欺骗等技巧进入后台,通过后台丰富的功能把网站给黑了。曾经有人问我:“如果没有后台这玩意就不会有这样的安全问题了,对吧?”我觉得他这个问题堪比“要是我没活着就没那些烦恼了,对吧?”……最终可能演变为“要是没人类,就没这么多复杂的事了。”“为什么会有人类?”“为什么会有宇宙?”“我是谁?从哪来?到哪去?”

……

一阵眩晕后,伴随着蛋蛋的忧伤……

有些安全问题是很无奈的,因为这些安全问题是由目标对象的特性导致,上面这个例子的“后台”就是网站的一个普遍“特性”,当然可以不要,但是这将很麻烦。

我曾经说过:“安全与用户体验一定要达到一种平衡,否则极致的安全会破坏创新。

取消网站后台,用户体验就会糟糕至极,目前是这样,除非来一种更优秀的体验来取代“后台”体验。不过,新玩意的引入必然会导致新的安全问题。

类似的一个通俗例子还有,如:“密码”。为什么要密码来校验用户身份?也许以后指纹、视网膜等“工业基础”真的普及了,就真没密码了,不过现阶段还得这样,由于密码的存在,无论是明文保存、还是密文保存都是风险,我至少有两种方式对付这种密文密码方式,哪怕密码加盐了。MD5(含加盐)是密码哈希化最常用的方式了,但是在彩虹表与GPU阵列面前,这些加密普遍很脆弱。

不得不说“密码”是伟大的发明,没有密码,那可能导致更多安全问题,更脆弱的信任体系。

“密码”是信任体系的一个“特性”,但是懒惰的人类没能都用好这个特性,这个特性导致了各种蛋疼的安全事件。

我这举的两个例子都太大,实际上每个语言或对象的小特性导致的严重安全是很普遍的。

比如PHP经典的全局变量未初始化漏洞,这个特性坑了无数的码农……这个特性导致全球PHP类型的网站多少都被黑了次?除了PHP,还有Flash AS2也是这样,其他我了解的语言就没发现这样现象了,Flash AS2后来进化到AS3就没这个问题了,PHP后来也默认禁用这个特性,但是一些历史遗留函数没用好,还会出现,更可怕是开发人员的思维也固化了,自己创造了这个特性,为了方便……

降维攻击

万维网的W3C标准里的很多标准都是有问题的,标准出问题了,实现标准的各厂商更无奈了。对于很多真正的黑客高手来说,深谙此道,他们实施的攻击往往轻而易举,对他们来说这么多由于特性导致的不安全互联网,他们的攻击就是一种“降维攻击”。

关于“降维攻击”,大家可以这样理解下:

你是三维世界的人类,你去攻击二维生物(假设存在),这些生物只有前后、左右两个坐标轴,外加一个任何维度都存在的时间轴,他们没上下坐标轴……你是以一种完全俯瞰的方式看他们的,他们根本看不到你,只能看到你在二维世界造成的影响,比如他们世界有个监狱,二维的哦,没高度的,坏人被困在监狱里出不来,有一天,你一只手把坏人提起来,意味着坏人逃离了二维世界,进入了三维,这时坏人可以轻易走出监狱。

这个例子形象夸张,不过是这个理:)

怎么办

由于目标对象各种特性的存在,我们把特征导致的安全问题分类总结下:

1. 只要这个特性存在就一定会有xx安全问题,这是最悲剧的,如果是这样,这个特性就应该考虑默认禁用:危害大必定要禁用甚至取消,危害几乎没什么,可以考虑不禁用,但给出一个可以禁用的选项;

2. 这个特性的存在,如果运用不当就会导致安全问题,那么厂商就有义务去给出规范、范例,告诉开发人员应该怎样运用;

3. 厂商有义务思考:人都是懒的->开发人员也是懒的->一些“可能导致安全问题的选项”默认禁用之->不要让开发人员去记忆这些,只要告诉他们如果你要开启也行,不过要遵守我提供的规范建议,参考我给出的安全范例,不要用互联网烂大街的技巧,那些烂大街技巧真不安全!

4. 上面这几点的思考出发点是“安全最小化原则”。

特性导致的安全问题,厂商的态度一般都是:“喂,这是我们的特性,我们不觉得有什么问题!”于是乎,我们就经常要给厂商证明下:“你看,我就是用了你这个特性,黑了全球10w个网站……blabla……

最后总结下,由于某些特性的存在,导致一些安全问题无法消除,而改良特性可能产生重大影响,比如没法兼容旧程序,甚至可能由于这个特性的改动导致“完全改头换面”,这样的话,改动成本就太高了,正是因为这样的原因,很多东西在进化中得有个过渡,不那么痛的过渡。

—————————-

后面想写的一些文章预告:

由于“懒人在思考”会进行:安全(黑客)、架构、团队的各种观点与分享。

文章就限定在这些方面吧:

  • 我会给大家分享我眼中的黑客,带大家抽丝剥茧地逐渐了解这个圈子的各种精彩;

  • 我会分享我在知道创宇创业这么多年的架构思想,我负责过一些“神秘”系统,积累了一些经验;

  • 我会分享我是如何带领团队的,包括如何招到优秀的人;

  • 我会分享我自己是如何成长起来的,并且如何保持那种“激情”或“基情”;

还有,我在知道创宇,持续招优秀的人,如果你有兴趣,可以和我聊。

听众多,我的分享更有动力,感谢你们这些有品位的读者的支持,再次感谢Fenng给我引荐了这些有品位的读者。

—————————-

余弦,来自知道创宇,安全负责人。

博客:evilcos.me。

微博:@余弦。

欢迎感兴趣的人收听我这个微信公众号:“lazy-thought”。

如未说明则本站原创,转载请注明出处:NULL » 一些无奈的安全问题(一)