分享
 
 
 

UNIX系统的口令防护机制

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

UNIX系统的口令防护机制

Walter Belgers

<翻译:yea(fritz_yea@163.com)>

walter@giga.win.tue.nl

1993年12月6日[1]

简介

本文意在提醒系统管理员,让他们对“合理设置口令[2]”这一问题的重要性产生足够的重视。容易猜的口令为黑客们(hackers[3])提供了侵入系统的可能性。现在,越来越多的计算机已经(或将要)连接到国际互联网。这意味着,互联网上会有越来越多的计算机用户,因此也会有越来越多的计算机黑客。一个好的口令防护机制,可以保护用户的系统不受黑客新手的骚扰。

我们现在面对着多种操作系统,每种系统里又有很多种安全保护机制。我在本文中将重点讨论UNIX系统的口令防护机制。这是因为,UNIX是一个非常流行的系统,尤其是在教育领域里,由于它(UNIX)的开放性,使得越来越多的黑客乐于至身其中。这一点在商业领域里正好相反,因为那里的数据(软件)是受保护的。例如,对竞争者而言,他不能篡改对手的软件。入侵UNIX系统有相当多的方法,同时也有相当多的程序能帮忙找到用户的口令。一个几乎没有UNIX知识的人也能使用这些程序。因此,设置一个好的口令,可以挡住那些黑客新手

(“高级黑客”即使不用口令也能侵入系统,这意味着系统的安全性不单由合理设置的口令决定)。

除了讨论“合理设置的口令(比如,不好猜的口令)”的重要性,我们还要了解口令防护机制是如何工作的。接下来我会例举一个使用了糟糕口令的实际例子。文章的最后,我会教大家一些设置合理口令的方法。

设置合理口令的重要性

黑客的目的通常就是要得到系统超级用户的权限(“根用户”)。一般的手段是,利用错误安装的软件、(系统)软件的漏洞以及操作者的失误。入侵一台计算机有许多种方法,但大多数都要求实施者有广博的知识。一个(相对)简单的方法是先以普通用户的身份登陆系统,然后四下搜寻系统的漏洞以使自己成为超级用户。前提是,黑客必须有有效的用户名和口令。

因此,最重要的是,系统中所有的(!)用户都必须选择不好猜的口令。每个用户的安全性都直接关系到整个系统的安全性。但用户大都不明白一个多用户系统是如何工作的,也不会没意识到,因为自己选一个好记忆的口令,将有可能间接导致某个外人操纵整个系统。有必要教导用户,不要产生下面这样的想法[Muf]: “我自己的账号的口令有什么样要紧的,毕竟,我也只是用它来打印些东西……”

用户有必要顾及到他所使用系统的安全性。在R. Pethia[Pet]的文章中提到:

“用户有责任为保障自己的数据而选用安全的设备和程序。他们同样也有责任促进其所使用系统的安全性。”

文章里还提到告知用户安全指标的重要性。一种解决方案是对新用户进行少量的培训。或者至少让他们明白,为什么选个好口令很重要。这事儿在系统管理员为新用户分配初始口令时就可以做。

黑客如何寻找口令

大多数UNIX系统并不使用我们下面要介绍的“影子口令文件[4]”。多数情况下,用户口令经过加密后,存放在/etc/passwd文件里,而如果本地系统是客户端的话,就存放在服务器的相应文件里。在后一种情况下,可以通过下面的命令察看:

$ ypcat passwd

口令文件里的每一行格式如下:

account:coded password data:uid:gid:GECOS-field:homedir:shell

比方说某个用户,他的账号名为gigawalt,加密后的口令是fURfuu4.4hY0U,用户识别号为129(用户ID可以是大于1的任何数,超级用户的ID是0),所属组群的识别号为129,用户信息(GECOS[5])里是他的全名Walter Belgers,个人的主目录是/home/gigawalt,使用C

shell(/bin/csh)。那么,在/etc/passwd 里看起来就是这样:

gigawalt:fURfuu4.4hY0U:129:129:Walter Belgers:/home/gigawalt:/bin/csh

而用了影子文件后情况就不太一样了。/etc/passwd中所有经过编码的口令都被一个星号“*”所替代,而真正的口令则放在另一个文件中,也就是影子文件。影子文件只有拥有特权的人(也就是root)才能读取,而一般用户根本无权访问。

