写点什么

我在 GitHub 黑市买“水军”:一万颗 star 只要 4000 多元,人人都能“一夜爆火”

  • 2023-03-20
    北京
  • 本文字数:4805 字

    阅读完需:约 16 分钟

我在GitHub 黑市买“水军”:一万颗star只要4000多元,人人都能“一夜爆火”

“说实在的,我的梦想就是拥有个几千 star 的 GitHub 项目。”有开发者说道。

 

虽然 GitHub star 数现在可能跟公众号的“阅读量”或者微博的“转发量”一样,是一种虚无飘渺的虚荣心指数,但不妨碍它成为开源社区中展示普遍认同的一大重要指标。项目 star 数也会影响很多重大的高风险决策,包括选择哪些项目、为哪些初创项目注资,甚至选择哪家企业入职等。

 

但是,现在人们已经不相信 star 数这个指标了。“GitHub 项目的 star 数我倒是不在乎,因为这东西太容易造假了,也代表不了项目的品质。我就不会去跟别人说给我的项目点 star 哦,这种行为在我看来真的 low 得不能再 low 了。​​​”有开发者说道。

 

事实上,这位开发者说得并没有错。我们总会在 GitHub 上发现一些迅速蹿红的开源项目,刚刚开放,每周就能拿下几百 star。真有那么优秀吗?似乎好得令人难以置信了。还有一些新项目刚上架几天就 star 数猛增,这可是知名老项目在发布新版本或者其他重大公告才能拥有的待遇。

 

最近,开源编排平台 Dagster 分享了在抽查一部分代码仓库后,发现了的几位“嫌疑人”,而在 Dagster 披露后,一些账户已经被删除。



请注意账户创建日期,这跟正常的 GitHub 用户明显有所区别

买了 star 后,项目一夜爆火

 

Dagster 的几位研究人员亲身体验了购买 star 给项目带来的优越。Dagster 建立了一个虚构的代码仓库(frasermarlow/tap-bls)并买了一堆 star。然后,Dagster 为该账户设计了个人资料文件,并使用 GitHub REST API(通过 pygithub)和 GitHub Archive 数据库展开了一系列测试。


Dagster 的代码仓库一夜之间就火了……



跟它一起“蹿红”的项目还有不少。

 

GitHub star 在哪里可以买到呢?用不着潜入暗网,直接在谷歌上搜就能找到几十种服务。为了观察这些虚假 GitHub 账户的个人资料,Dagster 通过以下服务买了 star:

 

  • Baddhi Shop,低成本伪造各种线上公开影响力指标的专业“服务商”。最低 64 美元,你就能买到 1000 颗 GitHub star。

  • GitHub24,由 Möller und Ringauf GbR 提供的服务,价格比 Baddhi Shop 要高得多(每 star 0.85 欧元)。

 

有一说一,这帮家伙还挺讲“诚信经营”:Dagster 买的 star 很快就到账了。GitHub24 在 48 小时内就交付了 100 颗 star。在此之前,Dagster 的代码仓库只有 3 颗 star。由于 Baddhi Shop 的价格更便宜,所以 Dagster 在这个渠道上订购了 500 颗 star,而一周之内对方同样成功履约。

 

不过,Dagster 表示“一分钱一分货”:一个月后 GitHub24 交付的 24 颗 star 都还在,但纯伪造的 Baddhi Shopstar 只剩下四分之三,那四分之一可能是被 GitHub 的完整性团队撤掉了。

star 数,还重要吗

 

“我的前雇主在他们的工作描述和招聘推介中使用了 GitHub stars。他们定期鼓励员工去 GitHub 上为公司的存储库加注星标。在全体会议上,GitHub stars 是他们报告的重点工作之一:我们在 GitHub stars 中超过了 X(鼓掌)。”网友“penguin_booze”爆料道。

 

当 stars 数成为企业关注的重点时,压力就给到了员工或者求职者。“能在 GitHub 上拿到三位数的 Star 的本科生至少进 BAT 毫无压力。”有网友称。这也导致了国内前几年开源项目刷 star 泛滥。

 

当 star 造假越来越多,有些开发者在评价开源项目的时候也会越来越少地真正在意 star 数。“就我个人而言,我从不看 star 数,因为即使这是合理的,它也没有让我比从 repo 中看到其它更有用的东西。”网友“ziml7”说道。

 

