文档章节

从B站的代码泄露事件中,我们能学到些什么?

程序猿DD
 程序猿DD
发布于 04/23 10:09
字数 1611
阅读 6940
收藏 59

先声明一下,本文不聊ISSUE中的七七八八,也不聊代码是否写的好,更不聊是不是跟蔡徐坤有关之类的吃瓜内容。仅站在技术人的角度,从这次的代码泄露事件,聊聊在代码的安全管理上,通常都需要做哪些事来预防此类事件的发生。同时,大家在阅读本文的时候,也可以深入思考下,自己团队是否也存在类似的问题,经过这次的事件,是否有必要针对性的做一些优化。

最小权限

“最小权限”原则是我们在学习Linux用户管理时候经常被提到,并且被反复强调的内容。该原则是指每个程序和系统用户都应该具有完成任务所必需的最小权限集合。赋予每一个合法动作最小的权限,就是为了保护数据以及功能避免受到错误或者恶意行为的破坏。

在代码的安全管理上,“最小权限”原则同样适用。但是,从此次的代码泄露内容中可以看到,这一点做的并不好,一起来看看源自泄露代码的README介绍:

从说明中,可以知道这是一个后端项目的大仓库,每个业务线都通过文件夹的方式管理自己的业务模块。那也就是说,每个业务模块的人都是可以看到这个大仓库的。继续看README最后的负责人信息:

可以看到这个大仓库中包含了非常多的业务模块与相关负责人信息。

由于Git的权限管理都是对整个仓库的,无法精细化到具体的文件夹。换言之,对于这个大仓库的访问,其实是有非常多的人员可以拿到全量代码的,而其中有大部分代码可能并不是自己业务线的内容。可见,这个仓库的内容,对于代码自身的保护上,并没有做到最小权限控制。所以,当出现代码泄漏的时候、对于泄露范围就很难控制。可能一个小环节的过失,就会导致非常大的泄漏灾难。

配置分离

配置与代码的分离,自云原生应用的流行开始,就一直被反复的强调。将配置内容隔离开之后,赋予代码的将仅仅是逻辑,对于各种与环境相关的敏感信息都应该被剥离出去,这就使得代码中将不再含有各种环境信息和敏感信息。同时,这么做也可以轻松的实现多环境的不同配置,这种实现方式与我们传统通过构建工具来实现的多环境是完全不同的。只有在严格分离了配置之后,才真正的可以实现:一次构建,多处运行的目标。基于构建工具实现的多环境部署,实质上多次构建,多处运行的结果,每个环境运行的介质只是上都不是同一个程序。

为什么要强调这一点呢?同样的,我们看看从网络上流出的一段代码片段:

如果这段代码是真实存在的话,那么配置管理和安全意识上确实就做得非常差了。

所以,对于配置中心的建设,大论大小团队,从安全角度上来说,都是非常重要的。何况在目前有大量开源配置中心的大背景之下,做到配置分离,是一件性价比非常高的事。如果做到这一点,那么即使代码有流出,对于重要密钥、数据库账户密码等等敏感信息也不会被泄露。

外部监控

任何与安全相关的内容,都少不了监控。事前的所有策略,最终都有可能被一一击破,留给我们最后的一道防线就是在事件发生之后马上得将其堵住,以防止问题的扩大,而造成更大的损失。

在笔者知道这件事的时候,距离代码上传已经有6小时之久了。各类技术讨论群中几乎也都是相关信息的八卦。几乎每一次刷新页面,都是几百Star的增长。虽然处理的速度不能说快,但是没过多久,与之相关的仓库都开始无法访问。至于,是不是有做代码泄露扫描的监控,我们不得而知。因为,在扫描告警之后,对于代码的扩散控制,作为B站来说,本身是被动的,还是需要Github等仓库运营方来完成。所以,这中间到底哪一步慢了,我们无法考证。

不过这些都不重要,这里主要强调一点,除了管理上的防护之外,必须留一手外部监控,以快速的发现泄漏并采取措施。这块可能大部分开发人员不太了解,这边我就稍微提一下。做一下这个是不是很费劲?

对于很多中小团队来说,可能本身就没有什么人力去做这件事,那么是不是就没办法了呢?实际上,很多安全服务商,甚至一些大型互联网公司都有提供这样的产品服务,比如携程的Github Scan:

如果说,你连买这类产品的钱都不想出,那么顺手推荐一个开源项目可以参考一下:Github leaked patrol

最近,欢迎留言交流,说说大家所在团队对于代码的安全性都是如何做的?用了什么商业服务?或是用了什么开源软件?欢迎一起分享学习与进步!

© 著作权归作者所有

程序猿DD
粉丝 530
博文 96
码字总数 128287
作品 4
闵行
私信 提问
加载中

评论(33)

l
lbfamous
我想知道是谁干的。。。😁好
久永
久永

引用来自“衷于栖”的评论

引用来自“久永”的评论

引用来自“衷于栖”的评论

引用来自“久永”的评论

引用来自“衷于栖”的评论

最好的方式是 写一波人 编译一波人 完全自己生产编译器 自己实现对的情况的 版本控制器 不过不太现实
我就是这么干的,没啥不现实的,体量差距而已。
哪怕你实现了编译器一个功能,别人也没法想出来。
这比密码可靠多了。

@久永 不是体量问题,就是钱没到位
我懂你的意思。
不过我说的只是技术层面,是代码体量的问题。
我的意思是说,个人也完全可以自己定制编译器。

@久永 道理是这样没错
所以,个人不要开发完全的编译器,只要对于某些编译器定制。只要简单的几个功能通用的编译器没有,那么就算拿到源代码,想反推编译器,从信息学上是不可能的。
衷于栖
衷于栖

