Table of Contents:

一.避免使用高权限用户

这是个非常普遍、且远远没有得到重视的问题。根据俺的经验,如果你能够养成好习惯,不使用高权限用户(尤其是管理员)进行日常操作,就可以大大降低被黑的概率。

危害性

如果你平时总是用管理员权限登录到系统并进行日常工作,那就意味着你所运行的每一个程序,同时也具有了管理员权限。要知道,管理员权限的权力是很大的,几乎可以干任何事情。
假设你有上述习惯。某天,你从网上下载了一个软件,且软件已经感染了病毒。那么,当你运行这个软件时,这个病毒就会被激活。要命的是,它也同样具有管理员权限。这时,病毒就获得了和杀毒软件平起平坐的地位。假如这个病毒的作者水平再高一些,甚至可以骗过杀毒软件或者直接把杀毒软件干掉。
除了病毒,木马也是一样。假设你上网的时候,一不留神访问了某个挂马的网站。一旦木马被激活,也同样是以管理员的权限运行,危害同样也巨大。

为了让用户省事儿,Windows 系统内置了若干用户组(比如:Users、Power Users、Guests、等)。这些内置的用户组,事先已经预定义好若干用户权限。
另外,顺便消除一个误解。很多菜鸟以为:Windows 系统中,只有用户名为“Administrator”的用户才具有管理员权限。其实捏,任何一个用户,即使用户名不叫“Administrator”,只要是属于“Administrators 组”,也同样具有管理员权限。

你该如何做?

拿 Windows 系统来说,为了尽量少用高权限用户。你最好刚装好系统之后,单独创建一个非管理员用户。
* “Power Users组”与“Administrators 组”的差别
相对于 Administrators 组,Power Users 组缺少了如下几项权限(俺只列主要的):
1. 不能添加、删除、禁用系统中的其它用户。
2. 不能修改其它用户的属性(包括口令、所属的用户组、等)
3. 不能安装/卸载硬件驱动程序。
4. 不能安装/卸载某些应用软件。
5. 不能查看系统的安全日志。

  1. 不能修改系统时间。
  2. 不能修改某些系统目录(包括:系统盘的 \WINDOWS 目录、系统盘的 \WINDOWS\SYSTEM32 目录、系统盘的 \Program Files 目录)。
  3. 不能启动/停止某些系统服务。
  4. 不能修改注册表“HKEY_LOCAL_MECHINE”下的所有键值。
    从上述对照,明显可知,Users 组的权限更小,使用起来更安全。比如说,即使你运行了一个带毒的程序,由于病毒和你一样,也仅有 Users 组的权限。所以病毒也就无法修改/破坏重要的系统目录,掀不起太大风浪。

可能的麻烦

通常来说,越安全的措施,往往也意味着越麻烦。但是这些麻烦,都有相应的解决之道。
* 切换用户的麻烦
假设俺当前处于一个普通用户的环境,但是想另外启动一个具有管理员权限的程序,比如说命令行程序(cmd.exe)。
1. 首先,俺先创建一个指向 cmd.exe 的快捷方式。
2. 用鼠标选中该快捷方式,在快捷菜单(右键菜单)中,选择属性-->高级-->以其他用户身份运行-->然后在该对话框中输入管理员的用户名和口令,就能以管理员的身份,把该命令行启动起来

二.攻击者如何搞定你的口令/密码?

攻击者如何通过技术手段搞定的你的密码?

弱密码猜解

所谓的“弱密码猜解”,就是说:如果你的密码比较弱,攻击者可以猜出来。这种攻击手法,对于操作系统用户口令、网络应用口令、本地应用口令,都适用。而且攻击者在盗取口令的时候,通常会先尝试进行弱口令猜测。为啥捏?
因为大部分用户都不太具有安全意识,口令都会比较简单(比较弱)。并且,根据二八原理,绝大多数的傻瓜用户会使用极少数的弱口令。所以,攻击者先把最流行的那些个弱口令挨个试验一遍,没准就已经成功了。
比如:123456 asdf123 qwer123

暴力破解

