匿名网民的安全指南(2)

作者:virushuo  来源:demo@virushuo

题外话:有人问我,这么极端的安全有用吗? 我的回答是:对某些人没用,对某些人有用,对另外一些人可以救命。

前文:匿名网民的安全指南(1),是关于计算机安全方面的内容

Version: 1.0b virushuo (twitter@virushuo) 20090727

注意:

1 这不是一份完整的安全手册,只是一些知识参考。但他能帮助你了解那些最重要的细节。如果有发现相关部分好的文档和教程,请提供给我,我连接上。
2 本文主要用于商业安全和个人隐私安全(包括你的私人照片,银行账号等的安全),本文不鼓励将这种技巧用于其他用途,使用在其他用途造成的损失和后果与本文无关,正如用菜刀杀人与磨刀的老大爷无关。
3 本人并非专业研究计算机和网络安全。只是觉得略有所知,所以分享一些常识。如有专业人士认为有错漏,请不吝赐教。virushuo( attt ) gmail.com
4 Geek的选择,geekcook.org
5 郭宝锋,你妈妈喊你回家吃饭#amoiist 恭喜你成为本年度收获明信片最多的人
6 本文会时常修补增加内容,要转载请务必注明出处和以上注意事项。


账号安全和如何选择安全的服务

使用互联网,就是在使用各种服务。对于大部分服务来说,账号是唯一用来识别你的方式。账号安全不仅关系到你的在线数据安全,还关系到你的身份。如果 对方盗用了你的账号,就很容易利用信任关系,从你的朋友手里盗走更多的东西,并且危害你朋友的安全。这不仅在计算机安全上成立,在现实中也比比皆是,比如 如果你的手机落到别人手中,对方也有可能利用你的手机给你家人打电话说你出了车祸,急需手术费用等方式骗钱。在互联网上,不加密的情况下,你并不能知道那 个熟悉的账号后面是你的朋友还是江洋大盗。所以,不仅为了你自己,为了你和朋友们的安全,请保护好你的账号。

安全的服务至少应该提供可选的https连接方式和一个足够复杂的验证码。来看看gmail和国内比较常用的新浪,163邮箱的对比吧。

1 复杂的验证码

一个足够安全的验证码至少要包含以下特征:


  • 要有横向和纵向的随机扭曲

  • 位置和大小要随机变化

  • 验证码长度要随机变化

  • 内容应该是字母的而不仅仅是数字

  • 字体要有随机的变化

  • 最好再有足够的干扰图案和条纹

目前看来,能符合以上大部分特征的服务,只有google,yahoo和msn这3家。这样的验证码在目前的情况下OCR出结果的成功率非常低,这 样对于防止暴力破解相当有效。换句话说,如果有人想猜测你的密码,如果想解开如此复杂的验证码,只让计算机替他一个个试验是不行的,必须还需要有个真正的 人来帮他做识别。这样就让破解的速度大大下降,成本大大上升,距离安全就更近了一步。

图0:看看google的验证码,其实有时候人来辨别也有一定困难。

国内常用的服务商中,sina和163的验证码也算安全,虽然距离gmail尚有较大距离。第二梯队的网站的验证码通常极不安全。

图1:163的中文验证码,其实也并不是很难处理。OCR(图像识别)软件要处理的情况通常比这个更复杂。

看看tom的,是不是觉得惨不忍睹?这种水平的验证码OCR的成功率轻松就可以达到100%,事实上和不存在是一样的。交警用来拍违章车牌的系统,要处理的情况都要比这个复杂吧?识别率不一样在98%以上?

图2:Tom的验证码,不堪一击

2 进行安全登录

常用google的同学会发现,当你登录google账号的时候,地址栏上的http会自动切换到https。也就是说,google是强制使用 https方式进行登录的。进行登录的时候,需要把用户输入的用户名和密码发送给服务器,验证用户身份。如果是普通的http方式,所有传输的数据都是明 文发送的,包括刚才输入的账号和密码,这种明文信息是非常容易被截获的,数据包所经过的任何一个节点都可以轻松获取,和你在同一个局域网的用户也有可能利 用arp欺骗等方式获得这些数据。想想看,你在路边急需上网,突然发现了一个可用的无线连接,是不是很高兴?这时候,如果通过http登录了邮箱,账号就 可能被泄露了。所以,强制使用https的方式进行登录,是非常必要的安全措施。google和yahoo都已经是这样的方式了。

同样看看163和sina吧。163是可选ssl的,默认是选中,勉强算合格。sina也可选ssl,但默认是不选中,高下立现。至于tom,似乎那个"增强安全性"被选中之后也不会通过https登录...

图3:sina免费邮箱,"增强安全性"默认是不选中的

3 日志功能

日志可以帮助你了解是否你的邮箱被入侵过。遗憾的是,目前应该只有gmail具有这个功能。把页面拖到gmail邮箱的最下面,可以看到 Last account activity: 1 minute ago at this IP 字样,这里给出了最后一次账号活动的时间和ip。

