bryanchriswhite/dev-trap-dossiers

GitHub: bryanchriswhite/dev-trap-dossiers

一份持续更新的、针对开发者虚假招聘投递恶意软件的攻击活动详细分析档案,为潜在受害者、滥用举报专员、检测工程师和安全研究人员分别提供可直接使用的应对工件。

Stars: 1 | Forks: 0

# 攻击活动文档 一份不断增加的针对开发者的恶意软件活动详细分析记录,并附带**为需要针对每种情况采取行动的不同人员(潜在受害者、滥用举报专员、检测工程师、安全研究人员)提供的可直接复制粘贴的工件**。 **当前追踪:** 一项活跃的针对开发者的攻击行动,与公开记录的 **"Contagious Interview" TTP 集群**(虚假招聘人员 → 克隆仓库 → `npm install`/`npm start` → 窃密/加载器)相匹配。跨越至少三个 GitHub 组织和若干个人账户的 **≥15 个已知仓库实例**。两个托管在 Vercel 上的 C2 服务器,观察到的攻击者活动至少持续到 2026 年 5 月中旬。 如果您是因为以下情况之一来到这里,请直接跳转到适合您的文件。您不需要先阅读其他任何内容。 ## 您是否因为…… ### 🚨 招聘人员刚刚发给您一个 "Web3 / DeFi / metaverse / dApp / crypto-gaming MVP" 仓库,并要求您在面试前克隆并运行它 **停止。** 这很可能是一个陷阱。 该活动涵盖了跨越多个 GitHub 组织和账户的 **至少约 15 个已知仓库** —— 请参阅下方的[已知活动仓库](#known-campaign-repositories)表格。如果您被引导至其中任何一个 —— *或者任何符合相同特征的仓库*(单一作者的提交历史、"Web3 MVP" 框架、提交了 `.env` 文件、只有一个仓库的新 GitHub 组织、README 声称有一个提交历史不支持的多人员团队) —— 在采取任何操作之前,请先阅读开发者简报: → **[`briefing-for-developers.md`](./incidents/2026-05-13-ajunaverse-mvp/briefing-for-developers.md)** — 5 分钟阅读。告诉您如果运行该仓库它实际上会做什么,如何在克隆前在 GitHub 上发现陷阱,如何安全地检查刚克隆的副本,如果您已经运行了该怎么办,以及一个可以捕获当前活动生成式的单行 grep 命令。**适用于下表中的所有已知实例。** 可转发给同事。 ### 📮 您正在针对此活动中的任何仓库提交移除报告 下面的滥用报告是**复制粘贴模板**,任何受活动影响的举报人都可以使用。在提交之前,请从相关事件的案例文件中填写您具体的案例信息 —— 您被指向的仓库、您分析的提交、您的姓名/账号。活动范围的指标(攻击者控制的组织和用户账户、C2 主机名等)已经在模板中,因为它们在整个集群中都是相同的。 - **GitHub Trust & Safety** (https://github.com/contact/report-abuse) → **[`abuse-report-github.md`](./incidents/2026-05-13-ajunaverse-mvp/abuse-report-github.md)**。该活动需要通过 GitHub 的三个滥用处理流程进行多次提交:一份针对您遇到的仓库,外加针对案例文件中指定的每个受攻击者控制的组织和用户账户的单独提交。该模板包含一个提交清单,列出了每种实体类型的 UI 流程、基于信号的依据(说明哪些实体符合停用条件(相对于被入侵的合法账户)),以及主报告和按实体提交的模板化主题和正文代码块。包括 AUP 引用和 corroborating-third-party-write-up 参考。 - **Vercel 滥用** (https://vercel.com/help) → **[`abuse-report-vercel.md`](./incidents/2026-05-13-ajunaverse-mvp/abuse-report-vercel.md)**。C2 主机名为整个活动提供服务,因此该提交本质上是跨集群的。包含一个可重现的 30 秒 curl 探测,滥用举报分析师可以自行运行以验证 C2 的 IP 允许列表限制。 ### 🛡 您是负责构建规则或为 SIEM/TIP 提供数据的蓝队 / 检测工程师 以下 IOC 和规则覆盖了整个集群,而不仅仅是一个仓库。 - **IOC** 包含适用于电子表格的 CSV 和适用于工具的 JSON(适合 MISP / STIX / OpenCTI 导入): → **[`iocs.csv`](./incidents/2026-05-13-ajunaverse-mvp/iocs.csv)** → **[`iocs.json`](./incidents/2026-05-13-ajunaverse-mvp/iocs.json)** - **检测规则** —— 三个 YARA 规则(源代码扫描)、三个 Sigma 规则(进程 / DNS / 代理遥测)、四个供分析师使用的 grep 单行命令,以及 DNS/代理阻止列表指南和一个“规则维护”部分,解释在活动轮换惯用语时哪些规则是持久的,哪些是脆弱的: → **[`detection-rules.md`](./incidents/2026-05-13-ajunaverse-mvp/detection-rules.md)** ### 🔍 您是一名安全研究人员或威胁情报分析师,想要完整的案例文件 主分析。交互背景 → 仓库概览 → 执行路径矩阵 → 每个加载器的注释技术分析(带有逐字代码摘录) → 动态分析发现(确认目标 IP 允许列表限制处于活跃状态) → 活动归因和约 15 个同级仓库的足迹 → 文本形式的 IOC → 调查期间运行的每个命令的可重现性/方法审计日志: → **[`incidents/2026-05-13-ajunaverse-mvp/README.md`](./incidents/2026-05-13-ajunaverse-mvp/README.md)** (约 5400 字,按章节结构化,便于导航) ### 🧠 您正在研究这些陷阱是如何构建的 —— 为了加固防御、在防御实验室中构建类似的东西,或者编写教学示例 与上一个要点的主文件相同,但请直接跳至 **§4 "Annotated technical analysis"** 获取逆向工程演练。附录 A 包含重新格式化去除了空白混淆的逐字代码。附录 B 是按命令划分的审计日志,如果您想重现的话。 ## 已知活动仓库 所有成员都属于同一个多组织行动。每个仓库都包含相同的 `verify(setApiKey(process.env.AUTH_API))` + `new Function("require", response.data)` Node 加载器惯用语(或其早期生成版本的等价物)。**此仓库中的工件 —— 简报、滥用报告、检测规则、IOC —— 适用于整个活动,而不仅仅是任何一个仓库。** 该目录区分了两个不同的关注点: - **仓库** —— 发送给受害者的内容。适用于*自我识别*(“我被指向这些了吗?”)和*移除*(这些仓库都是恶意的;它们都应被移除)。 - **拥有账户和组织** —— 托管或提交到这些仓库的 GitHub 身份。适用于*提交决策*(哪些实体应被报告停用,哪些本身是不同攻击的受害者)。 仓库的拥有账户是攻击者拥有还是被入侵的合法开发者,并不会改变仓库是否恶意 —— 加载器就是加载器。但它确实会改变 GitHub 应该停用该账户还是仅仅移除该仓库。 ### 置信度信号 下面的每个实体都显示了它满足的可验证信号。**多信号分类比单信号分类更值得信赖。** 信号分为两组,因为它们描述了不同的单元: **仓库级信号** —— 可在仓库本身中观察到: | 代码 | 含义 | |---|---| | **L** | **仓库中存在加载器代码**(通过对特征字符串进行 GitHub 代码搜索验证)。最强的单一可观察项 —— 该仓库是活动的一部分。 | | **T** | **VS Code `.vscode/tasks.json` autorun** 在 `folderOpen` 时带有管道 shell 负载存在于仓库中。 | | **E** | **已提交的 `.env`** 包含一个 base64 编码的 `AUTH_API` 值,指向该活动的 Node 加载器 C2。 | | **I** | **位完全相同的工件**与另一个已知集群成员(例如 `.vscode/tasks.json` 的相同 git blob SHA)—— 证明跨账户的攻击者协调,而非巧合。 | **账户级信号** —— 可在拥有账户/组织资料中观察到: | 代码 | 含义 | |---|---| | **A** | **命名符合攻击者惯例**(`*WorkHub*`、`Hub9`、`Hub99`、数字 `9` 后缀的仓库命名模式)或提交者电子邮件使用了 `+N` Gmail 别名人设惯例。 | | **S** | **没有合法的开发者活动** —— 账户仅托管活动形状的仓库,或者是单一用途且最近创建的。 | | **C** | **与另一个攻击者账户集群创建**(同一天 + 相邻的 GitHub 数字 ID —— 证明由一个攻击者批量创建)。 | 任何经验证的 **L** 都证明无论账户状态如何,移除该仓库都是正当的。账户上的 **A + S**(或 **A + S + C**)证明要求 GitHub 停用该账户是正当的。 ### 仓库 以下所有仓库均已确认为活动成员(每行的 L 均已验证)。“Generation”列指的是加载器代码的文件路径:*当前* 生成版本将其放在 `server/routes/api/auth.js`;*早期* 生成版本将其放在 `app/controllers/frontController.js`。两者的加载器惯用语相同;不同之处在于周围的脚手架。 | 仓库 | 诱饵主题 | 生成版本 | 已验证的仓库信号 | |---|---|---|---| | [AjunaWorkHub/AjunaVerse_MVP](https://github.com/AjunaWorkHub/AjunaVerse_MVP) | Web3 元宇宙 | 当前 | L · T · E · I | | [AetSoftWorkHub/AetSoft_MVP](https://github.com/AetSoftWorkHub/AetSoft_MVP) | Web3 元宇宙 | 当前 | L · T · I(通过与 AjunaVerse 位完全相同的 `tasks.json` blob) | | [DLabsHungary-Hub9/DLabs-Platform-MVP2](https://github.com/DLabsHungary-Hub9/DLabs-Platform-MVP2) | 通用平台 MVP | 当前 | L | | [roamanbuild/OnyxVerse](https://github.com/roamanbuild/OnyxVerse) | Web3 元宇宙 | 当前 | L | | [khaleb-dev/jackpot](https://github.com/khaleb-dev/jackpot) | 赌博 | 当前 | L | | [rony1235/Jp-Soccer](https://github.com/rony1235/Jp-Soccer) | 体育博彩 | 当前 | L | | [mspkteam/williampotter](https://github.com/mspkteam/williampotter) | (不清楚) | 当前 | L | | [Andrii-888/0gRollplay](https://github.com/Andrii-888/0gRollplay) | dApp / 游戏 | 早期 | L | | [prahaladbelavadi/CoinLocatorDemo](https://github.com/prahaladbelavadi/CoinLocatorDemo) | 加密货币 / 定位器演示 | 早期 | L | | [sky-cook/tokentradingdapp](https://github.com/sky-cook/tokentradingdapp) | Token 交易 dApp | 早期 | L | | [WilliamSuhosky/Property-Voting-DApp](https://github.com/WilliamSuhosky/Property-Voting-DApp) | 投票 dApp | 早期 | L | | [artemus-jarrett/blockchain-voting-system](https://github.com/artemus-jarrett/blockchain-voting-system) | 投票 dApp | 早期 | L | | [TechByteX/NitroGem](https://github.com/TechByteX/NitroGem) | (不清楚) | 早期 | L | | [jamesm-dev/NitroGem](https://github.com/jamesm-dev/NitroGem) | (不清楚) | 早期 | L | | [dappfusion/defi-real-estate](https://github.com/dappfusion/defi-real-estate) | 房地产代币化 | 早期 | L | | [InvescoHub/defi-real-estate](https://github.com/InvescoHub/defi-real-estate) | 房地产代币化 | 早期 | L | 请注意,对于大多数仓库,仅直接验证了加载器代码 (**L**) —— 这是 GitHub 代码搜索命中的信号。多信号行(AjunaVerse、AetSoft)是我们进行了端到端检查的仓库。其余的可能有额外的信号(**T**、**E**、**I**),但需要直接检查每个仓库才能确认。 ### 拥有账户和组织 | 账户 / 组织 | 类型 | 结论 | 账户信号 | 备注 | |---|---|---|---|---| | [AjunaWorkHub](https://github.com/AjunaWorkHub) | 组织 | **攻击者拥有**(停用) | A · S · C | 组织 ID 276264331,于 2026-04-27 与 `AetSoftWorkHub` 在同日相邻 ID 集群中创建。拥有:`AjunaVerse_MVP`。 | | [AetSoftWorkHub](https://github.com/AetSoftWorkHub) | 组织 | **攻击者拥有**(停用) | A · S · C | 组织 ID 276275397,与 `AjunaWorkHub` 同日创建。拥有:`AetSoft_MVP`。 | | [DLabsHungary-Hub9](https://github.com/DLabsHungary-Hub9) | 组织 | **攻击者拥有**(停用) | A · S | 单仓库单用途组织。`Hub9` 后缀符合攻击者惯例。拥有:`DLabs-Platform-MVP2`。 | | [GitWorkHub9](https://github.com/GitWorkHub9) | 用户 | **攻击者拥有**(停用) | A | 用户 ID 272514006。`AjunaWorkHub/AjunaVerse_MVP` 的唯一提交者。提交者电子邮件 `fatihafariya8+2@gmail.com` —— `+N` Gmail 别名人设惯例。 | | [GitWorkHub99](https://github.com/GitWorkHub99) | 用户 | **攻击者拥有**(停用) | A · S | 用户 ID 213663943。资料中填充了约20 个知名 OSS 项目的克隆(`llama.cpp`、`prettier`、`angular-cli`、`nuxt.com`、`Xray-core`、…) —— 公开记录的“信誉养殖”TTP。托管同级活动仓库 `AetSoftVerse`。 | | [roamanbuild](https://github.com/roamanbuild) | 用户 | **攻击者拥有**(停用;目前不在按用户提交清单中 —— 可作为候选项添加) | A · S | 所有 6 个账户仓库都是活动形状(`OnyxVerse`、`ACN-Verse`、`Japanese-Royal`,加上符合攻击者数字 `9` 后缀人设惯例的 `*-demo9` 变体)。均在 2026 年 5 月的一周内创建。拥有:`OnyxVerse` + 5 个同级仓库。 | | [khaleb-dev](https://github.com/khaleb-dev) | 用户 | **可能被入侵的合法账户**(调查,不要停用) | — | 超过 5 年的 55 个仓库,涵盖 PHP/Java/Vue/Dart —— 明显的真实开发者作品集。`jackpot` 仓库似乎是通过对账户的入侵被推送的。 | | [rony1235](https://github.com/rony1235) | 用户 | **可能被入侵的合法账户**(调查,不要停用) | — | 账户自 2017 年就存在,包含约 11 个大部分处于低活跃度的仓库;2026 年 4 月至 5 月添加的三个活动形状仓库(`schooltutorial`、`japan-test`、`Jp-Soccer`)表明最近遭到入侵。 | | [mspkteam](https://github.com/mspkteam) | 用户 | **可能被入侵的合法账户**(调查,不要停用) | — | 5 个混合仓库,活动仓库夹在较旧和较新的合法项目(`fitnesssworldadminpanel`、`ETC-Coporative-code`、`specialized_medical`)之间。 | | [Andrii-888](https://github.com/Andrii-888) | 用户 | 不确定(未调查) | — | 拥有:`0gRollplay`。早期生成版本的诱饵模式倾向于“可能被入侵的合法账户”,但未确认。 | | [prahaladbelavadi](https://github.com/prahaladbelavadi) | 用户 | 不确定(未调查) | — | 拥有:`CoinLocatorDemo`。 | | [sky-cook](https://github.com/sky-cook) | 用户 | 不确定(未调查) | — | 拥有:`tokentradingdapp`。 | | [WilliamSuhosky](https://github.com/WilliamSuhosky) | 用户 | 不确定(未调查) | — | 拥有:`Property-Voting-DApp`。 | | [artemus-jarrett](https://github.com/artemus-jarrett) | 用户 | 不确定(未调查) | — | 拥有:`blockchain-voting-system`。 | | [TechByteX](https://github.com/TechByteX) | 用户/组织 | 不确定(未调查) | — | 拥有:`NitroGem`。 | | [jamesm-dev](https://github.com/jamesm-dev) | 用户 | 不确定(未调查) | — | 拥有:`NitroGem`(重复的仓库名称)。 | | [dappfusion](https://github.com/dappfusion) | 用户/组织 | 不确定(未调查) | — | 拥有:`defi-real-estate`。 | | [InvescoHub](https://github.com/InvescoHub) | 用户/组织 | 不确定(未调查) | — | 拥有:`defi-real-estate`(重复的仓库名称)。 | 证明每个攻击者拥有分类的详细信号(以及用于验证它们的方法)位于每个事件的案例文件中。请参阅下面的[在此仓库中分析的事件](#incidents-analyzed-in-this-repo)。 ### 遇到了不在此列表中的仓库? 如果招聘人员向您指向了一个符合相同形状但不在上述列表中的仓库,简报中的诊断性 grep —— `grep -RIn -E 'new Function\(["'\''"]require["'\''"],|verify\(setApiKey|x-app-request|"runOn":[[:space:]]*"folderOpen"' .` —— 将一次性告诉您它是否是相同的活动。如果匹配,请打开一个包含该 URL 的 issue(或者,如果您有推送权限,直接[将其添加到 IOC](./incidents/2026-05-13-ajunaverse-mvp/iocs.csv))。 ## 在此仓库中分析的事件 | 日期 | 别名 | 结论 | 快速链接 | |---|---|---|---| | 2026-05-13 | [ajunaverse-mvp](./incidents/2026-05-13-ajunaverse-mvp/) | 确认为恶意;"Contagious Interview" TTP 集群的成员,≥15 个同级仓库 | [案例文件](./incidents/2026-05-13-ajunaverse-mvp/README.md) · [开发者](./incidents/2026-05-13-ajunaverse-mvp/briefing-for-developers.md) · [GH 滥用](./incidents/2026-05-13-ajunaverse-mvp/abuse-report-github.md) · [Vercel 滥用](./incidents/2026-05-13-ajunaverse-mvp/abuse-report-vercel.md) · [IOC](./incidents/2026-05-13-ajunaverse-mvp/iocs.csv) · [规则](./incidents/2026-05-13-ajunaverse-mvp/detection-rules.md) | 每个事件文件夹包含主分析(包含完整的攻击者识别、归因以及分析的具体永久链接 / 提交 SHA)以及针对受众的衍生工件。事件级工件适用于它们在分析期间识别出的集群 —— 上方的[已知活动仓库](#known-campaign-repositories)表格是所有事件中所有已知集群成员的实时目录。 ## 关于本仓库 这是一个用于分析在野外遇到的针对开发者的社会工程/恶意软件活动的个人工作区 —— 通常通过指向恶意 GitHub 仓库的虚假招聘外联传递。每个案例都有一个带日期的目录,包含一份规范的主分析以及为需要对其采取行动的不同受众提供的衍生工件。 ### 基本规则 - 这里只存放*分析*、*文档*和*证据摘录*。 - 可疑/恶意仓库的完整源树**未**被提交。案例在一次性临时目录(例如 `/tmp/-static-review/`)中检查,仅引用支持发现的必要摘录。 - 没有提交来自所研究活动的攻击者控制的二进制 blob、负载响应或任何包含可执行内容的文件。 ### 布局 ``` README.md this file (audience-first entry point; cluster-level, no per-case specifics) incidents/ YYYY-MM-DD-/ README.md master analysis (the canonical record; contains case-specific specifics) briefing-for-developers.md short forwardable read for would-be victims abuse-report-github.md copy-paste template for GitHub T&S filings abuse-report-vercel.md copy-paste template for Vercel abuse filings iocs.csv machine-readable IOCs (spreadsheet-friendly) iocs.json machine-readable IOCs (tool-friendly) detection-rules.md YARA + Sigma + grep rules for blue-team detection ``` ### 惯例 - 一个事件 → 一个目录。目录名称为 `YYYY-MM-DD-`,其中日期是遇到日期,slug 是诱饵/目标仓库名称(而不是攻击者选择的品牌)。 - 主分析始终是事件目录中的 `README.md`,因此当您导航进入时 GitHub 会渲染它。**所有每个案例的具体信息 —— 攻击者组织/用户名、GitHub ID、提交者电子邮件、提交 SHA、动态分析观察结果 —— 都位于此处。** - 滥用报告文件是**带有占位符的模板**,用于填写案例的具体信息(``、``、``) —— 提交者在提交前从案例文件中填写。活动范围的 IOC(攻击者控制的组织/用户名、C2 主机名等)在模板中保持具体,因为它们对于此活动中的任何提交者都是相同的。 - 衍生工件使用稳定的文件名(`briefing-for-developers.md`、`abuse-report-.md`、`iocs.{csv,json}`、`detection-rules.md`),因此它们在不同事件之间是可预测的,受众也能确切知道去哪里查找。 - 如果衍生类型不适用于给定事件(例如,没有 Vercel 托管的 C2 → 没有 Vercel 滥用报告),请省略该文件,而不是留下一个空的占位符。 - 顶层 README 是**集群/活动视图** —— 活动目录表格、受众路由、仓库惯例。它不指定特定的攻击者组织或用户账户;这些放在事件案例文件中。
标签:C2服务器, dApp安全, DAST, DeFi安全, DNS信息、DNS暴力破解, DNS 反向解析, ESC8, GitHub安全, Homebrew安装, IP 地址批量处理, Node.js安全, npm安全, PFX证书, Vercel安全, Web3安全, YARA规则, 供应链攻击, 假招聘, 元宇宙安全, 克隆仓库钓鱼, 加密货币安全, 威胁情报, 安全响应, 库, 应急响应, 开发者安全, 开发者工具, 恶意软件分析, 搜索语句(dork), 攻击检测, 攻击者TTP, 数据窃取, 木马分析, 社会工程学, 网络信息收集, 防御加固