除了对弱密码进行猜解,攻击者还可以通过穷举的的方式,破解中等强度的密码。所谓的穷举法,就是把所有可能的字母/数字的组合都试验一遍,直到找到正确的密码。
现在 CPU 的计算能力日新月异,尤其是多核 CPU 普及之后,暴力破解的效果会越来越好。除非你的密码很强,才能彻底消除暴力的风险。
由于这种攻击手法,需要进行成千上万次的试错,所以比较适合针对本地应用的口令(比如破解加密的压缩文件),而不太适合对网络应用进行在线口令破解。

网络传输截获(嗅探)

在这种方式下,攻击者会通过【嗅探】的方式,分析你的上网数据。如果你在上网过程中,存在明文传输的口令,就会被截获。
这几年,随着现在无线网络(WiFi)的普及,网络嗅探的风险大大增加,列位看官切不可掉以轻心哦。

客户端截获

所谓“客户端截获”,通常是针对网络应用的口令而言。举几个例子。
例1:
很多网友上网时,为了免去输入口令的麻烦,会让浏览器帮忙记住口令。通常浏览器会把这些口令保存在某个文件中(可能以明文方式,也可能以密文方式)。如果某天你的电脑中了木马,那么木马程序有可能会盗走这个保存口令的文件。然后攻击者就可以通过分析该文件,破解出你保存过的所有网络应用的口令。
例2:
如果你是软件公司的开发人员,多半你会使用某种源代码版本管理工具(比如 SVN、CVS、等)。为了免去每次操作时输入口令的麻烦。通常开发人员会让这些客户端软件记住用户名和口令。如果哪天你中了木马或者电脑被盗,那么攻击者同样可以破解你保存下来的口令,进而用你的身份盗取源代码。

服务端截获

凡是利用口令进行验证的软件系统,都需要存储和口令相关的信息。否则的话,软件系统就无法验证用户输入的口令,到底是不是正确的。如果攻击者能够拿到这些口令的关联信息,那他/她就有可能分析出口令是啥。
通常用三种方式来存储口令的关联信息:1、存储口令的明文;2、存储口令经过加密后的密文;3、存储口令的散列值。
第一种方式是最土鳖的,稍微先进一些的系统,都不会用了。后面两种方式,虽然看不到明文,但是攻击者还是有可能通过某种技术手段,反推出口令的明文。具体细节,本文就不再多说了。
那攻击者如何获得存储在软件系统的口令关联信息捏?比如黑客把这个网站入侵了,获得了数据库的所有数据。
比如:某个 Linux/Unix 服务器存在安全漏洞,攻击者利用此漏洞搞到了“/etc/shadow”文件。那么攻击者就可以采用上述提到的暴力破解的招数,攻破该服务器上所有强度较弱的口令。

攻击者如何通过“非技术”手段搞定的你的密码?

说完了技术手段,自然就得再说说【非】技术手段。所谓的非技术手法,也就是社会工程学手法。用于盗取密码的社会工程学手法,大概有如下几种。
* 偷窥
偷窥是最简单的一种社会工程学攻击手法。虽然简单,但是有效。比如很多盗取银行卡的家伙,就是偷窥的手法,得到被害人的银行卡密码。
* 钓鱼
另外一个骗取口令的方式,就是通过网络钓鱼。比如某些攻击者,会伪造一个银行的网站。其界面和真实的网站一模一样。然后通过某种方式(比如:虚假链接、欺诈邮件、DNS 欺骗 ...),引诱你到这个网站上。由于假网站和真网站的界面很像,你可能信以为真,然后在假网站中输入你的用户名和密码。
有些高明的钓鱼网站,会采用类似Web代理的技巧:把你的所有输入操作,转而提交给真网站;然后把真网站输出的界面,再转回给受害者看。这样的话,受害者就跟在真实网站进行插作,没啥区别,不易看出破绽。
* 分析
如果攻击者对你比较了解,那么他有可能通过深入的分析,攻破你的口令防护。是不是觉得很神奇?很匪夷所思?其实这种招数很常见,且不算太难。俺来举个例子。
相信很多网友都用过电子邮箱的找回口令功能。当你口令遗忘之后,可以通过回答事先预设的问题,来找回口令。很多不太专业的用户,预设的问题都很简单(比如:你的手机号是多少?比如:你的生日是哪天?)。对于这类过于简单的问题,攻击者可以很容易地找到答案,从而窃取到你的邮箱口令。
* 欺骗
最近几年,通过电话诈骗,骗取银行卡密码的案例越来越多。这种作案手法,就属于社会工程学中,“欺骗”的范畴。其实在IT领域,某些黑客也会利用这种手法来获取口令。

