Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
file-notification-attacks — 针对 Linux、Windows 和 macOS 上文件通知侧信道攻击的研究成果,展示了 inotify/FSEvents 信息泄露、按键时序和网站指纹识别。 | Kitploit
工具/GitHubGitHub/isec-tugraz/file-notification-attacks
Android安全漏洞分析漏洞利用Web应用程序漏洞利用信息收集移动安全隐私保护论文与研究学习与教育

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHubisec-tugraz/file-notification-attacks

file-notification-attacks

针对 Linux、Windows 和 macOS 上文件通知侧信道攻击的研究成果,展示了 inotify/FSEvents 信息泄露、按键时序和网站指纹识别。

查看仓库
1125天前尚未审核

文件通知攻击 - 制品

本仓库包含论文《文件通知攻击:在 Linux、Windows 和 macOS 上对文件通知系统的侧信道泄漏进行模板化与利用》的制品(仍在评审中!),该论文已被 CCS '26 接收。

访问带有演示的网站:https://inoti.fyi/

阅读论文:https://snee.la/pdf/pubs/file-notification-attacks.pdf 或 http://inoti.fyi/pubs/file-notification-attacks.pdf

目录

  • 前言
  • Linux
    • 要求:内核版本
    • 设置
    • 攻击
      • 1. 不可读文件绕过
      • 2. 时间分辨率
      • 3. 击键间隔计时
      • 4. 认证界面伪装
      • 5. 通过字体进行网站指纹识别
  • Android
  • Windows
    • 硬件 / 软件要求
    • Firefox 上的直接网站泄漏
  • macOS
    • 硬件 / 软件要求
    • 监视 /Applications

前言

作为 CCS'26 制品评估(仍在进行中!)的一部分,我们提供了一个带有预打补丁内核的 Debian 13 + KDE Plasma 6 虚拟机。该虚拟机并未用于生成论文的评估结果,也不旨在复现其精确量级。本仓库可能会更新,以纳入制品评估者的评审和反馈。当我们的制品评估完成后,我们将公开该虚拟机。

我们使用 Claude(Opus 4.8)将我们的代码封装成文档完善且高性能的制品(例如,Windows 那个有点卡顿)。然而,它生成的代码、脚本、makefile 是基于

下面测试 Linux 代码的说明特定于在虚拟机中运行命令。请改为查看 Linux/ 中的代码。

该虚拟机的存在纯粹是为了方便,这样挂载每个攻击就不需要从零开始搭建环境或降级内核。虚拟机中演示的底层机制与论文中描述的完全相同,但请注意,我们并未使用该虚拟机来生成论文中报告的数字。由于虚拟化环境和底层硬件的原因,绝对时间可能会有所不同。

Linux

研究结果在 Debian 13 虚拟机(linux-vm/)中复现,该虚拟机从官方 live Debian ISO 安装,带有 KDE Plasma 6(Wayland),内核早于 fsnotify 修复。已安装 inotify-tools、Qt6 开发头文件和 pkexec。其他内容均未升级,安装后内核从未被改动。请不要运行 apt upgrade 或尝试升级内核。此虚拟机镜像故意是旧的,未更新,且没有最新的安全补丁。此虚拟机镜像仅用于快速验证和测试!

虚拟机内的代码、攻击和演示镜像于 Linux/ 中。

注意:我们在每个命令块的顶部说明了以哪个用户运行命令。有 [host],即运行虚拟机的主机;[user],即虚拟机中攻击的受害者;以及 [spyuser],需要设置,并且在大多数 Linux 攻击中将是攻击者。

磁盘镜像以 linux-vm-upload.qcow2 形式提供,使用 zstd 压缩。在运行 run.sh(它期望该文件名)之前,将其重命名为 linux-vm.qcow2:

root@kitploit:~
# Run As: [host]
cd linux-vm/
mv linux-vm-upload.qcow2 linux-vm.qcow2
./run.sh

