针对CMS的网络攻击中的快照回滚研究(一)

 

全球超过55%的网站都在内容管理系统(CMS)上运行。不幸的是,庞大的用户群体使基于CMS的网站成为黑客的重要目标。更糟糕的是,绝大多数网站托管行业已转向“备份和还原”安全性模型,该模型依赖于容易出错的AV扫描程序来提示用户回滚到感染前的夜间快照。

这项研究有机会研究了超过300,000个不同网站生产的每晚备份。在此过程中评估了基于CMS的网站的攻击情况,并评估了备份和还原保护方案的有效性。令人惊讶的是,发现成千上万次攻击的演变表现出清晰的长期多阶段攻击模式。

 

0x01 Introduction

全球超过55%的网站都在内容管理系统(CMS)上运行,而WordPress控制着近60%的CMS市场。不幸的是,这种广泛采用已经导致针对CMS的网络攻击迅速增加。由于CMS部署是分层软件和解释器的混合,它们具有不同程度的网络和系统许可权,并且在面向互联网的Web服务器上执行,因此这些攻击变得更加容易。更糟糕的是,这项研究发现了一个令人不安的趋势:针对绝大多数CMS的在野攻击行为表现出多阶段攻击的“低且慢”特征。

尽管这些复杂的软件系统已进行了大量部署,但迄今为止,针对针对CMS的网络攻击进行调查和补救的研究很少。传统上,研究团体已转向使用细粒度的日志记录来了解攻击的来源。不幸的是,在CMS域中,这些技术几乎没有在实践中部署。特别是,尽管最近取得了进步,但细粒度的日志记录解决方案仍然会带来显着的性能/空间开销,并且经常需要对目标系统进行检测和训练。而且,网站所有者通常无法控制底层Web服务器,因为整个平台是由托管服务提供商(例如HostGator甚至大学IT部门)拥有和维护的。

由于这些原因,行业标准早已转移到安全的“备份和还原”(backup and restore)模型,由Dropmysite,Codeguard ,GoDaddy ,Sucuri和iPage 等流行平台提供。部署了反病毒(AV)扫描程序以检测网站中的漏洞,并且每晚将网站文件备份保存在异地。

不幸的是,这些方法也有众所周知的局限性:AV签名仅捕获知名的恶意软件,它们无法检测到隐匿的多阶段攻击,并且高误报率导致实际警报被忽略。此外,网站所有者经常(错误地)恢复为未触发AV警报的最新快照。实际上,这项研究发现,网站所有者仅对31%的真实警报采取行动(即回滚到快照),而只有三分之一回滚到感染前的状态。

这项研究提供了独特的机会,可以从超过300,000个生产网站的每晚备份中研究这些攻击趋势。与CodeGuard合作,最初着手开发一种网站保护方法,该方法可以替代无效的备份和还原标准。首先评估了70个网站的夜间备份的全部历史记录,合作伙伴确定该网站最近被网络攻击作为目标。对该数据集进行的初步调查揭示了所料不到的事情:每次攻击的演变都呈现出清晰的多阶段攻击模式-缓慢建立初始立足点,安静地持久性,横向移动,清理早期的痕迹阶段等。

基于这一发现,将注意力转移到取证调查人员如何从这些攻击中恢复过来。为了在此领域产生实际影响,建议取证技术必须集中在CMS所有者可以广泛使用的唯一工件上:夜间备份。为此,本文介绍了TARDIS,这是一种新颖的来源推断技术,可以研究针对多阶段CMS的攻击。 TARDIS仅基于每晚备份,重新构造攻击阶段的时间轴并恢复入侵窗口或快照不可信的时间段。