三.如何构造安全的口令/密码

不要共用口令/密码

俺发现有相当多的同学喜欢靠一个口令包打天下。这是相当相当危险的事情。同一个口令,用的场合越多,则泄密的危险越大。而一旦泄露,你的安全防线就会全面崩溃。
所以,今天要讲的头一个要点,就是绝对不要在所有(大多数)场合,使用同一个口令。

密码的分级机制

由于共用口令存在很大的风险,比较稳妥的办法就是——每一个场合仅使用一个密码。但是很多人会抱怨说:这样会很繁琐,增加了很多的麻烦。那如何才能做到既安全,又不太麻烦捏?这就要引入密码的分级机制。
根据安全圈内一个人所共知的常识:越安全的措施,通常也就越麻烦,成本也高;反之亦然。另外,根据二八原理,非常重要口令毕竟只占少数。所以,就像电影要有分级机制一样,你的密码/口令也要引入分级的概念。通过分级机制,对大多数不太重要的口令,可以采取简化的安全措施;而对少数重要的口令,采取高度安全的措施。
下面,就来介绍一下,如何对不同的口令,进行分类。

第1级:不重要的口令

所谓不重要的口令,就是说万一被盗了或者忘记了,对你没啥损失。
比如,俺经常碰到一些土鳖的论坛,只允许注册会员从上面下载附件。因此俺就经常临时注册一个账号,然后登录上去下载东西。这类账号,基本上都属于一次性的(用完即扔),所以重要程度很低。
对于那些不重要的口令,基本上不用考虑太多安全性的因素。随便设置一个即可。

第2级:重要但少用的口令

对于重要的口令,还要根据其使用的频繁程度,再区别对待。有些口令虽然重要,但是使用的频度很低。由于这类口令很少使用,所以设置得麻烦一些,问题也不大。
比如俺管理的一些研发的服务器(比如源代码服务器),其重要程度非常高,但是平常基本无需登录。

第3级:重要且频繁使用的口令

最后这类口令,既重要,又经常用。所以,设置这类口令就比较讲究。要同时兼顾安全性和易用性。

一些反面教材——脆弱的密码举例

  1. 123456
  2. 12345
  3. 123456789
  4. password
  5. iloveyou
  6. princess
  7. rockyou
  8. 1234567
  9. 12345678
  10. abc123
    从这个 TOP 10 可以看出,有一半是采用连续数字。所以,用连续的数字串(包括顺序和逆序)作密码,也是很愚昧滴。

如何构造复杂的密码?

前面已经说了:口令太简单,容易被破解。但是太复杂的话,万一自己也忘了,那可就完蛋了。所以,很多网友都纠结于口令到底该复杂到什么程度。俺的经验是:口令要做到对自己简单,对别人复杂
总原则:密度长度越高字符类型越多越随机密码强度越高

用多个单词构成词组

前面提到,如果用【单个】英文单词作密码,容易遭受字典攻击。为了避免字典攻击,可以考虑由2-5个英文单词构成密码。如果你英语不灵光或你比较习惯中文,也可以考虑用2-5个汉字的拼音来构成密码。
* 优点
由于能显著增加密码长度,可以抗击暴力破解。
* 缺点
有可能需要改变你记忆密码的习惯。
口令中仅包含字母,复杂度不够高。

插入特殊字符