读取 zstd 压缩的 qcow2 需要 qemu-img/qemu-system-x86_64 版本 5.2 或更高(2020 年及以后),用 qemu-img --version 检查。如果你使用的是较旧的 QEMU 并且无法打开镜像,请先将其解压为扁平的 qcow2:

root@kitploit:~
qemu-img convert -O qcow2 linux-vm-upload.qcow2 linux-vm.qcow2

4 核,4GB 内存,GUI 显示。登录信息为:

  • 用户名 root,密码 password,
  • 用户名 user,密码 password,
  • 用户名 spyuser,密码 password(不要以 spyuser 登录!)

设置

提供的虚拟机已经运行一个存在漏洞的、预打补丁的内核(6.12.43+deb13-amd64),因此无需降级即可使用。你需要 QEMU 来运行此镜像(它带有 GUI)。制品位于虚拟机内的 /home/user/Linux-File-Notification-Attacks。

一条命令即可在虚拟机中全新设置好一切:(i) 一个非特权 spyuser 账户(非 sudo),(ii) 它自己的制品目录副本(否则单独的非特权账户无法进入 user 的主目录),(iii) 以及两个副本中所有脚本均可执行。

root@kitploit:~
# In the VM, Run As: [user]
sudo bash ~/Linux-File-Notification-Attacks/setup_attacks.sh

下面的每个攻击都以 spyuser 运行(su - spyuser,密码 password),除了 auth-ui-redress,它以 user 运行(下面解释)。

攻击

1. 不可读文件绕过

证明只要父目录可读,文件操作通知就会在无法直接读取的文件上传递。

root@kitploit:~
# Run As: [spyuser]
# To switch to spyuser, in a new terminal type `su - spyuser`. The password
# is `password`.
cd ~/Linux-File-Notification-Attacks/unreadable-file-bypass
./watch-syslog.sh

让它保持运行,然后在另一个终端以 user 生成一条日志行:

root@kitploit:~
# Run As: [user]
logger "hello"

此 Debian 13 镜像没有 rsyslog,因此没有论文中所示的 /var/log/syslog 文件。脚本改为监视 /var/log/journal/<machine-id>/。这是相同的思路,因为被监视的 .journal 文件归 root(用户)和 systemd-journal(组)所有,两者都不是 spyuser。

2. 时间分辨率

测量 inotify 的通知延迟。

root@kitploit:~
# Run As: [user], ensure numpy is installed (or pip3)
sudo apt install python3-numpy
root@kitploit:~
# Run As: [spyuser]
cd ~/Linux-File-Notification-Attacks/temporal-resolution
./run.sh

watcher 在测试文件上打开一个 inotify 监视,并为收到的每个 IN_ACCESS 打时间戳。accessor 读取同一文件 1000 次,每次读取之间有随机的 5-10ms 延迟,并自己为每次读取打时间戳。stats.py 对两个时间戳记录进行差分,并打印读取发生与通知到达之间的平均/标准差/最小延迟,即 inotify 的时间分辨率。

3. 击键间隔计时

不是论文中的完整攻击,而只是攻击所基于的过滤概念验证原语:对于系统上任何位置按下的每个键,打印一条带时间戳的通知,而无需直接读取 /dev/input。

root@kitploit:~
# Run As: [spyuser]
cd ~/Linux-File-Notification-Attacks/inter-keystroke-timing
make
./find-keyboard.sh

在任何窗口中输入(也许是以 user 打开的新终端)。每次击键打印一行 KEYPRESS。抑制窗口(我们为此演示启发式地选择了 130ms)合并了由单次物理按键生成的多个 IN_ACCESS 事件。在实践中,我们注意到此窗口因硬件而异(例如,机械键盘、打字风格)。

如果自动检测选择了错误的设备(或没有选择),请检查 /proc/bus/input/devices 并直接运行 ./build/keystroke-notify /dev/input event4。

4. 认证界面伪装