引用来自“久永”的评论

引用来自“衷于栖”的评论

引用来自“久永”的评论

引用来自“衷于栖”的评论

最好的方式是 写一波人 编译一波人 完全自己生产编译器 自己实现对的情况的 版本控制器 不过不太现实
我就是这么干的,没啥不现实的,体量差距而已。
哪怕你实现了编译器一个功能,别人也没法想出来。
这比密码可靠多了。

@久永 不是体量问题,就是钱没到位
我懂你的意思。
不过我说的只是技术层面,是代码体量的问题。
我的意思是说,个人也完全可以自己定制编译器。

@久永 道理是这样没错
久永
久永

引用来自“衷于栖”的评论

引用来自“久永”的评论

引用来自“衷于栖”的评论

最好的方式是 写一波人 编译一波人 完全自己生产编译器 自己实现对的情况的 版本控制器 不过不太现实
我就是这么干的,没啥不现实的,体量差距而已。
哪怕你实现了编译器一个功能,别人也没法想出来。
这比密码可靠多了。

@久永 不是体量问题,就是钱没到位
我懂你的意思。
不过我说的只是技术层面,是代码体量的问题。
我的意思是说,个人也完全可以自己定制编译器。
乳沟
乳沟

引用来自“衷于栖”的评论

引用来自“乳沟”的评论

引用来自“衷于栖”的评论

最好的方式是 写一波人 编译一波人 完全自己生产编译器 自己实现对的情况的 版本控制器 不过不太现实

@衷于栖 自己写一门语言就可以,不现实!go是开放语言,他自己写不能编译,也不现实?另一个人去编译,他就看不到源代码了?这也不现实!这其中哪一个人不能自己上传一份到github?

@乳沟 完全不知所云,请组织好语言再来,我的意思很简单,就是小众。

理解能力有待提升!
ArianaG
ArianaG
生态不成熟,想要模块化?自己造轮子
松仁普
松仁普
学到了除了删表删库,还可以公布代码
dingdayu
dingdayu
他们都搞微服务了,让语言背锅就不应该了...
衷于栖
衷于栖

引用来自“乳沟”的评论

引用来自“衷于栖”的评论

最好的方式是 写一波人 编译一波人 完全自己生产编译器 自己实现对的情况的 版本控制器 不过不太现实

@衷于栖 自己写一门语言就可以,不现实!go是开放语言,他自己写不能编译,也不现实?另一个人去编译,他就看不到源代码了?这也不现实!这其中哪一个人不能自己上传一份到github?

@乳沟 完全不知所云,请组织好语言再来,我的意思很简单,就是小众。
dingdayu
dingdayu
他们都搞微服务了,让需要背锅就不应该了..z
B 站出面回应源码泄露门事件!裁员报复还是反抗 996?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdnnews/article/details/89463526 “后院”都要失守了,就先别馋大碗宽面了——B 站,你可长点儿心吧! 整理...

CSDN资讯
04/22
0
0
什么仇什么怨,前员工泄露大疆源代码被罚20万

最近,雷锋网(公众号:雷锋网)编辑朋友圈被一则“泄露公司源代码造成超百万损失,大疆前员工被罚20万、获刑半年”的消息刷屏了。 事情是这样的,2017年9月初,大疆的漏洞举报邮箱收到一封来自...

又田
04/28
0
0
Docker 回应数据泄露事件

事件回顾 4月25日,Docker Hub 发现一个数据库遭遇未经授权访问(官方原话是 unauthorized access),发现问题后他们立即采取干预措施来确保网站安全。官方表示在短暂的数据库未经授权访问期...

局长
04/29
0
4
JS内存泄漏的几种解决方案

一、什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在C++中,因为是手动管理内存,内存泄露是经常出现的事情。而现在流行的C#和Java等语言采用了...

笨小熊
2016/11/06
12
0
2017年局座给出了自己的年终总结:90后才是真正的英雄

距离2017只剩下不到一个星期的时间了,大家都在反思和总结自己的2017年。局座也不例外,最近,他也发表了自己对2017年的一些看法。 他说:记得刚开始在B站做直播的时候,在线人数近百万人,直...

有态度的互联网人
2017/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark之RDD

一、RDD的概述 1.1 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有...

不羁之后
6分钟前
0
0
Kubernetes云供应商架构的未来

首先,我想分享SIG的使命,因为我们用它来指导我们现在和将来的工作。从我们的章程中直接来看,SIG的使命是简化,开发和维护云供应商集成,作为Kubernetes集群的扩展或附加组件。这背后的动机...

Linux就该这么学
11分钟前
0
0
线程池没你想的那么简单

前言 原以为线程池还挺简单的(平时常用,也分析过原理),这次是想自己动手写一个线程池来更加深入的了解它;但在动手写的过程中落地到细节时发现并没想的那么容易。结合源码对比后确实不得...

crossoverJie
19分钟前
13
0
Scientific Linux开发停止 相关设备将迁移至CentOS上

在经历了将近14年的版本更迭之后,这个专注于科学领域的GNU/Linux发行版本不会发布下个重大版本更新--Scientific Linux 8了。 目前维护该发行版本的成员最终决定是时候休息了,今后将不再发布...

linuxCool
23分钟前
0
0
Redux

Redux概念 Redux = Reducer + Flux,数据层框架,将所有数据都存储到store中 Redux的工作流程 Antd的使用 安装npm install antd --save import 'antd/dist/antd.css'import { Input, Butto......

星闪海洋
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部