Juniper VPN后门事件分析

2015年12月15日著名的网络设备厂商Juniper公司发出风险声明,其防火墙、VPN设备使用的操作系统具有重大安全风险,建议尽快升级相关版本。

声明中提及两个重大风险:

1)设备的SSH登录系统在输入任意用户名的情况下,使用超级密码“<<< %s(un=‘%s‘) = %u”后就可以最高权限登录系统。

2)设备的VPN安全通道上传递的数据可以被攻击人解密、篡改和注入。下文就该VPN安全事件进行深入的分析。

2008年Juniper公司决定在其VPN设备的操作系统ScreenOS中引入随机数生成算法:Dual_EC_DRBG(DualElliptic Curve Deterministic Random Bit Generator)该算法由美国情报机构NSA在2000年提出,在2004年纳入美国标准ANSI X9.82。同年NSA通过和RSA签署1千万美金的合同,RSA公司将该算法作为其广泛使用的密码应用开发包BSAFE的默认随机数生成算法。通过美国的NIST组织推动,在2005年该算法也被纳入ISO/IEC 18031。

Dual_EC_DRBG算法基本工作方式如下:在定义于32字节大小素域的椭圆曲线上选择两个阶p(p为256比特大小的素数)点P,Q后,根据初始化状态s0 (32字节数),通过以下计算输出32字节“随机”数据。其中[s]R是在椭圆曲线上对R的倍点运算,x轴(R)是取点R的x轴向量值。

  1. s1 = x轴([s0]P)
  2. r1 = x轴([s1]Q)
  3. s2 = x轴([s1]P)
  4. r2 = x轴([s2]Q)
  5. 输出 = 低三十字节(r1) ||高两字节(低三十字节(r2))

从该算法提出之日起,业界就质疑该算法的安全性,认为其有被植入了后门的可能。2007年8月微软的两个学者Shumow、Ferguson在密码学会议上报告利用Dual_EC_DRBG的方法。

  1. 如果攻击人知道d:  P=[d]Q, 知道算法的当次输出:低三十字节(r1) ,最多尝试64K次就找到某个或多个R=[s1]Q(r1只有2个字节未知,最多尝试64K次就可以确定[s1]Q的x轴值,进而确定y轴值)
  2. 计算x轴([d]R)=x轴([(d*s1)]Q)=x轴([s1][d]Q)=x轴([s1]P)=s2
  3. 根据s2可以计算s3、s4、r3、r4和新的低三十字节(r3) ||高两字节(低三十字节(r4))

通过上面的分析可以看出,如果P、Q中只要有一个是由攻击人主动选择的,攻击人就可以计算出发起攻击的参数d,进而通过观察算法应用过程中暴露的某些“随机数”,计算出下个密码运算使用的“随机数”。因标准文本中的P、Q均有NSA提供,所以理论上NSA是可能破解使用该算法的密码系统的。

在这样的背景下Juniper公司于2008年在其ScreenOS中引入Dual_EC_DRBG算法并对VPN的密钥交换协议的实现进行相应的调整。其中涉及4个重要的变化:

  1. 引人Dual_EC_DRBG算法作为随机数源。
  2. 系统默认配置下直接将Dual_EC_DRBG算法输出作为系统随机数发生器输出。在特定命令配置后,系统将Dual_EC_DRBG算法输出作为另外一个随机数算法的随机种子。
  3. 将VPN密钥交换协议IKE协议的Nonce字段从20字节修改为32字节。该Nonce字段是IKE协议中明文字段,包含随机数。
  4. 一次性生成IKE协议过程需要的所有随机数,缓冲到队列中,也就是将协议中需要使用的Nonce,Diffie-Hellman(DH)交换中的随机私钥等一次性生成。

另外Juniper在实现Dual_EC_DRBG算法是并未使用ANSI X9.82中的点Q,而是自己生成了另外一个点Q‘。经过以上的修改后,如果攻击者知道d‘:  P=[d‘]Q‘,通过观察IKE协议的报文交换首先获取协议中明文Noince字段中的32字节随机数,进而可以计算中协议后续过程中的所有随机数,包括DH交换中的随机私钥。在获得DH的随机私钥后,就可以计算协商的会话密钥进而对建立的VPN隧道进行解密、窜改等各种攻击操作。通过以上分析可以看出,如果Juniper公司不是随机生成点Q‘,而是通过简单计算,如:随机选择256比特数e,计算d‘=e-1 mod p (p是点P的阶),Juniper公司就具备包括解密使用其设备进行VPN通信的各种能力。但故事并未在这里结束。

