从B站的代码泄露事件中,我们能学到些什么?
先声明一下,本文不聊ISSUE中的七七八八,也不聊代码是否写的好,更不聊是不是跟蔡徐坤有关之类的吃瓜内容。仅站在技术人的角度,从这次的代码泄露事件,聊聊在代码的安全管理上,通常都需要做哪些事来预防此类事件的发生。同时,大家在阅读本文的时候,也可以深入思考下,自己团队是否也存在类似的问题,经过这次的事件,是否有必要针对性的做一些优化。
最小权限
“最小权限”原则是我们在学习Linux用户管理时候经常被提到,并且被反复强调的内容。该原则是指每个程序和系统用户都应该具有完成任务所必需的最小权限集合。赋予每一个合法动作最小的权限,就是为了保护数据以及功能避免受到错误或者恶意行为的破坏。
在代码的安全管理上,“最小权限”原则同样适用。但是,从此次的代码泄露内容中可以看到,这一点做的并不好,一起来看看源自泄露代码的README介绍:
从说明中,可以知道这是一个后端项目的大仓库,每个业务线都通过文件夹的方式管理自己的业务模块。那也就是说,每个业务模块的人都是可以看到这个大仓库的。继续看README最后的负责人信息:
可以看到这个大仓库中包含了非常多的业务模块与相关负责人信息。
由于Git的权限管理都是对整个仓库的,无法精细化到具体的文件夹。换言之,对于这个大仓库的访问,其实是有非常多的人员可以拿到全量代码的,而其中有大部分代码可能并不是自己业务线的内容。可见,这个仓库的内容,对于代码自身的保护上,并没有做到最小权限控制。所以,当出现代码泄漏的时候、对于泄露范围就很难控制。可能一个小环节的过失,就会导致非常大的泄漏灾难。
配置分离
配置与代码的分离,自云原生应用的流行开始,就一直被反复的强调。将配置内容隔离开之后,赋予代码的将仅仅是逻辑,对于各种与环境相关的敏感信息都应该被剥离出去,这就使得代码中将不再含有各种环境信息和敏感信息。同时,这么做也可以轻松的实现多环境的不同配置,这种实现方式与我们传统通过构建工具来实现的多环境是完全不同的。只有在严格分离了配置之后,才真正的可以实现:一次构建,多处运行的目标。基于构建工具实现的多环境部署,实质上多次构建,多处运行的结果,每个环境运行的介质只是上都不是同一个程序。
为什么要强调这一点呢?同样的,我们看看从网络上流出的一段代码片段:
如果这段代码是真实存在的话,那么配置管理和安全意识上确实就做得非常差了。
所以,对于配置中心的建设,大论大小团队,从安全角度上来说,都是非常重要的。何况在目前有大量开源配置中心的大背景之下,做到配置分离,是一件性价比非常高的事。如果做到这一点,那么即使代码有流出,对于重要密钥、数据库账户密码等等敏感信息也不会被泄露。
外部监控
任何与安全相关的内容,都少不了监控。事前的所有策略,最终都有可能被一一击破,留给我们最后的一道防线就是在事件发生之后马上得将其堵住,以防止问题的扩大,而造成更大的损失。
在笔者知道这件事的时候,距离代码上传已经有6小时之久了。各类技术讨论群中几乎也都是相关信息的八卦。几乎每一次刷新页面,都是几百Star的增长。虽然处理的速度不能说快,但是没过多久,与之相关的仓库都开始无法访问。至于,是不是有做代码泄露扫描的监控,我们不得而知。因为,在扫描告警之后,对于代码的扩散控制,作为B站来说,本身是被动的,还是需要Github等仓库运营方来完成。所以,这中间到底哪一步慢了,我们无法考证。
不过这些都不重要,这里主要强调一点,除了管理上的防护之外,必须留一手外部监控,以快速的发现泄漏并采取措施。这块可能大部分开发人员不太了解,这边我就稍微提一下。做一下这个是不是很费劲?
对于很多中小团队来说,可能本身就没有什么人力去做这件事,那么是不是就没办法了呢?实际上,很多安全服务商,甚至一些大型互联网公司都有提供这样的产品服务。如果说,你连买这类产品的钱都不想出,那么顺手推荐一个开源项目可以参考一下:Github leaked patrol
最近,欢迎留言交流,说说大家所在团队对于代码的安全性都是如何做的?用了什么商业服务?或是用了什么开源软件?欢迎一起分享学习与进步!
从B站的代码泄露事件中,我们能学到些什么?的更多相关文章
- 武器级工具包 Immunity Canvas 7.26 泄露事件 | 附下载地址
关于Immunity Canvas Immunity CANVAS是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具并不开源,其中文版介绍如下: &quo ...
- 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了
系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...
- [转帖]御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件
御界预警:3700余台SQL服务器被入侵挖矿 或导致严重信息泄露事件 https://zhuanlan.kanxue.com/article-8292.htm sqlserver的弱密码破解和提权攻击 ...
- 【转载】Asp.net网站安全:去除网站根目录下的备份文件防止代码泄露
很多网站运维人员在更新网站版本的时候,喜欢直接在网站目录文件夹中直接压缩原来的网站文件,如果这个备份压缩文件没有移动出去,这样是非常不安全的,有些网站攻击者可能会尝试访问你网站下有没有对应名字的压缩备 ...
- 在Application_Error事件中获取当前的Action和Control
ASP.NET MVC程序处理异常时,方法有很多,网上也有列举了6种,下面是使用全局处理在Global.asax文件的Application_Error事件中实现.既然是ASP.NET MVC,我需要 ...
- 功能源代码(扇形进度)及Delegate运用在开放事件中、UINavigationController的封装
1:扇形进度视图及运用 首先先创建扇形的视图,传入进度值 #import <UIKit/UIKit.h> @interface LHProgressView : UIView @prope ...
- DOM - 5.事件冒泡 + 6.事件中的this
5.事件冒泡 如果元素A嵌套在元素B中,那么A被点击不仅A的onclick事件会被触发,B的onclick也会被触发.触发的顺序是"由内而外" .验证:在页面上添加一个table. ...
- ASPxTreeList控件去根节点的新增修改操作(写在onCommandColumnButtonInitialize()事件中)
treelist去掉根节点按钮效果图: //去掉父节点及子节点旁的新增.修改.删除操作(写在onCommandColumnButtonInitialize事件中) protected void Tre ...
- ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_201 ...
随机推荐
- Protostuff序列化分析
前言最近项目中需要将业务对象直接序列化,然后存数据库:考虑到序列化.反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文 ...
- go语言nsq源码解读五 nsqlookupd源码registration_db.go
本篇将讲解registration_db.go文件. 1234567891011121314151617181920212223242526272829303132333435363738394041 ...
- go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
nsqlookupd: 官方文档解释见:http://bitly.github.io/nsq/components/nsqlookupd.html 用官方话来讲是:nsqlookupd管理拓扑信息,客 ...
- go语言nsq源码解读一-基本介绍
简单介绍一下nsq. 参考 http://feilong.me/2013/05/nsq-realtime-message-processing-system 的介绍:NSQ是由知名短链接服务商bitl ...
- AngularJs parent index
AngualrJs ng-repeat使用 $parent.$index 当时用ng-repeat的时候在其子原属中可以使用$parent.$index获取父级下标,当没有没有多一级的ng-if,一般 ...
- hystrix 请求合并(6)
hystrix支持N个请求自动合并为一个请求,这个功能在有网络交互的场景下尤其有用,比如每个请求都要网络访问远程资源,如果把请求合并为一个,将使多次网络交互变成一次,极大节省开销.重要一点,两个请求能 ...
- 用keras实现人脸关键点检测(2)
上一个代码只能实现小数据的读取与训练,在大数据训练的情况下.会造内存紧张,于是我根据keras的官方文档,对上一个代码进行了改进. 用keras实现人脸关键点检测 数据集:https://pan.ba ...
- 滴滴 App 的质量优化框架 Booster,开源了!
一. 序 当 App 达到一定体量的时候,肯定是要考虑质量优化.有些小问题,看似只有 0.01% 触发率,但是如果发生在 DAU 过千万的产品中,就很严重了. 滴滴这个独角兽的 DAU 早已过千万,自 ...
- js十大排序算法
排序算法说明: (1)对于评述算法优劣术语的说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排 ...
- 实战经验丨CTF中文件包含的技巧总结
站在巨人的肩头才会看见更远的世界,这是一篇技术牛人对CTF比赛中文件包含的内容总结,主要是对一些包含点的原理和特征进行归纳分析,并结合实际的例子来讲解如何绕过,全面细致,通俗易懂,掌握这个新技能定会让 ...