写点什么

Apple 最为臭名昭著的代码漏洞

  • 2020-08-20
  • 本文字数:2297 字

    阅读完需:约 8 分钟

Apple 最为臭名昭著的代码漏洞

导读 :计算机软件是由人类编写的,是人类就一定会犯错。但有些错误实在不该犯,Apple 就犯过这样的低级错误。


本文讲述了代码中的一行是如何危及所有 Apple 设备的安全性。


“Bug”,这是一个让大多数开发人员夜不能寐的单词,这也是为什么当你和他们交谈时,他们不断地走神发呆,双眼茫然凝视。虽然这有点悲哀,但事实并没有那么糟糕。软件中的错误总是能被识别出来,而且是无法避免的,原因很简单,因为我们是人类,是人类就会犯错。大多数漏洞都可以通过严格的 软件测试 得以消除,但也有一些 “漏网之鱼”。真正走红的是那些愚蠢却有害的漏洞。其中之一是 Apple 臭名昭著的代码漏洞,非正式的说法是 “ goto fail ”,官方名称为 “ CVE-2014-1266”。


这一漏洞削弱了 Apple 设备验证你所访问的网站真实性的能力。这意味着你的 iPhone 无法区分真实银行网站和冒名顶替者。

SSL:计算机如何验证并信任互联网上的其他计算机

在我们了解问题出在哪里之前,我们需要了解 “ SSL ”(Secure Sockets Layer,安全套接层):该机制使计算机能够信任并验证互联网上的网站。你的浏览器每次都会为你执行此操作,看起来如下图所示:



如今,所有的网站都使用 HTTPS (即带有 SSL 的 HTTP)进行安全连接。这会迫使你访问的网站出示 证书 以证明其真实性。然后,你的计算机将对照浏览器中的一组预加载密钥对其进行验证,以查看它是否由认证机构进行了数字 “ 签名 ”。这种 “ 数字签名” 利用了 非对称加密算法的数学原理。如果计算正确,并且证明证书确实是由浏览器中的 数字证书认证机构 (Certificate Authority,CA)密钥签名的,那么它就将为你开绿灯,一切都很顺利。没有人能做到窃听你的数据或劫持你的网络会话。


但是,如果在另一端有冒名顶替者的话,你的浏览器就会阻止你。下面是我用 Python 创建的一个例子,伪装成 Wikipedia.org 的服务器:



浏览器知道这一点,因为我没有一个由浏览器验证的权威机构签署的证书。实际上,我亲自签署了证书,上面写着 “ 我是 Wikipedia.org ” (不是最伟大的黑客),但 SSL 知道这一点,并保护你免受其攻击。注意:这是 “ 自签名根证书 ”。


Apple 的 SSL 验证码被破解

Apple 代码中的漏洞削弱了计算机执行证书验证的能力。其后果是有害的,因为它破坏了从你的设备安全使用互联网所涉及的信任和验证的结构。


带有该漏洞的 C 语言代码如下所示(为简洁起见,对代码进行了简化)。你的 iPhone/Mac 在每次访问网页时都会调用这个函数,下面是它发生的情况:



所以,这段代码检查了网站证书的真实性。这个过程有一系列的检查,使用了多个 if 语句。但奇怪的是,你可以看到还有一行: “ goto fail; ” (以橙色标记),变成了一个 无条件 语句。这是因为它位于 “ if ” 语句之外(C 并不像 Python 那样由缩进驱动)。在 C 语言中,这意味着它总是跳过后面的行(以蓝色标记),跳到底部的 “ fail ” 行以返回变量 “ err ”。因此,如果 “ err ” 变量是在此之前是成功的,那么整个验证将会成功,而不再进行验证额外的检查(以蓝色标记)。


如果你在抗议: “为 If 语句使用 {} 大括号!”,你是对的。我们已经不是 80 年代的人了,那时候的人们试图通过避免在小型 EPROM上的换括号来节省几个字节。


简而言之,所有 Apple 的设备(iPhone、Mac、iPad)都 失去了执行 SSL 验证的能力,而 SSL 验证是防止窃听和网络劫持的互联网标准防御措施 。这个漏洞与 2014 年年中首次发布在 通用漏洞列表 (Common Vulnerabilities and Exposures)数据库中,你可以在 这里查看。


Apple 在 iOS 7.0.6 更新中修复了这一问题:


https://support.apple.com/en-gb/HT202934 iOS 7.0.6 Data Security 
Available for: iPhone 4 and later, iPod touch (5th generation), iPad 2 and later
Impact: An attacker with a privileged network position may capture or modify data in sessions protected by SSL/TLS
Description: Secure Transport failed to validate the authenticity of the connection. This issue was addressed by restoring missing validation steps.
复制代码


顺便说一句,这个漏洞只适用于 TLS 1.2 以下的 SSL 版本,而不适用于 TLS 1.2 。但是,TLS 版本可以在计算机之间协商,如果远程服务器愿意的话,它可以选择 TLS 1.1 。因此,这意味着漏洞依然存在。

中间人攻击

MITM(Man in the middle,中间人)攻击是最为常见的漏洞攻击,允许黑客进入中间位置并窃听你与真正网站之间的所有流量。这意味着他们几乎从你那里得到了所有的信息——你的密码、信用卡详细信息、你的位置等等。



