驱蚊器喵的翻译平台

Can you hear the gravity?

  1. 1. 密码破解,以及一些 LUKS
  2. 2. 确定五/九的命运
  3. 3. 结语

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


原文地址:https://medium.com/@ryankazanciyan/mr-robot-disassembled-eps3-9-shutdown-r-e03d5fa0069a
原文标题:Mr. Robot Disassembled: eps3.9_shutdown -r
原文作者:Ryan Kazanciyan
原文写于:2017/12/15

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


朋友们你们好。我是 Ryan Kazanciyan,《Mr. Robot》 的技术顾问。从第二季的后半部分,我开始与 Kor Adana (作家、制片人和 ARG 背后的策划者) ,以及《Mr. Robot》团队的其他成员一起工作。在整个第三季中,我将负责编写剧中描述的黑客,他们是如何聚集在一起的,以及他们的现实基础。

剧透警告! 本文讨论的是第三季最后一集中的事件。


正如标题所暗示的,”eps3.9_shutdown -r” 标志着 Elliot 以及他与 Mr. Robot 的关系既是一个结束(shutdown),也是一个新的开始(-r),指的是重启。因此,这一集的黑客攻击唤起了第一季的场景,也同样是 Kor 和我在过去一年中设计的第一个和最后一个技术元素。

密码破解,以及一些 LUKS

在上周的剧情中,我们看到了 Trenton 在给 Elliot 的 “杀戮开关” 邮件中附上的纽约警察局监管链文件的内容。该文件逐项列出了从 Romero 家中查获的证据,其中包括四个带有加密数据分区的键盘记录器。NYPD(纽约警察局)无法从这些设备中恢复内容,我们可以推测,FBI 也无法恢复。

监管链表,上面列出了 Romero 家的证据

当 Dom 让 Elliot 访问她的 FBI 电脑和 Sentinel 系统时,他可以检索到键盘记录器的取证图像,但他仍然要想办法破解密码来查看其捕获的数据。

这个场景的参数带来了一些有趣的技术挑战。FBI 有足够的计算能力,可以暴力破解加密的证据。如果 Elliot 通过像 “John the Ripper” 这样的破解工具输入一个普通的字典文件而偶然发现了密码,那就不可信了。此外,Romero 会足够精明地使用一个长密码和一个强加密算法。

我决定, Romero 的键盘记录器被设计为使用 LUKS(一种 Linux 的磁盘加密规范)来存储捕获的数据。除其他好处外,LUKS 的参考实现使用了一种计算缓慢的算法,这使得它很难通过自动化密码猜测或暴力破解。

当 FBI 破解失败时, Elliot 如何能成功呢?他依靠对 Romero 的个性、兴趣和作为黑客的习惯的了解,精心设计了一份更好的词表。 Kor 和我最终想出了使用音乐的主意,把一首歌曲的歌词变成一个密码。他把 Romero 最喜欢的艺术家的名单放在一起,于是我在现场工作时听了一些 Curtis Mayfield 的歌。

Elliot 需要一些工具,而这些工具在 Dom 的 FBI 电脑上是没有的。我们在设计这个场景时,假设他首先 SSH 到他在 VPS 上设置的 Kali 实例,然后再进行屏幕上的操作。

我们首先看到 Elliot 运行 PyLyrics 来下载 Romero 最喜欢的艺术家的所有歌曲的歌词:

下载歌词,为 Romero 的键盘记录器建立一个有针对性的密码破解词表

输出结果被存储在一个文件中,”lyrics.txt”,作为密码破解工具的输入。

在下一个一闪而过的镜头中,我们看到两个并排的窗口。左边的窗口显示了一个命令的输出,该命令列出了一个 LUKS 磁盘分区的信息。

1
cryptsetup luksDump ~/keyintercept_1.raw

Elliot 会运行这个来确认所使用的加密类型。

左边是 LUKS 分析;右边是开始破解密码的攻击

右边的窗口显示了破解的过程。我原本想在这个场景中使用 Hashcat,即最流行的一个密码恢复工具。不幸的是,Hashcat 直到 2016 年晚些时候才推出对 LUKS 的支持。 Elliot 最终运行了一个较老的工具,bruteforce-luks,它每秒只能猜出几十个密码。

