危机13小时:追踪一场GitHub投毒事件

事件概要

自北京时间 2024.12.4 晚间6点起, GitHub 上不断出现“幽灵仓库”,仓库中没有任何代码,只有诱导性的病毒文件。当天,他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒,等待不幸者上钩。

而这一切被一位中国开发者--我收在眼底。经过几天的探测寻找,疑似找到了攻击者的真身。

事件经过

别人编写了一套开源程序,用于寻找当下最早期的潜力种子项目。 源码 https://github.com/chmod777john/github-hunter

我曾经用它找到过一个很好的开源项目 MagicQuill ,在其创建还不足24小时的时候我就检测到它了。

自此我大受鼓舞,决定每天都用我的算法搜寻一下Github上最新创建的仓库中,看看哪些是有潜力的。这样我可以领先于官方的Github Trending榜,也能比绝大部分科技媒体更早地发现好项目。

在 12.4 的搜寻过程中,我发现了一批不太一样的仓库。

这里面的 is None 代表仓库有大量 star 记录,后来却被删库。为何有如此大量的高赞仓库会被删除呢?

期初我没在意,而在一天后,这些仓库再次出现。

就好像幽灵一样,建仓->取得高赞->删库->再次创建。

罪证

这些仓库点进去一看,都是同一种风格: 声称自己是某个游戏的外挂或者 PhotoShop 破解版之类的,引导用户下载并且打开他的 exe 文件。

基本可以确定是钓鱼仓库了。所有这些仓库创建时间都非常相近,大约就是十多小时之前,而且短时间内积累到几百 star ,其背后必有高人。

追凶

这些攻击者是谁? 我决定一探究竟。

历时4年的攻击

首先查看是谁给这些仓库点了赞,

我本以为大多是最新创建的机器人账号。

出乎意料的是,这些账号的加入时间并不短。有些账号甚至是 2020 年就加入 Github 了。

4年的老号可不是说弄就弄的,如果这号是他自己的,那可真是下了血本,一个号养4年就为了这一天?

如果这号是他在黑市上买的,那说明4年前就有人开始批量养小号,也是一条很可观的产业链了。(创业都不一定能创4年呢)

无论这些号是攻击者自己养的还是在黑市上买的,成本都不低。

一片空白

我开始逐个账户打开查看,坐实了一件事:这些仓库都是一伙儿的!

这个人点赞过的所有仓库,都是刚刚说的幽灵仓库!

不过个人资料卡上完全没有任何痕迹。 没有粉丝,也没有关注的人,这让我们无从下手,简直一片空白。

漫漫长路

180 多个账号,我真的逐个点开来看了。其中大部分的都是纯粹的空白账户,只用来点赞。但仍然有一些是附带个人资料的。

这个账号甚至附带了个人网页和 Instagram 。

不过凡事讲究双向证明。万一这个账号是冒用小哥的信息呢? 只能将其列为怀疑对象。

峰回路转

攻击者账户 follow 了谁,并不重要,因为攻击者可以冒用他人信息。真正有用的线索,应该看谁 follow 了攻击者。

踏破铁鞋无觅处,我找到了一个活人账号。

有 5 个人 follow 了这个账号!而且看他的 star 历史,可以明确他是攻击者之一。

而且该账号有真实的 Github 代码提交记录(记住这个叫 SimpleBot 的仓库)

我们来看看是谁 follow 了这个 G4tito

这两位都是大人物。看看他们的 Github 主页长啥样:

BrunoSobrino 和 elrebelde21 这两位大 V, 曾经合作过一个开源项目。

和明确攻击者做的项目是同名的!

至此,逻辑链如下:

可见 BrunoSobrino 和 elrebelde21 这两位大牛,跟攻击者 G4tito 可能是有联系的。

其实到这里基本破案了。操纵 180 多个账号是短时间内点赞和创建仓库,批量生成内容,不太可能用人工完成,应该是用 GitHub API 自动化做的。这两位大牛和明确攻击者,做的项目都是那种 WhatsAPP 机器人,技术栈也相当吻合了。

2024.12.7 凌晨 6:11 更新

经评论区大佬提点,找到一个疑似线索

地址

https://github.com/BrunoSobrino/ShadowBotV3

GhostArchive 备份地址 https://ghostarchive.org/archive/1EZ9e

证据

我知道曝光之后,他们肯定会删库的,因此我已经提前把所有网页都备份到 GhostArchive 了。

我挖掘到的恶意仓库列表,也全都放在了区块链上,形成铁证。

各位看官不必信任我,请直接去查看区块链。所有记录都在里面。

https://viewblock.io/arweave/tx/Cppr-Bus0TxC6_zqD-sJitVz4Ne3sR0noJknsuyhZ4Q

宣传

我知道一些媒体朋友会见到这篇文章,我希望你们帮我推广。

我只是一个不起眼的小人物,这个故事不推广的话,就只能烂在我的肚子里。

我认为这是个好故事。中国程序小哥,单枪匹马,通过大数据筛查的方式,破获了一起 GitHub 恶意软件钓鱼事件,涉及的大V在 Github 上有接近数百关注者,获得过几千 star 。同时涉及有多达 180 个虚假账号,长达 4 年的活动。 这些 buff 叠在一起,相当有故事性了。

更重要的是,这件“真人真事” 是可以被检验的。所有的记录都在区块链上,涉事人删库也没用。

所有人都可以重走一遍我的侦查之旅,仔细检验每个网页备份。

把这个故事发扬出去,能有什么好处:

我可以用区块链私钥签署一条消息,内容是“xx媒体慧眼识珠,是第一批愿意帮助我推广这个故事的人” 。消息一旦签署上链,所有人都可以校验,而且不可篡改,如同铁证,连我自己也无法反悔。

