网络安全教程-密码与Crack工具研究(4)
为了对/etc/passwd文件进行方便的存取,我编写了一组访问/etc/passwd文件的子程序。可读取文件的用户条目入口项或写入新的用户条目等。这组子程序可用于编写Crack程序。
Getpwuid()函数即可从/etc/passwd文件中获取指定的UID的用户条目。Getpwnam()函数则对于指定的登录名,在/etc/passwd文件检索用户条目。getpwent(),setpwent(),endpwent()等函数则可对口令文件作后续处理。
Getpwuid()与Getpwnam()返回一指向passwd结构的指针,该结构定义如下:
struct passwd {
char * pw_name; /* 登录名 */
char * pw_passwd; /* 加密后的口令 */
uid_t pw_uid; /* UID */
gid_t pw_gid; /* GID */
char * pw_age; /* 代理信息 */
char * pw_comment; /* 注释 */
char * pw_gecos;
char * pw_dir; /* 主目录 */
char * pw_shell; /* 使用的shell */
char * pw_shell; /* 使用的shell */
首次调用getpwent(),可打开/etc/passwd文件并返回指向文件中第一个用户条目的指针,并保持调用之间文件的打开状态,再调用getpwent()便可顺序地返回口令文件中的各用户条目。而调用setpwent() 又可把口令文件的指针重新置为文件的开始处,最后使用完口令文件后调用endpwent() 可关闭口令文件。
1.2.4 构造Crack程序
综上所述,构造一个Crack工具只需以下步骤:
1、下载或自己生成一个字典文件。
2、取出字典文件中的每一条目,对每个单词运用一系列规则。规则可以多种多样,典型的规则包括:
3、使用几个单词和数字的组合。
4、大小写交替使用。
5、把单词正向、反向拼写后,接在一起。
6、在每个单词的开头或结尾加上一些数字。当然,使用的规则越多,破译所需时间就越长。但是,规则越多,破译成功的可能性也越大。
7、调用系统的crypt() 函数对使用规则生成的字符串进行加密变换。
8、再用上述的一组子程序打开口令文件,取出密文口令,与crypt() 函数的输出进行比较。
循环重复2-3步,直至口令破解成功。
1.3口令Crack实验分析
目前,最著名的口令Crack 工具是John the Ripper 与L0pht Crack。其中,John the Ripper用来破解Unix 系统口令,L0phtCrack 破解NT系统口令,它们有运行于不同平台的多个版本。我获取了运行于Windows 98/NT的最新版本:John the Ripper 1.6和L0phtCrack 2.5。并分别进行了口令Crack 的实验,因为实验方案基本相同,所以仅做John the Ripper 口令Crack 实验的分析。
首先,使用Turbo Linux 4.2 建立了三个用户组,每组4个用户帐号,总共12个帐号;分别是:A5,A6,A7,A8;B5,B6,B7,B8;C5,C6,C7,C8。其中,A代表该用户的口令只包含字母,B代表该用户的口令包含字母与数字,C代表该用户的口令包含字母、数字及特殊字符。5-8代表该用户的口令长度是5-8个字符。这些帐号的GID均被设为500。
实验用的计算机配置为:PentiumIII 500,128M内存,操作系统为Windows98第二版。先进行系统测试,运行"John -test",结果显示如下:
Benchmarking: Standard DES [48/64 4K]... DONE
Many salts: 18581 c/s
Only one salt: 30792 c/s
Benchmarking: BSDI DES (x725) [48/64 4K]... DONE
Many salts: 1054 c/s
Only one salt: 971 c/s
Benchmarking: FreeBSD MD5 [32/32]... DONE
Raw: 732 c/s
Benchmarking: OpenBSD Blowfish (x32) [32/32]... DONE
Raw: 41.2 c/s
Benchmarking: Kerberos AFS DES [48/64 4K]... DONE
Short: 32540 c/s
Long: 92064 c/s
Benchmarking: NT LM DES [48/64 4K]... DONE
Raw: 230855 c/s
可以看出,使用标准DES加密变换的速率为:18581 字符/秒(使用多个Salt时)与30792 字符/秒(使用单个Salt时),这是实验运行时的加密变换速率。
John the Ripper 的使用方法为:
Usage: file://D/HACKER/CRACK/JOHN-16/RUN/john [OPTIONS] [PASSWORD-FILES]
它有多个使用选项,参见表1.4。
表1.4 John the Ripper使用选项含义
选项 意义
-rules
破解规则
-wordfile:FILE
字典文件
-incremental
增量方式
-restore[:FILE]
恢复已存储的进度
-session:FILE
存储当前进度
-show
显示当前进度
-makechars:FILE
字符集
-users:[-]LOGIN|UID[,..]
指定想破解的用户
-groups:[-]GID[,..]
指定想破解的用户组
由于Turbo Linux使用了Shadow文件,得先进行Unshadow处理:
Unshadow passwd shadow >pass
得到Unshadow的口令文件pass,再输入:
John -groups:500 -show pass
开始Crack过程。进行10个小时后,得到如表5.5所示的结果。其中,单位精确到分,没有Crack成功的标为"NO"。
表1.5 使用John the Ripper的Crack实验结果
花费时间 花费时间 花费时间
A5 00:12 B5 02:16 C5 NO
A6 02:25 B6 NO C6 NO
A7 01:38 B7 05:21 C7 NO
A8 04:54 B8 NO C8 NO
可以看出,A组的成功率为:100%,B组的成功率为:50%,C组的成功率为:0%。因此,随着字符集的扩大,破解的难度明显增大。所以,安全的口令必须包含特殊字符。
还有一点值得注意,即在整体上口令越长,破译所需的时间越多,但A7比A6的破译时间短,这说明John the Ripper并不是先尝试完n个字符的口令,再尝试长为n+1的口令;而是运用了复杂的规则进行匹配。各个Crack程序的具体实现有差异,它们运用了不同的规则,使得它们破译口令的所需时间不一样。
Tags:
作者:无从考证,yuyu3007评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论