通过与CodeGuard的合作,使用TARDIS对306、830个基于CMS的生产网站进行了攻击情况的系统研究,这些独特的域名范围从Alexa排名前10K的38个网站,Alexa排名前1M的4,038个网站到流行电子商务网站,每晚备份大约1900天(2014年3月至2019年5月)。根据这项研究发现了20个591个网站(6.7%)受到高级多阶段攻击的威胁。经验评估揭示了一些令人关注的事实:发现CMS网站上的攻击持续至少6天,最多1694天,中位数为40至100天。尤其是超过20%的WordPress网站遭受攻击的时间超过一年(可能是由于WordPress的巨大市场份额)。

这些攻击涉及秘密地丢弃影响Web服务器的大量恶意代码。发现在攻击过程中,文件的数量至少增加了50%,范围从攻击攻击者的浏览器漏洞到成熟的基于HTML的远程控制GUI。

 

0x02 Preliminary Investigation

调查从70个已知最近遭到入侵的网站开始。首先询问关键的网络取证问题:调查人员如何从这些攻击中恢复网站?不幸的是,CMS网站所有者通常缺乏启用强大的取证日志记录所需的专业知识和对托管服务器的控制。仅依靠这些夜间备份,很快就意识到调查人员的可见性受到很大限制。

推断起源模式(Inferring Provenance Patterns):为了解决这个问题,进行了第一个关键观察:在所有网站的发展过程中,存在有限数量的相同起源模式。首先发现,给定快照中的文件可以3种状态之一存在:添加,修改或删除。上图说明了在网站备份中观察到的三种感染情况。 AV在其整个生命周期中的某个时刻可以将添加了A的文件标记为可疑文件(由!表示)。这些文件在被修改M之后,也可能被AV标记为可疑文件。在某些情况下,将执行快照回滚以通过删除D来处理可疑文件。如果回滚删除了攻击者的所有文件,则攻击将得到解决,如图(a)所示。在其他情况下,尽管检测到可疑文件,也不会采取任何措施(图(c)中未修复)。

