0x00前言
我们知道hack都会使用C2(命令和控制)控制受感染的主机系统.这些C2中的大多数都由大型僵尸网络控制,Hack只是简单地使用其中一些来访问系统,使他们可以转到另一台设备中去或窃取凭据并获得对系统的“合法”访问.
我已经看到或听说过许多类型的C2,例如IRC,p2p,DNS,Twitter,Gmail,ICMP等.C2隐藏流量家族越来越大,并且实现C2的方式每天都变得更具创造性.我很少为听到任何新的C2感到惊讶.直到有一天与John Strand进行了交谈,他提到了可以使用HTTP404 – File Not Found的C2 .这…引起了我的注意.作为安全专家,我知道这些以前C2技术中的大多数很容易被检测和阻止.
尽管我知道HTTP 404 – File Not Found 会更难检测,但过滤/阻止主机访问HTTP 404 –File Not Found 很容易.但是,有多少安全设备会阻止HTTP 404?事实上有多少安全设备可以监视和检看网站HTTP 404?大多数的安全工程师或普通人都会像我一样,在浏览网络时, 通常会忽略或跳过HTTP 404.在检测流量时,都会是主要是在寻找流量中的异常情况,例如流量流向Internet上的奇怪地方或其他类似性质的东西,而经常忽略或跳过HTTP 404的流量
随着我的兴趣激发了,我开始做一些研究,看看是否有人使用这种技术攻击,是否有人已经检测到这种技术的C2型.
我发现了几篇类似文章,一篇题为“隐藏在众目睽睽下” 由皮埃尔-马克局和基督教迪特里希的“Hiding in Plain Sight”
https://www.blackhat.com/docs/eu-15/materials/eu-15-Bureau-Hiding-In-Plain-Sight-Advances-In-Malware-Covert-Communication-Channelswp.pdf
另一个是“ Hiding Malicious Traffic Under the HTTP 404 Error”(作者:HeXu)
https:/ /blog.fortinet.com/2015/04/09/hide-malicious-traffic-under-the-http-404-error
在He Xu的文章中,他们实际上检测出来并见证了HTTP 404 – File Not Found C2,文章涵盖了他们发现的内容和技术发生的情况.简单来说,受感染的设备可以连接到此Web服务器,但是会返回HTTP 404 – File Not Found .该HTTP 404 看起来是正常的,但是从源码上的注释我们可以看到包含base64编码的命令..这些命令是指令将自身复制到USB驱动器,下载并执行可执行文件以及最后更改某些注册表项的说明.
根据以上的操作方式,我决定创建自己的HTTP 404 – File Not Found C2.尽管我不仅希望受感染的系统获得命令并运行这些指令,我希望它能够通过HTTP 404 – File NotFound来控制系统并获得系统的响应.
0x01方法
第一部分是通过添加和配置.htaccess文件来设置Web服务器,以将任何错误页面定向到我选择的.html文件(下面将其重定向到evil.html)
作为攻击者,此Web服务器可以是他们自己的服务器或他们控制的Web服务器,也可以是他们具有“访问权”的服务器(肉鸡).设置站点并设置HTTP 404 – File NotFound 后 ,我们继续进行第二部分,即 C2 服务器.
0x02
这是代码中最简单的部分.我们把要对受感染的系统执行的命令通过base64对进行编 码,将它放入带有预定义标头的html注释中,然后包装到html文件中.在最后将它覆盖到HTTP 404 – File Not Found的html文件中. 主要我输入新命令,就会覆盖到HTTP 404 –File Not Found文件中.对于我的测试,我设置并控制了Web服务器,我们可以轻松地使用FTP上传新的html文件.
0x03
下一步是创建 C2 客户端.然后创建适用于Windows和Linux的命令来控制客户端,以及命令执行返回我们服务器的响应.
受感染的系统必须请求某个域. 在这里我使用了静态网址.
过程就是:
受感染的系统一旦从网站请求页面,将首先确定它是否是404页面.如果不是404页,忽略并等待下一个请求发出.
如果是404页面,则检查其源代码中是否包含注释.如果找到注释,则检查注释中的标题是否与预定义的标题匹配.如果标题匹配,则解码base64字符串并执行命令.
这部分代码有点困难,因为我不仅要在受感染的系统上执行命令,同时还希望能够向Linux和Windows提供基本通用命令.最后,我还希望将已执行命令的结果发送回服务器.
我在 C2 解决此问题的方法是确定受感染的系统是Linux还是Windows.在Windows 上使用PowerShell执行一些与Linux中相同的基本命令,然后将其作为在base64中重新编码的PowerShell脚本执行.所以系统是Linux也能像操作系统是Windows一样执行命令.
然后,受感染的系统会将命令的结果发送回侦听服务器.为简单起见,我只使用了python服务器监听器.最后,我为受感染的系统发送的命令的结果创建了 C2 接收器.这只是一个等待连接的基本python服务器.
在我的演示中,我使用Windows 10计算机作为“受害者”,使用Ubuntu作为Web服务器, C2 控制器和 C2 接收器.
打开网站,你可以看到的是我们做的Office 365登录页面.
如果一旦我转到一个不存在的页面,我应该会收到404错误.
我们看到源码中没有任何注释,只有一个基本网页.
我们启动C2服务器并等待命令
C2接收器打开端口并等待传入连接.
然后,在受害计算机上运行C2客户端(前台不显示,文件启动然后在后台运行)
现在我们可以执行一个简单的命令,例如ls
如我们所见,c2客户端将桌面的内容(因为我们使用了ls命令)发送回到我们c2服务器.
下面,我将创建一个文件,列出内容,然后显示404页和该页的源代码. 在C2服务器上,我能够运行命令,所以我使用PowerShell命令并在当前目录(桌面)中.
创建了一个空文件
C2接收服务器显示文件已创建.
现在我们可以看到我从C2服务器创建的文件在桌面上显示了
404页面看起来好像相同.
但是,如果我们查看源代码,则可以看到页面底部有一个新注释.
好的,我们解码
TmV3LUl0ZW0gLU5hbWUgRW1wdHlGaWxlLnR4dCAtSXRlbVR5cGUgRmlsZQ ==
我们可以到:
New-Item -Name EmptyFile.txt -ItemType file
总之,这是一个非常强大的工具,并且容易安全人员被忽略.
这介绍一个有趣的小项目:
https://github.com/theG3ist/404
0x04原文地址
https://www.blackhillsinfosec.com/how-to-build-a-404-page-not-found-c2/
翻译:李木