刚才提到了用多个单词或汉字拼音构造密码。为了让密码的强度再好一些,还可以在单词或汉字拼音之间,插入一些特殊字符。
最常见的是插入空格。当然,你也可以考虑插入其它字符(比如:下划线、减号、斜杠、井号、星号、等)。
通常进行暴力破解时,为了加快破解进度,都只针对字母和数字进行暴力破解。如果你的口令中含有特殊字符,会大大提高攻击者的难度。

字符变换

所谓的字符变换,就是用形状类似的字母和数字进行相互替换,通过这种变换,可以规避前面提到的基于口令字典的攻击。
  常见的变换有如下几种:
字母o 和 数字0
字母l 和 数字1
字母z 和 数字2
字母s 和 符号$
字母g 和 数字9
字母q 和 数字9
字母a 和 符号@
字母b 和 数字6
字母x 和 符号*

假设俺想用单词 program 作为口令,那么经过上述的变换之后,就成为 pr09r@m 很明显,变换之后的口令同时具有字母、数字、符号。强度相当好 :)
如果你有兴趣,还可以对俺给出的这几个变换,进行扩展,以满足自己的习惯和喜好。

藏头诗

在某些古代小说的情节中,经常可以看见藏头诗的桥段。藏头诗的点子,也可以借用来构造安全口令。
为了用此招数,你先要想好一句令你印象深刻的话。这话可以是中文,也可以是英文、法文、火星文......反正只要是你熟悉的语言既可。最好这句话的字数(单词数)在6-20之间。然后你把这句话每一个单词的头一个字母取出来,组合成一个口令。如果是中文的话,就把每一个字的拼音的声母取出,组合成口令。
假设俺想好的话是:“只有偏执狂才能生存”。那么用拼音的声母表示就成为:zypzkcnsc

巧用SHIFT键

在构造口令的时候,适当地组合一下 SHIFT 键,有时也可以达到不错的效果。假如你的口令中,有部分字符是数字,那当你输入口令时,按住SHIFT键会让这些数字字符变为特殊符号。

 优点
不用改变你原先的记忆习惯。
由于口令包含较多特殊符号,复杂度大大提高。
缺点
万一你原先的口令仅有字母,没有数字,则密码的强度会稍微打折扣。
由于要依赖于SHIFT键进行切换,会影响你输入密码的击键速度。这会给偷窥者留下可乘之机。

四.安全漏洞的基本防范

安全漏洞的分类

  1. 未公开的漏洞
    有些黑客发现某个漏洞后,没有在圈内公开,也没有告知对应的软件厂商。那么这种漏洞就变成“未公开的漏洞”。因为没有公开,软件厂商不知情,自然也就没有发布补丁。
    这种漏洞最危险,有可能长期被攻击者用来入侵。据俺所知,有些高危漏洞已经在黑客圈内流传多年,而相应的软件厂商依然不知情。
  2. 零日漏洞
    如今互联网很发达,某些资深且勤奋的攻击者可以对漏洞的发布作出快速反应。一旦某个漏洞的细节被公开,他们可以在24小时之内制作出相应的攻击代码。而这个时候,软件厂商多半还没来得及发布补丁。那么这些攻击者就可以利用这个时间差,进行入侵活动。所以,安全圈内也把这种漏洞称为“零日漏洞”(洋文叫:Zero-Day 或 0-Day)。相对于“未公开漏洞”,“零日漏洞”可利用的时间段会短一些。比较负责任的软件厂商通常会在一周或一月之内发布补丁。不过捏,也有些不靠谱的公司(包括大公司),要拖上好几个月才发布漏洞补丁(比如 Oracle)。

漏洞的防范措施

五.Web相关的防范 (上)

