口令的攻击术

黑客攻击目标时常常把破译普通用户的口令作为攻击的开始.先用"finger 远端主机名"找出主机上的用户帐号,然后就采用字典穷举法进行攻击.它的原理是这样的:网络上的用户常采用一个英语单词或自己的姓氏作为口令.通过一些程序,自动地从电脑字典中取出一个单词,作为用户的口令输入给远端的主机,申请进入系统.若口令错误,就按序取出下一个单词,进行下一个尝试.并一直循环下去,直到找到正确的口令,或字典的单词试完为止.由于这个破译过程由计算机程序来自动完成,几个小时就可以把字典的所有单词都试一遍.这类程序的典型是 LetMeIn version 2.0若这种方法不能奏效,黑客就会仔细寻找目标的薄弱环节和漏洞,伺机夺取目标中存放口令的文件shadow或passwd.因为在现代的Unix操作系统中,用户的基本信息存放在passwd文件中,而所有的口令则经过DES加密方法加密后专门存放在一个叫shadow(影子)的文件中,并处于严密的保护之下.老版本的Unix没有shadow文件,它所有的口令都存放在passwd文件中.

一旦夺取口令文件,黑客们就会用专解DES加密法的程序来解口令.好,首先先让我们把 Unix口令的可能值统计一下:

Unix一共是 [0x00~0xff]共128个字符,小于 0x20 的都算是控制符,不能输入为 口令, 0x7f 为转义符, 不能输入.那么总共有128 - 32 - 1 = 95 个字符可作为口令的字符.也就是 10(数字)+33(标点符号)+26*2(大小写字母)=95个

如果passwd取任意5个字母+1位数字或符号(按顺序)可能性是52*52*52*52*52*43=16,348,773,000(163亿种可能性)

但如果5个字母是一个常用词,估算一下设常用词5000条,从5000个常用词中取一个词与任意一个字符组合成口令,即

5000*(2*2*2*2*2)(大小写)*43=6,880,000 (688万种可能性)注:实际情况下绝大多数人都只用小写字符,可能性还要小.

但这已经可以用微机进行穷举了,在Pentium 200上每秒可算3,4万次,象这样简单的口令要不了3分钟. 如果有人用P200算上一周,将可进行200亿次攻击,所以6位口令是很不可靠的,至少要用7位.可惜很多用户确实是这么设passwd的.以上只是粗略估算常见的一种情况,

实际情况还要复杂,主要是根据用户取口令格式的变化而变化.那些hacker并不需要所有人的口令,他们得到几个用户口令就能获取系统的控制权,所以取口令过于简单是对系统安全的不负责.

以下举个解密码程序的例子:

John The Ripper 1.4

这个软件由著名的黑客组织--UCF出的,它支持Unix,Dos,Windows,速度超快,可以说是目前同类中最杰出的作品.对于老式的passwd档(就是没shadow的那种,任何人能看的都可以把 passwd密文存下来),John可以直接读取并用字典穷举击破.

对于现代的passwd+shadow的方式,John提供了UNSHADOW程序直接把两者合成出老式passwd文件.

 

John 的用法简介:

(1)

JOHN -P:PASSWD -W:WORDLIST

WORDLIST是字典文件.

PASSWD是你拿到的密码文件.

 

 

(2)

没有字典档时,

在John的配置文件-->john.ini里,有密码长度和字母、数字、符号的设置,设好后就自动在内存里生成密码去找。这样你用软盘也可以,但机器的速度一定要快。

(3)

用暴力法破密码时使用参数-i:all

格式为JOHN -I:ALL -P:PASSWD

就可破象5e5t56e6这样的密码了。

这样可以产生A----ZZZZZZZZ的密码,不过时间...嘿嘿....

(4)

当破解到一半因种种原因需要暂时停止破解,按ctrl+c,下次破解不必从新来过,只要john -restore:restore即可接着破。

john在纯dos下要比在win95下快,用unix更快,

 

(5)

对于象a2e4u7的密码是很难破出的,但JOHN的INCREMENTAL(渐进)方式的密码组合引入了一些字母的频率统计信息,即“高频先试”的原则,倒是有些启发意义。

 

在JOHN.INI中INCREMENTAL中的B,M,E各行意思如下:

 

B...Begin M...Middle E...End

如想要加一种方式, 比如字母加数字, 可以设成

[Incremental:a1]

CharCount = 36 (字符的个数,这儿是26个字母+10个数字)

MinLen = 8 (passwd的最小长度)

MaxLen = 8 (passwd的最大长度)

CharsetB = 1203984567smcbtdpajrhflgkwneiovyzuqx

CharsetM = 1203984567eaiornltsuchmdgpkbyvwfzxjq

CharsetE = 1203984567erynsatldoghikmcwpfubzjxvq

加在john.ini里, 执行是incremental参数选a1就行了.

 

(6)

按Ctrl-C中止运行时,输出是这样:

v: 18 c: 1295458688 t: 1:14:28:08 9% c/s: 11036 w: oentl - obftl

v: 0 c: 5424000 s: 862 c/s: 6292 w: fbymgf

V:是Victory,是破解成功的个数,因为俺运行一段后,破解了2个密码,显示了V:2,后来又破了几个,V后面的数字也相应变化。

C:Compare,是比较的次数,

T:time,程序已运行了多长时间.

9%: 当前完成度.至100%即全部完成.

c/s:是每秒比较的次数,随机器性能的高低而变化.

W:是当前正在试的一个word,这个word可能位于你的字典中(如果你用字典的话)或是john产生的。根据W所报告的数字可以估计破解到什么地方了。

 

(7)

运行需要的字典可以在internet上下载别人已做好的,如:

ftp.cads.com.tw 在 /pub/security下的DICT.ZIP

ftp.uni-koeln.de /pub/dictionaries/

ftp.ox.ac.uk /pub/wordlists

也可以自己做,用txt2dict或pass2dic等专用工具可自动把英语文件转换成字典.

 

防范的办法

防范的办法很简单,只要使自己的口令不在英语字典中,且不可能被别人猜测出就可以了. 一个好的口令应当至少有7个字符长,不要用个人信息(如生日,名字等),口令中要有一些非字母(如数字,标点符号,控制字符等),还要好记一些,不能写在纸上或计算机中的文件中,选择口令的一个好方法是将两个不相关的词用一个数字或控制字符相连,并截断为8个字符.例如我以前的口令是me2.hk97

 

保持口令安全的要点如下:

*不要将口令写下来.

*不要将口令存于电脑文件中.

*不要选取显而易见的信息作口令.

*不要让别人知道.

*不要在不同系统上使用同一口令.

*为防止眼明手快的人窃取口令,在输入口令时应确认无人在身边.

*定期改变口令,至少6个月要改变一次.

最后这点是十分重要的,永远不要对自己的口令过于自信,也许就在无意当中泄露了口令.定期地改变口令,会使自己遭受黑客攻击的风险降到了一定限度之内.一旦发现自己的口令不能进入计算机系统,应立即向系统管理员报告,由管理员来检查原因.

系统管理员也应定期运行这些破译口令的工具,来尝试破译shadow文件,若有用户的口令密码被破译出,说明这些用户的密码取得过于简单或有规律可循,应尽快地通知他们,及时更正密码,以防止黑客的入侵.