不幸的是,这导致发现了“备份和还原”的行业标准完全不够。实际上有80%的网站仍然受到感染-许多网站所有者已经回滚到快照并修复了该漏洞,但是由于缺乏法医专业知识,他们无法识别感染前的快照(留下初始后门,并允许再次发生攻击。为了快速回滚到正常快照,调查人员必须恢复危害窗口或不信任快照的时间段。每个快照都包含成千上万个文件(平均11,292个),这一事实使情况变得更加复杂,从而使此调查成为大海捞针。不灰心,从单个Drupal网站W682886深入研究了各个快照,它将作为本文的一个示例。

单一快照指标(Single Snapshot Metrics):当查看W682886的单个快照时,做了第二个关键观察:每个快照的复杂性可以降低为一组度量,称为空间度量,这些度量突出了网络攻击证据的存在。除了之前快照中每个文件的状态(第一个空间度量)外,还设计了另一个空间度量,用于度量文件之间的扩展名不匹配,即文件的内部格式是否与文件名的扩展名匹配。

同样,实现了另一个空间度量,以识别服务器端脚本文件中基于UTF-8的代码混淆模式。例如,在W682886示例中,在2018年6月5日的快照中发现了3个PHP文件,这些PHP文件具有模糊的有效载荷,它们伪装成图标文件,从而引发了攻击。最后确定了之后详述的9个空间指标。这些空间度量有效地强调了单个快照中网络攻击工件的存在。尽管这是一个很好的第一步,但不足以解释攻击的演变或了解攻击的持续时间。

攻击阶段的时间演变(Temporal Evolution Of Attack Phases):收集了代表W682886每个快照的空间度量,特别注意了连续快照对之间的突然变化。这揭示了第三项主要观察结果:对触发这些突然变化的隐式事件建模可以揭示攻击阶段。这能够在W682886的所有快照中绘制空间度量的时间进度。

上表示出了仅考虑单个空间度量即文件格式号的一种这样的进展。该指标的时间演变揭示了最初的攻击迹象。如表所示,文件格式指标的突然变化在4月21日,6月5日至8日和6月13日至14日突出。从2018年4月14日至5月21日在其他3个Drupal网站中发现了相同的空间度量异常值,表明攻击的横向运动。还发现网络攻击在网络服务器上丢弃了大量文件,这解释了在文件格式指标中观察到的突然变化。

还观察到,随着时间的推移,这些模式也发生了类似的变化-向现有的恶意代码添加了更多功能(例如,它仅从文件读取功能开始,并在8天后演变为修改文件并通过SSL网关通信)。最终,看到这些攻击试图通过删除大多数攻击文件来清理其足迹。

攻击模型(Attack Model):这些模式构成了本文提出的多阶段攻击模型的基础。研究发现,这些攻击由缓慢而稳定的攻击模式组成,这些模式从建立初始立足点,恶意软件注入,保持持久性,横向移动并最终清除任何恶意活动痕迹开始。案例研究证实了这一点,该案例研究为这种广泛的攻击演变提供了有趣的视角。

综上所述,以上关键观察推动了对TARDIS的设计。对空间度量的时间演变建模可以使TARDIS推断出攻击证据的来源。此外,识别出该演变过程中的异常值可以揭示折中窗口(针对W682886,从4月21日开始)和攻击阶段的进展。使用TARDIS,取证调查人员可以知道应该集中精力进行哪些工作,网站所有者可以快速将网站还原为正常快照。在后面将重新访问这最初的70个网站,作为人工调查的基础事实,以评估TARDIS框架的有效性。

 

0x03 Design

TARDIS通过一种新颖的起源推断技术克服了上一节中描述的挑战,仅使用CMS部署的夜间备份即可。下图显示了TARDIS操作的各个阶段:首先,TARDIS根据每个快照构造一个按时间顺序排列的空间元素集。然后,它为每个快照的元素计算空间指标。接下来是在时间上关联收集的空间指标,并针对攻击模型进行查询,以恢复时间轴和标记攻击事件。最后,它验证分配的攻击标签的顺序并提取危害窗口。

A.空间元素排序

TARDIS提取与每个晚上的快照关联的文件,并将它们映射为每个快照ψi∈spatial的空间元素(elj(ψi)∈Vi)。在此,Ψ是所有ψi的集合,标号i表示正在分析的时间快照的索引,而j表示Vi中空间元素的索引。基本上,ψi是拍摄第i个快照的时间点。 Vi是在时间ψi收集的一组空间元素(elj)。例如,初始快照是在ψ0处收集的,下一个快照是在ψ1处收集的,依此类推。在快照ψ0处,元素集表示为V0 = [el0,el1,…]。这些元素(elj(ψi))∈Vi位于表示所有空间元素(即,Web服务器上托管的所有文件的所有版本)的监视空间的空间Θ中。

在处理每个时间快照ψi时,一组初始空间度量(mk(ψi)∈Mi)被记录在集合Mi中。在此,标签k表示在时间快照ψi处收集的空间度量的索引。这些初始空间指标包括文件类型计数以及每个空间元素的状态(以添加,修改或删除为单位)。Mi还会被精心选择的测量值填充,下表给出了所用术语的全面定义。

例如,网站W682886的初始快照(ψ0)包含11,327个文件。所有这些文件都映射为V0中的一系列空间元素。作为单个空间指标的示例,此快照还包含23种不同的文件类型(例如PHP,HTML,JS,CSS等)。该信息记录在空间度量集M0中。如果每三个月晚上收集一次备份(例如91次备份),则:

B.空间分析

空间元素集由各种文件类型(例如PHP,HTML,JS,CSS,图像,纯文本等)组成,每种文件类型都需要不同的调查技术来识别攻击属性。为了应对这一挑战,将空间分析拆分为两种类型的指标:(1)结构指标和(2)代码指标。

1)结构指标:

利用每个时间快照的空间元素V和初始指标M的计算集,开始研究该集合V。基于对初步研究的观察,开发了一套轻量级测量方法,以突出显示存在可疑元素。