在2013年6月根据爱德华斯诺登泄露的文件显示NSA通过执行一个称之为Bullrun项目将Dual_EC_DRBG算法植入标准、广泛使用的算法开发包等方式获得解密密码系统的能力。2013年10月Juniper发出声明其设备并不会受到NSA破解能力的威胁,因为1)Juniper使用了不同的点Q‘。2)Dual_EC_DRBG算法的输出还会经过另外一个随机数生成算法进行运算。2013年这个时间点上,这个声明中的两个关键点都不成立。其中关于第2)点,Juniper设备在默认情况下,直接将Dual_EC_DRBG算法的结果作为系统的随机数发生器输出。只有在使用一个非公开的命令配置后,Dual_EC_DRBG算法的结果才会被作为另外一个随机算法的种子。Juniper在2016年1月修改了这个声明[6],去除了第二项。在网页存档系统中可以发现原始声明[3]。声明中的第1)点在2015年12月的风险提示中也被证明并不正确。Juniper提示通过代码审查发现,在2012年的某个时间,其公司的ScreenOS的源代码被篡改。其中Dual_EC_DRBG算法实现中原先使用的Q‘被窜改为了另外一个X,Juniper发布补丁将被篡改的值恢复为原值,并决定在2016年中完全去除Dual_EC_DRBG算法算法。

在这个充满戏剧性的事件中,Juniper公司无论出于何种原因在其VPN上留下一个可以被潜在利用的功能。因法律以及缺乏相关信息的原因,本文作者不能将该功能归类为错误的实现还是有意的设计。至今未披露或者确定身份的攻击者冒着巨大的风险或者使用了高超的攻击技术手段,通过修改Juniper源代码服务器上的代码来获得了解密Juniper VPN设备保护的敏感数据的能力。而在过去4年或者8年期间用户对此一无所知。

关于奥联

深圳奥联信息安全技术有限公司专注于国家SM9密码算法产品和应用研究,是SM9算法原创单位之一。奥联研发的基于SM9算法的产品和解决方案,已成功应用于国家信息中心、中国信息安全测评中心、国家信息安全技术研究中心等单位。更多信息请访问www.myibc.net

参考文献:

[1] D.Shumow and N. Ferguson. On the possibility of a back door in the NIST SP800-90Dual Ec Prng. CRYPTO 2007 rump session, Aug. 2007. URLhttp://rump2007.cr.yp.to/15-shumow.pdf.

[2] MatthewGreen. A Few Thoughts on Cryptographic Engineering. Jan. 2015. http://blog.cryptographyengineering.com/2015/01/hopefully-last-post-ill-ever-write-on.html.

[3]JuniperNetworks. Juniper Networks product information about Dual_EC_DRBG. KnowledgeBase Article KB28205, Oct. 2013.https://web.archive.org/web/20151219210530/https://kb.juniper.net/InfoCenter/index?page=content&id=KB28205&pmv=print&actp=LIST.

[4] JuniperNetworks. Out of Cycle Security Bulletin: ScreenOS: Multiple Security issueswith ScreenOS (CVE-2015-7755, CVE-2015-7756). Dec. 15 2015. https://kb.juniper.net/InfoCenter/index?page=content&id=JSA10713&cat=SIRT_1&actp=LIST.

[5] H. Moore.CVE-2015-7755: Juniper ScreenOS Authentication Backdoor. https://community.rapid7.com/community/infosec/blog/2015/12/20/cve-2015-7755-juniper-screenos-authenticationbackdoor,Dec. 2015.

[6]JuniperNetworks. Juniper Networks product information about Dual_EC_DRBG. KnowledgeBase Article KB28205, Jan. 8 2016. https://kb.juniper.net/InfoCenter/index?page=content&id=KB28205&pmv=print&actp=LIST

[7]Bullrun(decryption program) . Wikipedia, thefree encyclopedia, Apr. 13,  2016. https://en.wikipedia.org/wiki/Bullrun_(decryption_program)

[8] S. Checkoway,S. Cohney, C. Garman, etc. ASystematic Analysis of the Juniper Dual EC Incident. Apr. 2016. http://eprint.iacr.org/2016/376.pdf

时间: 2024-10-19 02:27:55

Juniper VPN后门事件分析的相关文章

MPLS VPN与IPSec VPN对比分析

