编辑
2024-04-19
Paper
00
请注意,本文编写于 355 天前,最后修改于 355 天前,其中某些信息可能已经过时。

目录

File Hijacking Vulnerability: The Elephant in the Room
作者
文件劫持漏洞
案例分析
Empirical Study
作者的方法

🤔

File Hijacking Vulnerability: The Elephant in the Room

作者

  • Chendong Yu - 中国科学院信息工程研究所 -
  • Yang Xiao - 中国科学院信息工程研究所 -
  • Jie Lu - 中国科学院计算技术研究所 -
  • Yuekang Li - 新南威尔士大学 -
  • Yeting Li - 中国科学院信息工程研究所 -
  • Lian Li - 中国科学院计算技术研究所 -

文件劫持漏洞

文件劫持漏洞: 这是一种使攻击者能够通过操纵文件内容或文件路径来破坏安全边界的漏洞

攻击要求

  • 漏洞软件必须通过敏感操作与被劫持的文件或目录发生交互
  • 攻击者必须能够劫持某些文件或目录

案例分析

  1. Bob创建路径c:\.git\
  2. Alice在其家目录C:\User\Alice\中调用git log
  3. git如果没有在当前目录内找到.git会自动向父文件夹内寻找 此时找到C:\.git\
  4. 如果Bob在C:\.git\内设置了githooks则会导致Alice执行Bob的任意代码

Q1: githooks?

官方提供的一部分Hook函数 用于在git相关操作之后可以快速执行某些命令

Empirical Study

  • 被劫持文件的来源是什么?
  • 哪些类型的操作是危险的漏洞触发操作?
  • 当在软件生命周期(安装,卸载,…)何时可以触发文件劫持漏洞?

被劫持的文件有两种来源,现有技术主要侧重于检测第一个来源的漏洞。

  • 脆弱程序创建的权限较弱的文件,允许攻击者对其进行操作,占全部漏洞的10.1%(27个)
  • 攻击者创建的文件,通过特定的搜索策略被脆弱程序遇到。占绝大多数(89.9%,241个)。

当没有提供绝对文件路径时,操作系统或程序通常使用不同的文件搜索策略来定位目标文件。通常,这些搜索策略可能会返回具有弱权限的目录,从而允许攻击者植入恶意文件。在我们的调查中,我们确定了5种搜索策略,它们可能返回具有弱权限的目录。

  • 路径搜索顺序(3.4%): 在Windows系统中,当执行命令时,系统首先尝试在当前工作目录(CWD)中找到被调用的可执行文件,然后再搜索PATH环境变量中定义的路径。当CWD的权限较弱时,这种策略会带来安全风险。以Github Cli[19]中的漏洞为例。在执行gh命令时,CLI客户端将尝试在CWD中找到可执行文件git.exe。一旦CWD(例如,C:\ProgramData)具有弱权限,攻击者就可以在该目录中放置恶意可执行文件git.exe。
  • Windows下的Linux路径(4.5%): 具体来说,当Windows系统上不存在Linux路径时,系统会从C:\目录搜索。由于C:\在默认情况下是可写的,这使得攻击者可以轻松地植入恶意文件。以CVE-2019-5443[11]为例。curl程序读取默认配置文件/usr/local/ssl/openssl.cnf。在windows操作系统中,此文件不存在,系统会搜索配置文件C:\usr\local\ssl\openssl.cnf。由于路径C:\具有弱权限,攻击者可以轻松劫持文件并控制引擎配置,从而导致任意代码执行。
  • 未被包裹的路径(17.1%): 未被包裹的路径是指没有加引号的文件路径。当未加引号的路径包含空格或特殊字符时,Windows系统将截断该路径并使用截断的路径搜索该文件。例如,在CVE-2020-13884[14]中,Citrix Workspace程序调用CreateProcess API以不加引号的路径C:\ProgramData\Citrix\Citrix Workspace 1911\TrolleyExpress.exe执行文件TrolleyExpress.exe。但是,Windows系统使用空格截断路径并使用路径C:\ProgramData\Citrix\Citrix.exe搜索文件,有效地加载文件Citrix.exe而不是TrolleyExpress.exe。由于路径C:\ProgramData\Citrix具有弱权限,攻击者可以劫持Citrix.exe,从而导致权限升级。
  • 符号链接(19.4%): 当访问符号链接时,操作系统按照该链接来定位目标文件或目录。CVE-2022-39845就是这样一个例子,它会导致任意目录删除。具体来说,三星Kies的卸载程序试图删除一个不存在的目录C:\ProgramData\Samsung\DeviceProfile\Cache。由于攻击者可以拥有对C:\ProgramData\Samsung的写权限,因此攻击者可以针对任意目录(例如C:)创建符号链接C:\ProgramData\Samsung\DeviceProfile\Cache。因此,卸载程序将删除C:\中的所有文件。
  • 动态链接库(45.5%): 在搜索动态库的过程中,操作系统在搜索目录中查找这些库。但是,如果在此搜索过程中遇到具有弱权限的目录,则可能会允许攻击者劫持要加载的动态库。DLL劫持是近年来备受关注的问题,我们研究的现有漏洞大多是由DLL劫持引起的。