凭借这样一条消息,我越火,你的含金量越高。

我不太会讲故事,但上面都是真事儿,每个细节都可以检查。

如果你觉得这个故事可以帮我讲好的话,联系我。


事件描述:

chmod777john/ghost-repos​github.com/chmod777john/ghost-repos

我发现这个攻击事件所用的工具:

github-hunter/index.ipynb at main · chmod777john/github-hunter​github.com/chmod777john/github-hunter/blob/mai

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9443.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读(十三):复杂表型关联的贝叶斯、基于系统的多层次分析:从解释到决策

1.论文链接:Bayesian, Systems-based, Multilevel Analysis of Associations for Complex Phenotypes: from Interpretation to Decision 摘要: 遗传关联研究(GAS)报告的结果相对稀缺,促使许多研究方向。尽管关联概念…

设计模式-建造者模式、原型模式

目录 建造者模式 定义 类图 优缺点 角色 建造者模式和工厂模式比较 使用案例 原型模式 定义 类图 优缺点 应用场景 应用类型 浅克隆 深克隆 建造者模式 定义 将一个复杂的对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,…

Python GUI 开发 | Qt Designer — 工具介绍

关注这个框架的其他相关笔记:Python GUI 开发 | PySide6 & PyQt6 学习手册-CSDN博客 Qt Designer 即 Qt 设计师,是一个强大、灵活的可视化 GUI 设计工具,可以帮助用户加快开发 PySide6 程序的速度。 Qt Designer 是专门用来制作 PySide6…

园区管理智能化创新引领企业效能提升与风险控制新趋势

内容概要 在现代园区管理中,智能化创新正成为越来越多企业优化效能和控制风险的重要途径。通过引入先进的技术手段,企业能够更高效地管理资源,并实现全面的风险控制。 首先,园区管理系统的基本概念和发展现状让我们看到科技与管…

LTV预估 | 深度学习PLTV之开山鼻祖ZILN

🤣 这一集让我们欢迎基于深度学习的pltv方法:ZILN,ZILN可以说是后面很多研究的参考方法,我看了好几篇最新的pltv论文,都是基于ZILN来做的。 文章目录 1 精简总结2 背景&挑战:3 方法:实验&am…

docker安装emqx

emqx安装 拉取emqx镜像 docker pull emqx/emqx:v4.1.0 运行docker容器 docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0 放行端口 1、如果要是自己的虚拟机,并且关闭了防火墙&a…

【C++题解】1393. 与7无关的数?

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1393. 与7无关的数? 类型:简单循环 题目描述: 一个整数,如果这个数能够被 7 整除,或者其中有一位是7,我们称…

分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv

结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径, 旨在将强化学习(RL)和代码即策略相结合, 以解决大语言模型&#xff08…

多级缓存(亿级并发解决方案)

多级缓存(亿级流量(并发)的缓存方案) 传统缓存的问题 传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下: (1)请求要经过tomcat处…

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...

三、 实现; 三.三、编写应用程序; 此文主要是实现应用的主要编码工作。 1、 分层; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示;Helper主要是链接UI和数据库操作的中间层;DAL为对数据库的操…

RPC是什么?和HTTP区别?

RPC 是什么?HTTP 是什么? 作为一个程序员,假设我们需要从A电脑的进程发送一段数据到B电脑的进程,我们一般会在代码中使用 Socket 进行编程。 此时,可选性一般就是 TCP 和 UDP 二选一,由于 TCP 可靠、UDP 不…

在无sudo权限Linux上安装 Ollama 并使用 DeepSeek-R1 模型

本教程将指导你如何在 Linux 系统上安装 Ollama(一个本地运行大型语言模型的工具),并加载 DeepSeek-R1 模型。DeepSeek-R1 是一个高性能的开源语言模型,适用于多种自然语言处理任务。 DeepSeek-R1 简介 DeepSeek-R1 是 DeepSeek …

大数据治理实战:架构、方法与最佳实践

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 大数据治理是确保数据质量、合规性和安全性的重要手段,尤其在数据驱动决策和人工智能应用日益普及的背景下&…

JavaScript_02 表单

表单常用演示: 1.图片 结果失真了... 2.切换图片 切换结果 3.表单:

【MySQL】初始MySQL、库与表的操作

目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …

three.js用粒子使用canvas生成的中文字符位图材质

three.js用粒子使用canvas生成中文字符材质 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Three.…

unity实现回旋镖函数

最近学习unity2D&#xff0c;想实现一个回旋镖武器&#xff0c;发出后就可以在角色周围回旋。 一、目标 1.不是一次性的&#xff0c;扔出去、返回、没有了&#xff1b;而是扔出去&#xff0c;返回到角色后方相同距离&#xff0c;再次返回&#xff1b;再次返回&#xff0c;永远…

Cursor 帮你写一个小程序

Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述&#xff1a;吃什么助手 项目名称&#xff1a; 吃什么小程序 功能目标…

oracle比较一下统计信息差异吧

统计信息发生了哪些变化&#xff1f; 从上次收集到最近一次收集有什么不同&#xff1f; set long 999999 longc 99999 line 100 select report, maxdiffpct from table(dbms_stats.diff_table_stats_in_history(SYS,T1,to_timestamp(2025-01-22 09:01:46,YYYY-MM-DD hh24:mi:s…

STM32 LED呼吸灯

接线图&#xff1a; 这里将正极接到PA0引脚上&#xff0c;负极接到GND&#xff0c;这样就高电平点亮LED&#xff0c;低电平熄灭。 占空比越大&#xff0c;LED越亮&#xff0c;占空比越小&#xff0c;LED越暗 PWM初始化配置 输出比较函数介绍&#xff1a; 用这四个函数配置输…