当前位置: 首页 > news >正文

危机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

相关文章:

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

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

CVE-2020-0796永恒之蓝2.0(漏洞复现)

目录 前言 产生原因 影响范围 漏洞复现 复现环境 复现步骤 防御措施 总结 前言 在网络安全的战场上,漏洞一直是攻防双方关注的焦点。CVE-2020-0796,这个被称为 “永恒之蓝 2.0” 的漏洞,一度引起了广泛的关注与担忧。它究竟是怎样的…...

游戏策划的分类

P3游戏策划分类 1.程序2.美术3.策划 程序:一般分为客户端程序和服务器程序 客户端程序一般负责游戏的前端画面表现 服务器程序负责游戏的后端运算 美术:角色原画,角色模型动作,场景原画,场景模型,UI设计&a…...

单片机基础模块学习——PCF8591芯片

一、A/D、D/A模块 A——Analog 模拟信号:连续变化的信号(很多传感器原始输出的信号都为此类信号)D——Digital 数字信号:只有高电平和低电平两种变化(单片机芯片、微控制芯片所能处理的都是数字信号) 下面…...

深入探索 HTML5 拖拽效果 API:打造流畅交互体验

在现代的 Web 开发中,交互性和用户体验一直是开发者关注的重点。HTML5 的拖拽效果 API (Drag and Drop API) 提供了一种非常直观的方式来让网页元素或文件能够被拖动并放置到页面的指定位置,极大提升了用户的交互体验。本篇文章将深入探讨如何使用 HTML5…...

【Healpix】python一种用于将球面划分为均匀区域的技术

Healpix 1、简介2、Healpix的基本原理3、Healpix的优点4、安装及使用4.1 安装healpy4.2 创建Healpix地图4.3 读取和写入Healpix数据4.4 数据插值 5、案例5.1 案例一:宇宙微波背景辐射(CMB)分析5.2 案例二:星系分布分析5.3 案例三&…...

Go:基于Go实现一个压测工具

文章目录 写在前面整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理 客户端模块Http客户端处理Grpc客户端处理Websocket客户端处理 连接处理模块GrpcHttp 统计数据模块统计原理实现过程 写在前面 本篇主要是基于Go来实现一个压测的工具,关于压测的内…...

算法-加油站问题

hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧! function canCompleteCircuit(gas, cost) {// 加油站的总数const n gas.length;// 记录总剩余油量,若总剩余油量小于 0,说明无法绕环…...

UART ,IIC 和SPI三种总线协议

1.UART 1.1 简介 UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器。 常见的串行、异步通信总线,两条数据线Tx、Rx,实现全双工通信,常用于主机与外设的通信,点对点。 1.2 硬件连接 交叉…...

Padas进行MongoDB数据库CRUD

在数据处理的领域,MongoDB作为一款NoSQL数据库,以其灵活的文档存储结构和高扩展性广泛应用于大规模数据处理场景。Pandas作为Python的核心数据处理库,能够高效处理结构化数据。在MongoDB中,数据以JSON格式存储,这与Pandas的DataFrame结构可以很方便地互相转换。通过这篇教…...

动手学图神经网络(6):利用图神经网络进行点云分类

利用图神经网络进行点云分类 引言 在本教程中,大家将学习使用图神经网络(Graph Neural Networks, GNN)进行点云分类的基本工具。给定一组对象或点集的数据集,将这些对象嵌入到一个特征空间中,使得它们在特定任务下能够分类。将原始点云作为神经网络的输入,让网络学习捕…...

C语言从入门到进阶

视频:https://www.bilibili.com/video/BV1Vm4y1r7jY?spm_id_from333.788.player.switch&vd_sourcec988f28ad9af37435316731758625407&p23 //枚举常量 enum Sex{MALE,FEMALE,SECRET };printf("%d\n", MALE);//0 printf("%d\n", FEMALE…...

Python中容器类型的数据(下)

集合 集合 (set) 是一种可迭代的、无序的、不能包含重复元素的容器类型的数据。 Python中的集合是一种重要的数据结构,以下为你详细介绍: 定义与特点 无序性:集合中的元素没有固定顺序, {1, 2, 3} 和 {3, 2, 1} 在Python中是同一…...

MySQL 用户相关的操作详解

MySQL 5.x 用户操作 创建用户 在 MySQL 5.x 中,使用 GRANT 语句创建用户并授权: 语法 GRANT ALL PRIVILEGES ON *.* TO usernamehost IDENTIFIED BY password;username:用户名 host:指定用户可访问的主机,例如 loca…...

如何删除hugging face dowloaded的llm model?

如何删除hugging face dowloaded的llm model? 在现在需要使用llm进行research的情况下,经常会出现,由于下载模型太多,导致内存问题,然后需要删除某些不用的模型的情况,那么如何找到hugging face的模型保存…...

Vue 封装http 请求

封装message 提示 Message.js import { ElMessage } from "element-plus";const showMessage (msg,callback,type)>{ElMessage({message: msg,type: type,duration: 3000,onClose:()>{if (callback) {callback();}}}); }const message {error: (msg,…...

恒源云云GPU服务器训练模型指南

1数据上传 为了更方便的上传数据与下载数据,本例程采用xftp来完成数据的传输与下载。 XFTP下载链接,选择学生免费试用即可 2服务器的选择以及开启: 控制台->我的实例->点击创建实例 一般选择按量付费 接下来根据自己代码的torch版本…...

Spring Boot应用中实现基于JWT的登录拦截器,以保证未登录用户无法访问指定的页面

目录 一、配置拦截器进行登录校验 1. 在config层设置拦截器 2. 实现LoginInterceptor拦截器 3. 创建JWT工具类 4. 在登录时创建JWT并存入Cookie 二、配置JWT依赖和环境 1. 添加JWT依赖 2. 配置JWT环境 本篇博客将为大家介绍了如何在Spring Boot应用中实现基于JWT的登录…...

MySQL 基础学习(1):数据类型与操作数据库和数据表

MySQL 基础学习:数据类型与操作数据库和数据表 在这篇博客中,我们将深入学习 MySQL 的基础操作,重点关注数据库和数据表的操作,以及 MySQL 中常见的数据类型。希望本文能帮助你更好地理解和掌握 MySQL 的基本用法。 一、操作数据…...

zyNo.19

哈希(md5)绕过问题 本质上是弱类型问题的延申 题型 登录的哈希验证 $a ! $b Md5($a) md5($b) 解决办法Md5绕过 var_dump ("0e123456" "0e4456789"); //true 0e545993274517709034328855841020//true 参考资料0e开头的哈希…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

Python学习(8) ----- Python的类与对象

Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...

用 FFmpeg 实现 RTMP 推流直播

RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...