自去年CSDN网站、天涯、开心网、人人网等网站被曝大量用户的密码被泄漏以来,密码的安全问题已引起用户和业界的极大关注和重视。你的密码安全吗?上互联网站还会不会泄漏密码?......这些问题都引起了广大用户的恐慌。站在一个信息安全工作者的角度来讲,这个问题虽然严重,但还没有到草木皆兵的地步。因此,本文将客观地分析密码安全问题的原因,提供给用户安全设定密码的基本原则,并介绍如何使用密码分析工具来验证密码安全性的方法,以帮助用户安全设定自己的密码。

一、密码安全问题的原因分析

       从密码泄露或者被窃取的原因来分析,主要有如下几方面的原因:
l        密码明文存储:在2000年左右,随着互联网的飞速发展,互联网站也在如雨后春笋般地涌现出来,当时网站对安全问题没有重视,因此出现了部分网站对用户的注册信息(其中也包括密码)均采用明文存储的方式。在这样的前提下,一旦网站的数据库被******,或者是内部人员的数据库拷贝,都会造成大量用户信息的泄露;
l        弱密码设定:用户的弱密码设定应该是当前密码泄露或者被窃取的主要原因。很多用户都采用非常简单的,与自己身份或者生日等强相关的信息来设定非常简单的密码(如仅用数字、字母或者数字等),这就给不法用户或者***留下了可趁之机。更为重要的是,即算现在网站都采用密文加密并存储的方式来保证用户密码安全,一旦数据库被******,***仍然可以基于若密码,采用“彩虹表”来对用户密码进行猜测,而且这样成功地几率非常高;
并且,从当前的情况来看,弱密码设定在密码出现安全问题的情况下所占的比重超过80%,因此,互联网用户尤其需要重视该问题。那么,该如何来避免使用弱密码呢?下面给出一些基本原则。

二、密码安全设定的基本原则

目前密码破解程序大多采用字典***以及暴力***手段,而其中用户密码设定不当,则极易受到字典***的威胁。很多用户喜欢用自己的英文名、生日或者账户等信息来设定密码,这样,***可能通过字典***或者是社会工程的手段来破解密码。所以建议用户在设定密码的过程中,应尽量使用非字典中出现的组合字符,并且采用数字与字符相结合、大小写相结合的密码设置方式,增加密码被***破解的难度。而且,也可以使用定期修改密码、使密码定期作废的方式,来保护自己的登录密码。
具体列出几条设定安全密码的参考原则如下(5个需要遵循):
1)      口令长度至少为八个字符:口令越长越好。若使用MD5口令,它应该至少有15个字符。若使用DES口令,使用最长长度(8个字符)。
2)      混和大小写字母:混和大小写会增加口令的强健程度。
3)      混和字母和数字:在口令中添加数字,特别是在中间添加(不只在开头和结尾处)能够加强口令的强健性。
4)      包括字母和数字以外的字符:&$、和 > 之类的特殊字符可以极大地增强口令的强健性(若使用 DES 口令则不能使用此类字符)。
5)      挑选一个自己可以记住的口令:如果自己记不住自己的口令,那么它再好也没有用;使用简写或其它记忆方法来帮助自己记忆口令。
 
另外,还有一些原则需要牢记(8个需要避免):
1)      不要只使用单词或数字,决不要在口令中只使用单词或数字。
2)      不要使用现成词汇:像名称、词典中的词汇、甚至电视剧或小说中的用语,即使在两端使用数字,都应该避免使用。
3)      不要使用外语中的词汇:口令破译程序经常使用多种语言的词典来检查其词汇列表。依赖外语来达到保护口令的目的通常不起作用。
4)      不要使用***术语。
5)      不要使用个人信息:千万不要使用个人信息。如果***者知道自己的身份,推导出自己所用口令的任务就会变得非常容易。以下是自己在创建口令时应该避免使用的信息类型。
6)      不要倒转现存词汇:优秀的口令破译者总是倒转常用词汇,因此倒转薄弱口令并不会使它更安全。
7)      不要笔录自己的口令:决不要把口令写在纸上。把它牢记在心才更为安全。
8)      不要在所有机器上都使用同样的口令:在每个机器上使用不同的口令是及其重要的。这样,如果一个系统泄密了,所有其它系统都不会立即受到威胁。并且,不法用户也很难以一个系统为突破口,来威胁到你其他系统的安全。

三、使用密码分析工具验证密码的安全性