我们演示了能够检测 (pkexec)[https://polkit.pages.freedesktop.org/polkit/] 何时被执行,并进一步在其上绘制一个假窗口。正如我们在第 4.4.3 节中所展示的,这种“认证界面伪装攻击”在带有 Wayland 的 KDE Plasma 5 和 6 上是可能的。我们在同用户攻击者威胁模型中执行此攻击:Wayland socket 的作用域限于已登录会话,单独的非特权账户无法在其上绘制。

在标准的 KDE 安装中,pkexec 由桌面引入,但此 live ISO 是一个更精简的镜像,因此没有安装它。因此,我们手动安装了它,同时(试图)保持虚拟机镜像较小。

root@kitploit:~
# Run As: [user]
cd ~/Linux-File-Notification-Attacks/auth-ui-redress
make
./inotify-watcher-with-gui

让它在终端中保持运行。从另一个终端(目录无关紧要),触发一个真实的 pkexec 提示,例如 pkexec ls。监视器看到对 /usr/bin/pkexec 的访问,并在屏幕上真实对话框之上绘制一个假的“需要认证”对话框(window-launcher)。在假对话框中输入并点击认证,会将输入的文本打印到监视器的终端,然后关闭它。请注意,假窗口故意与真实窗口不同,以便于比较。

5. 通过字体进行网站指纹识别

在页面加载时监视字体目录,可以揭示它触及了哪些字体文件。不同的网站会引入不同的字体,因此页面加载时打印的路径集合本身就已经是一个指纹,对于这个最小版本来说,不需要计时或分类器。

首先,以 user 身份打开 Firefox(通过屏幕底部任务管理器停靠栏中的图标点击它),并确保没有打开任何网站。然后,在以 spyuser 身份的终端中:

root@kitploit:~
# Run As: [spyuser]
cd ~/Linux-File-Notification-Attacks/website-fingerprinting-fonts
./compare-fonts.sh

这会构建 font-spy,它开始监视 Firefox 使用的字体目录。compare-fonts 脚本会提示你访问两个网站。

首先,访问一个网站(也许是 wikipedia.com),等待几秒钟加载,打开一个新标签页,关闭旧标签页(带有该网站的),然后在终端中按 ENTER。

其次,对另一个网站(也许是 reddit.com)做同样的事情:访问该网站并等待几秒钟加载,打开一个新标签页,关闭旧标签页,然后在终端中按 ENTER。

脚本应打印每个网站访问的字体差异。请注意,在论文中,我们还使用了时间信息,即字体何时被访问。对于简单的概念验证,我们忽略此信息,只简单地打印两组字体访问之间的差异。虽然确切的字体访问集合可能因运行而异,但某些字体文件总是且唯一地被某个网站访问。

请注意,网站可能会随时间变化,因此字体文件访问可能会有所不同。在起草此制品时,我们注意到 Wikipedia 总是访问 /usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf,而 Reddit 总是访问 /usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf。

Android

硬件 / 软件要求

一台运行 Android 版本的物理设备或模拟器,其 Scoped Storage 模型仍允许在 WhatsApp 的共享媒体目录上注册 FileObserver(inotify 的 Java 层封装),以及第二台设备/账户充当消息发送者。要么构建提供的源代码(Android/source/),要么直接安装提供的 APK(Android/app-release.apk)。

揭示 WhatsApp 上的私人通信

Android 通过 android.os.FileObserver 暴露了贯穿 Linux 研究结果所使用的相同 inotify 原语。第 5.4.3 节表明,一个非特权、无权限的应用可以在 WhatsApp 的媒体目录上注册这样的观察者,并且仅从由此产生的 open/close/access 事件流中,推断出确实收到了私人媒体,而无需持有任何允许它读取内容本身的权限。

启动应用并触发刷新操作;观察者服务会附加并开始发出周期性的存活条目。滚动到日志视图底部,并继续刷新,直到出现重复的 ObserverService: Still Running 条目,确认监视已激活且稳定。

从第二个账户向被观察的会话发送一张图片或文档,如果尚未缓存,则在被观察设备上下载它。这会产生一阵文件事件日志行;紧接在爆发前的最后一条 ObserverService: Still Running 条目之后,日志应显示 open/close/access 事件,其路径对应于收到的文件,表明仅从文件系统通知元数据即可观察到它的到达。

Windows

我们提供了可以用 msys2 编译的源代码。否则,也可以使用 exe 文件(Windows/firefox-fingerprint/monitor.exe)。

硬件 / 软件要求

一台安装了 MSYS2 的 Windows 机器(或虚拟机),以及 MinGW-w64 g++ 工具链(pacman -S mingw-w64-ucrt-x86_64-gcc,在 MSYS2 shell 中运行)。已安装 Firefox。

Firefox 上的直接网站泄漏

此概念验证使用 ReadDirectoryChangesW 递归监视整个 C:\,并且只打印路径包含 http 的事件(Firefox 以网站的 scheme/host 命名的按源存储目录,例如在其 cache/IndexedDB 文件夹下)。监视一个你可以列出的目录不需要管理员权限。这种按源存储在每次页面加载时都会被写入,因此从浏览器进程外部监视仍然可以揭示刚刚访问了哪个网站。

要么使用我们提供的 exe(Windows/firefox-fingerprint/monitor.exe),要么从 MSYS2 UCRT64 shell 编译:

root@kitploit:~
# Run in an MSYS2 UCRT64 shell
cd Windows/firefox-fingerprint
g++ -municode -static -O2 -o monitor.exe monitor.cpp

使用 g++,而不是 gcc。还要从终端运行 monitor.exe(不要双击它),否则没有控制台可供打印。

监视器作为第二个非特权本地账户运行,与浏览所用的账户分开。首先,通过设置创建该账户:

  1. 打开 设置 > 账户 > 其他用户(Windows 11)。
  2. 点击 添加其他用户。
  3. 点击 我没有此人的登录信息。
  4. 点击 添加一个没有 Microsoft 账户的用户。
  5. 输入用户名,例如 attacker,以及密码,然后点击 下一步。

这会创建一个本地账户(不绑定 Microsoft 账户,无网络登录),默认具有标准(非管理员)权限。

接下来,将 monitor.exe 放在新账户实际可以读取和执行它的位置。改为将构建好的二进制文件复制到公共的、全局可读的目录:

root@kitploit:~
copy monitor.exe C:\Users\Public\monitor.exe

现在,从你的主(受害者)账户,使用 runas 在 attacker 账户下启动它,而无需切换桌面或注销:

root@kitploit:~
runas /user:attacker "cmd /k C:\Users\Public\monitor.exe"

在提示时输入 attacker 的密码。cmd /k(而不是直接运行 monitor.exe)会保持控制台窗口打开,以便你可以查看其输出,而简单地 runas /user:attacker C:\Users\Public\monitor.exe 也可以工作,但其窗口会在进程退出的瞬间关闭。这纯粹是为了方便。

让 monitor.exe 窗口保持运行,然后,回到你的主账户,打开 Firefox 并访问几个不同的网站,例如 arstechnica.com 和 reddit.com。打印的每一行都是匹配 http 的存储路径下的文件创建/修改/重命名。不同的网站获得不同的源目录,因此页面加载时触及的路径集合本身就已经是一个指纹。

macOS

硬件 / 软件要求

为简单起见,我们使用 fswatch,这是一个现有的、最小的、广泛使用的 CLI 工具,封装了原生 FSEvents API。攻击者也可以不使用此工具而直接使用 FSEvents API。

监视 /Applications

安装 fswatch,或从源代码构建:

root@kitploit:~
brew install fswatch

以非特权用户身份递归监视 /Applications:

root@kitploit:~
fswatch -xr /Applications

让它保持运行,然后,从 Finder 或浏览器,下载并安装 Zoom(或任何其他应用程序),然后卸载它(你可能还需要清空废纸篓)。fswatch 会实时打印 FSEvents 在 /Applications 下报告的每个路径。为了快速评估,同一用户可以监视该目录。否则,你可以设置一个新用户并以该用户身份使用 fswatch。

许可证

根据 MIT 许可证 发布。

下载工具