iron-mukakin/glassworm_scanner

GitHub: iron-mukakin/glassworm_scanner

一款用于检测源代码文件中隐藏的不可见 Unicode 字符的安全扫描工具,帮助发现利用零宽字符等技术在代码中隐蔽恶意内容的攻击行为。

Stars: 2 | Forks: 0

# GlassWorm Scanner 一款用于检测源代码文件中隐藏的不可见 Unicode 字符的安全扫描工具——无需管理员权限。 ## 什么是 GlassWorm? GlassWorm 是一种网络攻击技术,攻击者利用**不可见的 Unicode 字符**将恶意代码隐藏在看似正常的源文件中。 这些字符的视觉宽度为零,因此在编辑器、GitHub 代码审查界面和差异对比工具中完全不可见。审查者在查看代码时看不出任何异常,但当文件被执行时,隐藏的代码就会运行。 真实案例:在 GitHub 的一行代码中,曾被发现有 18,000 个连续隐藏的不可见字符。 此工具会扫描您的文件,并在发现此类字符时向您发出警报。 ## 环境要求(一次性设置) 在构建扫描器之前,您需要两款免费工具。 ### 1. Visual Studio 2022 - 从 https://visualstudio.microsoft.com/ 下载 - 在安装过程中,选择 **"Desktop development with C++"** 工作负载 - 这将提供 Rust 在 Windows 上所需的链接器 ### 2. Rust - 从 https://rustup.rs/ 下载安装程序 - 运行并选择 **选项 1 "Proceed with standard installation"** - 安装完成后,打开新的命令提示符并输入 `rustc --version` 以确认其正常工作 ## 构建扫描器 1. 打开 **命令提示符**(无需管理员权限) 2. 导航至包含 `Cargo.toml` 的文件夹: cd C:\path\to\glassworm_scanner_v3 3. 运行构建命令: cargo build --release 4. 构建完成的 `.exe` 文件位于: target\release\glassworm_scanner.exe ## 如何使用 双击 `glassworm_scanner.exe` 启动。无需安装。 ### 操作步骤 | 步骤 | 操作内容 | |------|-----------| | 1 | 点击 **Scan Folder** 旁的 **Browse...**,选择您要检查的文件夹 | | 2 | 设置 **File Extensions** —— 保留默认值以扫描常见的代码文件,或清除并输入您自己的扩展名(如 `.py .js`) | | 3 | 设置 **Detection Threshold** —— 正常使用请保持为 **3** | | 4 | 勾选 **Save Log** 并确认日志文件路径 | | 5 | 点击 **Start Scan** | ### 扫描期间 | 按钮 | 作用 | |--------|-------------| | **Pause** | 完成当前文件处理后暂时冻结扫描。目前已找到的结果将被保留。 | | **Resume** | 从暂停处继续扫描。 | | **Stop** | 完成当前文件处理后取消扫描。目前已找到的结果将保存到日志中。 | ## 理解结果 ### 未发现问题 ``` Done -- No issues detected ``` 所有扫描文件均显示正常。未发现超过您设定阈值的不可见字符。 ### 发现问题 —— 阅读 [WARN] 条目 ``` [WARN] C:\Projects\app\utils.py line 3 col 12 -- 520 consecutive char(s) context: ...print("Hello, World!▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪")... ``` 以下是各部分的含义: | 部分 | 含义 | |------|---------| | `C:\Projects\app\utils.py` | 发现可疑字符的文件 | | `line 3` | 该文件中的行号 | | `col 12` | 从行首开始到不可见字符段开始之前的字符数 | | `520 consecutive char(s)` | 连续出现的不可见字符数量 —— 520 个极其可疑 | | `context: ...▪▪▪...` | 周围的可见文本。每个 **▪** 符号代表一个不可见字符 | **当您看到 [WARN] 时该怎么做:** 1. 在文本编辑器中打开该文件 2. 跳转到报告的行号 3. 寻找视觉上看起来很短、但实际异常长的行 4. 使用十六进制编辑器(如 HxD,可免费下载)检查该位置的原始字节 5. 如果您确认存在可疑内容,请勿执行该文件,并向您的团队报告 ## 阅读日志文件 日志文件(`.txt`)将保存到您指定的位置。它包含与屏幕上相同的信息,并进行了格式化以便于日后审查。 日志文件内容示例: ``` GlassWorm Scanner - Scan Report Status : Complete Date/Time : 2026-05-10 14:23:01 Target : C:\Projects\myapp Threshold : 3 consecutive char(s) Total files: 1247 Scanned : 1247 Hits : 2 ------------------------------------------------------------ [WARN] C:\Projects\myapp\lib\parser.js line: 7 col: 23 consecutive: 340 context: ...return result▪▪▪▪▪▪▪▪▪▪▪... [WARN] C:\Projects\myapp\utils\helper.py line: 3 col: 12 consecutive: 520 context: ...print("Hello"▪▪▪▪▪▪▪▪▪▪▪▪...) ``` **如果扫描提前停止:** ``` Status : STOPPED (incomplete) Scanned : 412 ``` 这表示该日志仅覆盖了总计文件中的 412 个。请重新运行扫描以检查所有文件。 ## 检测阈值指南 阈值控制在引发警告之前必须连续出现多少个不可见字符。 | 阈值 | 行为表现 | |-----------|----------| | 1 | 甚至连单个不可见字符也会标记 —— 非常敏感,可能会在某些大量使用 emoji 的文件中产生误报 | | **3(默认)** | 推荐大多数用户使用 —— 能够捕获 GlassWorm 攻击,同时忽略罕见的合法用途 | | 10 | 仅标记大量聚集的情况 —— 适用于对大型代码库的快速扫描 | | 50 | 仅捕获极端情况(真实的攻击通常会嵌入数千个字符) | 实际中的 GlassWorm 攻击已使用了数百至数千个字符的序列。默认阈值 3 是安全且有效的。 ## 检测到的字符类型 | Unicode 范围 | 名称 | 备注 | |--------------|------|-------| | U+FE00 – U+FE0F | Variation Selectors | 主要攻击向量 | | U+E0100 – U+E01EF | Variation Selectors Supplement | 主要攻击向量 | | U+200B | Zero Width Space | | | U+200C | Zero Width Non-Joiner | | | U+200D | Zero Width Joiner | | | U+200E / U+200F | Left-to-Right / Right-to-Left Mark | | | U+202A – U+202E | Bidirectional Control Characters | | | U+2060 | Word Joiner | | | U+FFF9 – U+FFFB | Interlinear Annotation Anchors | | | U+E0000 – U+E007F | Tag Characters | | ## 使用内置测试文件进行测试 `test_target_hello.py` 是一个包含在压缩包中的安全虚拟文件,用于验证扫描器是否正常工作。 **测试文件的结构** 在真实的 GlassWorm 攻击中,不可见字符不会作为一大块直接堆砌——它们会被附加在看起来正常的代码行末尾。因为每个不可见字符紧跟在一个可见的基础字符之后,编辑器会将它们作为零宽度的字形变体处理,从而不渲染任何内容,使得 payload 在视觉上完全无法察觉。 这个测试文件复制了这种精确的结构。它看起来像是一个简短的 Python 函数调用,后跟 `print("Hello, World!")`。实际上,**有 7 行(第 14–20 行)在可见代码文本之后附加了 50 个连续的不可见 Variation Selector 字符(U+FE00–U+FE0F)**。在标准文本编辑器中打开该文件只会显示正常代码——不可见的 payload 不会出现。 **测试步骤:** 1. 将 **Scan Folder** 设置为包含 `test_target_hello.py` 的文件夹 2. 确保 `.py` 位于 **File Extensions** 列表中 3. 将 **Detection Threshold** 设置为 `3` 4. 点击 **Start Scan** 5. 您应该会看到 `test_target_hello.py` 的 **7 条 `[WARN]` 条目**,每个受影响的行(第 14–20 行)各一条,每条报告 50 个连续的不可见字符 如果全部 7 条警告都出现,说明扫描器工作正常。 ## 致谢 - PowerShell 原始版本:`Scan-Glassworm.ps1`,作者 [@konapieces](https://x.com/konapieces) - GlassWorm 研究:Aikido Security(2026 年 3 月),Koi Security(2025 年 10 月)
标签:DNS 反向解析, DNS 解析, GlassWorm, GUI工具, PFX证书, Rust, Unicode安全, 云安全监控, 代码审查, 代码隐藏, 可视化界面, 安全扫描, 安全防护, 提示注入防御, 攻击检测, 文件分析, 时序注入, 木马检测, 源代码安全, 终端安全, 编码安全, 网络安全, 网络流量审计, 通知系统, 隐形字符, 隐私保护, 静态分析