除了上述密码安全设定的基本原则,用户还可以使用下面介绍的一款非常实用的密码安全分析工具——John the Ripper来验证其密码设定是否安全可靠。
John the Ripper是一个工具软件,用于在已知密文的情况下尝试破解出明文的破解密码软件。主要支持对DESMD5两种加密方式的密文进行破解工作。它可以工作于多中不同的机型以及多种不同的操作系统之下,目前已经测试过能够正常运行的操作系统有:Linux x86freeBSDx86SolarisSPARCOSF/1 AlphaDOSWinNT/WinXP/Win 7系列等。
John the Ripper 1.7是目前比较好的破解密码工具,在解密过程中会自动定时存盘,用户可以强迫中断解密过程(使用Ctrl+C组合键),下次还可以从中断的地方继续进行下去(john-restore命令)。任何时候敲击键盘,用户都可以看到整个解密的进行情况,所有已经被破解的密码会被保存在当前目录下的JOHN.POT文件中,SHADOW中所有密文相同的用户会被归成一类,这样JOHN就不会进行无谓的重复劳动了。在程序的设计中,关键的密码生成的条件被放在JOHN.INI文件中,用户可以自行改设置,不仅支持单词类型的变化,而且支持自己编写C的小程序限制密码的取值方式。
 
在使用该软件前,我们可以从网上http://www.openwall.com/john/下载其最新版本john-1.7.9 Windows下的安装非常简单,以下主要介绍其在Linux下的安装方法。
首先下载john-1.7.9for Linux版本,它包含DOCSRCRUN三个目录,在SRC目录下,在x86机器上执行如下命令即可:
#make
#make clean linux-x86-any
 
安装好后,可以切换到RUN目录下,进行测试,如下所示:
#cd ../run
#./john –jason
 
安装好后,我们可以灵活使用如下几种方式来对自己的账户密码进行测试(在WindowsLinux系统上如下方法都适用,只不过命令操作方式略有不同而已):
 
通常情况下,许多用户的密码命名方式非常简单,比如12345helloworld等,或者很多都是与用户名相同的密码口令,那么我们一般可以先采用简单解密方式来对系统中的密码进行简单的初步试探,如果发现能够成功破解,那么就需要对这些密码口令的强度进行加强,如下所示:
//使用简单解密方式对系统账户进行测试
#./john –single /etc/shadow
Loaded 3 password hashes with 3 different salts (FreeBSD MD5 [32/32])
jason             (jason)
guesses: 1  time: 0:00:00:00 100%  c/s: 6975  trying: 999991900
 
在上述命令中,我们发现系统存在一个jason用户,其用户名和密码均为jason,因而通过最简单的方式便能将其发现和利用,如果为***破解则将造成不可设想的后果,因而我们的用户应该立即根据此种情况进行口令加强。
 
其次,用户可以使用字典文件来对系统用户的恶密码强度进行试探和测试。人们常用hellosupermancoolerasdfgh123456等作为自己的密码。而-rules参数则在此基础上再加上些变化,如字典中有单词cool,则JOHN还会尝试使用coolerCoOlCool等单词变化进行解密。一般视SHADOW中的用户多少及自己的字典大小、自己的机器速度,解密时间从几小时到几天不等。下面给出使用该方式进行解密的例子,假设我们已经生成了一个password.lst文件,其中包含了常用的以字典单词为依据的密码,那么我们对系统中的用户密码使用该方式进行试探破解,由于字典中保留了duango这样一个单词,因而用户jason的密码所以也被试探出来,网络管理员同样需要对该密码进行加固,比如添加适当的后缀、字母和数字等:
//使用字典解密方式对系统账户进行测试
# ./john --wordlist=password.lst /etc/shadow
Loaded 3 password hashes with 3 different salts (FreeBSD MD5 [32/32])
duango           (jason)
guesses: 1  time: 0:00:00:01 100%  c/s: 7065  trying: duango
 
当然,上述两种只是非常直观和简单的方法,但是如果字典足够完整和实用的话,那么就能够查出绝大多数的脆弱口令,在实践中,我们还可以综合使用如下的一些选项,来对系统密码强度进行更为充分的检查和验证:
l        rules:在解密过程中使用单词规则变化功能。如将尝试cool单词的其他可能,如COOLERCool等,详细规则可以在JOHN.INI文件中的[List.Rules:Wordlist]部分查到。
l        incremental[:<模式名称>]:使用遍历模式,就是组合密码的所有可能情况,同样可以在JOHN.INI文件中的[Incremental:*****]部分查到,我们在下面详细解释。
l        external:<模式名称>:使用自定义的扩展解密模式,用户可以在john.ini中定义自己需要的密码组合方式。JOHN也在INI文件中给出了几个示例,在INI文件的[List.External:******]中所定义的自动破解功能。
l        restore[:<文件名>]:继续上次的破解工作,JOHN被中断后,当前的解密进度情况被存放在RESTORE文件中,自己可以复制这个文件到一个新的文件中。如果参数后不带文件名,JOHN默认使用RESTORE文件。
 
通过上述软件测试,就可以确定用户的密码设定强度,如果容易为该软件破解,则需要尽快更换相应密码,从而提高密码的安全性。