§2.6应用层协议之如何远程去操作你的电脑?

在有了网络以来,已经能通过网络去浏览各种各样的网页,通过网络收发邮件与远方的朋友联系。但是除了这些以外,人们还有一个需求——如果我想远程操作我的电脑怎么办?因为一个人不可能只有一台电脑,这一台电脑上也不一定会有一个人所需要的全部资料以及数据。那么在家里想要操作公司的电脑怎么办?

我们考虑一下,现在的电脑大部分都是安装的Windows操作系统,除了Windows操作系统以外,Linux和FreeBSD操作系统也支持图形化操作。但是这些所谓的图形化在底层还是操作系统上的命令。把远程操作的需求简化一下就是:

1、能够把命令发送至需要远程的目标主机
2、目标主机收到命令之后能够正常识别
3、目标主机要能进行身份的验证

基于上面的需求,我们来认识几个协议:

远程终端协议TELNET

基本内容

telnet协议能够将用户在本地敲击键盘的字符,传递到远程的目标主机上。目标主机再将本地输出的结果通过网络回传给用户目前所使用的主机。网络时延非常低的时候,就会让用户感觉自己在实时操作远程的电脑一样。但是只能显示命令行以及回显命令行的输出,没有图形化界面

同时由于一些主机不同的主机有不通的命令格式。比如在使用ASCⅡ码的操作系统里,用户在敲击回车键的瞬间,系统将回车键编译为CR指令,该指令能被使用ASCⅡ码的系统正确识别。如果对端操作系统并没有使用ASCⅡ码的话,当CR指令传递过去,对端操作系统不认得(unicode码的回车是0x0D),就无法正确的执行指令。因此telnet也面临着一统差异的需求。于是telnet协议的开发人员提出了NVT格式。

NVT(Network Virtual Terminal):该种方案的提出就是为了解决编码不一致的情况。解决的思路也很简单:用户在使用telnet协议时,本地敲击的命令全部被NVT转换成NVT的专属格式,该数据到达目标主机时,目标主机的telnet服务器端将NVT格式的数据转移成本地所使用的编码格式。回传数据时,将本地准备发给客户端的数据转成NVT格式,客户端再将收到的NVT数据转换成本地使用的编码格式。

在这里插入图片描述
NVT格式的数据被telnet协议明文传输

工作过程

telnet协议使用基本的客户服务器模式(C/S架构)

  • 首先服务器端被动的打开常用端口23,等待客户端的建立链接。

  • 客户端在本地随机调用一个端口,通过该端口与服务器端建立连接。

  • 建立连接后,客户端提供用户名和密码。服务器端验证完毕后即允许接入。

  • 服务器端允许接入后,客户端开始接收本地键盘上键入的字符

  • 将本地键入的字符修改为NVT格式,发生至远端的目标机器

  • 服务器端收到客户端发来的NVT格式的数据之后,修改格式为本地编码格式,交由本地操作系统进行执行。

工作模式:
工作模式有以下四种:

  • 半双工模式:客户端每次必须等待服务器端发回的数据,才会进行下一次的用户键入信息采集(已基本废弃)
  • 一次一字符:客户端每键入一个字符就发生一个字符到服务器端,服务器回显该字符
  • 准行方式:客户端每键入一行字符,敲击回车之后,该行字符才会被发生至服务器端
  • 行方式:官方文档说是纠正了准行方式的缺陷。纠正了啥我也不知道。。。。。

TelnetNTLM

NTLM是一种身份验证机制。因为早期的telnet使用明文进行传输用户名和密码(SMB协议),随着科技的进步,网络攻击者只需要简单的抓取telnet协议的数据包,即可确认用户名和密码。

LM协议

随后出现了LM协议(LAN Manager Challenge/Response),该协议对用户密码进行加密

服务器端首先将存储的密码全部转换成大写(即用户端使用大小写密码没有区别)
转换为大写之后进行分组,填充变成14个字符,再分割为2个7字符的块
服务器端使用指定的密钥通过DES算法对两个字符块进行加密。加密后比较客户端和服务器端的密文是否一致,一致则通过认证

LM Hash问题:

口令不区分大小写
口令长度最大为14字节
DES算法强度不够
使用固定加密密钥

NTLM协议

在LM问世并被破解之后,微软提出了NTLM。该协议由微软提出,仅仅支持Windows平台