用户口令将经过DES算法[6]的加密。使用DES时需要有一个密钥来加密和解密数据。加密UNIX口令总共经过了25次DES迭代。第一轮DES变换以64个0位作为初始输入,而用户输入的口令则作为加密的密钥。口令在变换时会被重新排列。排列总共有4096种可能。而对每个用户而言,选择怎样的排列方式是随机的。选定的排列方式被编码为一个2字节的字符串,我们称其为“粒子[7]”,并保存在口令文件中。第一轮的结果作为第二轮变换的输入,并使用相同的密钥和粒子。如此重复直到第25次变换完成并得到最终的输出。输出结果被编码为一个11字节的字符串保存在口令文件中。所以,最终的口令文件中包含了一段长13字节的经过编码的字符串,前两位是粒子而后11位是加密后的口令(在本例中,fU是粒子,Rfuu4.4hY0U是经过加密的口令——译注)。

这种加密方法几乎是不可逆的,就是说,我们可以很轻松的加密一段字符串,但是不能用同样的过程将密文解密成明文(原字符串),除非一个挨一个的试遍所有的密钥和粒子(穷举法,俗称暴力破解——译注)。这里所说的“不能”是指没有比暴力破解更快的方法。但是,仅经过一次DES迭代的数据是可以破解的,关于这方面的知识请参看[Til]。那么,既然无法解密被加密的口令,用户又是如何登陆进系统的?答案是:用户输入他/她的口令,然后系统根据口令文件中相应用户的粒子,按照前面提到的方法来加密64个0位。得到的结果再与口令文件中的密文进行比对,相一致的话就允许用户登陆了。更多有关UNIX系统中DES的详细工作信息请参阅[Fel2]

整个过程的流程图:

察看图表

正如我所说的,实际上人们无法破解密码。但是,人们却可以试着用些词语来加密64个0位,看看结果是否与口令“恰巧”一致。这样一来账号就被黑了。于是有人就会说,嘿,这样就能试遍所有的口令了。是的,可是这样做的话,即使用最快的计算机,算出密码时整个宇宙也早不存在了。用极强大的计算机,来暴力破解一个只由6个小写字母组成的口令,所花的时间还是可以接受的。目前在这种情况下最快的破解纪录是一个小时。那些尤其引起黑客兴趣的特权用户,绝对不能只用小写字母作口令!

我们看到了破解口令的一般方法就是来猜测它。所以你一定要保证系统里的用户不要使用好猜的口令。比如,凡是能从表里查到的词汇,不论是从字典还是百科全书,不论是天文学、植物学还是动物学的专业术语,都不要用!现在人们可以通过Internet轻易的组织出这么一张表。

假设口令文件里是这样写的:

gigawalt:fURfuu4.4hY0U:129:129:Walter Belgers:/home/gigawalt:/bin/csh

那么,口令最好不要是:

- 全部是英语词汇及其衍生词(比如“laugh”,“laughs”,“laughing”,等等。)。

- 全部是外语词汇(外语词典很容易找到)。

- 口令文件里可以找到的词汇,比如Walter,Belgers,gigawalt,等等。

- 具有某种模式,比如123456,qwerty,等等。

- 地理名称。

- 百科全书里的词汇(比如“Socrates”——苏格拉底)。

- 车牌号,门牌号,电话号码或其他与用户有关的东西。

- 名字。

-

所有这些的变体(walter,WALTER,retlaw,Walter,wAlter,walter0,walt3r,Retlaw4…),还包括使用两个词汇或加上随机字母。

一个真实的例子

为了证明用户选的口令有多糟糕,我将用一个猜密码的程序来破解某个实际的口令文件。

我用的程序是Crack v4.1,使用ufcrypt(ultra-fast crypt急速加密,DES算法的一种快速实现)算法,运行于一个SUN

ELC计算机集群上。该集群的运算能力相当于一台现代的PC(20

MIPS,每秒执行两千万条指令)。程序连续运行了近60个小时后被终止。而它所找到的口令其实是在最初的25小时里的成果。

结果如下:

机器性号:11x SUN ELC

账号总数:521个

破解总数:58个 (11.1%) (其中交互用户有56个

(10.7%))

总共耗时:59小时13分 (实际时间,而非CPU时间)

1 表中词汇 42 (7.2%)

2 常见名字 1 (0.2%)

3 用户/账号名 5 (0.9%)

4 短语和模式 3

(0.5%)

5 女子姓氏 2 (0.3%)

6 男子姓氏 4 (0.7%)

7 城市名称 1 (0.2%)

破解的口令如下:

1. cyclades,paardens,fiesta,regen,gnosis,police,fuselier,ballon,

smaragd,marques,farao,kasteel,valent,adagio,clematis,gehannes,koeien,

gnomen,onderkin,zeilboot,druppel,fietsen,testen,marathon,tamtam,global,

vrijheid,wolf,kwiek,basket,stones,klomp9,fiets9,Zoutje,Biefstuk,neenee,

tnbrg(这是将“tonbrug”去掉元音)。

2. fischer。

3. guest账号的口令竟然是“guest”!这当然不是用户的错,而是系统管理员的错。在荷兰,这种情况会被视作犯罪行为的(作者是荷兰人——译注)。

4. qwerty,unesco。

5. heather,joanne。

6. piet,atilla,Frans2,vatsug(“gustav(古斯塔夫)”倒过来拼)。

7. adelaide。

曾经有人对这些容易猜测的口令做过统计。在[Kle]中有记载, Daniel

Klein花了一个礼拜的CPU时间,破解了15000个口令中的21%。最初的2.7%是在前15分钟内找到的

(口令与账号相同,例如,账号名gigawalt,口令也是gigawalt)。这15000个口令中1%的统计结果如下:

表中词汇 7.4%

常见名字 4.0%

用户/账号名 2.7%

短语和模式 1.8%

女子姓氏 1.2%

男子姓氏

1.0%

机器名 1.0%

将这些结果与前面的进行比较意义不大,因为我们调查的范围实在太有限了。

而如果将调查范围扩大到美国的.COM公司的计算机系统,结果就有意义了(参见[Far])。你可能会认为,这些公司有好的安全制度。但是口令问题仍然存在,破解出根口令(root-password!)也不过花了一个小时多一点

(总共有1594个口令,其中15分钟内猜中了50个,35分钟内猜出了90个)。

找个好点儿的口令

上述阐明了,每个用户都使用好的口令是非常重要的。接下来我们看看有哪些方法能起个好的口令。一个好的口令要包含8个字符(UNIX口令最多支持8个字母,超出的部分会被忽略。所以用“Still

won't talk, eh, Spiff?”与用“Still

wo”做口令对UNIX而言没什么区别)。口令一定要好记但难猜,否则,要是用户找张纸把口令记下来的话,加密也就失去了意义(向破解直接去找这样的纸片就好了)。

口令不要全部只用大(小)写字母,也不要只用一个大写字母(“seCret”就不是好口令)。最好在口令中夹杂些非字母的字符(比如%,#,*,或标点等等)。有时某些控制符号也可以使用,但不是所有的都能用,有的控制符号会与某些网络协议冲突而产生不良结果。

几点建议:

- 选择两个总长为7个字母但相互又毫无关联的单词,用标点符号把它们连接起来,并适当的改变字母的大小写。比如:“Pit+idEa”,“plOVer#me”。

- 想一句有意义的话(但不要太常见),取其中每个单词的首字母组成口令。比如我们想了这么一句话 “My goldfish are called

Justerini and Brooks!”,那么我们的口令就是“MgacJaB!”(这里也要保证口令是8个字母,并且最好区分大小写和标点符号)。

- 利用元音和辅音组合出一个好读(这样便于记忆)但没有实际意义的生词。比如:“koDupaNy”,“eityPOop”。

降低破解的可能性

用户使用难猜但又好记的口令是非常重要的。有规则可以用于生成这样的口令。系统管理员也有责任提醒用户要这样做。

要降低被破解的风险性,可以遵循这样几条规则:

- 确保用户清楚口令的重要性以及如何选取正确的口令。

-

安装有如下功能的新版/bin/passwd(或yppasswd):可以检查口令是否过于浅显,看它是否含有标点,或者能否从字典里查到。

- 安装影子口令文件(或许还要相应地更换其它软件)。

-

设定口令有效期限,比如普通用户口令的有效期为三个月,特权用户的期限为一个月。但是时间间隔不要设得太短,以免有用户图省事而取一连串相关联的口令,如“Secret1”,“Secret2”,……

反而给黑客留下漏洞,一旦被他猜中了一个,后面的也就不用猜了。

- 用程序试着破解一下用户的口令,看看是否有可破解的口令。然后与这样的用户单独见面,跟他/她谈谈事情的重要性。

- 使用一次性口令(这样做有些极端,并且需要额外的投资,参见[Ven])。

-

限制特权账户的使用环境,比如规定root只能使用控制台,以免被人从网上窃听。如果不能这样的话,就要避免在公共场合下使用特权账号登陆系统,以免被监视或窃听[8]

- 要时刻记得,整个系统的安全性由安全链上最薄弱的环节所决定,即使口令设置合理,系统也未必是安全的。

参考文献

[Bel] Walter Belgers, Password Security - A Case Study

(in Dutch), TimeWasters Online Magazine #5, march 9, 1993, can be obtained by

sending email with Subject 'TOM5' to

timewasters-request@win.tue.nl.

[Cur] David A. Curry, UNIX System Security,

Addison-Wesley, 1992.

[Far] Dan Farmer, Wietse Venema, Improving the Security of

Your Site by Breaking Into it, USENET newsgroup comp.security.unix,

can be obtained by anonymous ftp from ftp.win.tue.nl as

/pub/security/admin-guide-to-cracking.Z, 1993.

[Fel1] David C. Feldmeier, A High-Speed Software DES

Implementation, can be obtained by anonymous ftp from

thumper.bellcore.com as

/pub/crypt/des.ps.Z, 1989.

[Fel2] David C. Feldmeier, Philip R. Karn, UNIX Password

Security - Ten Years Later, Proceedings of Advances in Cryptology - CRYPTO

'89, 1989.

[Kle] Daniel V. Klein, ''Foiling the Cracker'': A Survey

of, and Improvements to, Password Security (revised paper), Proceedings of

the USENIX Security Workshop, summer 1990.

[Muf] Alec E. Muffet, Almost Everything You Wanted To Know

About Security (but were afraid to ask!), USENET newsgroup

alt.security.

[Pet] R. Pethia, S. Crocker, B. Fraser, RFC1281:

Guidelines for the Secure Operation of the Internet, november 1991.

[Til] Henk C.A. van Tilborg, An Introduction to

Cryptology, Kluwer Academic Publishers, 1988.

[Ven] Wietse Venema, Using SecurID tokens in an open

multi-host UNIX environment, can be obtained by anonymous ftp from

ftp.nic.surfnet.nl as /surfnet/net-security/docs/securid.ps,

1993.

[1]这篇论文是很十几年前写的,所以有些技术指标不如今天的先进,比如当时的UNIX的口令最多只有8位,计算机的运行速度很慢。但即使是这样,文章中谈到的人们忽视密码安全的现象,在今天看来仍然是常见的,所以它对今天的我们仍具有现实意义。这也是我翻译这篇文章的原因。我真诚希望每位计算机的使用者,尤其身处在今天这种偷窃技术高度发达的环境里,务必要重视和保护好自己的各种密码,绝对不能掉以轻心。不怀好意的人是无孔不入的!——译注

[2]Well-chosen Passwords - 合理设置的口令——译注。

[3]这里用“crackers(骇客)”其实更准确些,因为“hackers(黑客)”一词从历史上来说,是指那些有着深厚计算机软/硬件知识的人,他们努力学习并改进计算机的工作方式,而不是搞破坏。但我将继续使用大众所熟悉的“hacker”的那个意思,尽管那是个误解。

[4]Shadow Password File - 影子口令文件——译注。

[5]GECOS - General Electric Comprehensive Operating

System,一个二十世纪七十年代的历史遗留词汇,可能是一种老式的操作系统,也可能是一种标准,就跟POSIX似的——译注。

[6]DES - Data Encryption

Standard(数据加密标准)。美国于1976年11月23日通过并使用了56bit版的数据加密标准,而原文说是1979年通过的。在被使用了1/4个世纪之后,目前已经被新的加密标准AES(Advance

Encryption Standard,高级加密标准)所取代——译注。

[7]'Salt' -

结晶,粒子或其他什么东西,总之使用它来做个比喻。——译注。

[8]要时刻提防特洛伊木马之类的窃听程序,所以一定要在值得信赖的机器上使用特权账户,而且这样的机器最好比较独立,不要连在公共网络上,并只允许授权使用——译注。

[注意]:我翻译这篇文章时并未征得原作者的同意,因此对原文无任何权利,所以请勿在正规场合下引用本译文。本人对译文所带来的任何结果不承担任何责任,如需转载请务必注明原作者的权利和本声明。

最后修改日期:2004年11月7日

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有