转:http://www.xzbu.com/8/view-7456625.htm 1 引言 互联网的快速发展大大促进了信息资源的交流,与此同时,人们对频繁出现的安全保密问题也愈加关注.通过传统的方式构建企业内部或企 业之间的安全通信环境,必须通过自建通信干道或租用电缆和光缆,利用ISDN(Integrated Services Digital Network,综合业务数字网)或DDN(Digital Data Network,数字数据网)等技术构建企业专用网,若想在安全性和可靠性上得到保障,获得

网络规划与设计中的VPN技术

从VPN技术分析入手,总结出了VPN在园区中的部署方式,并给出了VPN在教育城域网部署中的推荐模型. 对VPN实现的Tunnel技术影响转发速度,不适合通过Internet配置Tunnel的内部网络系统的问题,提出了在路由表中添加用于实现Tunnel的信息表和增加Tunnel表,来取代Tunnel Server Card的解决办法. 对VPN安全认证机制存在的安全隐患,提出虚拟工作流的概念,采用延迟后验,来弥补VPN方式的安全缺陷,提高系统的安全性. 把基于角色的访问控制(RBAC)模型引入到V

cisco learn book index

------------------------------------------------------------------ Routing TCP/IP Volume 1 , Second Edition ------------------------------------------------------------------ Routing TCP/IP Volume 2 ---------------------------------------------------

20150610,微软6月10日发布8个安全补丁

?? 大家好,我们是微软大中华区安全支持团队. 微软于北京时间2015年6月10日发布了8个新的安全公告,其中2个为严重等级,6个为重要等级,修复了Microsoft Windows.Microsoft Office.Internet Explorer 和 Exchange中的漏洞.其中MS15-056中所修复的漏洞CVE-2015-1765和MS15-060中的漏洞CVE-2015-1756已公开披露,MS15-061中的漏洞CVE-2015-2360,微软已经发现利用该漏洞的攻击. 与此同时

juniper防火墙动态VPN配置

一.拓扑图 墙规划三个安全区域:trust,untrust,dmz. trust接口:ge-0/0/0 管理ip:192.168.1.1/24,公司办公区. untrust接口:ge-0/0/1管理ip:100.100.100.1/24,接外部互联网. dmz接口:ge-0/0/2管理ip:10.10.10.1/24,公司服务器区. 远程动态vpn客户端分配地址池范围:172.16.10.0/24,分配的地址段:172.16.10.10---172.16.10.250. 二.具体配置 1.配置主

Juniper 防火墙建立VPN不成功:Phase1:Retransmission

Juniper防火墙建立VPN不成功,日志中出现下面的提示:Phase 1: Retransmission limit has been reached. 下面是从Juniper资料库中查到的相关资料,按照Juniper资料库的办法好像并没有彻底解决问题,不过可以参考一下Juniper防火墙的排错思路. Synopsis: VPN won't come up; It is failing in Phase 1, with Retransmission limit has been reached

【转】双层,多层vpn连接实现及分析

转载自:http://bbs.51cto.com/thread-1099702-1.html 相信很多人之前都看过一篇帖子<WJ是如何找到发帖人>,这篇帖子原来原出处safe121,由核总从乌云分享到自己的个人网站!假如没有看过看过的话,可以从这里去了解一下!<传送门>    也是因为这个帖子的缘由,我和论坛的 @问题好解决 决定做一些简单的实验去验证一下!我们想比较一下,多层vpn与多层跳板这个是否都能实现隐藏的作用!但在实验这期间有很多的失败,最终选择一个简单容易实现的方案去验

关于Juniper ssg140 L2TP VPN设置,说说你的看法?

概述:其他PC通过Internet访问ServerB,已在Juniper SSG140的Untrust接口E0/2上做了VIP,将对222.17.116.109:3389的访问映射给了172.16.0.11:3389(ServerB). 现在老板要求一台PC A通过VPN拨入到Juniper SSG140,然后与Server B进行通信.于是我在SSG140上做了L2TP VPN的相关设置,并在PC A(操作系统WIN7)上新建了网络连接,现在PC A已经能够成功拨入VPN,并获得192.168

Juniper Netscreen VPN linux客户端--Shrew Soft VPN Client

1.安装依赖包 yum -y install gcc gcc-c++ flex libedit libedit-devel bison openssl openssl-devel qt qt-devel 2.安装cmake wget http://www.cmake.org/files/v3.0/cmake-3.0.0.tar.gz tar zxvf cmake-3.0.0.tar.gz -C /usr/src cd /usr/src/cmake-3.0.0 ./configure make m