ziml7 表示,“我倾向于检查最早和最新提交之间的时间差异,这可以让我确定这不是一个某人花了几周时间编写代码、放在 GitHub 上,然后就被遗忘了的项目。我也会检查 issues。我会寻找比正在显示更多的、已经解决的 issues ,但我会快速浏览下来大致了解有多少是真正有意义的 issues 。我还从自述文件和文档中获得线索。如果这些 issues 存在就容易通过(检测),但如果它们不仅存在,并且既清晰又详细,那肯定对我的判断会有帮助。

 

但 ziml7 的观点也得到了一些质疑。网友“imadj”表示,许多维护人员只是将问题隐藏起来了,并没有真正解决。许多人以 0 个未解决的 issues 而自豪,好像这意味着什么。但如果他们会玩这个游戏,那么世界上任何软件都可以有 0 个 issues。“因此,除非您真的精通该项目并花了一些时间关注它,否则 star 数实际上可能是判断项目质量和声誉的更好指标。”

 

另外,在评估几个不同的 repos 以选择特定工具工作时,一些开发者会用 star 数进行判断。“如果其中一个 repo 有更多的 star,我在选择时会仔细权衡。提交的新鲜度绝对重要,但对我来说,有许多人加注星标这一事实表明,这个 repo 是吸引人眼球的和活跃的。”网友“cdiamand”表示。

 

对于 ziml7 提出的查看日期,也有开发者表示反对:“提交日期可以任意更改。”

 

网友“debarshri”指出,在评估 OSS 项目时,关键指标是社区活动。“GitHub stars 是一个很弱的社区活动指标。首先,它可以被造假。此外,Stars 的操作门槛非常低,为该项目加星的人并不真的会使用它。”

 

“debarshri”认为有两个社区活动指标非常重要:GitHub issues 和 slack/discord/discourse 评论。“在我看来,GitHub issues 的一个关键是,如果 GitHub issues 主要由核心团队提出,那不是一个好兆头。您需要来自客户或用户而不是团队的大量问题。如果项目正在解决实际问题,这是一个很好的指标。Stars 操作门槛极低。松散的评论也一样,它应该既有分量又有新鲜感。

 

无论如何,可以看出,Star 数目前在一些开发者心中依然有很重的分量。我们还无法完全抛弃这个衡量指标。但现在,大多数 GitHub 的 star 分析工具和相关讨论文章都没有解决 star 数灌水的问题。那么,还有其它办法吗?

如何识别假 star?

 

为了搞清楚 GitHub 上的 star 造假问题有多严重,Dagster 与垃圾邮件和滥用专家 Alana Glassco 一起深入研究了数据模式,分析了 GitHub Archive 数据库中的公共事件数据。

 

机器学习可以帮忙吗?比如买点假 star,然后训练分类器来识别真 star 和假 star。Dagster 表示,这种方法存在几个问题:

 

  • GitHub star 卖家非常小心谨慎,而且会主动回避检测,所以很难根据名称、个人简介等直观特征对其出做分类。

  • 标记及时性。为了避免被发现,卖家会不断调整自己的行动策略。因此,标记数据不仅难以获得,而且就在模型训练的过程中,这些数据内容可能就已经过时。

 

注:检测工作中,经常会将机器学习与启发式方法结合使用来识别恶意行为者,本次研究最终采用了启发式的检测思路。

 

在买下假 star 之后,这些假 star 又可以分成两类:

 

  • 一眼为假。卖家根本就不加掩饰,只要点开个人资料,就能马上看出这帮给 star 的用户根本不是真人。

  • 用心造假。另一个群体则复杂得多,账户上有很多相当真实的活动,借此掩盖了其属于假账户的事实。

 

于是,团队最终通过两种相互独立的启发式方法来识别这两类群体。

 

“一看就是假的”

 

在调查期间,Dagster 团队发现了很多一次性的个人资料:它们的存在就是为了伪造 GitHub 账户并为买家的 GitHub 代码仓库“加 star”。

 

这类账户只有一天的活动记录(也就是账户创建当天,因此可以证明它们就是为了加 star 才存在的),别无其他。于是,Dagster 团队使用 GitHub API 收集了这类账户的更多信息,并发现了它们清晰的运作模式。这类账户的特点就是活动量极低:

 

  • 创建时间为 2022 年或更晚

  • 关注者 <=1

  • 所关注者 <= 1

  • 公开 gists == 0

  • 公开 repos <=4

  • 电子邮件、雇用信息、简历、博客和 Twitter 用户名均为空

  • 投 star 日期=账户创建日期=账户更新日期

 

