2019/1/14 7:20


前言

本文讲解了如何进行安全的远程桌面连接内网某服务器进行运维

关于RDP的中间人窃听,大家从文末的网盘下载看里面的文献有原理和脚本的说明,英文原文和中文翻译都有。

欢迎大家对不足之处进行指正!


大纲


1.windows server桌面远程

1.5防火墙规则设置

2.对此时rdp的安全性说明

3.端口映射

4.中间人窃听、爆破的风险说明

5.参考文献


示范环境: 


windows server 2012(服务器),windwos 2010(我们连接者),同一内网(稍后说明端口映射)。

虚拟机网络:桥接到同一个网关

1windows server桌面远程

如果使用RDP的话,首先得让功能完成,再考虑安全性。参考上一段的环境,来打开rdp服务。

打开win2012 serve,

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_02

进入 菜单 点击  计算机 的属性

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_03

点击远程设置

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_04

在这里,管理员的本地组是默认的都可以作位远程用户rdp登入;

如果想新建一个不是管理员的用户来登入rdp:(在计算机管理中 用户 新添加一个用户,设置密码,此时用户虽然被创建但是权限很小,但是作位rdp登录的一个用户,你需要在上图这个位置把新用户添加进来,此时这个用户拥有了rdp登入的权限);

(友情提示:rdp中不能切换用户,如果注销的当前登录用户的话,RDP也就随之关闭。)

如图创建一个不是管理员权限但是可以rdp登录的用户:

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_05

以管理员身份的命令创建一个remotetester用户(密码为@WSXxsw2)(此时用户几乎没有权限)

我们回到上文的下图位置

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_06

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_07

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_08

添加remotetester用户

此时可rdp登录本机的就是管理员组的用户和上图rdp组的添加用户

部分win2012的RDP被自己OS的防火墙禁用了,这种情况读者得看 一点五 操作防火墙的内容,首先把“RDP-用户模式(User-mode)”启用为公用模式;

回到win10(win10模拟网站管理员在自己家的电脑)

win + R 打开mstsc进行远程登录

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_09

然后输入win2012的可rdp的用户凭证,就可以rdp登录了

或者有时候出现CredSSP 的加密函数发生变化导致无法通过凭证,