图4:gmail页面尾部有log功能

按一下Detail,信息更完整,最近的所有访问都有记录,包括IMAP方式,POP方式,WEB方式,一个也会少。有这个功能,可以很容易的知道 是否有别人使用过你的邮箱。有人入侵就会留下时间和IP。这些记录是不可被抹掉的,除非入侵google的服务器。这可不是件容易的事。

图5:gmail的活动报告

鉴于以上原因,我强烈建议使用gmail作为你的主要邮箱,这是目前互联网上能找到的安全性最高的服务了。甚至我认为一个有理智的入侵者不应该来打你gmail的主意,因为他们很难成功,即使成功也很难不留下痕迹。

经过以上分析可以发现,除了大的服务商,google/yahoo/msn,包括163/sina..,大部分网站是不提供https方式的登录的。所以,至少应该让你的账号分为2组,不要把普通论坛之类的账号和邮箱账号的用户名密码相同。

update:从留言等反馈中看来,很多朋友推荐QQMail,据说也符合以上特征,不过我没用过,也不好评价。在这些指标上可能没问题,不过根据 目前大量QQ群聊天纪录轻松被某些部门拿到手的情况看来,就算指标上没问题,实际应用效果恐怕也要打折扣。所以,还请结合用途,自行判断。

用证书来验证对方的身份

钓鱼攻击 ,通常是伪造一个网站,诱骗用户输入一些类似账号密码的信息。这就产生了如何验证网站身份的问题。我们如何知道打开的页面确实是google,而不是别有用心的一小撮人伪造的呢?

看页面样式?看网站地址?答案是都不可靠。网页样式很容易做到完全一样。地址则可以注册相近的,或欺骗性比较强的域名。比如,注册一个 sina-account-service.com 自称是sina账号服务中心之类。

最稳妥的确认对方身份的方式,是通过查看证书来确认。

大部分浏览器在访问https网站的时候都会在显眼的地方提供查看证书的功能。一般来说应该是一个锁头一样的图标。证书可以帮助你确认站点身份,这 样你就不会被钓鱼或DNS欺骗。这些具体的欺骗手法我以后还会说到。只要判断证书是否是由是可信任的机构颁发的,是否是这个网站的正确拥有者所有,就可以 知道你浏览器打开的这个网站是不是真身了。证书有问题,那么这个网站一定有问题,这时候就不要进行登录或是找回密码或是重设密码之类的操作了,无论页面上 写了什么,牢记这个原则,证书不符合,就是不可信任的。对于163,sina这种邮箱来说,只在登陆的时候提供了ssl加密,用户在输入密码之前甚至没有 机会察看一下证书,实在是令人遗憾的事。

图6:在safari中查看gmail的证书

图7:在firefox中查看gmail的证书

简单介绍一下钓鱼欺骗的办法吧。比如说,你收到一封邮件,来自sina-account-service@sina.com.cn,邮件告诉你,你 的sina邮箱账号被攻击,需要立刻修改密码。这时候应该怎么办?正确的方式应该是完全不理,因为任何一个邮箱服务商不会这样给你发信。

当然,很多人觉得还是要点去看看的。于是就点了邮件中的连接。看一看应该没什么损失嘛...是的...不过...

这时候有两种可能,一种可能是:你来到了一个叫做 sina-account-service.com 或是干脆叫china-sina-account-service.com 的网站,页面内容和平时你使用sina邮箱的密码修改页面是一样的。这时候你会不会有可能在里面输入了密码?

有人会说了:"光页面像是不行的,域名不对嘛。" 没错,攻击者注册了sina-account-service.com 这样的域名,虽然看起来像那么回事,但是并不能骗住所有人。那么,另外一种情况:你看到的地址真的是 http://login.sina.com.cn/xxxx 这次相信了吗?这时候仍然不相信的人就不多了。

其实域名一样是可以仿造的。最简单的方法,如果对方修改你的hosts文件,把login.sina.com.cn指向了他控制的一台服务器,那么 刚才的情景就很容易发生了吧?除了改hosts这种低级手段,还有很多其他的"高级"一点的方法,比如DNS欺骗...总之,这是完全可以实现的欺骗方 法,事实也证明是带来损失最大的。

现在我们知道了,通过看域名来验证网站是否为真的办法是不可靠的。最可靠的办法是查看证书。大多数浏览器默认的128位的证书已经非常难伪造了。 256位的证书被伪造就更困难了。当然,这里说的"困难"是伪造出一个真正的,完全一样的证书。如果只是要骗过浏览器,还有一些其他办法,特别是IE6, 竟然还曾经出现过可以被伪造证书的bug。

总结一下就是:没有证书的网站很可能是假的。错误的证书一定是假的。看起来正确的证书也存在一定可能是假的。

对证书和https方面知识有兴趣的同学,可以去看wiki百科 SSLPKI


保护你的重要账号守则