当 Elliot 输入时,我们关闭了右边的窗口。

1
bruteforce-luks -t 8 -f ~/tools/PyLyrics/lyrics.txt ~/keyintercept_1.raw

这个命令启动了 8 个并发的线程来尝试磁盘镜像 “keyintercept_1.raw “的密码,使用 “lyrics.txt” 的每一行作为输入。

在接下来的画面跳转中,我们看到 Elliot 的破解有了结果。Romero 的密码是 Curtis Mayfield 唱的 “Don’t Worry” 中的一句话。

And if there’s hell below We’re all gonna go

如果下面有地狱,我们都会去。

(是的,这与《The Deuce》的片头曲使用的是同一首歌。完全是巧合!)

Elliot 继续通过输入以下内容来挂载加密的 LUKS 分区。

1
cryptsetup luksOpen ~/keyintercept_1.raw keyintercept

挂载 LUKS 分区

他切换到包含击键记录输出的加载路径,并键入 less keylog.txt 来查看其内容。

我们没有在荧幕上看到文件的实际内容,我们只是听到 Elliot 的反应。

*”Romero 只是在监视我们。他发现有人在导出密钥数据。”*

这就为我们的最后一幕奠定了基础。

这个黑客行动有多逼真?所描述的步骤都是真实的;像往常一样,我确保一切都可以在虚拟机中使用相同的工具进行端到端的复制。但我们确实采取了艺术性的自由,以缩短破解 LUKS 分区所需的时间,特别是考虑到该算法有多慢。 Elliot 的知识和方法使他的胜算最大化,但他还是很幸运。如果用一个广泛的单词表来破解 Romero 的密码,可能需要几天或几周的时间。不管怎么说,这个细节并没有从根本上改变剧情的其余部分。

确定五/九的命运

*”我把密钥从电玩城转移到家里的盒子上的一个远程虚拟机上。然后我把它刻录在一张 CD 上。你会发现种子数据和算法嵌入在其中一张图片中。你会知道是在哪张图片里面的。”* - Mr. Robot

Elliot 回到他的电脑前,加载了那张满是他和他父亲照片的光盘,就像我们最初在第一季看到的那样。我想象着他会用直觉和技术分析的相结合的方式来找到正确的文件。我们看到他使用 Python 脚本 lsb.py 检查了几张图片,这个脚本进行了统计分析,来寻找隐写术的证据,隐藏的数据,仅仅依靠肉眼是看不到的。这个特殊的工具专注于一种常见的技术,即利用像素值的最小显著位(LSB)来存储其他数据。

分析和提取其中一个图像文件中的隐藏数据

Elliot 确信他已经找到了正确的图像:他和他的父亲打扮成 Marty 和 Doc Brown。

他用命令查看了该文件前 256 字节的十六进制内容。

1
xcd -l 256 IMG_5528.jpg

文件头显示它是一个 PNG 文件,一种 “无损” 格式,而不是 JPG(PNG 更容易用于隐写)。他制作了一个工作拷贝,并运行另一个工具,stepic,用于提取使用 LSB 技术隐藏的任何数据。

1
stepic -d -i IMG_5528_copy.png -o outfile

Elliot 的直觉是正确的。这个图像包含了隐藏的 Python 代码。

1
2
3
4
5
6
7
8
9
10
from Crypto.Protocol.KDF import PBKDF2
from Crypto.PublicKey import RSA
import getpassinfile = raw_input(“File: “)
f = open(infile, ‘r’)
password = getpass.getpass()
f.seek(1024)
salt = f.read(32)master = PBKDF2(password, salt, count=10000)def notrand(n):
notrand.i += 1
return PBKDF2(master, str(notrand.i), dkLen=n, count=1)notrand.i = 0RSA_key = RSA.generate(4096, randfunc=notrand)
print RSA_key.exportKey()

在第三季的早期计划阶段,Kor 和我一起研究了这个场景的大致轮廓,但我直到很晚才写出上面你看到的代码。代码很短,很简单,但我想确保它在技术上是准确的,以免破坏故事的一个重要部分。而且为了充分披露,我不是一个密码学家,只是在电视上扮演一个密码学家。

