引用请注明出处,本文地址:http://www.laozeng.net/index.php/archives/287
SSH安全验证级别
- 第一种级别(基于口令的安全验证),只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
- 第二种级别(基于密匙的安全验证)需要依靠密匙
- 先为自己创建一对密匙,并把公匙放在需要访问的服务器上;
- 客户端软件会向服务器发出请求,请求用你的密匙进行安全验证;
- 服务器收到请求之后,在该服务器目录下寻找公匙,然后把它和你发送过来的公匙进行比较。若两密匙一致,服务器就用公匙加密“质询”(challenge)并把它发送给客户端软件;
- 客户端软件收到“质询”之后就可以用 私密 解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令,它不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒
下面说的就是基于口令的安全验证,中间人如何攻击窃听。
服务器与客户端相互安全通信是通过对称加密算法(如DES、3DES、Blowfish和RC4)对称加密算法,密钥只有一个,这便是会话密钥,服务器与客户端都拿此密钥去解密对方传输过来的密文。第三方没有密钥是无法破解通信的。
所以会话密钥保密性决定了整个通信的安全。
但服务器与客户端需要通过网络先交换会话密钥方可通信,又不能明文传输通信密钥。这时候就使用到了非对称加密(如RSA、DSA)帮助交换会话密钥:
1.服务器生成公钥A和私钥B。明文传输公钥A给客户端。
2.客户端使用公钥A加密会话密钥C,传回给服务器。这时候,只有拿到私钥B,才能解密出会话密钥C。而私钥B只有服务器有。
3.服务器使用第一步的私钥B解密,得出会话密钥C。
4.服务器、客户端使用会话密钥C加密通信(对称加密算法)。
过程可参我做的一张图:
当SSH遇到中间人:
1.服务器传输公钥A给客户端,中间人截取公钥A。中间人自己另外生成公钥E,私钥F。中间人伪装成服务器,向客户端发送公钥E,客户端误认为是服务器发送过来的公钥A,使用公钥E加密会话密钥C,并发回给服务器。
2.中间人再次拦截客户端加密数据,使用私钥F即可解出会话密钥C。中间人使用第一步截获的公钥A,加密密钥C,传回给服务器。这时候中间人已经获取会话密钥,因为SSH使用的算法都是公开的,有密钥就可以随意监听密码通信。
3.服务器用私钥B解密得出会话密钥C,认为这一切都正常。但其实会话密钥已经泄露给中间人。
4.服务器客户端使用会话密钥C加密通信。中间人截取,使用C解密,获取通信。
参考下图:
听说一些企业的网络都是可以监听SSH的,你的所有消息都知道。具体什么原理我不懂
[回复]
老曾 回复:
五月 26th, 2012 at 21:47
这就是网络审计产品的功能。数据库类协议(Oracle、Informix、DB2、DB2-DAS、Microsoft SQL Server、Sybase、MySQL、PostgreSQL、Teradata、Cache,Sybase),运营维护类协议(SSH、Telnet、Rlogin、X11),文件操作类协议(SCP、SFTP、FTP、NFS、SunRPC/PCNFSD、Windows网上邻居),互联网类协议(HTTP 、HTTPS、SMTP、POP3),以及其他一些协议类型(Windows远程桌面、Radius、自定义协议)都可以审计到,也就是你的这些协议行为都会被监听到。甚至支持回放功能,非但可以监听到,还可以模拟回放你的操作。我现在的工作就这些。
[回复]
这个不是中间人攻击吗?我的服务器全是密钥登录,但是觉得不方便。。。
[回复]
admin 回复:
四月 13th, 2013 at 16:49
是中间人攻击。密钥登陆最安全
[回复]
好文当如斯也,再三把玩,依旧回味无穷