前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么你要懂点信息安全(续一)

为什么你要懂点信息安全(续一)

作者头像
tyrchen
发布2018-03-28 14:11:38
7690
发布2018-03-28 14:11:38
举报
文章被收录于专栏:程序人生程序人生

昨天的文章可能让很多新读者读得莫名其妙,程序君在此抱歉。我应该使用这样的标题:『[连载] 途客们的旅行梦 - 创新工场初印象』,就不会让你看得摸不着头脑了,下次程序君会注意滴。^_^

前天的文章主要讲了信息安全中人的因素,以及围绕人建立起来的「物理安全」,「操作安全」和「社会工程学安全」,最后顺带讲了「网络安全」和「应用安全」。对于最后的关于邮件安全的讨论,这里举个例子:

这是一个经过PGP加密的邮件,以S/MIME(如果不知道请google,很难一句话解释)的方式嵌入到一个正常的邮件中。它用接收者的公钥加密,只有接收者才能使用自己的私钥解密(一旦发出去之后,理论上连发送者都看不到里面的内容)。这样即使NSA攻陷了gmail,偷窥你的邮件,它也只能看到上面的密文,而无法得出下面明文中我的身份证号。

PGP和S/MIME在邮件上的应用早(大概十多年前)就有RFC定义,但一直无法推广开,几个原因:

(1) 应用了端对端的加密,那webmail就无法使用了(你无法通过mail.163.com/gmail.com等访问你的邮件了),很不方便。如果真要用,需要用户将其私钥上传给邮件提供商,这样就导致一种悖论。

(2) 即使你不用webmail,使用邮件客户端,你也不一定能用。首先你和你的小伙伴需要有各自的公钥私钥,其次你们需要知道各自的公钥,再次你们需要确认各自的公钥是各自的公钥。

(3) 即使满足了(2),如果你换台电脑,如果该电脑里没有你之前的私钥,那也看不了别人发过来的邮件。

很麻烦吧?安全的漏洞就产生在各种麻烦中,比如说「操作安全」。

任何软件都有漏洞。如果一家公司号称自己的系统在发布时zero bug,那是自欺欺人。软件工程的常态是 "ship with bugs, as long as they are not easily exploitable"。发布时带的bug是漏洞(vulnerability),如果不被利用(exploit),就不存在实际的风险。就像windows里臭名昭著的WinNuke攻击,利用的就是windows里的一个存在了很久的漏洞 —— 但之前好多年,好多个版本的windows一样活得好好的。

风险管理的要点是:我们无法弥补所有的漏洞,但我们可以让漏洞无法被利用。所以有漏洞不怕,怕的是漏洞被人发现之后不去弥补。在有漏洞的系统前放台防火墙是一种让漏洞无法被利用的方法,「操作安全」中的打补丁,是另一种方式。你以为操作系统,各种系统软件,甚至你开发软件使用的框架,如django定期发布security patch是逗你玩的么?它们都是被暴露出来的漏洞的应对之策,有些真正解决了漏洞本身,有些只是让对应的攻击不奏效(漏洞无法被利用)。如果你的系统没有对应打补丁,那么,黑客只要能嗅探出你使用的软件版本,就能找到对应的方式来玩你。

当然,所谓「匹夫无罪,怀璧其罪」,你如果没有让别人觉得有攻击的价值,那么你很可能也不会受到攻击。

对于「社会工程学安全」,很多人不以为然,尤其是我们这群自视甚高的程序员,在知乎里或者微信里喷了我一脸吐沫。你如果真生活在「技术就是一切」的梦想里我也无法阻止,我只是说给愿意听的人。

「物必先腐也,而后虫生之」,堡垒都是从内部攻破的。社会工程学瞄准的就是这点。为了证明社会工程学离你有多近,程序君写了个脚本针对程序员做最基本的社会工程学嗅探(没用之前文章里讲得那些常用手段,因为对我而言可操作性差了点)。

我们知道程序员会使用github,很多人会把自己的pet project放在上面。对于web application,基本上都会连接数据库。所以,如果你用了这些框架:如django,rails,expressjs里面都会存用户名,数据库密码。理论上作者应该把这些敏感信息屏蔽,但实际呢?我们能否通过代码找到某个人常用的用户名和密码呢?

上图是我的脚本输出的信息。本来展示的信息要比图中的多得多,我可以直接打开有泄漏嫌疑的代码去进一步嗅探,但内容太多不好一一屏蔽,用gimp(有没有更好的mac下的免费p图工具?)改图太费劲,所以我把很多输出注释掉了。

黑色的被我涂掉的内容是作者的密码,红色的是我不想让你看到的可能暴露作者身份的信息。红色划线的文字是我可以进一步嗅探这个repo中包含密码的其它文件。

这个嗅探是针对我的一个朋友。

我还嗅探了一些不认识的人,发现github简直是找寻一个用户惯用用户名和密码的宝库。有个哥们的好几个密码都是简单得以某字母开头,加八位生日,然后有一个数据库的root的密码是他的长长的英文名全写(包括姓)+生日(总共十八位之长),我也有理由相信这样的密码他会用在一些比较重要的场合,比如说邮箱密码 —— 我甚至抑制不住去猜他的gmail,来尝试这个密码是否他gmail的密码(当然我没功夫试啦)。

整个过程中我没有用任何高深的黑客知识(在此方向我基本是个小白),但通过探寻人性的弱点,和一点点脚本能力(几十行代码而已),我就可以获取到一些关键信息。

如果说看了『为什么你要懂点信息安全』及本文,你还满头雾水不知道该采取什么样的安全措施,那么,程序君总结一下:

(1) 不要使用和自己身份相关的信息作为密码(设置密码的一个好方法是记下一个英文常句,然后将其首字母连起来,再用一个固定的规律加盐,比如说,第三个字母大写,第七个字母后加一个数字等等。

(2) 如果有敏感信息在网络中传输,请确保对方网址的正确性,以及全程是否使用了https。

(3) 对于网银,能用优盾就用优盾,文件证书在windows下不安全(windows下没有节操的软件太多了)

(4) 学些心理学 —— 知道人家怎样对你施加影响,以及怎么破

(5) 脑袋里装上十万个为什么,多质疑查证

今天先写这么多,下次再讲访问控制,加密,灾备等等

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档