(这是由于  CVE-2018-0886 : https://support.microsoft.com/zh-cn/help/4093492/credssp-updates-for-cve-2018-0886-march-13-2018   ,微软修改了加密函数;但是这个CVE是说可远程登录的用户作为中继执行任意代码,该不安全性可以忽略。如果想通过补丁方式升级加密函数,参考下面第二段aliyun网站的文章来进行补丁升级)

如果出现上述凭证由于加密无法通过的情况,就按照下面的步骤来更改加密性来让RDP功能实现;没有出现上述步骤的话,就跳过下面让功能实现的步骤了。

(参考文献:https://help.aliyun.com/knowledge_detail/71931.html?spm=a2c4e.11153940.blogcont629079.8.672678a393HdfT

)

打开win10的运行,输入regedit,打开注册表编辑器,

依次打开:

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters

这个路径,如果后面没有CredSSP\Parameters的,就打开

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

,如果有CredSSP\Parameter的话直接按照后面的修改一下Parameters中的参数“ AllowEncryptionOracle”的值为2即可。

右击System

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_10

新建一个名为“CredSSP”的项

再右击CredSSP这个项,新建一个名为“Parameters”的项

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_11

右击Parameters,新建DWORD(32)位,命名为“AllowEncryptionOracle ”

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_12

双击“AllowEncryptionOracle”,修改为十六进制数值2:

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_13

这样子,就可以通过加密凭证了。

1.5防火墙设置

继续以win server 2012说明,操作防火墙:

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_14

在服务器管理器这里点击“工具”

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_15

高级安全Windows防火墙

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_16

点击入站规则

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_17

滚动条拉到最底下,

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_18

我们只启用如图的“远程桌面-用户模式(TCP-In)”接即可,其他的关于RDP的设置通通禁用。

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_19

点击属性

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_20

点击  “允许连接”  ,如上图,然后再到“作用域”,如下图:

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_21

本地IP地址的话,写127.0.0.1就行

远程ip可以写内网或者外网的ip。

如果先进行内网主机是否可以rdp连接,那么远程ip地址就添加这个内网地址。

如上图,由于我使用39.105.78.253这个主机进行端口映射,所以我只写了这一个地址。

建议远程ip地址只保留你要进行传输层连接的主机的ip。这样,能连接被RDP的服务器只能通过公网的端口映射来连接。

还有一处,

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_22

这里得写公用进行连接。

至此,在内网环境下(现在还没有端口映射)的DP的连接你应该是可以做到的。

注意一下,内网要进行连接的话,先简单把本地ip和远程ip都开启为“任何ip地址”。

否则内网主机都连接不上。

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_23

成功连接,如图:

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_24

通过凭证后,会出现一个证书:

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_25

点击“是”

然后,内网下RDP连接就成功了。

2安全性说明

上面步骤中修改客户端注册表只是为了绕过rdp这一层CredSSP微软升级加密算法的差异性。

修改Parameters下那个键值为2是为了使用旧的不安全的算法。这个的安全性可以忽略,因为登录的管理员或者创建的remote组的身份登录,我们并不泄露这些信息。安全性cve的文献在上文和下文的参考文献有,我们可以选择忽略。

操作防火墙只是为了只连接公网的端口映射进行传输层的TCP连接。

证书:

RDP协议自带SSL加密传输的,可防止中间人窃听。

但是RDP通过用户凭证后,会弹出无法确认证书,如下:

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_25

这个很头疼,因为安装证书到所有的信任区依然无法解决。

我们选择手工验证:查看证书:

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_27

简单记住指纹的前几位就行,以后连接的时候手动查看指纹校验一下前几位,来确认证书,然后回到证书不确认的那儿

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_28

点击“是”即可。。。(每回每回千万不要在“不再询问我是否连接到此计算机”这里打勾)

win2012的证书有效期一般默认半年,如果你手工校验发现证书指纹不太一样。。。可能有中间人截断流量准备进行窃听。。涉及安全性的话,手工校验发现问题的话,就不要进行连接了。换一条线路重新搭一下rdp的端口映射。

RDP:

微软的远程桌面协议自带SSL,协议本身是安全的,因为用到了非对称加密。不过,服务器校验了你输入的用户凭证才会返回一个公钥,用户凭证的用户名密码是散列值进行的传输,笔者在wireshark抓了几轮流量都没有发现能ascii编码出来的用户名密码。所以这一点上讲,安全性是可以的。不过勤换用户的密码也是一个好习惯。

RDP爆破:

RDP最害怕最不防的就是爆破,举例的常见的工具就是Hydra,不过这个工具爆破时流量特征很明显,而且它也得需要一个非常强大的字典来进行爆破很长很长时间。关于爆破,建议设置用户密码至少10位包含大小写字母和数字,一般这种情况可以防止爆破的问题。

端口映射的服务器的防火墙:

建议和上面的防火墙操作一样,如果运维人员想通过rdp进行运维,那么建议端口映射的服务器也用防火墙限制一下连接的ip。

3端口映射

端口映射,一般就是讨论如何在外网准确访问到某个内网进行通信。

1.路由器是直接连接外网的话,可以直接进行端口映射,或者和ISP运营商沟通,进行端口映射

(这个是最方便的)

2.远程RDP的话,建立一个VPN也是可以的,直接问到内网

3.点对点的端口映射(这也需要一个处于公网的服务器,在上面运行一个程序即可建立两个内网主机的通信)

按照笔者的操作步骤来走的话,这里就示范端口映射。

文件:RDP/端口映射/文章示范修改参数文件(相较原文件,更改了debug、重试次数、重试连接时间三个参数)

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_29

(rtcp-master.zip是知道创宇的原文件,默认配置是调试的,所以使用脚本的话直接用改了参数的“文章示范修改参数文件”)

这里的python程序并不长,是知道创宇的github中寻找到的,github上他们的源文件就是同目录下的rtcp-master.zip这个压缩包。

(注:被RDP控的主机、公网服务器需要py2运行端口映射程序,

文件中有py2.7.9的安装包。如果公网服务器OS是windows,就安装文件夹的py2的安装包。)

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_30

公网服务器:运行python rtcp.py l:10001 l:10002

就是两个端口互通tcp这一层的流量

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_31

python rtcp.py l:30004 l:30005

(这里我用的公网服务器是windwosserver,这得安装一下python2的安装包。如果公网进行端口映射的服务器是linux的os的话,上传个脚本就能直接运行,比windwos更方便,命令和上图windows的一样)

(假设公网ip:xx.xx.xx.xx)

被rdp的主机:运行python rtcp.py c:localhost:3389 c:xx.xx.xx.xx:30005

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_32

先把公网的服务器开了程序,再开客户端的程序。

服务器输出

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_33

这个字样,标识tcp连接成功。

如果没有弹出,则需要杀掉当前进程,重新开一下程序重走其他端口,成功连接即可。

然后,你在家中或者其他地方,按win + R打开‘运行’窗口输入mstsc,连接xx.xx.xx.xx:30002,就可以连接到被rdp的主机了。

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_34

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_35

如图,连接成功。

4中间人窃听、爆破的风险说明

爆破工具Hydra

防火墙端口镜像配置 防火墙如何映射端口_防火墙端口镜像配置_36

windows下的RDP爆破工具笔者放进来了,这个工具在kali linux中也默认安装。

防火墙端口镜像配置 防火墙如何映射端口_rdp连接工具_37

需要在cmd环境下运行该hydra.exe文件并输入参数进行爆破。

hydra 192.168.1.12 rdp -L users.txt -P pass.txt -V 

上面这句话就是要进行rdp协议的爆破。工具本身没有任何字典,所以工具者会在同目录下上传字典来被hydra加载,进行用户名密码的全排列爆破。

关于防止爆破,在本文的讲述中,设置端口映射的服务器的防火墙,或者设置被RDP主机的用户的密码强度即可防止爆破。在上文中提到过。

中间人窃听(MitM)

在参考文献RDPattacking.doc中有讲述

解决方案的话,依然在上文有提到过,就是手动校验证书的指纹。

关于本文的文件,网盘链接如下:

https://pan.baidu.com/s/1vTCimcKQAadTF0T59FKx9w

5参考文献(部分参考文献放进了文件夹)

https://help.aliyun.com/knowledge_detail/71931.html

https://windard.com/project/2017/03/10/Proxy-In-Python

CVE-2018-0886 :

https://support.microsoft.com/zh-cn/help/4093492/credssp-updates-for-cve-2018-0886-march-13-2018

https://help.aliyun.com/knowledge_detail/71931.html?spm=a2c4e.11153940.blogcont629079.8.672678a393HdfT

)