许 辉,周志洪,2,李建华,姚立红,3
(1.上海交通大学电子信息与电气工程学院,上海200240;2.上海交通大学深圳研究院,深圳518057;
3.信息网络安全公安部重点实验室,上海201204)
基于中间人攻击的SSL VPN运行参数深度检测∗
许 辉1,周志洪1,2,李建华1,姚立红1,3
(1.上海交通大学电子信息与电气工程学院,上海200240;2.上海交通大学深圳研究院,深圳518057;
3.信息网络安全公安部重点实验室,上海201204)
SSL VPN以其部署简单、安全可靠的优势成为目前远程接入市场上的主流方案,被广泛应用于电子商务、电子政务等领域。文中在深入分析了SSL证书验证机制的基础上,通过采用主动式的中间人攻击方式,提出了一种SSL VPN深度检测的方法,实现了对于SSL VPN产品运行参数的深度检测,这些检测信息可进一步被监管机构用于对SSL VPN产品的管理和评估。
SSL VPN;中间人攻击;运行参数;证书;检测
SSL VPN是采用SSL协议来实现远程接入的一种隧道传输技术,用于确保内部资源在各分支机构间快捷而安全地共享。由于其具有部署简单、免客户端、运维成本低等诸多优势,目前被广泛应用于电子商务、电子政务等领域。然而,SSL VPN服务器遭受网络攻击的事却时有发生,如2014年9月以来,雅虎、微软、苹果等企业VPN服务器均遭遇攻击,与此同时,国内SSL VPN产品市场上仍然存在不达标(如没有采用国家密码管理局指定的安全算法等)等现象,在目前国内SSL VPN产品市场需求高速增长的背景下[1],这类安全隐患可能对企业、政府、用户等造成极大的损失,因而对于运行于企事业机构,尤其是政府、银行等关键领域的SSL VPN产品的运行参数进行检测显得尤为必要。本文基于中间人攻击手段,提出了一种SSL VPN运行参数深度检测方法,通过成为客户端和服务端间通信的中间人,进行截获和转发报文,并在本地后台进行报文解析,完成了对于密码算法、IP及物理地址、随机数等一系列运行参数的提取。此外,在检测完成后还进行了现场恢复处理,以免对被检测产品的后续运行造成额外的干扰。
VPN(Virtual Private Network,虚拟专用网络)技术研究开始于20世纪90年代,其目的是通过隧道技术在不安全的网络中建立一条安全的通道,通过使用端到端的认证和加密来保证数据的安全性。在VPN使用的安全协议中,SSL(Secure Sockets Layer,安全套接层)是目前较为成熟的VPN通信协议,该协议最初由网景(Netscape)公司于1994年开发,并成为了Web访问服务中最主要的安全机制,后经IETF标准化并更名为TLS,目前最新版本为2011年TLS 1.2的修订版[2]。SSL VPN位于TCP/IP协议与各种应用层协议之间,能够为高层的应用层协议(如HTTP、FTP等)提供端到端的安全连接,SSL VPN的安全连接分为两个阶段:握手阶段和数据传输阶段[3],其中握手阶段依次完成:
·算法协商:协商本次会话使用的密码套件;
·身份验证:通过证书验证会话双方的身份;
·确定工作密钥:利用密钥交换算法生成工作密钥,用于数据传输阶段的会话加解密和校验。
握手阶段结束后,服务端和客户端即可开始进行数据安全传输。
中间人攻击(Man-In-The-Middle Attack,简称 MITM)是最常见也是最有效的网络攻击方式之一,例如最近被报道的苹果iCloud服务器、微软账号系统等遭遇大规模攻击等事件均与中间人攻击有关。如图1所示,中间人攻击模式是指将“中间人”插入到“客户端-服务端”的通信路径中,对双方的会话信息进行拦截、篡改、转发,从而达到攻击的目的[4]。中间人攻击主要包括ARP 欺骗(ARP Cache Poisoning)、DNS劫持(DNS Spoofing)、HTTP会话劫持(HTTP Session Hijack)及SSL欺骗(SSL Sniff/SSL Strip)等。
上述攻击方式中,ARP欺骗和SSL欺骗是应用于SSL VPN中间人攻击场景的两类主要的方式。两者的区别在于:前者通常需要伪造SSL证书以骗取客户端的信任,而后者则采用将HTTPS替换为HTTP的思路来达到攻击的目的[5]。
相对于被动式的抓包解析检测方案而言,结合中间人攻击方式的SSL VPN运行参数检测,可以解析出SSL VPN中被加密的运行参数,如密钥交换算法、SSL正式会话的主密钥等,使得检测程度更为深入,检测项目更为全面。
图1 中间人攻击示意图
在对SSL VPN的运行参数进行检测的过程中,涉及到的关键功能包括SSL VPN证书伪造及检测现场恢复。
在SSL VPN的身份验证环节,客户端主要通过验证服务端的数字证书来确认与之会话的服务端的合法身份。数字证书验证流程主要包括:客户端首先查找服务端证书的颁发者(Issuer)字段,并根据该字段前往操作系统的证书存储区查找匹配对应的CA根证书,只有同时满足(1)颁发者查找匹配成功、(2)服务端证书指纹(Thumbprint)验签成功这两个条件,才能够确保服务端证书是合法的。
为了使得检测“中间人”通过证书验证环节,通常有两种方式:一种是获取服务端的CA根机构(或其信任的机构)签发的合法证书,默认被操作系统所信任,能够顺利通过证书验证;另一种是通过伪造证书的方式,并基于用户查看证书之后确认无误,会选择忽略警告提示的假设,也能够顺利通过证书验证。后一种假设有其合理性,目前对于大多数国内机构而言,采用自签发证书并要求用户信任的模式[6],而用户也通常会忽略浏览器“此网站的安全证书存在问题”(IE)或“您的连接不是私密连接”(Chrome)等警告信息,而选择点击“继续浏览此网站(不推荐)”链接,使得服务端得以顺利通过证书验证环节。在该假设基础上,使得处于“中间人”位置的SSL VPN检测者得以获取客户端的信任。
在SSL VPN的运行参数检测完成后,“客户端-中间人-服务端”通信路径将会断开。在整个检测过程中,对客户端的ARP缓存表进行了更改(即插入了错误的ARP解析条目),而这将可能影响到客户端下一次与服务端的SSL VPN连接,直接造成无法访问的错误,因而有必要对检测造成的后续影响进行修复。此处的修复方案分为两种:主动式修复、被动式修复。两种方案的设计依次如下:
1)主动式,即直接更新客户端的ARP缓存表,删除掉服务端IP地址对应的条目。从而当客户端再次访问SSL VPN服务端时,由于其ARP缓存表中找不到ARP服务端IP地址,客户端ARP协议将会发出ARP请求(广播),利用服务端的ARP回复来更新ARP缓存表。
2)被动式,即利用ARP缓存表的老化机制。默认情况下,ARP缓存表有一个老化时间计时器,在计时时间内(如Windows是10分钟),若某条目没有被更新或被调用,则该条目将会被自动删除。这个老化时间因设备和系统而异,具体需要参考产品说明。因而若客户端下一次访问时间距此次访问时间超过客户端的ARP缓存表的老化时间,ARP缓存表中的错误条目将会被自动删除,从而使得客户端在下次访问时能够重新根据服务端的ARP回复包新建正确的ARP解析条目。
利用中间人攻击方式对SSL VPN产品进行运行参数的检测,其核心内容包含如下三个部分:
1)将检测“中间人”无缝地插入到“客户端-服务端”通信路径中。该部分的设计流程包括会话报文的侦听、服务器证书的伪造以及检测中间人的网络接入。
2)在本地后台进行报文解析,获取运行参数;
3)在完成运行参数的检测后,将网络环境恢复到初始状态,避免对以后的SSL连接造成影响。该部分和第2)部分在参数检测和现场恢复中综合实现。
为了使得检测“中间人”插入后,一方面可以截获到客户端发起的SSL连接报文,另一方面又不会干扰到客户端的非SSL连接(如HTTP连接等),首先应对检测“中间人”的联网参数进行配置。步骤依次为:
1)开启iptables防火墙的NAT表的重定向功能:将SSL连接(端口号为443)报文转发到本地端口10000进行侦听。以下命令即可实现:
# iptables-t nat-A PREROUTING -p tcp--dport 443-j REDIRECT – to-ports 10000
2)开启Linux内核IP层转发功能,确保客户端的非SSL报文不会被拦截造成客户端出现断网,从而引起客户端的警惕。以下命令可以完成该目标:
#sysctl-w net.ipv4.ip_forward=1
如图2所示,在SSL VPN的握手阶段,服务端会将自己的数字证书Server Certificate发送给客户端进行验证,如果证书验证不通过,客户端将会发送unknown_ca的致命错误,并同时断开连接。
图2 SSL VPN身份验证
结合前文提到的伪造证书通过验证的可行性论证,可以采用以下方案:
1)根据算法协商阶段的密码套件列表,字段集合,在本地预先生成密钥交换算法集合(如SM2、RSA等)的公私密钥对;
2) 利用 SSL_get_peer_certificate(SSL ∗ssl)库函数从服务端SSL套接字中提取出X509格式的证书信息后,制作副本;
3)在副本基础上修改颁发者Issuer信息(例如可将Issuer的最末尾一个域,如O域或C域,追加一个空格),并将原始公钥Public Key替换为本地生成的公钥;最后用本地私钥进行签名。
很显然在篡改证书之后,客户端浏览器在操作系统的“受信任的根证书颁发机构”存储区无法查找到该颁发者,会提示用户该证书不可信任,然而如果用户打开客户端浏览器的证书,与操作系统的相应CA根证书(通过在Windows运行命令窗口中键入certmgr.msc命令)的身份相关的字段进行比对时,从视觉上是无法查找出异常的,因为伪造的证书仅仅在Issuer字段的末尾多出了一个空格。而结合前文的假设,用户极有可能忽略警告继续浏览,从而使得伪造的证书顺利通过身份验证环节。
在完成上述准备工作后,即可将检测“中间人”插入到“客户端-服务端”通信路径中。首先需要伪装成服务端,与客户端建立连接。实现该目标的方法有多种,在局域网中最有效的方法是采用ARP欺骗[7]。
在OSI网络模型中,第二层数据链路层是使用MAC地址进行报文转发的,而第三层网络层则采用IP地址进行报文转发,因此需要一种路由机制去保存和维护IP地址和MAC地址之间的这种对应关系,ARP缓存表就用于达成该目的。ARP欺骗,即是攻击者向目标设备发送恶意ARP指令,迫使目标设备修改原本正确的对应关系,从而使得数据包被恶意发送至错误的目的地,达到劫持会话的目的。具体而言,可利用ARPSpoof开源工具在root权限下发起ARP欺骗攻击,命令如下:
#arpspoof[-i interface][-t target]host
其中interface为检测“中间人”的默认网卡接口,target为客户端的IP地址,host则为服务端的IP地址。该命令的作用是告知客户端,IP地址host绑定的网卡MAC是interface。该命令执行后,客户端发往服务端IP地址的数据报文将被全部被检测“中间人”截获。需要注意的是,此处只需欺骗 “客户端”即可,无需使用ARP双向欺骗,同时欺骗客户端和服务端,因为在之后的会话中,服务端的所有SSL数据包只会发往检测“中间人”,并不会发往客户端。因而ARP欺骗服务端并不是必要的。
本地后台程序主要用于处理SSL数据包,同时与服务端建立SSL连接,以便顺利地将通信路径切换为“客户端-中间人-服务端”。本地程序处理流程如图3所示:
图3 SSL VPN运行参数检测流程
在检测过程中,本地侦听端口10000记录下了客户端和服务端的全部会话数据包,并记录在了session.dat数据文件中。需要注意的是,Socket连接时使用connect()及accept()进行应答,SSL连接时使用 SSL_connect()、SSL_accept()、SSL_read()、SSL_write()进行应答,否则可能出现错误。SSL会话结束后,可采用前述的主动式或被动式的现场恢复方式,恢复客户端的ARP缓存表,以免对客户端和服务端的下一次会话造成影响。
现场实测的网络环境为:SSL VPN服务器的IP地址为192.168.95.15,检测机器的操作系统为Ubuntu 12.04,客户端的IP地址为192.168.95.10。在上述SSL VPN现场检测过程中,检测获得的session.dat数据文件包含了服务端和客户端的全部会话报文。与此同时,本地的后台解析程序也按照SSL VPN握手协议和记录层协议规定的格式对运行参数进行提取[8],此处也可借助Wireshark内置的协议解析工具来提取检测信息,并将解析出的结果输入到testing.dat数据文件。其中在会话过程中能解析出的字段如表1所示。
表1 运行参数字段列表
在上述解析出的参数中,如客户端随机数和服务端随机数可进一步作为随机性检测的素材,用于验证SSL VPN生成的随机数是否满足国家密码管理局《随机性检测规范》的要求,而算法参数也能被相关部门用于与安全相关的管理与审计工作。
SSL VPN作为远程接入领域的主流方案,在市场需求持续增长的同时也出现了一些运行参数不达标的情况,这有可能给企业、用户等造成巨大的损失。本文通过深入理论研究和完善的检测方案设计,提出了一种SSL VPN运行参数深度检测方法。该方法结合中间人攻击方式完成了SSL VPN运行参数的深度检测,检测结果可进一步被监管机构用作对SSL VPN产品的管理和评估的素材,并能够在监管部门的需求基础上,进行后续的模块扩展与集成,有一定的现实意义。
[1] 黄海峰.中国VPN市场进入快速增长期 服务成竞争关键[J].通信世界,2013(21):42.
[2] Dierks T.,et al.The TLS Protocol Version 1.2[S].RFC 5246,New York:IETF,2008.
[3] Eric Rescorla.SSL and TLS:Designing and Building Secure Systems[M].AW Educational Publishers Inc 2001.
[4] Moxie Marlinspike.New Tricks for Defeating SSL in Practice[EB/OL].http://www.blackhat.com/pre-sentations/bh-dc-09/Marlinspike/,2009.
[5] 张恒伽,施勇,薛质.基于SSL Strip的HTTPS会话劫持[J].信息安全与通信保密,2009(10):80-82.
[6] 冯宇彦.电子政务亟待解决的问题:CA根证书的统一管理[J].保密科学技术,2014(05):35-38.
[7] 石利平.ARP欺骗研究综述[J].计算机与现代化,2011(06):193-198.
[8] GM/T 0023-2014,SSL VPN技术规范[S].国家密码管理局,2014.
Operational Parameters Test for SSL VPN based on MITM
XU Hui1,ZHOU Zhi-hong1,2,LI Jian-hua1,YAO Li-hong1,3
(1.School of Electronic Information and Electrical Engineering Shanghai Jiao Tong University,Shanghai 200240,China;2.Shenzhen Research Institute of Shanghai Jiao Tong University,Shenzhen Guangdong 518057,China;3.Key Lab of Information Network Security,Ministry of Public Security,Shanghai 201204,China)
For its convenient deployment and security,SSL VPN now becomes the mainstream solution of remote access market,and thus is widely applied in e-Commerce and e-Government fields.Based on a deep analysis of SSL certificate verification mechanism,a method for SSL VPN parameters test based on active MITM attack technology is proposed,thus to implement operational parameters test of SSL VPN devices,and the test results may be used in management and assessment of SSL VPN devices by supervisory authorities.
SSL VPN;MITM;operational parameter;certificate;test
TP393.06
A
1009-8054(2015)01-0095-04
2014-11-13
国家自然科学基金项目(No.60903191),上海市优秀技术带头人计划(No.13XD1425100)
许 辉(1989—),男,硕士,主要研究方向为网络与信息安全;
周志洪(1979—),男,博士,讲师,主要研究方向为计算机网络;
李建华(1965—),男,博士,教授,主要研究方向为计算机网络;
姚立红(1979—),女,博士,高级工程师,主要研究方向为安全操作系统。■