隐藏的文件和目录(Structural Metrics):长期多阶段攻击的特征在于攻击者意图修改现有设置并同时降低攻击强度。在初步研究中,观察到这是通过将恶意和/或可疑元素作为隐藏文件删除或将其放置在隐藏目录中以逃避一阶防御而实现的。 TARDIS通过对典型的预期隐藏元素(例如.htaccess)进行过滤来采用模式匹配,并在隐藏位置找到元素elj∈Vi时将结构度量Hide(elj(ψi))附加到Mi上,因为网站并不经常使用隐藏元素文件或目录。

扩展名不匹配(Extension Mismatch):还观察到,针对CMS的攻击中使用的另一种常见策略是将服务器端可执行文件伪装成其他东西。例如通常观察到空间元素被欺骗性地重命名为图标文件(例如favicon.ico),但包含PHP代码以逃避技术含量较低的CMS用户。 TARDIS使用空间元素的文件名提取其扩展名,然后将其与推断的文件格式进行匹配(例如,通过文件类型的幻数或可以识别文件类型的其他格式)。如果TARDIS在匹配元素elj∈Vi的文件类型和文件扩展名时发现差异,则将结构度量ExtM is(elj(ψi))附加到Mi。

文件名熵(Filename Entropy):在以CMS为目标的攻击中看到的可疑活动的另一个指标是文件名过长,不连贯或随机生成。 TARDIS测量所有空间元素elj的文件名熵。较高的熵表示文件名更随机,不太可能是人为产生的良性文件名。熵由密码强度计算逻辑( password strength calculation logic)来衡量,该逻辑通过测量文件名与多个字典的相似性,空间键盘模式(例如QWERTY,Dvorak),单个字符的重复,数字或字符的序列,来计算文件名的“随机性”得分。以及其他常用关键字(例如l33t)。对于TARDIS,密码强度输出类似于较高的熵(较大的随机性),因此文件名更可疑。

由于无法确定文件名中高熵的绝对阈值,因此TARDIS使用中值绝对偏差(MAD,median absolute deviation)测试比较空间元素的相对熵。具体地说,TARDIS代替了计算文件名熵的绝对阈值(这很难确定),而是考虑给定时间快照中的所有元素,以首先找到所有元素的中值熵,然后计算每个元素的中值绝对偏差并最终检查中位数绝对偏差是否大于相对阈值。当从时间快照ψi中为元素elj∈Vi识别出相对较高的熵时,结构度量HEntrp(elj(ψi))将附加到Mi。

权限更改(Permission Change):TARDIS使用每个空间元素的时间跟踪来检测快照之间的权限更改。特别是,当空间元素的权限从不可执行(只读,读写等)更改为可执行文件时,就会引起怀疑,因为开发人员通常会以不可执行开头并提供执行特权对它。研究发现,多阶段攻击将shell脚本打包在一个文本文件中,然后更改该文件的权限以探索特权升级的机会。在从临时快照ψi识别元素elj∈Vi并允许更改为其配备执行能力后,TARDIS将结构度量Exec(elj(ψi))附加到Mi。

2)代码指标:

由于对针对CMS的服务器端攻击的研究感兴趣,因此TARDIS分析了包含代码的空间元素。针对每个快照ψi记录这些收集的度量,并将其附加到空间度量集M。

脚本指令离群分析(Script Directive Outlier Analysis):大多数服务器端源代码或者是CMS核心,相关插件或网站所有者开发的代码的一部分。由于它们是由开发人员维护的,因此通常会在具有数千个字符长的脚本指令(可解析的指令序列)的空间元素中找到源代码文件。因此,观察到在空间元素中注入非常长且复杂的模糊代码行是一个很强的提示,可以用来识别攻击行为。研究发现,攻击者使用这种策略来限制注入代码的可读性,从而延迟了立即进行逆向工程的尝试。

