通过扫描 VS Code 扩展、npm/PyPI 包和 Git 仓库中的不可见 Unicode 载荷、解码器模式、C2 标记以及已知恶意 IOC,检测 GlassWorm 供应链攻击载荷。

在你的机器上检测GlassWorm供应链攻击载荷。扫描VS Code扩展、npm包、Python包和git仓库。
该扫描器检测攻击技术本身——不可见的Unicode变体选择器载荷、GlassWorm解码器模式、C2指示器和凭据窃取代码。
pip install glassworm-hunter
或者使用pipx:
pipx install glassworm-hunter
扫描当前目录,但不扫描VS Code/Cursor扩展:
glassworm-hunter scan --no-extensions
扫描特定项目:
glassworm-hunter scan /path/to/project
| 级别 | 含义 |
|---|---|
| CRITICAL | 检测到活跃的GlassWorm载荷(代码中的不可见Unicode簇,解码器模式) |
| HIGH | 匹配到已知恶意IOC(C2 IP、钱包、扩展依赖已知恶意软件) |
glassworm-hunter scan [OPTIONS] [PATHS...]
扫描期间会在stderr上显示Rich进度条。使用--quiet或--verbose时会自动抑制。扫描完成后,始终会在stderr上打印一行摘要(扫描的文件、发现项、输出路径)。
# List all detection rule IDs (for use with --disable-rule)
glassworm-hunter rules
# Update local IoC database from GitHub (default source:
# https://raw.githubusercontent.com/afine-com/glassworm-hunter/main/data/ioc.json)
glassworm-hunter update
# Update from a custom source (e.g. internal threat intelligence server)
glassworm-hunter update --source https://internal.corp/ioc.json
# Force overwrite existing local IoC database
glassworm-hunter update --force
# Print version
glassworm-hunter version
| 代码 | 含义 |
|---|---|
| 0 | 无发现 |
| 1 | 发现检测到 |
| 2 | 扫描器错误 |
用于自动化处理的JSON输出:
glassworm-hunter scan . --format json --output report.json --no-extensions
用于GitHub代码扫描的SARIF:
glassworm-hunter scan . --format sarif --output results.sarif --no-extensions
将SARIF上传到GitHub:
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
在CI中使用退出代码:
glassworm-hunter scan . --severity critical --no-extensions || exit 1
排除构建工件和供应商代码:
glassworm-hunter scan . --exclude "dist/**" --exclude "*.min.js" --no-extensions
该扫描器默认完全离线。仅读取本地文件。无遥测、无回拨、无自动更新检查。IoC数据库已捆绑在包中。
唯一发出网络请求的命令是glassworm-hunter update,它从GitHub(或自定义的--source URL)获取最新的IoC数据库。永远不会自动调用。
在项目根目录放置一个.glassworm.yml来设置默认值:
exclude:
- "*.min.js"
- "vendor/**"
- "dist/**"
disable_rules:
- zero-width-chars
severity: medium
CLI标志会覆盖配置文件的值。
使用--ioc-file从JSON文件加载额外的指示器。这对于团队特定或内部威胁情报很有用:
glassworm-hunter scan /path --ioc-file /path/to/team_ioc.json
文件必须遵循与data/ioc.json相同的模式:
{
"schema_version": "1.0",
"extensions": [{"id": "publisher.name"}],
"npm_packages": [{"name": "pkg", "malicious_versions": "1.0.0"}],
"c2_ips": [{"ip": "1.2.3.4"}],
"c2_wallets": [{"address": "..."}],
"attacker_artifacts": [{"type": "email", "value": "[email protected]"}]
}
自定义文件会合并到所有其他IoC层之上(硬编码 → 捆绑 → 用户~/.glassworm/ioc.json → --ioc-file)。
扫描器使用3+1层IoC系统(每一层会合并到上一层之上,从不移除):
data/ioc.json~/.glassworm/ioc.json,通过glassworm-hunter update更新--ioc-file标志,最高优先级扫描器可在Windows上运行。除非以提升的(管理员)命令提示符运行,否则有4项测试会失败。
MIT
| 值得审查的可疑模式(eval+动态内容、凭据访问、Trojan Source) |
| LOW | 信息性(异常的零宽度字符密度,可疑的安装脚本) |
| 选项 | 默认值 | 描述 |
|---|
--extensions / --no-extensions | on | 扫描VS Code/Cursor/Codium扩展 |
--npm-scan / --no-npm-scan | on | 扫描node_modules |
--pip-scan / --no-pip-scan | off | 扫描Python site-packages |
--git / --no-git | on | 扫描git仓库 |
--format [console|json|sarif] | console | 输出格式 |
--output FILE | stdout | 将报告写入文件 |
--severity [critical|high|medium|low] | low | 报告的最低严重级别 |
--max-file-size SIZE | 10MB | 跳过大于此的文件 |
--include-hidden | off | 扫描隐藏文件/目录 |
--quiet | off | 抑制进度输出 |
--verbose | off | 显示每个正在扫描的文件 |
--exclude PATTERN | — | 要排除的Glob模式(可重复) |
--disable-rule RULE_ID | — | 抑制特定检测规则(可重复) |
--ioc-file FILE | — | 从JSON文件加载额外的IoC指示器 |