精子又要搬家了,来  看一看有什么正在甩卖  吧。
标签 #信息安全

未来的互联网安全体系

前两天在撰写 RP 主机的「服务条款」,参考了几家知名的 VPS 和虚拟主机服务提供商(如 Linode)的服务条款,发现他们无一例外地对「滥发垃圾信息」非常在意。由此想到,现在很多邮件服务提供商,在以非常野蛮的方式来进行反垃圾邮件工作,例如直接封禁某些发出大量垃圾邮件的 IP, 所以 Linode 才会如此认真地保护他们的 IP 资源。

基于 IP 的反垃圾邮件策略显然是不合理的,那么让我来想象一下未来的互联网安全体系是怎样的。首先提示各位读者,阅读本文需要你对公钥加密算法有一个基本的了解。而且碰巧这里有一篇我以前写过的有关公钥加密算法的日志:http://jysperm.me/technology/1074.

我认为随着越来越多的基础服务依赖于互联网,人们会越来越重视网络安全,未来的 IP 协议(也许是 IPv7 或者一个其他的什么版本号), 应当强制对每一个数据包进行加密。网络上的每个终端都有一个密钥对,就好像 MAC 地址一样,出厂既有,当然,也可以自行更换。所有 IP 数据包都以对方的公钥来加密,同时以自己私钥来签名,这样便在 IP 层实现了端到端加密,和基于数字签名的身份鉴定。

公钥就是一个网络终端的身份证,权限认证可以直接基于公钥来进行,例如 IP 白名单会变成公钥白名单,邮件服务提供商也会依据公钥来封禁恶意的终端。甚至很多软件和网站也不再需要设置密码了,只要授权自己的设备的公钥以访问权限即可。

生成一个密钥对是十分简单的,所以这无法阻止一些恶意的用户通过生成大量的密钥对逃避封禁。因此,我认为生成一个密钥对应当是有成本的,需要支付现实世界的货币才可以。即类似于现在的 SSL 证书的模式,会有经过权威认证的证书(密钥对)颁发机构来颁发密钥对,每生成一个新的密钥对都要向颁发机构支付一定费用(例如 100 人民币), 这在全世界范围内会是一笔相当大的费用,可以考虑直接用这笔费用来维护核心路由等网络设施,于是大家接入互联网就不需要额外的费用了。

这个密钥对就是一个网络终端(通常也属于一个人或者机构)的身份证,代表着它在网络上的行为,例如发送垃圾邮件,对其他终端进行攻击等,都会被无可抵赖地记录在案。当一个密钥对的恶意行为过多时,执法机构可能会吊销这个密钥对,就如同现在吊销一个 SSL 证书一样。租用服务器的时候,提供商会要求你自行提供密钥对,服务提供商再也不必担心因为滥发垃圾信息而导致 IP 被封禁了。普通人是不需要频繁更换密钥对的,只有那些尝试破坏规则的恶意用户,才会经常被吊销密钥对。

可以想象,有些国家会要求对密钥对进行实名制管理,非实名的密钥对签名的数据包,不允许其通过骨干路由,这种方案会比模糊不清的封禁更加有效地管理互联网秩序。这样也带来了一个好处,就是密钥对会像实名制的手机卡一样,只要凭身份证明就可以方便地挂失,也不必去为各种网站和软件设置密码,因为这些帐号已经通过密钥对被绑定到你的名下了,只要通过身份证明就可以随时找回这些帐号。

多么美好的未来。

为什么我总是在黑「黑客」

和一些人从「黑客技术」入门计算机不同,我似乎从一开始就对所谓黑客技术没有什么兴趣。一开始当我刚刚听说黑客这个词的时候,因为大多数人对黑客精神的崇拜,我也对黑客这个称呼心存敬畏,但当我掌握了更多的知识,接触了更多的人和事之后,越发觉得黑客技术并不高端,黑客也不值得敬畏。在最近两年,黑客被洗白成了「白帽子」,入侵被洗白成了「信息安全」,一开始我觉得这似乎还是个好现象,但后来我觉得这其实也不见得有多少正面意义。

无论在哪里,只要提到黑客这个词,总有一批人跳出来为黑客洗白,而且会把黑客洗成「黑帽子」,「白帽子」,「骇客」,「红客」或者其他各种颜色。我觉得这样挺无趣的,有太多的词已经不是它本来的含义了,而且黑客这个词很模糊,总是被用来制造神秘感。如果是为了显示自己的专业性,介绍自己的职业,不如换成交互设计,桌面编程,代码审计,数据库运维等更具体的词。

我总是在吐槽某某知名 Web 安全界人士的编程水平不过关,当然,他们也确实不过关。会写代码是最低的标准,代码应当首先是写给人看的,顺便能在机器上运行。无论多么短小的程序,都应当考虑可读性和可维护性,并应用各种用于避免错误的技巧。对于如何提高可读性,如何避免错误,不同的人可能会有不同的观点,但是作为代码的作者,在写代码的时候至少应当考虑过这些问题。我认为绝大部分信息安全相关的工作,都需要首先是一名程序员,有过构建真正应用的经验才行。

我有这样的观点是因为我在思考一个问题,「信息安全」的最终目的是什么呢?我认为目的是为了减少程序的漏洞,但是现在业界的普遍目标是「发现更多的漏洞」。的确,发现漏洞是减少漏洞的前提,但是现在业界对于「发现漏洞」的热情实在太高了,以至于忘记了真正的目的。