通过这种简单的“低活动”启发式方法,Dagster 团队检测到了大量可疑的虚假账户。这些账户只为同一组代码仓库投过 star,而且都是通过 GitHub API 来操作的。



这帮 GitHub“用户”明显具有共性

“用心造假”

 

另一类假账户会更难发现,他们有比较真实的操作,比如个人资料照片、简历和贡献提交。相较前边一眼就能看出来的假账户,这类假账户的情况比较复杂。那么,应该如何做有效甄别呢?

 

聚类直觉

 

Dagster 团队最终选择了无监督聚类技术,相当于是为每个账户都构建一组特征。

 

照理来说,正常用户的特征应该比较分散,就是说其每项特征都比较独特,不会遵循某个大聚类的整体趋势。但虚假用户的特征则有相似性,所以在可视化之后会聚集在一起。通过这种办法,应该能检测出目标账户是否属于可疑聚类。

 

举个更容易理解的例子:假定我们关注“活动日期”,GitHub 上的大多数用户并不会每天都有公开活动。如果某个账户每月有几天会使用 GitHub,而且具体日期跟另一个账户完全相同,甚至连分享的活动内容都差不多,那就表明这两个账户很可能是由相同的底层脚本在控制。根据这类账户的活动分享日期数(x 轴)和所交互的代码仓库总数(y 轴)可得出下图:


这里列出的就是 Dagster 那个“钓鱼”代码仓库的统计结果,项目得到的 star 几乎 100%是假的:



Dagster 针对一组已知假 star 得到的启发图——几乎 100%匹配

 

据实验团队所知,Dagster 项目应该没买过 star,所以他们用 Dagster 代码仓库做了对比。请注意左下角的小黄点,代表了少量误报账户(误报率=0.17%):



针对 dagster-io 代码仓库的启发图——匹配接近 0%

 

最后,我们再来看看纯假和纯真之间的情况。这个开源代码仓库既有真 star,也包含大量疑似假 star,黄色部分标出了可疑的投 star 群体。



针对我们怀疑作弊的代码仓库制作的启发图——高亮显示部分为假 star

改进聚类

 

虽然这项技术挺有意思,但实际表现还不足以对假账户做高置信度判断,还需要再做改进。

 

初步通过直觉完成数据挖掘之后,Dagster 团队又发现了另一种模式。虽然这些复杂的假账户都会以逼真的方式做交互,但这类假账户往往只跟少部分代码仓库互动。从本质上讲,各个假账户似乎都属于整体“可疑代码仓库”的一个子集。

 

遗憾的是,Dagster 团队没办法直接汇总出可疑代码仓库的列表,因为卖家会不断轮换新的代码仓库来回避跟踪。但 Dagster 可以使用无监督聚类技术自动识别出新的可疑代码仓库,再根据其是否存在、存在多少可疑交互来判断哪些账户确系伪造。下面来看实验团队对可疑用户判定方法:

 

  • 首先,列出所有曾给可疑代码仓库投过 star 的用户。

  • 之后,根据与该组内其他用户的高度重叠性,确定出一组潜在的可疑代码仓库。注意,因为这些用户初步入选的理由是给同一个代码仓库投过 star,所以如果它们同样也为另一代码仓库投过 star,则代表值得怀疑。(但仅仅是值得怀疑,正常情况下也存在这种广泛的投 star 重叠,所以下面的附加步骤才格外重要!)

  • 最后,要找出活动水平相对较低的账户,挑出其中绝大多数活动都仅仅指向之前确定的可疑代码仓库、且缺乏其他合法活动的账户,这些就是认定的假账户。

 

在对已知假 star 做这一启发测试时,虽然计算量很大,但假账户的检测效果确实很好,准确率高达 98%、召回率为 85%。那么,这种方法在真实代码仓库中表现如何?

 

将这两种方法结合起来,实验团队能够更全面地了解给定 GitHub 代码仓库中的可疑投 star 和相应召回率:

 

 

简单启发式方法

(一眼为假,低召回率)

简单启发式+无监督聚类

(一眼为假与用心造假)

代码仓库

总star数

疑似假star数

疑似假star占比

2022年及之后得star中疑似假star的比例脚注

okcash

759

1

0.13%

97%

Simple-GPU

787

159

20%

87%

Notifio

841

97

12%

76%

Mage.ai

3,629

533