工作流程如下:

  • telnet客户端向服务器端发生自己的账号,账号为明文方式传输
  • 服务器端收到了账号账号随机产生一个16位的数字串作为challenge,发生给客户端 客户端将密码使用特定加密算法加密(NTLM
  • v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。) 加密后的密文密码作为密钥
  • 使用该密钥对服务器端发来的challenge进行加密,并返回给服务器端
  • 服务器端根据用户名在SAM密码管理库中查询该用户名对应的密文密码(如在域环境下,服务器端会将用户名、给客户端的challenge、客户端返回的response发送至域控,由域控来对比)
  • 查询到了该用户名对应的密文密码后,使用该用户名的密文密码通过特定的加密算法去加密服务器端发给客户端的challenge。得出结果之后查询该结果是否于客户端发回的response一致。
  • 如果一致则通过认证,如果不一致则认证失败

安全外壳协议SSH

自从telnet协议出现之后,极大的方便了专业计算机人员去远程操作主机。但是也引出来一系列问题,极大的风险就是telnet协议使用明文传输用户名和密码,虽然用户名密码有LM进行基本的加密,但是鉴于加密密钥的同一性、不区分大小写字母、密钥长度有限制、DES算法复杂度有限,可能会被破解等一系列问题。导致telnet几乎在现实中不在使用,仅做端口测试使用。

由于此上种种问题,SSH协议应运而生。SSH协议叫做安全外壳协议。在发送是数据外加了一层外壳,可以为各种各样的协议进行安全加密。比如FTP协议被加密成SFTP协议。

基本内容

SSH协议在设计的时候引入了公钥认证,对称加密的机制。因为非对称加密机制加密解密较慢,影响效率

中间人攻击:但是由此引生出来一个问题,中间人攻击。总要把私钥想办法告诉对端。如果发送登录请求时,存在一个第三方服务器,截胡该请求。冒充远程主机,将自己的公钥发给客户端,那么客户端是无法识别的。收集到了客户端的公钥私钥,自己再伪装成客户端,向服务器端发送数据。这样所以的消息往来是完全暴露在第三方的监控之下。尽管有非对称加密体制,依然无计可施。

设计出来的解决方法就是公钥指纹。当第一次去登录远程主机的时候,会有一个确认的过程。由服务器端在官网公开自己的公钥指纹,每次去链接时,客户端检测本地收到的公钥指纹和服务器端官网公布的公钥指纹是否一直。如果一直即为没有问题。不一致,则是非法第三方。

The authenticity of host 'host (1.1.1.1.1)' can't be established.

  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.

  Are you sure you want to continue connecting (yes/no)?

这里的 RSA key fingerprint 就是公钥指纹。因为RSA的公钥一般认为1024位以上才是安全的,所以密钥很长,用户一般无法去进行一一核对。这里对RSA公钥进行MD5运算,将十分复杂的公钥计算出128位的MD5值。然后再将128位的二进制MD5值转化为16进制。这样得到了32位16进制数,即公钥指纹。

重放攻击:一般类似于SSH的安全协议都会有在报文中放置一个序列号,从0增长。接收方维护一个滑动窗口,不在窗口内的序列号全部丢弃。多次重复接受的也会被丢弃。

工作过程:

  • 首先服务器端会被动的打开22号口等待连接 当客户端发起连接请求时,双方交互ssh协议版本等信息。协商使用的SSH版本
  • 协商完毕之后服务器客户端双方进行加密算法交换,统一加密算法 客户端首先发送D-H公钥,服务器端根据客户端的D-H公钥计算出一次性的会话密钥
  • 服务器端回复客户端:
    1、服务器端公钥。此次客户端收到该公钥后会与本地证书对比。如果本地可信任公钥里没有该公钥,则会弹出会话框让使用者进行确认
    2、服务器端的D-H公钥。此公钥属于随机生成,一次性使用。发送至客户端
    3、数字签名,证明是服务器端发送的消息
    4、一个new key包。表明服务器端已经可以发送使用会话密钥加密的信息了
    5、一个加密的包。已经有能力进行加密了
  • 客户端收到服务器发送的以上消息后,回复一个new key包。表明已经计算出会话密钥。
  • 并且发送使用会话密钥加密的口令。发送至服务器端后,由服务器端进行解密,并验证正确与否

D-H加密算法
交换模型:
信息交互的双方随机构建一对密钥对。
发送方发送自己的公钥给接收方;接收方也发送自己的公钥给发送方
发送方使用自己的私钥+接收方的公钥计算出会话密钥
接收方使用自己的私钥+发送方的公钥计算出会话密钥
两者最后得出的会话密钥相同。保障了无需通过网络传输任何敏感数据,即可在双方构建可用的共同的会话密钥

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值