比如说前一阵的 Heartbleed 事件,首先发现这个漏洞的人值得喝彩。但是随后几天,就开始有很多人在乌云网上提交各种网站没有更新 OpenSSL 的问题。在这些人看来,发现漏洞就是自己的目标,但他们从未想过如何能够减少漏洞。

我认为减少漏洞的途径应当是培养更多具有安全意识,能够写出高质量代码的程序员,专职的信息安全专家当然也要有,但至少他们应当曾经是一个「具有安全意识的程序员」。以我自己举例,我算是一个不太主流的程序员,除了写代码之外,我还花了更多时间学习新的技术,和新的知识——虽然这些知识可能我永远也不会在工作中用到。我虽然从未专门学习过有关「信息安全」的技术,但是因为我一直在研究如何编写更安全的代码,所以我对「信息安全」也算是触类旁通,甚至发现漏洞的水平也在一些人(通常被经常给黑客洗白的人称为「脚本小子」)之上。

很多没有学习过编程,而是首先开始学习信息安全的初学者,思维都很僵化。举个简单的例子,他们很难认识到「XSS」和「SQL Injection」其实是同一类攻击手法——注入 HTML 和注入 SQL. 也很难区分加密(Encryption), 编码(Encode)和散列(Hash)——因为它们似乎都是在把一个可读的字符串「加密」成一个不可读的字符串。所谓 SQL 注入不过是 SQL 的一个特例而已,如果你没有用过 SQL, 而直接学习如何注入,那你恐怕得一直按照「大牛」们总结的注入方法来实施,很难自己发现新的攻击方式,这就是我所说的,编码是 Web 安全的基础。

比如现在有些 Web 安全方面的书,在繁复地罗列一些很相似的攻击手法,并未抽象出其中的联系和规律,使读者只能照着做,而很难有所启发。更不要说这些书将安全与编码完全割裂了开来,并传达「代码只是工具,会写就行了」的思想。这样的书却被一些人奉为神作,这又印证了我之前的观点:太多人在以发现漏洞为目标,而不是减少漏洞。

最后,我的观点就是认为,直到目前,至少国内的「信息安全」的行业还处于一个非常原始的状态。当然,没有事情是完美的,我也期待这个行业能够迅速地成长起来。

灰常冷门的攻击方式:跨端口窃取Cookie

大多数网站,在登陆后会通过Cookie来保存登陆状态如果你能够得到其他人的Cookie,你就可以以他的身份来访问网站.

如果你得到了管理员的Cookie,那么你就可以以管理员的身份来进入后台

访问一个网站时,当一条Cookie满足下面三个规则的时候,这个Cookie就会被发送:

  • 该网站的域名与Cookie要求的域名相同
  • 该网页的路径与Cookie要求的路径相同
  • 该网页的连接方式(HTTP/HTTPS)与Cookie的要求相同

注意!这其中没有与端口有关的要求!

也就是说,浏览器认为 http://xxoo.xo/http://xxoo.xo:1234/ 是同一个网站

http://xxoo.xo/ 设置的Cookie,在访问 http://xxoo.xo:1234/ 时也会被发送

这意味着,如果你能够在 xxoo.xo 对应的ip上的其他端口建立Web服务器,并欺骗 xxoo.xo 的管理员访问你的Web服务器,那么你就可以窃取到管理员的Cookie,进而以管理员的身份来访问网站,进入后台.

如果 xxoo.xo 被托管在一个公用的虚拟主机服务器上,这会非常简单,你可以在相同的服务器上购买一份虚拟主机,甚至试用。然后在其他端口建立一个Web服务器。当然,国内的大多低端主机商恐怕不会提供这个功能。

所以我要给我的神马终端(http://what.jybox.net)打个广告,这是一个权限非常灵活,而价格又非常低的虚拟主机.

很好,现在你在 xxoo.xo 所在的服务器上的 1234 端口建立了一个Web服务器,并写了一个记录Cookie的脚本

下面你只需要欺骗 xxoo.xo 的管理员访问 http://xxoo.xo:1234/ 即可

他会随便访问别人发来,而且看起来很奇怪的地址么?

其实你可以做得很隐蔽,你可以去他的网站,发表一个帖子(如果是论坛)或评论(如果是博客),发一个地址为 http://xxoo.xo:1234/xxoo.png 的图片,图片是会在网页打开的时候自动加载的,而 xxoo.png 是你写的记录Cookie的脚本.

如此一来,竟做得神不知鬼不觉,没几个人会检查网页上每个图片的地址的…


我想我有必要再给 xxoo.xo 的管理员一点忠告,想避免这种攻击也并不是很困难

方案1.不要和别人共用服务器,自己购买独立的服务器,独立的IP.

这一条是最简单的解决方案,只要你有钱

方案2. 整个网站都使用HTTPS协议,并设置Cookie仅通过HTTPS发送,不得不说,HTTPS是非常有效的,避免信息泄露的技术。不过SSL证书是非常贵的….

所以,我有必要在这里给JySSL(https://github.com/jybox/JySSL)打一个广告,这是我创立的,(目前)免费的SSL证书颁发机构

方案3. 使用CDN,CDN相当于一个代理,你需要将你的域名指向CDN,而CDN一般只开放80端口,其他端口的通讯都会被丢弃.

1

精子生于 1995.11.25, 21 岁,英文 ID jysperm.

订阅推送

通过邮件订阅精子的博客日志、产品和项目的最新动态,精子承诺每一封邮件都会认真撰写(历史邮件),有想和精子说的话也可以直接回复邮件。

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-SA 3.0  授权发布。最后生成于 2017-03-19.