1 选用安全级别高的服务。邮箱可以推荐gmail,yahoo mail。yahoo mail有出卖用户的恶劣记录,但仅讨论产品,仍然是最安全的邮箱产品之一。

2 如前文所述,保护好你的计算机安全,打开防火墙,注意检测木马。

3 不要在不安全的地方使用你的重要账号。

4 选择一个足够复杂的密码,并根据重要程度增加复杂性,对于最重要的服务,不要和其他服务公用同一套账号密码。如果不能做到所有服务的密码各不相同,至少也 应该分成几个级别,对最重要的服务使用最复杂的密码,不要和其他服务使用相同的密码。随手注册的论坛之类可以使用简单密码。

5 时常检查邮箱是否有入侵迹象。

6 不信谣不传谣,什么"中奖了","好友请你输入账号","你的账号被盗用,请在此修改密码"之类的东西统统不要相信,牢牢记住,你唯一可以输入密码的情况是:一台安全的计算机,输入密码的页面证书正确,使用https。除此之外,在任何情况下都不要输入你的账号密码。

7 应该理解,不通过https加密的登录是极不安全的。存在极大的泄露可能。注意检查证书。熟悉你使用的产品的安全特性。

8 多注册几个马甲,分为不同的安全级别,用在不同的地方,这样在最糟糕的情况下,损失也可以小一些。

如何选择密码和密码提示问题

如果你选了一个123456作为密码,恭喜,这是最常被用到的密码之一。如果你用了qwerty,恭喜,这也是最常用到的密码之一。至于用户名和密码一样的家伙们,你确定你真是有隐私而不是暴露狂吗?

好吧,你选了一个6位数字密码。如果你幸运的没有选择你自己的生日,没有选择你的手机尾号,那么运气最糟糕的破解者大概要尝试10的6次方次。仅仅 100万次,在这个时代,如果你的服务商没有可靠的验证码,没有限制一天尝试密码的次数,那么这个运气最糟糕的家伙试完全部的100万次排列组合也不太可 能超过24小时。这个运算能力空前强大的年代,用反复尝试的办法来破解密码已经越来越容易了。所以必须要让密码变的更复杂。

密码提示问题是容易被忽略的地方。很多人设置一个复杂的密码,却往往设置一个简单的密码提示问题。这就好比你家装了一把防盗性能很好的锁,但是却在门口的地毯下面藏了一把钥匙一样危险。

密码提示问题和密码应该是同等重要的,而不是注册的时候演示的那种"你的爸爸叫什么名字"之类的愚蠢问题。

正确的密码和密码提示问题选择守则

1 够复杂

所谓够复杂,意思是:超过8位,包含字母,数字,不同的大小写和至少一种符号。这样的组合会让暴力破解者累死。如果你跟我一样喜欢用13位以上的长 密码,那么试图暴力破解的人可能会等到他老的敲不动键盘也拿不到你的密码。如果不是网站的服务,而是rar压缩包之类的文件密码,就更要遵守这个原则,文 件打开的时候可不会问你验证码。

2 不要和你的公开信息有关

如果你遵守了1,那么也就没有这条的问题了。一个那么复杂的密码不太可能包含直接的个人信息。如果你实在不愿意遵守1,那么,至少不要用你的生日,电话号码,门牌号这种非常容易得到的个人信息。

对了,也不要把这些东西作为问题放到你的密码提示问题中。竟然有服务商会把默认的密码提示问题写做"我爸爸的生日",用户也老实的跟着回答了。要知道有种东西叫做户籍系统,你以为真的没人能知道你爸爸的生日?

3 使用不同的密码

不要给不同的服务使用相同的密码。这世界奇怪的事情太多。你很难知道对方是否把你的密码md5之后保存了,也很难保证各服务的安全性能一样好。如果你使用了一样的密码,那么泄露一次,全盘皆输。

如果实在不想记那么多密码,那么选出来最重要的几个,用最复杂的密码。其他的可以简单一些。其实,实在忘记,可以通过邮件来找回密码,这样邮箱安全就更重要了。
按照我的建议,你应该去注册一个gmail邮箱,然后按照原则1来设置一个13位以上的密码,然后再也不要再其他任何地方使用这个密码。

4 别把你的密码记在本子上

我常常看到,有些人使用非常复杂的密码,密码的强度是合格的。但是他们自己也记不住。于是就写在一个小本子上,或者干脆记在一个文本文件里。这是非常危险的习惯。一旦丢失,所有的密码都丢了,而且因为他自己并不能记住密码,小本子一旦丢掉,连去修改密码都做不到了。

最重要的几个密码一定要用脑子记住。其他的密码可以记录下来,但是要选择一个适当的密码管理工具。如果你使用mac,那么就是Keychain Access。这是一个非常安全的工具。如果操作系统本身不带有密码管理功能,还有一些软件可以完成这个工作。但是要注意软件来源安全(以前也讲过这个问题),也要考虑软件本身的可靠性。

下一部分我们来探讨网络传输过程的安全,以及如何做到真正的匿名。


没有评论: