摘要:大家都知道FTP的用户密码是明码传输,在公网环境下极不安全。因为考虑过书写一个类似的需要安全验证的协议,研究了一下相关的问题。假设一个非法用户可以嗅弹到会话的所有内容,该协议需要达到以下的要求:
1.非法用户无法得到密码
2.非法用户无法利用嗅探到的信息通过验证
我们可以考虑依靠DES等私钥加密方法加密密码,假如我们写的是一个公共的协议,加密方法和加密密钥就都需要公开,加密就形同虚设,黑客可以轻易的得到原来的密码。
我们再考虑MD5等hash算法,当服务器要求密码时,客户端对密码作hash,服务器把客户的密码hash和服务器的密码hash作比较,假如相同就是验证通过,黑客只能得到HASH过的密码,假如原始密码比较复杂的话,黑客是无法在有限时间得到原始密码的,第一点满足了,公钥加密方法也可以达到类似效果。
但是我们发现黑客虽然无法得到原始密码,但是他毕竟得到了hash以后的密码,使用这个密码,也可以正常登录,我们第2点是无法满足的,所以,我们要考虑需要一些客户端的信息,和密码一起做HASH,这个信息必须:
1.服务器和客户端都可以得到这个信息并且内容一致
2.黑客难以伪造这个信息
一个看起来不错的信息是客户的ip地址(我首先想到的也是这个),但是可惜,因为NAT的存在,这个并不是很好用,我一直把精力放在客户可以提供的信息上,最后在Serv-U Ftp Server中发现它的一种对密码进行MD5的登录会话是这样的:
220 Serv-U FTP Server v5.0 for WinSock ready...USER test331 Response to otp-md5 998 lame113 required for skey.PASS SLAT BEAR QUO TOIL MARS GORE230 User logged in, proceed.
相同的机器,另外一次登录又不一样了:
220 Serv-U FTP Server v5.0 for WinSock ready...USER test331 Response to otp-md5 994 lame113 required for skey.PASS FLED DOOM OVA SAFE LEST HALT230 User logged in, proceed.
总算茅塞顿开:服务器发送给客户一个KEY,然后客户再把密码和这个KEY一起做Hash。因为每次发送的KEY都不一样,即使黑客可以嗅探到登录会话,也无法得到密码或者伪造信息进行登录了。
写出这个,无非是整理我对这个问题的一些思路,希望对大家有作用,也希望大家提一些看法(俺不是搞这个的,大家点拨点拨)。
还看到一篇文章,这是MIT(Massachusetts Institute of Technology)为了帮助人们理解Kerberos的原理而写的一篇对话集。里面有两个虚构的人物:Athena和Euripides,通过Athena不断的构思和Euripides不断的寻找其中的漏洞,使大家明白了Kerberos协议的原理: http://blog.joycode.com/peon/posts/18657.aspx,推荐读读:)...[
阅读全文]