0xsyr0/Security-Awareness-Calculator

GitHub: 0xsyr0/Security-Awareness-Calculator

一款用于安全意识培训的 VSCode 扩展滥用演示工具,展示恶意扩展如何实现任意代码执行、反向 Shell 投递和 Firefox 会话 Cookie 窃取。

Stars: 3 | Forks: 0

# 安全意识计算器 ## ⚠️ 免责声明 本仓库包含的安全意识工具严格专为授权的渗透测试、红队演练和内部安全意识演示而开发。所有工具仅供**教育和演示目的**使用。 **本工具并未将 OPSEC 纳入考量,仅旨在用于受控的演示环境。** **对于因使用或滥用本仓库中任何工具而造成的任何损害、数据丢失或法律后果,作者概不负责。使用本仓库的任何组件即表示您对自己的行为承担全部责任。** 请仅在您拥有或获得明确书面授权进行测试的系统上使用这些工具。在大多数司法管辖区,未经授权的使用是非法的。 ## 背景与动机 本项目的存在是因为它所演示的攻击已不再停留在理论层面。以下真实发生的安全事件直接促成了这些工具的开发,并构成了其旨在支持的安全意识培训的核心叙事。 ### Shai-Hulud 和 Mini Shai-Hulud (2025–2026) 在 2025 年 9 月至 2026 年 5 月期间,一个被追踪为 **TeamPCP**(Google 威胁情报小组同时将其追踪为 UNC6780)的威胁行为者,在 npm 和 PyPI 生态系统中发起了一场代号为 **Shai-Hulud** 的持续性、协同性软件供应链攻击。 该攻击活动以一种自我传播的蠕虫为核心,它会窃取开发者和云凭据,然后利用这些凭据发布其他受感染的恶意软件包——将软件供应链本身转变为传播媒介。每个被攻陷的 CI/CD pipeline 都会成为新的分发节点,在无需攻击者进一步干预的情况下实现指数级扩散。 该蠕虫经历了三代的演变: - **Shai-Hulud**(2025 年 9 月)——最初的变体。npm 生态系统中观察到的首个自我复制恶意软件。它会收集维护者 token 并利用它们自动发布投毒包。 - **Shai-Hulud 2.0 / SHA1-Hulud**(2025 年 11 月)——增加了 wiper 功能并扩大了凭据窃取范围。Microsoft 于 2025 年 12 月发布了相关的检测与响应指南。 - **Mini Shai-Hulud**(2026 年 4 月至 5 月)——当前一代。得名于恶意软件回传基础架构中嵌入的特征字符串:在受害者账户上新创建的 GitHub 仓库会带有描述 *"A Mini Shai-Hulud has Appeared"*,这是对《沙丘》中沙虫的致敬。 该变体首次实现了关键突破,成功感染了携带有效 SLSA Build Level 3 来源证明的软件包,证明流程完整性控制是可以被绕过的。 已确认的受害者包括 TanStack(React Router——每周下载量超过 1200 万次)、UiPath、MistralAI、Aqua 的 Trivy 安全扫描器、CheckMarx 的 KICS、LiteLLM 库、Telnyx SDK、AntV 等。下游影响波及了欧盟委员会公共网站、Mercor 以及两台 OpenAI 员工设备的违规访问。 该攻击活动将持久化机制注入到了 AI 编程代理的配置中——特别是 `.claude/settings.json` 的 SessionStart 钩子和 `.vscode/tasks.json` 的 folderOpen 触发器——以确保在每个开发者会话中重新执行恶意软件,即使最初的软件包感染后来被修复。 ### GitHub 遭入侵事件(2026 年 5 月) 本项目最直接的动机:**GitHub 在其一名开发者安装了恶意 VSCode 扩展后遭到入侵**。TeamPCP 声称获取了约 4,000 个 GitHub 代码库的访问权限,并在 BreachForums 上出售这些资料。GitHub 确认了至少 3,800 个受感染的代码库,其中包含 GitHub 自己的源代码。 攻击向量非常简单——一名开发者安装了带有木马的 VSCode 扩展,该扩展窃取了凭据,随后这些凭据通过供应链将感染向外扩散。没有零日漏洞利用,没有复杂的恶意软件分发基础架构。仅仅是一个 VSCode 扩展。 这就是本项目存在的原因。开发者和 IT 人员普遍对 VSCode 扩展的攻击面存在误解。大多数人认为从看似可信的来源安装扩展是安全的。事实并非如此。 ### 为什么 VSCode 扩展很危险 VSCode 扩展以登录用户的完整权限执行。没有沙盒机制,没有权限模型,没有能力限制。一个扩展可以读取文件系统、执行任意进程、发起网络连接,并在重启后持续存在——所有这些都是静默进行的,全部在安装时发生,除了点击安装外无需任何用户交互。 `activationEvents: ["*"]` 清单字段会导致扩展在安装时以及随后的每次 VSCode 启动时立即激活。攻击面就是安装提示本身。 ## OPSEC 声明 本工具**并未将 OPSEC 纳入考量**,仅旨在用于受控的演示环境。以下已知弱点是为了演示清晰度而故意保留的,在使用前必须充分了解: - **未加密的 C2 通信** —— implant 与 `c2.py` 之间的所有流量均通过原始 TCP socket 以明文形式传输。没有 TLS,没有流量混淆,没有 domain fronting。任何网络监控解决方案都能轻松识别并捕获会话。 - **明文长度前缀帧** —— 命令和响应使用 4 字节的大端序长度标头进行帧化处理。这是一种众所周知的协议模式,IDS/IPS 特征码和基于网络的 EDR 可以检测到它。 - **无 beacon 抖动或休眠** —— implant 会立即连接并保持持久连接。这种行为极其异常,会被监控来自 `Code.exe` 或 `python.exe` 持久性出站连接的 EDR 解决方案标记。 - **无进程注入或进程镂空** —— reverse shell 作为独立的 `python.exe` 或 Node.js 进程运行,没有尝试伪装成合法的进程树。父子进程关系显得极其可疑。 - **无反分析或沙盒规避** —— 没有环境检查、VM 检测或基于休眠的规避。任何沙盒都会立即触发 payload。 - **无 payload 加密或混淆** —— cookie 脚本和 stager 中使用的 base64 只是编码,而非加密,任何分析师都能轻松将其还原。 - **MAC 地址 IP 混淆仅是表面功夫** —— `obfuscator.py` 中的混淆是一种简单的十六进制编码方案,无法抵御静态或动态分析。它仅用于说明内联解码的概念,仅供教育目的使用。 - **硬编码的操作者值** —— `stage.js` 和 `extension.js` 需要手动替换 `` 和 `` 占位符。忘记替换这些内容会导致 implant 静默失败。 - **C2 无身份验证** —— `c2.py` 接受来自任何来源的连接。在演示期间,请将其绑定到特定接口或通过防火墙规则限制访问。 - **Web 应用程序存在蓄意漏洞** —— `Web_Application/app.py` 被设计为具有故意的安全弱点:在会话 cookie 中以明文形式存储凭据、没有 `httponly` 标志、没有 `secure` 标志、没有 CSRF 保护、没有速率限制、没有输入验证以及硬编码的凭据。绝不能将其部署在隔离的演示环境之外。 - **仅针对 Firefox 的 cookie 提取** —— 窃取 cookie 的功能仅针对 Firefox。Edge 148+ 实现了 App-Bound Encryption (v20),可防止从非浏览器进程中提取 cookie。这是一个已知的限制,也是探讨不同浏览器安全态势差异的一个故意设计的讨论点。 - **无清理或自删除功能** —— stager 会将文件写入 `%TEMP%`,且在执行后不会自我删除。每次演示运行后都需要手动清理。 - **单会话 C2** —— C2 可以处理多个会话,但没有持久化存储、没有任务队列,也没有重连逻辑。因网络中断而丢失的会话需要完全重新安装扩展才能恢复。 ## 仓库结构 ``` Security-Awareness-Calculator/ ├── Images/ — extension icon (128x128 PNG) │ ├── icon.png │ └── Security_Awareness_Calculator.png ├── Obfuscator/ — MAC-address IP/port obfuscator │ └── obfuscator.py ├── SimpleC2/ — C2 server, weaponized extension, and stager │ ├── c2.py — Python C2 with Firefox cookie stealing │ ├── extension.js — weaponized VSCode extension stager template │ └── stage.js — Node.js reverse shell stage (operator template) ├── Test_Cookies/ — standalone Firefox cookie diagnostic tool │ └── test_cookies.py ├── VSCode_ext/ — unweaponized PoC extension (pops calc.exe only) │ ├── [Content_Types].xml │ ├── extension/ │ │ ├── extension.js │ │ ├── icon.png │ │ └── package.json │ └── extension.vsixmanifest ├── VSCode_ext_weaponized/ — weaponized extension template │ ├── [Content_Types].xml │ ├── extension/ │ │ ├── extension.js │ │ ├── icon.png │ │ └── package.json │ └── extension.vsixmanifest └── Web_Application/ — insecure demo web app for session theft └── app.py ``` ## 前置条件 ### 演示虚拟机 (Windows) ``` winget install Python.Python.3.12 pip install flask pycryptodome winget install Mozilla.Firefox ``` 进行窃取 cookie 的演示需要使用 Firefox。Edge 148+ 使用了 App-Bound Encryption (v20),可防止从非浏览器进程中提取 cookie。Firefox 将 HTTP cookie 以明文 SQLite 格式存储,且没有额外的加密层。 必须为 Firefox 配置以下 `about:config` 值,以防止 cookie 在关闭时被清除: | 设置项 | 所需值 | |---|---| | `privacy.sanitize.sanitizeOnShutdown` | `false` | | `privacy.clearOnShutdown.cookies` | `false` | ### 攻击者虚拟机 (Kali) ``` python3 -m venv venv source venv/bin/activate pip install pycryptodome ``` ## 阶段 1 — 非武器化 PoC (`VSCode_ext/`) ### 功能说明 在安装时立即启动 `calc.exe`。没有网络连接,没有数据收集,没有持久化。用于演示 VSCode 扩展以完整的本地用户权限执行且没有沙盒隔离。计算器弹窗作为一个安全、可见且易于理解的指标,表明在登录用户上下文中执行了任意代码。 ### 构建 不需要 npm —— 使用 zip 手动打包: ``` cd VSCode_ext mkdir -p vsix-build/extension cp extension/extension.js extension/package.json vsix-build/extension/ cp '[Content_Types].xml' extension.vsixmanifest vsix-build/ cd vsix-build zip -r ../Security_Awareness_Calculator.vsix . -x "*.DS_Store" ``` 或者使用 vsce: ``` npm install -g @vscode/vsce vsce package --allow-missing-publisher ``` ### 图标生成 ``` cairosvg Icons/icon.svg -o Icons/icon.png -W 128 -H 128 ``` 或者使用 Inkscape: ``` inkscape Icons/icon.svg --export-filename=Icons/icon.png -w 128 -h 128 ``` ### `package.json` ``` { "name": "security-awareness-calculator", "displayName": "Security Awareness Calculator", "description": "⚠️ Security Awareness PoC — For authorised testing only. See https://github.com/0xsyr0/Security-Awareness-Calculator", "version": "0.0.1", "publisher": "syro", "icon": "icon.png", "engines": { "vscode": "^1.80.0" }, "activationEvents": ["*"], "main": "./extension.js", "contributes": {} } ``` ### 安装 ``` code --install-extension Security_Awareness_Calculator.vsix ``` ### 卸载 ``` code --list-extensions code --uninstall-extension syro.security-awareness-calculator ``` ## 阶段 2 — 武器化扩展 (`VSCode_ext_weaponized/`) ### 功能说明 弹出 `calc.exe` 以产生视觉冲击,然后从操作者的 HTTP 服务器获取并执行 `stage.js`,建立与 `c2.py` 的 reverse shell。 ### 操作者设置 —— 使用前必读 此模板以非功能状态发布。在构建之前,请替换 `VSCode_ext_weaponized/extension/extension.js` 中的所有占位符: | 占位符 | 描述 | |---|---| | `` | 您的 C2/监听器 IP 地址 | | `` | 用于阶段分发的 HTTP 服务器端口 | 切勿将填入实际值的文件提交回此仓库。 ### 构建 ``` cd VSCode_ext_weaponized mkdir -p vsix-build/extension cp extension/extension.js extension/package.json vsix-build/extension/ cp '[Content_Types].xml' extension.vsixmanifest vsix-build/ cd vsix-build zip -r ../Security_Awareness_Calculator_Weaponized.vsix . -x "*.DS_Store" ``` ### 安装 ``` code --install-extension Security_Awareness_Calculator_Weaponized.vsix ``` ### 卸载 ``` code --uninstall-extension syro.security-awareness-calculator-weaponized ``` ## 阶段 3 — 混淆器和 Reverse Shell (`Obfuscator/obfuscator.py`) 生成一个经过 MAC 地址混淆的 Python reverse shell payload,可直接注入到演示虚拟机上的目标脚本中。输出将被写入 `payload.output`。 ``` python3 Obfuscator/obfuscator.py python3 Obfuscator/obfuscator.py 192.168.1.100 9001 ``` `payload.output` 已通过 `.gitignore` 从仓库中排除。切勿提交包含实际操作者值的文件。 ## 阶段 4 — C2 服务器 (`SimpleC2/c2.py`) ### 运行 ``` source venv/bin/activate # Terminal 1 — serve stage.js python3 -m http.server 80 # Terminal 2 — C2 listener python3 SimpleC2/c2.py ``` ### 主菜单命令 | 命令 | 描述 | |---|---| | `sessions` | 列出所有处于存活/死亡状态的活跃会话 | | `use ` | 通过短 ID 与会话交互 | | `clear_sessions` | 从列表中移除已断开的会话 | | `help` | 显示帮助菜单 | | `quit` | 关闭 C2 服务器 | ### 会话命令 | 命令 | 描述 | |---|---| | `steal_cookies` | 窃取并解码 Firefox 的 session_token cookie | | `dump_cookies [host]` | 导出所有 Firefox cookie,可选 host 过滤器 | | `debug_cookies` | 转储原始 Firefox cookie 元数据以进行诊断 | | `whoami` | 当前用户上下文和权限 | | `pwd` | 打印当前工作目录 | | `cd ` | 更改工作目录 | | `dir [path]` | 列出目录内容 | | `mkdir ` | 递归创建目录 | | `type ` | 将文件内容打印到屏幕 | | `writefile ` | 将文本写入目标上的文件 | | `download ` | 从目标下载文件到 Kali | | `upload ` | 将本地文件上传到远程路径 | | `background` | 返回主菜单(会话保持活跃) | | `exit` | 终止并关闭会话 | | `<任意命令>` | 直接传递给目标上的 cmd.exe 执行 | ## 阶段 4 — Web 应用程序 (`Web_Application/app.py`) 模拟一个不安全的企业登录门户,使用 base64 编码且包含明文凭据的会话 cookie。用于演示如何通过从文件系统中提取 Firefox cookie 来窃取会话 token。 ``` python app.py ``` 运行在端口 5000。默认凭据: | 用户名 | 密码 | |---|---| | `jdoe` | `Summer2024!` | | `admin` | `P@ssw0rd123` | ### 演示流程 1. 在演示虚拟机上打开 Firefox 2. 导航至 `http://127.0.0.1:5000` 3. 以 `jdoe` 或 `admin` 身份登录 4. 通过 **File → Exit** 关闭 Firefox —— 需要正常关闭以确保 cookie落盘刷新 5. 从 C2 会话运行 `steal_cookies` 6. 将以明文形式打印凭据,并自动生成 curl 重放命令 ### 从 Kali 重放会话 ``` curl -s http://:5000/dashboard \ -H "Cookie: session_token=" ``` ## Cookie 诊断工具 (`Test_Cookies/test_cookies.py`) 独立脚本,用于在运行完整的 C2 演示之前,验证 Firefox cookie 提取功能是否能在演示虚拟机上正常工作。请在 Firefox 通过 File → Exit 关闭后运行。 ``` python test_cookies.py ``` ## `.gitignore` ``` payload.output *.vsix __pycache__/ *.pyc venv/ ``` ## 修复建议 | 控制措施 | 阶段 | |---|---| | 通过 Intune/SCCM 实现 VSCode 扩展白名单 | 1, 2 | | 通过注册表策略阻止 `vscode://` URI 处理程序 | 1, 2 | | 通过 `extensions.allowed` 策略禁用 `.vsix` 安装 | 1, 2 | | 监控源自 `Code.exe` 的出站连接 | 2 | | 通过 AppLocker/WDAC 限制从 `%TEMP%` 执行脚本 | 2, 3 | | 针对计划任务脚本的应用程序控制策略 | 3 | | 对原始 TCP reverse shell 进行网络监控和告警 | 2, 3 | | 在发生任何供应链事件后轮换所有 CI/CD 密钥和开发者 token | 1, 2 | | 始终在会话 cookie 上设置 `httponly=True` 和 `secure=True` | 4 | | 切勿将凭据编码到会话 token 中 —— 使用不透明的服务端 ID | 4 | | 通过 endpoint 管理强制执行浏览器强化策略 | 4 | | 使用启用了 App-Bound Encryption 的基于 Chromium 的浏览器 | 4 | | 通过策略禁用 Firefox cookie 持久化或强制执行 cookie 加密 | 4 | | 监控 `.vscode/tasks.json` 和 `.claude/settings.json` 是否存在未经授权的修改 | 1, 2 | ## 资源 ### Shai-Hulud 和 Mini Shai-Hulud - [Mini Shai-Hulud 常见问题解答 — Tenable](https://www.tenable.com/blog/mini-shai-hulud-frequently-asked-questions) - [Mini Shai-Hulud:多生态系统开发者供应链攻击 — Cloud Security Alliance](https://labs.cloudsecurityalliance.org/research/csa-research-note-mini-shai-hulud-multi-ecosystem-supply-cha/) - [Mini Shai-Hulud 恶意软件感染数百个开源包 — CyberScoop](https://cyberscoop.com/mini-shai-hulud-supply-chain-malware-attack/) - [Team PCP 的 Mini Shai-Hulud 撕裂开源信任 — ReversingLabs](https://www.reversinglabs.com/blog/mini-shai-hulud-tears-at-oss-trust) ### GitHub 违规访问事件 - [TeamPCP 通过投毒的 VS Code 扩展入侵了 GitHub 内部代码库 — Help Net Security](https://www.helpnetsecurity.com/2026/05/20/github-breached-teampcp/) - [TeamPCP 发起针对 GitHub 的供应链攻击 — Technology Org](https://www.technology.org/2026/05/22/teampcp-github-supply-chain-attack/) - [GitHub 数据泄露与 TeamPCP 供应链攻击狂潮有关](https://www.moroccoworldnews.com/2026/05/306024/github-breach-linked-to-teampcp-supply-chain-attack-spree/) ### VSCode 扩展安全 - [利用 VSCode 扩展作为初始访问途径 — MDSec](https://www.mdsec.co.uk/2023/08/leveraging-vscode-extensions-for-initial-access/) ### 通用供应链安全 - [2026 软件供应链安全报告 — ReversingLabs](https://www.reversinglabs.com) - [SLSA 框架 — 软件制品供应链级别](https://slsa.dev) - [OpenSSF 记分卡 — 评估开源项目安全性](https://securityscorecards.dev)
标签:MITM代理, 恶意软件演示, 数据可视化, 数据泄露, 逆向工具