在不深究来源的情况下,让我们来分析一下这个脚本是如何工作的。它被设计成以一种确定的方式生成一个 RSA 密钥,使用三个输入。

  • 一个密码
  • 一个盐/种子值,从提供的输入文件中的硬编码偏移量中读取的 32 个字节,在本例中是一张图片
  • 一个故意不随机的 “反向” 随机数发生器(因此该函数被命名为 “notrand”)。

当出现相同的密码和种子值时,这个脚本将始终产生完全相同的输出。这个漏洞,由 Mr. Robot 故意引入的,就是让 Elliot 重新生成相同的原始密钥副本的原因。

如果你想尝试在自己的系统上运行该脚本,请确保你有一份 PyCrypto 库的拷贝。它应该适用于任何种子文件。

勒索软件和其他加密攻击通常使用对称算法来加密受害者的数据。之后,对称密钥可以与非对称密钥对的公共部分进行加密,并与受害者的加密文件一起存储。当受害者支付赎金时,这允许攻击者使用私钥解密并提供恢复文件所需的对称密钥。

Elliot 运行脚本,使用同一图像文件作为加密算法的输入。

隐藏的脚本重新生成了一个 RSA 私钥

脚本起作用了,吐出了一个 RSA 密钥。Elliot 将私钥复制,粘贴到邮件内容中,只需点击发送,即可以撤销五/九攻击。

Elliot 准备将密钥发送给 E-Corp 的恢复团队。请注意 "发件人" 的地址。

结语

从事《Mr. Robot》的工作是一种热爱,在经过一年的准备后看到这一切故事的上映,是一种独特的有益体验。我对我们所创造的一切感到非常自豪,剧迷们的热情,尤其是我在安全行业的朋友和同行们的热情,让我感到我的每一丝努力都是值得的。

尽管如此,这对我来说也是一个苦乐参半的转折点:在做了两年的技术顾问之后,我做出了一个艰难的决定,我穿上我的卫衣,继续寻找新的工作机会。我感到非常幸运能成为这部电视剧的一部分,它扩大了我的眼界,戳到了我甚至不知道自己有的痛快之处。这也是一个巨大的时间承诺,在未来的一年里,我需要为我的职业和个人生活中的其他努力重新获得成果。

我将非常怀念在幕后与大家一起工作的日子,但仍然很高兴能从一个粉丝的角度看到下一季的剧集,就像我刚开始看到的时候一样!”。

说到这里,我必须说一些感谢的话,作为结束。

  • Adam Brustein,这位神奇的艺术家和设计师,将你在剧中看到的屏幕画面变成了现实。每个镜头都是精心制作的互动动画,以配合真实软件的外观和行为。当然,他的才能远远超出了模拟计算机图形用户界面的范围,请查看他的网站,了解他的其他作品。

  • David Damato 和同为剧组顾问的 Andre McGregor,是他们最初将我与 Kor 和其他工作人员联系到一起。这一切都要追溯到 2016 年 1 月,Dave 和 Kor 在消费电子展览(CES,Consumer Electronics Show)的一个小组中共同发言时的偶然邂逅。

  • Sam Esmail, Kyle Bradstreet,以及其他制片人和编剧,热切地与我和其他剧组顾问接触,并让我们感觉自己是他们剧组的一部分。

  • 最重要的是,Kor Adana,为我提供了机会和支持,使我能够为这一季的许多工作做出贡献,耐心地解决我的一些疯狂的想法,并指导我学习这门新手艺。他对这个节目和它的粉丝的热情,以及他对细节孜孜不倦的关注,我怎么说都不过分。(更不用说他在 ARG 上的工作了!)如果你还不了解,请在 THR 上查看 Josh Wigler 对 Kor 的系列采访。这相当于我这一季的技术文章的编剧,并且真正展示了每一集的细节和思想。

最后,感谢你们每一个花费时间阅读《Mr. Robot:镜头拆解》的观众。我被你们在推特、评论和电子邮件中分享的大量支持所震惊。我同样喜欢看到所有的问题,甚至是因为我们创造的一些黑客故事而激发的激烈争论。我希望这些文章能寓教于乐,并感谢它们找到了愿意接受的观众。

本文作者 : meow
This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接 : https://translation.meow.page/post/mr-robot-disassembled-eps3-9-shutdown-r/

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