中间人攻击在密码学和计算机安全领域中是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。

—— Wikepedia

回顾

“人非圣贤,孰能无过”,但这也是我们在生活中遵循过程的原因。我们都会犯错误,但现有的软件流程应该已经识别出错误。


  • 为什么 单元测试 没有发现这个错误?

  • 为什么没有 同等代码 评审?

  • 为什么 软件测试过程 或自 动化测试 没有发现这个错误?

  • CI/CD 管道对软件构建和部署运行自动化测试,为什么没有起作用?


虽然有些代码漏洞是难以置信的复杂和微妙,但也有一些明显而愚蠢的错误,会带来严重的损害。Apple 臭名昭著的 “goto fail” 代码漏洞就是后者,它在软件和生活中都提醒人们,在发布之前一定要进行测试、测试、再测试。


作者介绍:


Komal Venkatesh Ganesan,工程师,专注于软件、人工智能和技术。追求对基础物理学、科学的基本理解。


原文链接:


https://medium.com/swlh/apples-most-notorious-code-bug-6478ebaea44f


2020-08-20 10:581723

评论

发布
暂无评论
发现更多内容

惊艳的数据可视化案例 让可视化设计灵感迸发

2D3D前端可视化开发

数据分析 数据可视化 数据可视化工具 前端数据可视化 数据可视化设计

架构师必备!阿里P8耗时6个月手码架构师进阶笔记真的香

Java你猿哥

Java 架构 ssm 架构师

LED显示屏光污染防治指南

Dylan

国际化 人工 LED显示屏

读书笔记丨理解和学习事务,让你更好地融入云原生时代

华为云开发者联盟

云计算 云原生 华为云 华为云开发者联盟 企业号 5 月 PK 榜

别慌!阿里专家破SpringBoot:入门+基础+进阶+项目

做梦都在改BUG

Java spring Spring Boot 框架

太强了!京东首席架构师深邃洞察:服务化+云原生+微服务

做梦都在改BUG

Java 架构 微服务 云原生

华为云网站安全解决方案助力企业腾“云”驾“务”

YG科技

多位P8大佬联合打造的Java面试八股文,堪称《Java驾考宝典》

Java你猿哥

Java MySQL redis spring 多线程

阿里P9耗时28天,总结历年亿级活动高并发系统设计手册

做梦都在改BUG

Java 架构 系统设计 高并发

「微服务」这10道Consul面试题值得一看

王中阳Go

golang 微服务 面试题 服务发现 服务注册

京东APP百亿级商品与车关系数据检索实践 | 京东云技术团队

京东科技开发者

数据库 京东云 企业号 5 月 PK 榜

玩转服务器之Java Web篇:手把手教你搭建Java Web环境 | 京东云技术团队

京东科技开发者

Java 云服务器 京东云 企业号 5 月 PK 榜

外译笔记 | 比尔盖茨:AI与智能手机和互联网一样具有革命性

京东科技开发者

AI 京东云 企业号 5 月 PK 榜

京东小程序折叠屏适配探索 | 京东云技术团队

京东科技开发者

京东云 企业号 5 月 PK 榜 京东小程序

获得清晰、无噪点的图像:Topaz Photo AI 激活电脑版

真大的脸盆

Mac Mac 软件 图像降噪 图像噪点处理

AI系统伦理道德风险之可信任度验证

陈磊@Criss

AI 伦理道德

秒验 运营商SDK错误码

MobTech袤博科技

几种常见的Python数据结构

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

当Serverless遇到Regionless:现状与挑战

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

横空出世!复盘B站面试坑我最深的Java并发:JDK源码剖析

做梦都在改BUG

Java 源码 jdk 高并发

mosn基于延迟负载均衡算法——走得更快,期待走得更稳 | 京东云技术团队

京东科技开发者

负载均衡 京东云 企业号 5 月 PK 榜

昇腾实战丨DVPP媒体数据处理视频解码问题案例

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 5 月 PK 榜

RabbitMQ - 1消息队列中间件AMQP协议、和主要角色

Java你猿哥

Java ssm AMQP Rabbit MQ

【云管平台】2023年云管平台厂商排行榜

行云管家

云计算 企业上云 云管平台 行云管家

kafka高性能设计之内存池

做梦都在改BUG

Java kafka 系统设计 高性能 内存池

阿里内部架构解密:网络+分布式+RPC+消息中间件+微服务

做梦都在改BUG

Java 架构 微服务

优雅!用了这两款插件,我成了整个公司代码写得最规范的码农

AI乔治

Java 架构 面试 IDEA java代码规范

什么是人工智能领域的过拟合和欠拟合

汪子熙

人工智能 机器学习 深度学习 强化学习 三周年连更

极光笔记 | 极光推出“运营增长”解决方案,开启企业增长新引擎

极光JIGUANG

营销 运营 用户运营

开源智慧家居

源字节1号

微信小程序 软件开发

图解制品仓库CodeArts Artifact

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

Apple 最为臭名昭著的代码漏洞_语言 & 开发_Komal Venkatesh Ganesan_InfoQ精选文章