VNC的版本众多,功能上大同小异,这里就以常用的TigerVNC为例进行说明,TigerVNC是一款完全免费的VNC远控软件,因为不存在溢出问题,所以使用起来是比较安全的。TigerVNC使用DES算法对连接密码进行加密,因为其使用的是一个固定的密钥,所以对于黑客来说,破解起来并不复杂。运行“regeit.exe”程序,在注册表编辑器中打 开“HKEY_CURRENT_USERSoftwareTigerVNCWinVNC4”分支,在右侧窗口中的“Password”键值中存储着加密后的密码信息。黑客只要使用某些工具,就可以对目标服务器上的TigerVNC进行密码猜解。如果您下载了TigerVNC的源代码包,会在其中发现名为“vncauth.c”的源程序文件,其中的“fixedkey[8]= {23,82,107,6,35,78,88,7}”语句说明了其使用的固定的8位密钥,您可以对其进行修改,例如改成其它的数值,然后使用VC++ 6.0对整个开发包进行编译处理,就会得到更改密钥后的TigerVNC。因此,黑客如果还使用现有的VNC密码破译工具,因其利用的还是之前的默认密钥,当然就无从破译了。
图1 TigerVNC端口设置界面
当然,对于不熟悉编程的用户来说,手工修改并编辑源码并不轻松。因此,保护TigerVNC密码最简单有效的工具是尽可能提高密码的复杂度,例如选择包含大小写、数字、特殊字符相混合的密码,尽量使其脱离传统密码字典的范畴。从原理上说,虽然TigerVNC仅支持8位的密码设置(不管密码有多长,但在上述“password”键值中只有8位),但是因为其口令验证机制比较复杂,所以使用VNCCrackX4等工具,因为其必须依靠字典才可以破解密码,因此很难对付复杂的密码,这样就可以有效保护TigerVNC的安全。因为TigerVNC开启的是5900和5800端口,前者用于远控操作,后者用于HTTP客户端管理功能。因此,黑客往往会使用扫描器来扫描这些端口,一旦发现其处于开启状态,就认定其安装了VNC远控服务。因此,可以在TigerVNC设置窗口中的“Connections”面板(如图1所示)中对上述连接端口进行修改,例如将其设置为不常使用的端口,可以提高服务器的隐蔽性,避免黑客的袭扰。
图2 在FreeSSH中创建账户
当然,仅仅保证密码的安全性还是不够的,如果黑客已经通过其他途径侵入了与TigerVNC服务器所处的同一网关下的某台主机,就可以通过ARP欺骗技术,对该网段的所有主机的通讯进行嗅探分析,因为TigerVNC客户机和服务器之间进行安全认证时没有进行加密保护,所有连接密码很容易被黑客预设的嗅探工具捕获。例如,使用Cain这款功能强大的工具,就可以对同一网关下的所有的主机进行扫描并执行ARP欺骗攻击,当TigerVNC客户端和服务器端进行通讯时,相关的会话信息就会被Cain完整拦截,包括TigerVNC客户端、服务器端地址、加密数据等信息。Cain自身已经提供了强大的破译功能,可以很轻松地破译3DES等加密算法,所以得到TigerVNC连接密码实在是轻而易举的事情。
那么,该如何保护TigerVNC客户端和服务器端通讯的安全,防止黑客对其进行破译拦截呢?具体的保护方法不止一种,这里我们使用了SSH端口转发技术(SSH Port forwarding)为例,来进行具体的介绍,该方法具有很强的通用型,可以加密保护任何未加密的通讯服务,此外,还可以有效穿越防火墙的限制。
首先,我们需要一款SSH服务器软件,这里我们使用的是FreeSSH,其安全性较高而且完全免费。当FreeSSH安装完成后,在自动弹出的对话框中点击“是”按钮,FreeSSH会自动生成一对随机密钥。在FreeSSH设置窗口中的“Users”面板中点击“Add”按钮,在弹出窗口(如图2所示)中的“Login”栏中输入帐户名,在“Authorization”列表中选择加密方式,包括NT账户认证、SHA1密码三列、公开密钥等。
如果选择第二种方式,需要输入密码信息。在“User can use”栏中需要勾选“Shell”和“Tunneling”项,点击确定按钮名,完成该账户的创建操作。在“Tunneling”面板中勾选“Allow local port forwarding” 和“but forward only to localhost(127.0.0.1)”项,激活本地的SSH端口转发功能,而且只能转发给本地主机。
在服务器端系统托盘中的TigerVNC图标的右键菜单中点击“Options”项,在设置窗口中的“Security”面板中点击“Configure”按钮,设置连接密码。
当服务器端设置完毕后,需要在客户端运行Putty这款连接工具。在Putty主界面左侧选择“Connection”→“SSH”→“Tunnels”项,在右侧窗口中的“Sourceport”栏中输入本地监听端口,例如7900。在“Destination”栏中输入服务器端端口,例如“xxx.xxx.xxx.xxx:5900”。点击“Add”按钮,完成该转发规则的创建操作(如图3所示)。如果需要使用TightVnc的HTTP客户端管理功能,可以为服务器端TigerVNC的5800端口设置转发规则,方法与上述相同。之后在PuTTY主界面左侧点击“Session”项,在右侧窗口中的“Host Name”栏中输入服务器的地址,在“Port”栏中输入端口号(默认为 22),点击“Open”按钮,和远程服务器建立安全连接。在弹出的认证窗口中按照提示输入在FreeSSH中创建的帐户名和密码。当连接建立成功后,运行TigerVNC客户端连接程序,在连接窗口中输入“xxx.xxx.xxx.xxx:7900”,这里使用了本例中创建的转发端口,“xxx.xxx.xxx.xxx”为服务器地址。输入TigerVNC连接密码后,就可以进入远控环境,对服务器进行远程控制了。因为连接是在加密通道中进行的,黑客即使使用嗅探工具进行监听,也无法捕获密码等敏感信息。
图3 创建端口转发规则
上面谈到了如何建立安全通道,保护VNC通讯服务。其实,在我们的实际工作中,经常会在不同的主机之间传输文件,如果涉及机密文件,最担心的就是被人监视拦截了。而传统的网络服务程序(如FTP、电子邮件等)等在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,黑客非常容易就可以截获这些口令和数据。最危险的是一旦黑客使用了“中间人”的攻击方式,冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器,并且对敏感数据进行了修改窃取操作,无疑会给用户造成严重的损失。为了保障文件传输的安全性,我们可以使用OpenSSH这个基于SSH协议的网络连接免费工具软件包,来抗击黑客的各种监听手段,避免泄露您的秘密信息。OpenSSH具有跨平台运行的特点,可以在Unix/Linux或者Windows环境中运作。我们这里为了简单起见,来谈谈如何在Windows环境中使用OpenSSH来保护数据传输的安全性。
当安装完OpenSSH后,会自动弹出对话框,提示必须设置passwd文件才可以正常运作 OpenSSH,按确定按钮完成配置。安装完后打开Windwos 的CMD窗口,以命令行方式下进入OpenSSh的安装目录的“Bin”文件夹,其默认的路径为“C:Program FilesOpenSSH”。 在 使 用OpenSSH Server之前,需要建立对应的账户和组。为了使用上的方便,需要将Windows中的用户组信息导入进来,在CMD中 执 行“mkgroup -l>> ..etcgroup”,注意,这里的用户组分为本地用户组和域用户组,在该命令中使用“-l”和“-d”参数,就能完成这两类用户组的导入动作。之后执行Windows中账户用户导入操作,例如允许本地账户“useradmin”登录到OpenSSH Server环境中,可以执行“mkpasswd -l-u adminuser >> ..etcpasswd”命令,就可以将账户useradmin及其密码导入passwd文件中。这里需要强调的是,OpenSSH Server中的账户必须是系统中存在的账户,如果Passwd文件不存在或没有导入用户信息,系统中的对应账户将无法登录到OpenSSH 服务器环境中,账户的导入也分本地和域两种情况,对应的命令也需要添加“-l”和“-d”参数。完成了账户和组的导入操作后,接下来执行“net start opensshd”命 令,来启动OpenSSH服务,对应地,可以执行“net stop opensshd”命令来关闭OpenSSH服务。OpenSSH Server端口默认是22,要更改端口的话,可以进入其安装路径下的“etc”文件夹,打开其中的“sshd_config”文件,在“Port”处进行更改。
图4 WinSCP登录界面
图5 WinSCP文件管理界面
虽然在OpenSSH的安装路径下的“Bin”文件夹中 提 供 了“ssh.exe”、“sftp.exe”、“scp.exe”等实用工具,可以执行各种连接操作。不过,使用图形界面的连接工具,操作起来会更加轻松,这对初学者尤其明显。这里,我们就利用WinSCP这款SFTP客户端软件,在本地与远程主机间安全地复制文件。该工具支持基于SSH-1、SSH-2的SFTP和SCP协议,还支持批处理脚本和命令行方式。
WinSCP启动后出现登录对话框(如图4所示),输入运行OpenSSH Server服务的远程主机名称或IP地址、端口号、账户名和密码等信息,点击“Login“按钮执行连接操作。如果服务器的密钥没有放在缓存中,WinSCP会弹出警告窗口,提示用户是否将密钥放入缓存,点击取消按钮就中止连接。
连接成功进入WinSCP主界面,其外观类似于Windows资源管理器,使用起来很方便(如图5所示)。在界面左侧显示本地中的资源列表,在右侧显示服务器端的资源列表,您可以很方便地在两者之间拖动文件,来实现文件的复制移动等操作。此外,WinSCP与Windows完美集成,可以在资源管理器和OpenSSH Server之间直接拖拽文件或文件夹,完成文件的下载和上传操作。WinSCP支持常见的文件操作,例如在OpenSSH Server服务器端的文件管理界面中点击右键,利用弹出菜单可以实现对服务器上文件的编辑复制、删除、移动、改名以及新建文件夹等操作。WinSCP支持本地和OpenSSH Server之间的目录同步操作,保证了远程目录和本地目录的一致性。在WinSCP中选中远程主机中的某个文件夹,点击菜单“Com mand”→“Synchronize”项(或者点击“Ctrl+S”键),在同步窗体中设置具体的参数。此外,利用工具栏上的按钮还可实现目录比较,保持远程目录在最新状态、打开终端、同步浏览等实用操作。利用“Session”菜单,可以实现新建、打开、保存、断开会话等操作。