实习生代码投毒事件震惊ByteDance:恶意攻击如何利用AI大模型漏洞颠覆数千万美元的损失
10 月 22
AIGC, 字节跳动,故事多 AIGC可信度, AI协作, AI可信性, AI大模型, AI安全, AI工程风险, AI技术挑战, AI系统, ByteDance, Huggingface平台, Huggingface漏洞, IT业界新闻, IT内鬼, IT安全, IT安全策略, IT工程, IT灾难恢复, PyTorch修改, Pytorch集群, 人员管理挑战, 人工智能实习生, 人工智能未来, 人工智能治理, 人工智能管理, 人工智能风险, 人机协作, 代码安全, 代码漏洞, 代码管理, 代码隐患, 企业损失, 企业数据, 企业风险管理, 信任危机, 前沿科技, 大数据安全, 大模型开发, 安全事件, 安全漏洞, 安全管理, 安全评估, 实习事故, 实习生, 实习生影响, 实习生投毒, 工程信任, 工程漏洞, 工程管理, 开发者风险, 开源开放, 开源系统, 恶意代码, 技术创新, 技术应用, 技术治理, 投毒事件, 操作风险, 故障排除, 数千万美元, 数字化管理, 数字时代, 数据保密, 数据分析, 数据攻击, 数据污染, 数据泄露, 数据隐患, 未来合作挑战, 模型参数扰动, 渗透测试, 现代技术治理, 系统攻击, 系统漏洞, 系统脆弱性, 网络安全, 训练模型, 黑客攻击, 黑客风险 实习生代码投毒事件震惊ByteDance:恶意攻击如何利用AI大模型漏洞颠覆数千万美元的损失已关闭评论
ByteDance的AI大模型被他们自己家的实习生投毒。这是一个什么故事?大家好,这里是老范讲故事的YouTube频道。今天咱们来讲一讲这起投毒事件。不是说举个小药瓶去投毒,而是恶意代码投毒。
事情发生在6月份,一位姓田的博士生在ByteDance实习。因为某些待遇或者资源分配问题,他对ByteDance感觉不满,于是就在代码里面进行了投毒。投毒的方式是他自己进行了一些代码维护,但这些代码是安全的,主要是一些调试用的代码。这些代码去读取一些上传文件之后,就具备了攻击性。
什么意思呢?就是我们去训练大模型的时候,需要把大量的信息数据上传到大模型进行训练。他的这种调试代码上传到服务器上以后,这个时候还是安全的,然后把一些恶意代码隐藏在训练数据里边。他把这些数据读出来以后,就对整个ByteDance的一些训练集群进行了攻击。这其实是黑客普遍采用的一些手段。
谷歌就曾经将所有含有root代码的应用全部下架。什么叫root代码?就是安卓应用里头有一些代码,它可以帮助这些安卓程序获得root权限,也就是我们俗称的越狱。以前这些代码会被藏在安卓应用的各种数据文件里。大家知道,我们上传的一个应用里头,有一部分是执行代码,还有一部分是数据文件,比如图片呀或者是一些其他的应用需要的一些数据。他们把一些root代码存在这些数据里头,谷歌扫描发现了以后,就会把所有这些应用全下架。
苹果其实也干过这种事。苹果是把所有带有热更新的应用都下架了。这什么意思呢?就是你上传到苹果的时候,这里边是安全的,没有任何问题。但是,你会在这个应用运作的过程中,通过热更新的插件,从远端去下载一部分代码到苹果手机的本地去运行。实际上,这些代码就是躲过了苹果的代码检测。这位田姓博士也是如此,他自己签名上传的代码,其实这种代码上传都是要自己写名字的。
就知道是谁传的这些代码的,都是安全的。他呢,通过读取数据文件里边的一些攻击代码,然后去执行各种攻击操作。它呢,利用了Huggingface的一个漏洞。Huggingface应该是大模型时代最大的开源服务平台了,大量的开源模型、开源数据及开源数据包,都是在这个平台上去运作的。Huggingface相当于是大模型时代的GitHub。但是呢,这里面也是有一些漏洞了。他利用其中一个漏洞,修改了Pytorch的这个集群里边的一些代码。Pytorch是梅塔开源的,现在应用非常广泛的大模型底层支持的框架。
他这种修改呢,会随机的杀死很多的实验进程。因为像大模型训练就是这样,就是说我们现在开始训练了啊,它不是说这边一一命令开始,那边就结束了。它需要很长时间。在这么长的时间里头,可能就会有一些进程就失败了。他的这个程序上去以后呢,就随便点杀几个,说你们就直接死机吧,你们就不用干活了。所以导致呢,这些训练整个就没有完成。而且呢,还会去故意修改其他同事模型上的一些参数。
其实我们现在讲的开源大模型,这个词语不准确啊,应该叫开放权重或者开放一些参数的这些大模型。他去把里头的一些权重、一部分参数给改了,那么导致这些模型最后训练、评测的各种结果就完全不可控了。他就做了很多这样的事情。而且还干嘛,还去参加各种故障排除会议,然后根据故障排除会议的各种结果,再去修改自己的攻击代码,和纯纯的卧底。
那么我们讲到这了,大家是不是没听明白他到底怎么干的呢?我们讲一个普通人非程序员能够听懂的案例吧。一个什么样的案例呢?比如说我们今天用穷举法去破解密码。什么意思呢?比如说你现在有一个四位的密码,是从4个0到4个9,一共呢,是一万种状态啊,从0000到9999。什么叫穷举法呢?就是一个一个试,首先是0000,不对,再是0001,再是0002,它等于是这样的一个过程。现在有人进去攻击了。
攻击的方式是什么呢?就是在每一次从000到0001这样的跳转过程中,他给你随机多跳几个,或者少跳几个,或者倒着往回跳几个。这种攻击一旦发生,前面所有的测试就都失败了。比如说,我应该测完0001,然后测0002,再测0003,应该是这样一个一个挨着测,我才能保证我的穷举,把所有中间过程的数值都试过了。
但是,有一个人给你投毒了,恶意攻击你了。0000完了以后,我就直接测试了0008,啊,然后测试了0007,再然后测试了020几,什么的,就这样了。他等于随机跳了,那你说,我这不是都测了吗?问题在哪呢?就是你测试的过程,其实是没法去一个一个记录的,到底测了哪些,记了哪些,哪些没测,你这个事你不知道了。
穷举法的最大价值就是我挨着个儿的把所有的数都测一遍,但是你在测的过程中来回跳,这就是最简单的投毒方式。据说,这一次投毒造成了几千万美元的损失,因为他的模型评估结果忽高忽低。前面的所有测试数据,实际上都被污染了,必须重新来过。因为做这种大模型测试的话,第一个,这帮人就很贵。据说是因为这位田姓博士生的投毒,导致30多位各层级的员工,他们的工作都被浪费了。
大家要知道,能够干这件事情的人,本身的薪资是非常高的。就算是这种实习生,他们的薪水也不低。你想,他是个博士嘛。这些人啊,准备了大量的数据,可能还有很多人去帮着他们一块准备数据。再加上什么呢?烧显卡呀,你需要用大量的显卡算力来进行模型训练。训练完了以后再去进行评估,现在等于所有的这些评估数据都不可信了,只能把它们都扔掉。
就跟刚才我们讲的这个穷举法破密码似的,你现在告诉你说:“哎,我现在已经从0000破到9999了,没有找出密码来。”那咋办呢?只能从头开始啊,因为你搞不清楚到底哪些数测了,哪些数没测呀。他实际上干了这么一个事情,所以这个是非常严重的损失。前几天李开复还讲了,他说我们训练一次模型,需要三四百万美金的这种成本。
那么,这么长时间被他投毒,也就是数据污染的模型训练过程,现在都不知道有多少。所以,他这个事情到底有没有亏掉几千万美金,真不好说。外界传是有这么多,但是ByteDance自己的人说,应该没这么多。确实有损失,但是没有那么夸张。这个数据呢,我觉得,我们大家自己心里稍微有个数就可以了。
现在呢,对于这位实习生的处理,就是把他辞退了,然后呢,也对行业内的协会以及他所在的学校进行了通报。也就是这哥们再去什么地方上班,你们就别要他了。学校你自己看着办,是不是给一个处分,或者是如何去处理, let不让他毕业啊,你们自己看着办就行了。
目前呢,还没有进一步的诉讼或者追偿的措施。其实怎么说呢,这种学生未来未必不会成才啊。因为前面我们看奥本海默的这个电影的时候,我们知道奥本海默在上学的时候,是曾经尝试往他的导师吃的苹果里边打过毒药的。这种人最后也把原子弹操出来了。所以,这位实习的田姓博士生,反正不算是个笨人啊,未来到底能做什么不好说。当然,在中国这样的一个环境下,可能他也就没有什么未来了。
这个事情告诉我们一个什么样的道理呢?就是在工程管理里头,必然要面对一个人员管理的问题。这个事情呢,其实是谁都绕不过去的。人呢,并不是螺丝钉。很多的工程管理里边,都希望把人变成螺丝钉,变成没有感情的机器,这件事其实是有问题的。我记得以前经常讲说,怎么能够放心地把后背交给队友,这个就是大家在进行协作的时候,必须要思考的问题。
很多人都去参加过那种破冰团建。什么叫破冰团建?就是大家谁都不认识谁,为了能够组建一个团队,要把这个冰层敲开,叫破冰。这个里边都有一个项目,我参加过几次,每次都有这个项目。什么?背摔。就是两个手这么抱起来,站在一个台子上往后倒,就是你看不到后边。后边呢,是你所有的队友伸手接着你。这个过程就是培养对队友的这种信任。你说,我可以把我的后背交给大家,因为人向后摔的时候,特别是不看人的时候,你还站那么老高。
这是很危险的。反正我每次往后摔的时候,都心怀忐忑啊。因为为什么?胖啊,万一下去了以后大家没接住,这事不是很危险吗?当然,我现在还可以活蹦乱跳,在这跟大家讲故事啊,所以我的队友们每次都接住我了。
我记得原来看美剧,有一个美剧叫《梅林》,讲的是大法师梅林的故事。里边呢,就有这样的一个桥段,讲的是什么呢?一个平民冒充贵族成为骑士,在亚瑟王的这个团队里边去征战。而且呢,他的战功还非常的卓越。这个人在继续晋升的时候呢,他的身份就被揭穿了,说你不是一个贵族,你不可以成为骑士,你不可以在这里继续战斗下去,就把他赶走了。其他人就觉得很不公平,去问啊,为什么这样的一个人就不能够跟我们一起战斗呢?
给出的解释是这样的:之所以只有贵族才可以成为骑士,是因为我们必须知道他的父亲是谁,也必须知道他的家族是什么,必须知道他为什么事情感到荣耀。只有在这种情况下,我们才可以把后背交给他。
所以呢,自古以来,如何把后背交给别人这件事情,一直是团队管理、工程项目管理里头一个比较难以逾越的鸿沟,或者一个重大的难题吧。在古代,奴隶呢,可以在鞭子下面去修建金字塔,也可以修建长城。但是呢,奴隶是不太可能带着镣铐去实现现代科技创新的,因为这个需要脑力劳动的。而且这些脑力劳动最终的结果,是非常难以进行解读的。他不像是去修金字塔似的,你把这个石头搬上去了,就是搬上去了,奴隶主也好,或者监工也好,拎着鞭子在旁边是可以看到的。
而现在,你想,这家伙上去写代码,然后这个代码还有一定的隐藏性。我上传的时候,这代码没毛病,等传上去以后,他在里头做了一个变身,开始进行攻击,这种事情,你是一个人拎着鞭子在后边盯着,就可以盯明白了吗?这个事是不行的。
如何让高级打工人在工程允许的范围内,输出可控的结果,这件事呢,是现代很多大型软件工程里边都很头疼的事情。而且是不是可以在整个的工作过程中超越预期,这个也是大家需要去思考的事情。什么叫超越预期?
你想预期吗?一定是有不达到的、有达到的、超过的。现在工程上面说我们能够达到就行了,我们要求你给我做到80分,你给我最后做到80分了就OK了。但是最后做到90分、做到95分,那些产品呢,就叫超越预期的。人是可以输出很多不可解释的结果的,工程管理一般是要求你所有的结果、所有过程可以解释的,但是人经常会输出很多这种不可解释的结果。比如说那种充满了爱的寿司,那个寿司之王,他做出的那个寿司绝对没有标准化啊。工程处理的方式就是标准化,你们必须是多少力量,然后抓多少米、多少克,精确到多少,然后呢,捏几下力量到多少。这是工程用的方式。但是你想,寿司之王他有这个水平吗?人家是靠爱来做这个事情的,充满了对寿司的爱,然后做出了很好的寿司。所以人有时候会做出一些你完全无法想象的东西。
另外一面的话,在996高压工作、心怀怨怼的情况下,需要进行大型协作的工作是非常非常危险的。你说我一个人把这事搞定,那你就算心里再不满意,没准都是有可能能够做出来的。你想以前的铸剑,实在不行就把这个老婆孩子往那个炉子里扔,最后他也能把那个剑铸出来。但是现在不行啊,因为这么多人协作在一起。你说:“哎,有什么事我就扣你钱啊,有什么事你就必须加班啊。”而且要进行很严厉的处罚,每天从早骂到晚。这些人在一起协作,他是不可能做出一个好的产品来的。
其实咱们讲到前面,奴隶们在鞭子的驱赶下去修长城这个事,长城的质量真的好吗?孟姜女哭长城,你以为那个长城真的是她哭倒的吗?那个工程质量一定是有问题的。这一次犯错的是一个博士生,是一个实习生。当然在这个里边我要讲的是什么呢?就是我们不要去怪罪这个个人啊。出了问题一定是整个的工程项目管理有问题,而不是这一个人有问题。就任何人都有可能出问题,你不能说:“哎,别人都是好好的,怎么就你错了?”一定是你个人的问题,千万不要这么想这个事情啊。如果是这样去思考这个问题的话……
那么这一次出问题是一个偶发事件。下面继续出问题,继续是偶发事件。那么就永远不可能有任何改进了。需要改进的,只能是工程系统的这种管理过程,不可能是说我保证每一个人都怎么怎么样,这事是不现实的。
下一个问题是什么呢?就是开放跟封闭到底哪个更安全?其实这一次ByteDance的问题也暴露了一个新的问题。是什么呢?就是它是利用Huggingface上面的一些漏洞来去进行攻击的。那么你说这种开放的系统经常会被攻击, 经常会有问题暴露出来。而自古以来那些,比如中国传男不传女的那些工艺,包括像意大利威尼斯穆拉诺岛上的这些玻璃工艺,就坚决不允许外传,任何外传的人直接被杀头。
那么到底我们是应该使用中国或者是古代威尼斯这种封闭的技术管理方式,还是应该用Huggingface、GitHub这样的开放的技术管理方式呢?现在看,应该还是要开放。为什么呢?就是现代整个的互联网发展、移动互联网发展,包括现在的大模型的发展,都是建立在开放的技术平台上,都是建立在开源的基础上的。
虽然我们看到了很多问题,这一次Huggingface出问题了,前面比如说Linux哪儿出问题了,都是开源系统。但是你要相信,那些被封闭起来的系统里边儿问题更多,你只是不知道而已。开放的系统里边,我们有问题就可以发现,发现了以后就可以去改,这才是不断改进、不断完善的一个过程。越开放的地方,问题就越容易被发现,就越容易被改正,这才是开放真正的意义,而不是说你看出错了吧,下回赶快封起来,咱们再搞这个传男不传女,不能这么干。
开源呢,就是新时代的松藕河的合作模式,全世界陌生人都可以合作在一起,共同在开源项目中去贡献代码,去提升开源项目的这种进度与品质。时代的进步本身就是分工不断细化,以及合作更加广泛的一个代表。我们就是要继续向开放的路上接着走。所以呢,千万不要因为说开源系统出错了,我们以后就封闭。最后我们还要讲一个问题。
未来犯错的可能就不再是人了。这一次犯错的是这位姓田的博士生实习生。以后更多会犯错的是什么?是AITC大模型啊。这可能是我们需要思考的另外一个问题。AIGC也要参与到跟人的协作过程中来。那么,AIGC是否值得信任?
我记得在早期大模型出来以后,很多人就是说:“哎呀,这个大模型就像是一个刚刚走出校门的本科生,具备各种知识,但是呢,进到各种行业里边去,都会有一些水土不服的感觉。”现在我们就要面临这个问题了:我们需要跟这些AIGC大模型合作的时候,它到底是不是可信?
而AIGC的结果呢,其实是非常难以验证的,就跟这位田姓博士生给出的代码是一样的。为什么难以验证呢?第一个是量很大,很多的人可能没有AIGC的知识面全面,反应速度肯定更没有它快。但是呢,AIGC产生了大量的内容,产生了大量的结果,这些东西是没有人可以去一条一条去验证到底是不是正确的,人没有这个能力。而且呢,这些内容非常分散。
为什么要讲到分散这件事呢?就是刚才我们刚讲过,开源系统或者开放系统,它更容易发现问题。但是呢,有一个前提:这个系统有很多人用。有人开源了一个系统,从来没有人用,它的问题就很难被发现。一定是很多人都用过了以后,才更容易发现问题。
但是呢,AIGC生成的内容量非常大,分散在各个角落里头。有些内容会有人认真去看,有些内容可能没有人认真去看。那么,这些分散的内容,你要再想把它所有的错误都找出来,基本上是不可能的。而且呢,AIGC的工作过程基本上是不可解释的,并不是说AIGC整个的工作底层原理都不可解释。现在已经有很多人去尝试理解和分析AIGC到底是怎么工作的,每一次为什么给我们这样的结果。
但是大家要注意一个问题:它是有成本的。你要去确认AIGC这一次为什么这样给我结果,它是有成本的。如果每一次都要进行这样的确认的话,这个成本是没法接受的。
所以呢,AIGC所产生的大量工作过程都是不可解释的。而且,AIGC未来会有更多的端到端的这种结果输出。在这个过程中,他们整个输出的过程,人类是没法参与的。人类想要去参与这种协作,比如说我们几个人凑在一起去写程序,那我们要干嘛呢?首先要商量半天,哎呀,这个我们怎么写,怎么规定啊,这个代码应该怎么放,怎么去命名啊,如何去做架构,这要不停的商量,还要写大量的文档,大量的规范文件,写很多的注释,大家才可以一起去协作。
你一旦AIGC端到端了,我这边输入要求,那边出结果。上帝说要有光,于是就有了光,中间的过程完全都不知道,他也不需要写注释,因为他不需要跟自己解释任何事情。那么这种内容的话,人是没法读懂的。
所以呢,我觉得这一次ByteDance的这位博士实习生造成的投毒事件,其实会告诉我们说,未来我们去跟AIGC合作的时候,他就像这个实习生一样,他到底做了什么,到底怎么做的,为什么这么做,其实我们这些使用者也是不知道的。而且,你是完全没有办法去对过程和结果进行追踪和验证的。
所以可能未来如何去跟更多的人去合作,如何去跟更多的机器进行合作,如何去跟更多的人与机器结合的实体进行合作,可能是我们未来需要面临的新的挑战。好,这个故事就跟大家讲到这里,感谢大家收听。请帮忙点赞,点小铃铛,参加Discord讨论群,也欢迎有兴趣有能力的朋友加入我们的付费频道。再见。