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,
进入 菜单 点击 计算机 的属性
点击远程设置
在这里,管理员的本地组是默认的都可以作位远程用户rdp登入;
如果想新建一个不是管理员的用户来登入rdp:(在计算机管理中 用户 新添加一个用户,设置密码,此时用户虽然被创建但是权限很小,但是作位rdp登录的一个用户,你需要在上图这个位置把新用户添加进来,此时这个用户拥有了rdp登入的权限);
(友情提示:rdp中不能切换用户,如果注销的当前登录用户的话,RDP也就随之关闭。)
如图创建一个不是管理员权限但是可以rdp登录的用户:
以管理员身份的命令创建一个remotetester用户(密码为@WSXxsw2)(此时用户几乎没有权限)
我们回到上文的下图位置
添加remotetester用户
此时可rdp登录本机的就是管理员组的用户和上图rdp组的添加用户
部分win2012的RDP被自己OS的防火墙禁用了,这种情况读者得看 一点五 操作防火墙的内容,首先把“RDP-用户模式(User-mode)”启用为公用模式;
回到win10(win10模拟网站管理员在自己家的电脑)
win + R 打开mstsc进行远程登录
然后输入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功能实现;没有出现上述步骤的话,就跳过下面让功能实现的步骤了。
)
打开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
新建一个名为“CredSSP”的项
再右击CredSSP这个项,新建一个名为“Parameters”的项
右击Parameters,新建DWORD(32)位,命名为“AllowEncryptionOracle ”
双击“AllowEncryptionOracle”,修改为十六进制数值2:
这样子,就可以通过加密凭证了。
1.5防火墙设置
继续以win server 2012说明,操作防火墙:
在服务器管理器这里点击“工具”
高级安全Windows防火墙
点击入站规则
滚动条拉到最底下,
我们只启用如图的“远程桌面-用户模式(TCP-In)”接即可,其他的关于RDP的设置通通禁用。
点击属性
点击 “允许连接” ,如上图,然后再到“作用域”,如下图:
本地IP地址的话,写127.0.0.1就行
远程ip可以写内网或者外网的ip。
如果先进行内网主机是否可以rdp连接,那么远程ip地址就添加这个内网地址。
如上图,由于我使用39.105.78.253这个主机进行端口映射,所以我只写了这一个地址。
建议远程ip地址只保留你要进行传输层连接的主机的ip。这样,能连接被RDP的服务器只能通过公网的端口映射来连接。
还有一处,
这里得写公用进行连接。
至此,在内网环境下(现在还没有端口映射)的DP的连接你应该是可以做到的。
注意一下,内网要进行连接的话,先简单把本地ip和远程ip都开启为“任何ip地址”。
否则内网主机都连接不上。
成功连接,如图:
通过凭证后,会出现一个证书:
点击“是”
然后,内网下RDP连接就成功了。
2安全性说明
上面步骤中修改客户端注册表只是为了绕过rdp这一层CredSSP微软升级加密算法的差异性。
修改Parameters下那个键值为2是为了使用旧的不安全的算法。这个的安全性可以忽略,因为登录的管理员或者创建的remote组的身份登录,我们并不泄露这些信息。安全性cve的文献在上文和下文的参考文献有,我们可以选择忽略。
操作防火墙只是为了只连接公网的端口映射进行传输层的TCP连接。
证书:
RDP协议自带SSL加密传输的,可防止中间人窃听。
但是RDP通过用户凭证后,会弹出无法确认证书,如下:
这个很头疼,因为安装证书到所有的信任区依然无法解决。
我们选择手工验证:查看证书:
简单记住指纹的前几位就行,以后连接的时候手动查看指纹校验一下前几位,来确认证书,然后回到证书不确认的那儿
点击“是”即可。。。(每回每回千万不要在“不再询问我是否连接到此计算机”这里打勾)
win2012的证书有效期一般默认半年,如果你手工校验发现证书指纹不太一样。。。可能有中间人截断流量准备进行窃听。。涉及安全性的话,手工校验发现问题的话,就不要进行连接了。换一条线路重新搭一下rdp的端口映射。
RDP:
微软的远程桌面协议自带SSL,协议本身是安全的,因为用到了非对称加密。不过,服务器校验了你输入的用户凭证才会返回一个公钥,用户凭证的用户名密码是散列值进行的传输,笔者在wireshark抓了几轮流量都没有发现能ascii编码出来的用户名密码。所以这一点上讲,安全性是可以的。不过勤换用户的密码也是一个好习惯。
RDP爆破:
RDP最害怕最不防的就是爆破,举例的常见的工具就是Hydra,不过这个工具爆破时流量特征很明显,而且它也得需要一个非常强大的字典来进行爆破很长很长时间。关于爆破,建议设置用户密码至少10位包含大小写字母和数字,一般这种情况可以防止爆破的问题。
端口映射的服务器的防火墙:
建议和上面的防火墙操作一样,如果运维人员想通过rdp进行运维,那么建议端口映射的服务器也用防火墙限制一下连接的ip。
3端口映射
端口映射,一般就是讨论如何在外网准确访问到某个内网进行通信。
1.路由器是直接连接外网的话,可以直接进行端口映射,或者和ISP运营商沟通,进行端口映射
(这个是最方便的)
2.远程RDP的话,建立一个VPN也是可以的,直接问到内网
3.点对点的端口映射(这也需要一个处于公网的服务器,在上面运行一个程序即可建立两个内网主机的通信)
按照笔者的操作步骤来走的话,这里就示范端口映射。
文件:RDP/端口映射/文章示范修改参数文件(相较原文件,更改了debug、重试次数、重试连接时间三个参数)
(rtcp-master.zip是知道创宇的原文件,默认配置是调试的,所以使用脚本的话直接用改了参数的“文章示范修改参数文件”)
这里的python程序并不长,是知道创宇的github中寻找到的,github上他们的源文件就是同目录下的rtcp-master.zip这个压缩包。
(注:被RDP控的主机、公网服务器需要py2运行端口映射程序,
文件中有py2.7.9的安装包。如果公网服务器OS是windows,就安装文件夹的py2的安装包。)
公网服务器:运行python rtcp.py l:10001 l:10002
就是两个端口互通tcp这一层的流量
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
先把公网的服务器开了程序,再开客户端的程序。
服务器输出
这个字样,标识tcp连接成功。
如果没有弹出,则需要杀掉当前进程,重新开一下程序重走其他端口,成功连接即可。
然后,你在家中或者其他地方,按win + R打开‘运行’窗口输入mstsc,连接xx.xx.xx.xx:30002,就可以连接到被rdp的主机了。
如图,连接成功。
4中间人窃听、爆破的风险说明
爆破工具Hydra
windows下的RDP爆破工具笔者放进来了,这个工具在kali linux中也默认安装。
需要在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
)