Web 相关的攻击手法

  1. 首先挑选一张图片(为了吸引人,通常会选一张美女图之类的照片),然后精心地嵌入一段攻击代码在图片内部。
  2. 把这张图片放到网上(比如张贴到某个大型论坛,再配上一个吸引人的标题)。
  3. 过不了多久,就会吸引到很多网友来围观。如果围观的网友用的浏览器不是 IE,那么他仅仅是看到一张美女图而已,不会有啥异样。如果围观的网友用的正好是有漏洞的 IE 版本,当 IE 打开那张图片的瞬间,攻击代码就会被激活(被运行)。然后,攻击代码会悄悄地在这台电脑中安装一个木马(行话叫"植入木马")。之后,这台电脑就成为攻击者的肉鸡了(攻击者可以远程控制肉鸡,为所欲为)。
  4. 攻击者控制了肉鸡之后,既可以拿去卖钱(有专门的地下肉鸡交易市场),也可以偷窥机主的隐私(看看有没有网银、裸照、QQ靓号)。如果控制的肉鸡数量巨大,还可以搞 DDOS 攻击......

如何选择浏览器的插件和扩展

由于插件比较底层,一旦出现高危漏洞(比如能够执行本地代码的漏洞),攻击者就可以在操作系统中植入木马。可以这么说,插件出现漏洞,其危险性类似于浏览器出现漏洞。
相对而言,扩展出现漏洞,其危险性往往不如插件严重,通常也不会导致攻击者植入木马。

六.Web相关的防范 (中)

七.Web相关的防范 (下)

"虚拟机"的方案

什么是"多虚拟机"的方案?
所谓"多虚拟机"的方案,就是在你的电脑上创建多个虚拟机,分别用来实现不同安全级别的上网行为。
举个例子:
你可以创建虚拟机A,只用来访问网银(不访问其它网站);然后创建虚拟机B,用来进行其它上网行为。那么,即使你在虚拟机B受到攻击,对虚拟机A也完全没有影响。这样一来,就可以彻底保证网银的安全。

八.物理隔离的几种玩法

预备知识:关于“隔离性”和“攻击面”

几种不同的隔离级别

“隔离”的好处在于:一旦某个环境被入侵,(只要你的隔离屏障没有被穿透)别的环境不会受影响。说到“隔离屏障被穿透”,自然就引出“隔离性的好坏”这个话题。
不同的“隔离措施”,其“隔离性”是不同的。“隔离性”越好,攻击者就越难穿透。
【常见的】隔离措施(从低到高)有如下几种。俺结合浏览器来加以说明
1. 进程级
(以浏览器为例)搞多个“浏览器实例”。不同的实例肯定是不同进程,但都在同一个用户下。
2. 用户级
(以浏览器为例)在不同的【普通】用户下分别运行浏览器。但都在同一个操作系统下。
3. 虚拟系统级
(以浏览器为例)创建多个虚拟系统(Guest OS),在不同的虚拟系统中分别运行浏览器。虽然处于不同的 Guest OS,但还是在同一个 Host OS 下。
4. 物理系统级
(以浏览器为例)在不同的物理系统中运行浏览器。

“物理隔离”的3种子类型

“物理隔离”还可以继续细分为3种子类型(这三种级别也是从低到高):
物理隔离1型
多个物理系统之间【存在】网络连接。
物理隔离2型
多个物理系统之间【没有】网络连接,但【存在】存储介质的交换(比如:通过“U盘”交换数据)。
物理隔离3型
多个物理系统之间既【没有】网络连接,也【没有】存储介质的交换。

攻击面

关于这个概念,洋文称之为“attack surface”,相关的英文维基百科页面在“这里”。考虑到很多同学不喜欢看洋文,下面俺通俗地扫盲一下。
为了描述这个概念,暂且借用一下军事术语。在军事领域中,如果其它因素都一样,则防线越长就越容易被突破。
在信息安全领域,道理也类似。军事领域的“防线”就类似于本文所说的“攻击面”。
* 时间维度
有两台软硬件配置一模一样电脑(A 和 B)。A 是一年到头365天都挂在网上,而 B 在一年里面只联网1分钟。很显然,A 被入侵的概率要大大高于 B。

招数1:把不同的上网帐号放到不同的物理系统

招数2:在【专用的】物理系统中操作“重置密码的邮箱”

招数3:在【专用的】物理系统中运行密码生成器

招数4:对重要帐号划分“操作机”和“登录机”

招数5:“物理隔离”搭配“多重代理”