首页
社区
课程
招聘
转载Juniper“同卵双生”的后门是怎样诞生的:加密失败+第三方恶意修改
发表于: 2015-12-26 17:31 1882

转载Juniper“同卵双生”的后门是怎样诞生的:加密失败+第三方恶意修改

2015-12-26 17:31
1882
新闻链接:http://mp.weixin.qq.com/s?__biz=MjM5Njc3NjM4MA==&mid=401358326&idx=2&sn=e2daefabcc61f008525f581576acc890&scene=4#wechat_redirect
  新闻时间: 2015年12月24日
新闻正文:安全研究人员和加密专家最近几天都忙于找出刚公布的 Juniper NetScreen 防火墙 VPN 流量解密后门的具体细节。现在,他们确信自己已经找到了答案,恶意第三方修改+Juniper自身的加密失败。

据专家称, Juniper 采用已知有缺陷的随机数字生成器 Dual_EC_DRBG (双椭圆曲线确定性随机比特生成器)作为 NetScreen 防火墙 ScreenOS 加密操作的基础,认为由于其采取了额外预防措施而不会产生不安全的后果。但事实是,这些安全保护措施并没有起到效果。

VPN 解密问题是 Juniper 在上周四公布的,同时公布的还有另一个可使攻击者利用硬编码的主密码获得 NetScreen 设备管理员权限的漏洞。该公司称,两个问题都是由最近的内部代码审计中发现的 ScreenOS 未授权代码造成的。

Juniper 发布了受影响固件的补丁版本,但并未公布该流氓代码的具体细节,其位置和可能的添加者都还属于内部机密。FBI 正在调查该事件,网上最新付出的消息显示,始作俑者有可能是 NSA 。

安全社区担负起了逆向老版固件和 Juniper 新补丁的责任,希望能挖掘出更多信息。他们很快找到了那段伪装得非常聪明的硬编码主密码,并发现其影响范围不像一开始认为的那么广。

加密专家深入研究对他们而言更具吸引力的 VPN 流量解密问题,毕竟,暗中窥视加密流量的能力任何时候都不能等闲视之。

没过多久,就有人注意到 Juniper 最新的补丁将一个参数恢复到了受 VPN 解密问题影响的 ScreenOS 6.3.0分支最初版本 6.3.0r12 之前的数值。

德国安全顾问公司 Comsecuris 创始人兼首席执行官拉尔夫-菲利普·威曼(Ralf-Philipp Weinmann)在进一步分析之后称,该参数是双椭圆曲线(Dual_EC)随机数字生成器(RNG)使用的两个常数P和Q当中的Q。

Dual_EC 是美国国家标准技术研究所(NIST)于2007年在美国国家安全局(NSA)的支持下被标准化的,NSA 在其发展过程中扮演了重要的角色。此后不久,微软的两名研究员丹·舒茂(Dan Shumow)和尼尔斯·弗格森(Neils Ferguson)就揭示了该标准中一个可被用作后门的重大漏洞。

“数学分析部分略去不谈,简单地说就是,Dual_EC 依赖于一个特殊的32字节的常数 Q,该常数如果由恶意攻击者产生,他可以仅凭30个字节的原始输出就能预测 Dual_EC 随机数生成器的未来输出。”约翰·霍普金斯大学副教授密码破译专家马修·格林(Matthew Green)在周二发布的一篇博文中写道。

NIST 规范中Q的默认值是由 NSA 产生的,不能保证它真的就是按随机方式产生。事实上,2013年9月,基于NSA前雇员斯诺登揭秘的文件,《纽约时报》报道称 NSA 故意设计了这个漏洞。

该报道促使 NIST 将 Dual_EC_DRBG 从其推荐列表中除名,建议用户转向其他的随机数生成器。在 NIST 的建议之后,Juniper 承认 ScreenOS 采用了 Dual_EC_DRBG,但宣称“是以一种不会造成已被曝光的可能问题的方式利用的。”

ScreenOS 没有采用 NIST 建议的 PQ 常数值作为椭圆曲线的基准点,而是用了“自生成的基准点。”此外,Dual_EC 的输出结果又作为另一个随机数生成器 FIPS/ANSI X.9.31 的输入来产生新的随机数以供 ScreenOS 加密操作取用。

Juniper 为什么要用一个 RNG 的输出作为另一个 RNG 的输入而不直接采用后者那个更安全的 RNG 我们不得而知。但是,如果该实现是切实精准的,控制常数Q应该对攻击者没什么大用处。那么,为什么攻击者要费劲去改那个参数呢?

这个问题的答案被独立研究员威廉·宾格尔斯(Willem Pinckaers)揭晓了。他阅读了威曼的分析,注意到 Juniper 用来将 Dual_EC 的输出传递到 ANSI 生成器的代码中存在有一个错误,会导致该步骤失败。

威廉·宾格尔斯指出:重设种子系统伪随机数生成器函数 reseed_system_prng 将全局变量——系统伪随机数生成器内存指针 system_prng_bufpos 置为32。这意味着在该函数第一次调用以后,紧跟在系统伪随机数产生块 system_prng_gen_block 的重设种子函数调用后面的for循环根本不会得到执行。而且,ANSI X9.31 伪随机数生成器代码完全没用。

该错误似乎早于未知攻击者对Q点的未授权改变,其本身也可被视为一个后门。实际上,威曼将整件事描述为“被后门的后门”。

“总而言之,某黑客或黑客团伙发现了 Juniper 软件中现有的一个后门,可能是故意设置的也可能是无意造成的——你自己判断!”格林说,“然后他们在此之上又建了一个他们自己的后门——因为所有的苦劳都已经替他们做了嘛。最终结果就是有那么一段时期,某些人——或许是外国政府,能够解密美国和全世界的 Juniper 流量。而这一切全都因为 Juniper 自己已经为他们铺好了路。”

Juniper 没有立即回应对此做出评论的请求。

格林称,即使 Juniper 没有故意引入该漏洞,如果美国政府当局强迫厂商在加密实现中设置后门以便合法窃听通信,那么此事无疑就是其后果的绝佳案例。

“加密后门的问题不在于它们是攻击者闯入我们加密系统的唯一途径,而在于那是最佳途径。这些后门辛苦假设好管道和电线,让攻击者可以大摇大摆地走进来改换门庭。”

“该漏洞告诉我们的是,此类担忧不再是理论上的。”格林说,“如果加密后门确实存在于我们的未来里,那我们所有的工作就更难做了。”

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//