黑客教材系列——口令的攻击术
口令的攻击术
黑客攻击目标时常常把破译普通用户的口令作为攻击的开始.先用
"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文件,若有
用户的口令密码被破译出,说明这些用户的密码取得过于简单或有规律可循,应尽
快地通知他们,及时更正密码,以防止黑客的入侵.
yjbin
CopyLeft