驱蚊器喵的翻译平台

Can you hear the gravity?

《Mr. Robot》是我看过的最为精彩的黑客电视剧,剧中有大量真实的黑客元素,几年前看的时候有些看不太懂,直到最近才发现《Mr. Robot》技术顾问 Ryan Kazanciyan 写的揭秘文章,文章内有一些创作来源和幕后故事,看了以后觉得非常有趣,决定翻译后放到翻译平台上。


原文地址:https://medium.com/@ryankazanciyan/lookback-building-the-firmware-hack-for-mr-robots-season-2-finale-d832715b84aa
原文标题:Lookback: Designing the firmware hack for Mr. Robot’s season 2 finale
原文作者:Ryan Kazanciyan
原文写于:2022/03/10

译者:驱蚊器喵#ΦωΦ
翻译水平有限,有不通顺的语句,请见谅。


朋友,又见面了! 就在第二季大结局 “eps2.9_pyth0n-pt2.p7z” 播出不久之后,我最初在 2016 年 9 月写了这篇关于 “第二阶段” 入侵的幕后故事。五年多后,虚构故事再次映射了现实。物联网安全公司 Armis 发表的研究报告显示,他们能够远程入侵 UPS 设备并导致其过热。

我最初的文章是放在公司的网站上,但后来被删除了,所以我决定将这个博客上的草拔一下,重新发表。如果你喜欢阅读这篇文章,请考虑向许多帮助支持乌克兰人民的慈善组织捐款。


节目编剧和技术制作人 Kor Adana 向我提出了一个具有挑战性的请求:帮助制作在第二季的最后一集中曝光的 “第二阶段” 的入侵故事。剧本中的总体计划已经确定。Tyrell 和 Elliot 需要破坏 Evil Corp 的储存设施中的电源控制系统,对 UPS 设备中的电池进行过度充电以释放氢气,最后,在风扇和备用电源关闭时,反复重启 UPS 自动变压器来产生火花。最终,使 Evil Corp 的储存设施爆炸。

我最初的反应是,”我到底要怎样完成这件事,并使屏幕上短暂画面看起来尽量真实?” 我之前所做的许多场景都是基于熟悉的攻击载体,例如,Trenton 用嵌入 Stagefright 漏洞的恶意网站入侵 Mobley 的手机。但这两事情完全不在一个层次上。

Kor 和节目中的另一位技术顾问 James Plouffe 最初从 2001 年发生在 Sacramento 数据中心的一个事件中获得了灵感。在那次事故中,过度充电和不通风的 UPS 电池最终导致了氢气爆炸,对一个 5 万平方英尺的建筑物造成了重大损失。当我开始思考可能让黑客故意造成类似事件的情况时,我想起了最近乌克兰的电网被入侵的事,黑客关闭了几十个变电站,使数十万居民陷入黑暗。

我首先考虑的是,任何计算机控制的企业硬件,包括像数据中心的电源和控制系统,都有几种不同层级的 “功能”。

  • 终端用户控制界面:用于标准管理和配置
  • 制造商控制界面:用于维护、升级和可能对最终用户隐藏的功能
  • 安装在固件上的底层操作系统:基本上是嵌入在设备内的软件,所有用户和管理功能都在其底层操作系统之上
  • 底层硬件本身的原始功能和物理限制

我开始动脑筋想,如何能使 UPS 系统对其电池过度充电,或者是反复开启和关闭自动变压器。正如你可能期望的那样,管理员可以为这些设备定制性能、操作设置、阈值,但不能超过安全限度。如果有人想超越这些限制,或以原始软件不允许的方式操作硬件,他们必须修改底层固件。这将需要几个步骤。

首先,你需要一个目标设备的干净固件镜像。获得这个东西比你想象的要容易:许多供应商为他们的设备提供完整的(无差异的)固件更新,在他们的支持网页上开放给任何人下载。

接下来,你必须对固件进行逆向工程,基本上找到有关你想控制的功能的可执行代码部分,然后对其进行相应的修改。根据底层代码的隐蔽性或复杂性,这可能是一项极具挑战性的任务,但拥有这些技能的人绝对是存在的。在我的职业生涯中,我曾有幸与几位出色的逆向工程师合作,他们所做的一切总是让我感到惊讶。