并非所有被劫持文件的访问都可能导致漏洞。例如,查询文件大小之类的操作通常是安全的。通过我们的研究,我们确定了六种可能导致漏洞的操作类型。

  • 移动(1.1%)/创建(8.2%)/删除(10.1%): 这三种类型的操作是危险的,如CVE-2022-39845所述。这种对被劫持的符号链接的操作可能导致数据丢失和文件完整性的破坏。
  • 读取(7.1%): 程序通常从配置文件中读取不同的设置,这很容易受到文件劫持攻击。例如,攻击者可能篡改配置文件中的数据库连接字符串,从而将后续查询重定向到恶意数据库。或者,攻击者可以在配置文件中插入有害的文件路径,欺骗程序执行恶意代码。
  • 进程创建(28.4%): 进程创建涉及创建一个新进程来执行文件,如果文件可以被劫持,则可能导致任意代码执行。例如,在安装过程中,程序可能首先从互联网下载安装文件,然后启动下载的文件来启动安装过程。劫持下载的文件可以欺骗程序执行任意命令。
  • 镜像加载(45.1%): 镜像加载是指加载动态加载的库,即在Windows和Linux上分别加载DLL和SO文件。被劫持的库可能导致任意的代码执行。

读取操作会导致更多的FHVuln,并带来比我们想象的更高的风险。这些发现来自于新型的FHVuln,因此无法从现有的FHVuln中观察到。此外,我们对Windows和类unix系统中的FHVuln进行了详细的讨论,确定了它们广泛发生背后的原因,并讨论了减轻它们的责任。我们的发现为未来研究改进检测工具和开发针对FHVulns的有效防御提供了有价值的见解。

文件劫持漏洞可以在软件生命周期的任何阶段触发,大多数漏洞是在软件程序启动阶段触发的。目前还没有一种技术能够处理软件生命周期中的每个阶段来检测fhvuln。

  • 安装(17.2%): 安装阶段通常包括检查系统需求、复制文件、设置配置等操作。例如,安装过程经常从安装介质(例如,下载的包)复制文件到硬盘驱动器上的指定位置。值得注意的是,安装过程通常需要较高的权限,这个阶段的文件劫持漏洞特别危险:攻击者可以在安装过程中劫持文件以获得较高的权限。
  • 卸载(4.5%): 卸载时触发的漏洞都涉及符号链接。卸载软件时,卸载过程将从系统中删除与该软件相关的所有文件(例如,可执行文件和配置文件)。正如CVE-2022-39845中所讨论的,卸载过程可能会遵循劫持的符号链接删除任意目录,导致数据丢失和系统损坏。
  • 升级(1.9%)/修复(3.7%): 例如用较新的或正确的版本替换现有的软件版本。这两个阶段分别触发了5个和10个漏洞。
  • 启动(62.3%): 当启动一个程序时,程序通常会执行一系列任务来初始化执行环境,包括定位可执行文件、加载动态库、读取配置设置等。以上所有任务都可能受到文件劫持攻击。
  • 使用(10.4%): 使用阶段的操作是特定于程序的,根据程序提供的功能,它们可能会因不同的软件程序而发生重大变化。例如,当用户编辑和保存文档时,文本编辑器可以创建、修改和删除文件。类似地,电子邮件客户端可以在下载和存储电子邮件时创建和删除文件。

作者的方法

  • 事件跟踪生成器在每个阶段执行目标程序并记录执行的文件操作跟踪。
  • FHVuln检测器检查每个执行跟踪,如果跟踪对被劫持的文件执行危险操作,将报告FHVuln。
  • 路径池维护者收集事件跟踪中遇到的文件,并将它们放入路径池中。在此步骤中,JERRY还检查该文件是引用普通文件还是引用目录。
  • 路径劫持者试图劫持并创建路径池中的每个文件。路径劫持者充当没有管理员/根权限的攻击者来模仿劫持行为。由于新的文件是由路径劫持者创建的,事件跟踪生成器再次被触发以发现更多的执行痕迹。这个迭代过程不断重复,直到到达一个不遇到新文件的固定点。

本文作者:Du4t

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.8