上图显示了包含W682886 2018年5月2日快照的服务器端代码的所有空间元素的指令长度分布。 x轴表示空间元素索引j,每个代码文件的最长指令长度沿y轴绘制。在良性元素(绿点)中,所有伪指令的长度均不超过500个字符,而此快照中大多数注入了攻击者的元素(红星)所包含的伪指令均超过1500个字符。良性和恶意元素混合在一起,最大指令长度在500到1500个字符之间,这成为可疑范围(紫色菱形)。

尽管得知空间元素中的长指令是可疑的,但由于不同的开发人员所遵循的编码风格和实践不同,因此无法找到指令长度的阈值。但是,可以通过相对比较任何给定时间快照中的所有元素并执行离群值分析来确定空间元素是否可疑。利用这一观察结果,使用先前描述的中值绝对偏差(MAD),找到具有相对较长指令的可疑文件。在从时间快照ψi中检测到空间元素elj∈Vi中的可疑长指令线后,将代码指标LongLine(elj(ψi))附加到空间度量集Mi中。

混淆检测(Obfuscation Detection):观察到服务器端恶意软件通常使用包含UTF-8字符(即,宽字符)和传统8位字符的字符串。尽管构造这样的字符串本身并不是恶意的,但它是避免检测器寻找已知的恶意字符串/代码段的一种常用策略。例如,使用以下长UTF-8(黑色)和文件的ASCII(红色)路径,从CMS的根目录中包含了前面提到的伪装成图标文件的恶意PHP文件。

阵列图混淆(Array map obfuscation)是另一种通常用于逃避防御的混淆方案。定义了一个数组映射,以将每个字符映射到一个不同的字符。该地图用于对似乎是混乱的字符列表的内容进行模糊处理,以使逆向工程师试图弄清这种模糊的空间元素。例如,在以下代码片段中,lnhqvwxeon()是一个函数,该函数接收混杂的字符串(在变量$ zvkgw中),并使用$ lyfuf中的数组映射生成恶意代码,并将其作为PHP eval函数的一部分执行:

在针对上述情况通过正则表达式模式匹配从时间快照ψi中对元素elj∈Vi中的混淆进行空间检测后,TARDIS将编码量度Obfus(elj(ψi))附加到Mi上,指示元素elj中存在混淆。

可疑有效负载评估(Suspicious Payload Evaluation):在服务器端空间元素中,通常将eval,base64_decode和url_decode之类的函数配对以执行先前标识的混淆代码。 TARDIS通过沿每个控制流进行模式匹配来标识并标记eval和base64_decode/url_decode配对的实例。在从时间快照ψi中识别出元素elj∈Vi中的这种代码解包技术后,TARDIS会将表示不安全或可疑代码的代码度量EvDc(elj(ψi))附加到Mi上,并进行压缩以避免更多常规检测器。

代码生成能力(Code Generation Capability)。观察到几乎所有构成多阶段CMS目标攻击的服务器端空间元素都包含代码生成功能,例如使用create_function。尽管一些开发人员将其用作某些CMS插件的一部分,但很少在普通服务器端代码开发中使用它。 TARDIS会搜索此类代码生成功能,并在找到满足约束的元素elj∈Vi时将代码指标CodeGen(elj(ψi))附加到空间量度集Mi上。

 

0x04 Conclution

本文对306个830个不同网站上的CMS攻击格局进行了系统研究。针对仅使用随时可用的夜间备份来调查基于CMS的网站中的漏洞的问题,TARDIS提供了一种新颖的来源推断技术,可重构攻击阶段并实现从攻击中的快速恢复。

在后文将继续介绍TARDIS,它可以仅基于网站托管公司已经收集的每晚备份来调查和补救针对CMS的攻击。在行业合作伙伴的帮助下,将TARDIS应用于这30万个网站的夜间备份,发现了20,591次攻击,持续时间为6到1,694天。

(完)