最后,你必须弄清楚如何将被篡改的固件加载到设备上。虽然大多数现代控制系统对固件更新有完整性检查和签名验证,但不幸的是,这并不是所有硬件的情况;即使存在,攻击者也可能发现绕过的办法。

考虑到这种方法,Kor 和我讨论了修改剧本中的一些对话,改变 Tyrell 和 Elliot 描述黑客的方式。我们想让大家明白, Tyrell 是在修改固件,重写软件强制的安全限制,而不只是运行一些恶意脚本或是虚构的 “超级恶意软件”,来自动导致了如此灾难性的后果。

同时,我开始在 Kali Linux 中模拟屏幕和模拟攻击的各个阶段。我的第一步是获得一个真正的企业 UPS 管理系统的固件和文档,就像之前说过的,这很容易,只需求浏览几个主要供应商的公开支持网页。

随后,我使用了一个名为 “binwalk“ 的工具来分析固件镜像,并识别其构成部分。当 Elliot 第一次看到 Tyrell 正在工作的屏幕时,两个 binwalk 命令已经完成。第一个命令使用的是选项:”-y ‘base64’ -y ‘filesystem’ apc_hw05_aos_640.bin“。这是在固件中搜索包含 Base64 编码数据或文件系统签名的位置。固件的资源通常位于这些位置。

binwalk 的第二次运行使用单独选项”-A“。这将搜索固件的常见 CPU 架构的操作代码,如英特尔 X86 或 MIPS 指令,从而准确地指出固件包含可执行代码的地方,这将是反向工程和篡改的目标位置。该命令找到了两个包含了似乎是英特尔 X86 代码的地方。

对固件镜像进行 "binwalk" 分析的原型图

在这一集的后面一点部分, Elliot 与 Tyrell 对峙,而 Tyrell 正在键盘上继续进行黑客工作。我想展示 Tyrell 在分析和修改 “binwalk” 所识别到的一处可执行代码区域的过程。由于他使用的是 Kali Linux,我决定让他使用一个名为 “radare2“ 的开源二进制逆向工程工具包。(对不起了,IDA Pro 的粉丝们!)

屏幕显示,Tyrell 运行了几个命令。最初的命令将固件加载到 “radare2” 中,加载的偏移量接近 “binwalk” 识别到的一处可执行部分。

1
radare2 –s 0x32C24 –w apc_hw05_aos_640.bin

在 "radare2" 中对固件进行逆向工程的原型图

在屏幕上,观众看到 Tyrell 在 radare2 中第一个命令 “pd 16“ 以及命令的输出结果,命令输出了从该偏移量开始的 16 字节的反汇编代码。下一条命令,”s 0x00032c34“,将光标设置到指定的地址,接着是 “pd 1“,显示它包含指令 “je“ - “如果相等就跳转”。Tyrell 刚刚打完 “wx 75“,覆盖了一个字节,将指令改为 “jne“ - “如果不相等就跳转”,有效地扭转了决定代码块流程的逻辑。

控制之后,Elliot 退出了 “radare2”,并运行了 Linux 的 “shred” 命令,以安全的方式删除被篡改的固件。

所有这些截图和模拟图都是使用这些真实存在的命令和工具,在 Kali 虚拟机中操作真实的固件镜像。我是否真的创建了一个 “武器般” 的固件或发现了漏洞?当然没有。事实上,我选择了一个任意的代码段,并翻转了一个单一的跳转指令 - 我都不知道那段代码到底是做什么的,而且除了创造一个无法加载的损坏固件之外,固件很可能会造成伤害。一个实际的攻击可能要复杂几个数量级,Tyrell 仍然需要一个额外的漏洞来绕过固件完整性检查。但这个总体过程是所有电视节目或电影中所尝试的最接近真实的一个。

从头到尾,Kor 和我花了一个多星期的时间为这一场景进行前期设计,在最后的网络剪辑前,我们还花费了更多的时间来审查和调整一些东西。所有这些都是为了几秒钟的屏幕时间,但在故事的一个绝对关键的时刻。

本文作者 : meow
This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接 : https://translation.meow.page/post/lookback-building-the-firmware-hack-for-mr-robots-season-2-finale/

本文最后更新于 天前,文中所描述的信息可能已发生改变