15%

30%

Apache Airflow

29,435

17

0.06%

1.6%

Ploomber

3,002

6

0.2%

1.5%

Dagster

6,538

8

0.12%

1.5%

Flyte

3,154

1

0.03%

1.1%

脚注:受计算成本的限制,实验团队在 BigQuery 上进行的 GitHub Archive 分析仅限从 2022 年 1 月 1 日起的得 star。对于 GitHub Archive 分析,团队使用了另一种略有不同的方法来识别 GitHub API 分析中的“低活动”可疑账户。这些账户与通过聚类方法识别出的其他可疑账户相加,就得到了疑似假 star 的总数。

 

如果大家也想用这样的逻辑分析其他 GitHub 代码仓库,可点击下面链接:

https://github.com/dagster-io/fake-star-detector

 

其中,简单启发式算法是用 Python 实现的,只需要一个 GitHub 账户加访问令牌即可使用;无监督聚类方法则是用 dbt 项目实现的,需要 Google Cloud BigQuery 账户才能运行。请注意,用后者方式检测大型代码仓库可能会带来高昂的成本。

 

幸运的是,根据 Dagster 团队的研究,从投入产出的情况来看,买 star 行为在 GitHub 上还不是那么普遍,这也体现出开源社区积极向上的整体价值观。开源社区的长期发展还需要每个开发者的努力。

 

参考链接:

https://dagster.io/blog/fake-stars

https://news.ycombinator.com/item?id=35207020

2023-03-20 18:004798

评论

发布
暂无评论
发现更多内容

合约跟单系统搭建,合约一键跟单app

插件化库VirtualAPK详解

寻找生命中的美好

android 插件化 VirtualAPK

理性看待区块链+大宗商品

CECBC

区块链

一周信创舆情观察(4.12~4.18)

统小信uos

架构实战营模块二作业

刁寿钧

架构实战营

阿里巴巴的“双11”高并发秒杀终极版教程!(Java语言设计)

Java 编程 程序员 架构

破解class文件的第一步:深入理解JAVA Class文件

华为云开发者联盟

Java JVM 索引 class文件

2021年处置非法集资部际联席会议:密切关注打着区块链、虚拟货币等旗号的新型风险

CECBC

谈谈 WebRTC 的 SDP Unified Plan

拍乐云Pano

WebRTC

视频录制后有噪音怎么办?教你简答几步去除视频噪音!

奈奈的杂社

GitHub开源:4行代码实现《黑客帝国》数字雨特效

不脱发的程序猿

GitHub 开源 程序人生 4月日更 黑客帝国

暴涨暴跌的牛市,普通人怎么和平发育?

CECBC

区块链

开发环境上云,打造五星级开发体验

CODING DevOps

Kubernetes 云原生 CODING Nocalhost

泉州有了一个水务大脑,用AI守护“绿水青山”

百度大脑

AI

使用CrossOver安装第三方软件

懒得勤快

加密原理详解:对称式加密VS非对称式加密

Java架构师迁哥

走完线上 BUG 定位最后一公里

阿里巴巴中间件

可观测性 bug bug修复

LeetCode题解:641. 设计循环双端队列,使用数组,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

万字精华:好好巩固你的Nginx知识体系

学Java关注我

Java 编程 架构 程序人生 计算机

Android组件化和插件化开发

寻找生命中的美好

android 组件化 插件化

Golang Test

escray

学习 极客时间 Go 语言 4月日更

编曲新手可以用什么编曲软件?

奈奈的杂社

饿了么EMonitor演进史

阿里巴巴中间件

可观测性 饿了么 emonitor etrace

全网最全 ECMAScript 攻略

清秋

JavaScript ecmascript 大前端 ES6 Ecma

线程的故事:我的3位母亲成就了优秀的我!

王磊

Java 线程 多线程

redis常见应用场景

Sakura

4月日更

悲观锁与乐观锁的实现(详情图解)

Java架构师迁哥

Rust从0到1-代码组织-模块

rust modules 模块

流程引擎介绍

上海派拉基础研发

流程

聪明人的训练(二十三)

Changing Lin

4月日更

开发知识 | 即时通讯是怎么做到的?

YonBuilder低代码开发平台

大前端 即时通讯 APP开发 小程序制作 开发技巧

我在GitHub 黑市买“水军”:一万颗star只要4000多元,人人都能“一夜爆火”_语言 & 开发_褚杏娟_InfoQ精选文章