Skip to content

Latest commit

 

History

History
138 lines (74 loc) · 6.58 KB

02.md

File metadata and controls

138 lines (74 loc) · 6.58 KB

第二章:服务的代码一定会外泄

我们第二章这个标题,这就更耸动了。说实在,天下真的没有不外泄的代码。代码外泄的原因有很多:

  1. 骇客利用 Directory Traversal Attack,把代码顺走。
  2. 黑客攻进程序员的 Github 做精准攻击,拿走代码。
  3. 离职的员工心存不满,贩售代码。
  4. 雇员的电脑掉了

等等等等。各式你所想像不到的情形。

代码外泄有多恐怖呢?

原本黑客攻击你的服务,是要不断的用工具猜测弱点的。拿到弱点以后针对不同情况,手工夺取权限。

如果黑客能拿到代码,就可以省下巨大的研究精力。

状况一:密码写死在代码库里

单纯泄漏代码,还不算是最危险的事。

泄漏代码最大的危险性是:当今互联网上大把从业程序员,为了开发方便,直接把密码写进代码里面。而且还「上了版本控制系统」XD

也就是这些密码一旦进版本控制系统以后,就擦都擦不掉了。当黑客黑进 Git Repo 之后,能够循线找到一大堆被写死的第三方密码。

外泄程式码,情节往往不是最严重的。

因为一个互联网服务,一定是配套的:

代码 + 数据库 + 第三方服务

只拿到代码库没用。得同时拿到「代码 + 数据库 + 第三方服务」,整套服务才 work。

但是如果公司的程序员偷懒,把存取数据库以及第三方的金钥通通都写进代码库里面。当代码一旦被盗,暴露的风险就会无限的大。

前一阵子,B 站就曾经发生一个事故,他们的代码不知道是被黑客还是离职员工拿到。直接被开源在 Github 上面。

https://news.sina.com.cn/o/2019-04-22/doc-ihvhiqax4456543.shtml

撇开 B 站的代码风格不说,光一堆敏感密码被写死在代码里面。这件事就成为技术圈的笑柄。

所以说并不是只有初创企业没有经过训练的互联网程序员会犯这样的错,连美股上市互联网公司的代码,也会有这样的问题。

解法

你可以做的方式是:将密码变成环境变数,本地用本地的环境变数,测试服务器用测试服务器端的环境变数,正式服务器用正式服务器端的环境变数。

至少将代码、数据库、第三方的连结切断。

程序员在本地也只能调用测试环境的数据与服务,即便员工离职带走的,也只能是代码与测试服务的权限。

这样能避免:

  1. 黑客打进机器或 Github 帐号里面,就能够直接夺取网站的存取权
  2. 避免程序员离职时,若有口头纠纷,产生更大的灾难

状况二:程序员的帐号被攻破

黑客攻击系统,分两个思路:

  • 攻击系统本身
  • 攻击人本身

攻击「人」往往比较好下手的。

早期 Github 并没有强制大家绑 2FA 帐号,所以很多开发者,是没有绑 2FA 验证的。

反正就是写写小工具,还要绑个 2FA 也太蛋疼了。直到这些程序员变老了,变成...架构师,CTO...。

但是他们还是没有对 Github 绑 2FA 验证。这时候问题就爆发出来了,一个拥有最高权限的技术开发人员,他的帐号是没有加密的。

这样黑客只要针对这个帐号做社交攻击就好了。而这些 CTO 的私人 email 甚至不是保密的,而是写在他的 Github Profile 上。

与其撞库这么多用户的密码,不如直接去撞库 CTO 的密码,更加的划算。

这是一个相当致命的脆弱瓶颈。

另外,还有一个场景,就是 CTO 本人是有安全意识的。但是公司的程序员没有,所以即便 CTO 本人把自己的裤子抓的紧紧的,其他程序员还是一样没穿裤子在外面走来走去。

大部分的互联网项目,都是用 Github Team 的的方案,Team Repo owner 有 2FA 没有用,只要 Team member 有一个人没有设,他就是可能的脆弱瓶颈。

现今黑客都比较聪明,思绪是先拿到一份公司的 email(可能是 slack,可能是其他服务,预先拿到所有帐号的名单),再一个一个进行撞库攻击。总能打穿一个。

解法

对所有的公司服务,一律开启 2FA 验证。

不管是 Slack、Github、Trello、Redmine 等等。一律打开 2FA。

因为攻击资浅程序员,投资报酬率,远远高过于攻击一个普通用户。

状况三:保管代码的第三方服务被攻破

Github 在程序员界可说是无人不知,无人不晓。几乎每个互联网公司都会使用 Github。

但是,我得诚挚建议各位业界朋友,如果你的项目与资产有关,建议你还是不要把代码放在 Github 上面。

为什么呢?

  1. 你怎么知道 Github 本身服务有没有危险呢?毕竟 Github 被攻破,公司代码(+密码)就放在上面...
  2. 许多黑客都把眼睛盯在攻破 Github 上,因为那里是一个极大的代码宝藏库

再来,除了 Github 之外,还有一些地方,程序员是会上传代码上去,并且 Grant Access 的。

比如说自动跑测试的服务,有些自动跑测试的服务,能推送代码上正式服务器。。。。

还有一些自动检测代码整洁度的服务,这些服务也能拿到你的代码。

解法

如果你的服务尚小,也暂时没有什么攻击价值的话,还是可以安心的放在第三方服务上。毕竟你没有本钱自己再独立维护一套代码管理工具。

如果你的服务变大,或者你的服务是有金融价值的话。

你应该考虑把这些服务转成私有企业化版本,部署在自己的内网,而非租用公开服务。

若这些服务有特定意义,暂时无法私有化。也得尽量至少对所有雇员上 2FA。若该服务不提供 2FA,请直接搬离。

状况四:雇员的电脑掉了

现在很多公司,是直接发给程序员笔电的,方便在家办公。

虽然发生机率极低。但是程序员的笔电掉了,相关的信息也可能外泄。

或者是程序员离职不想要归还这些电脑。

这样的解法是发给程序员的电脑,一开始就是由公司设定,并且公司端可以追踪这些电脑上的位置,以及抹除这些电脑上的信息。

总结

这里总结一下你现在可以检查以及主动做的事:

  1. 你的代码与密码是否分离?
  2. 关于你代码会接触使用的服务,是否全员都上了 2FA?
  3. 你用了哪些可以接触到代码的服务?他们提供私有化版本吗?
  4. 这些代码第三方服务,对于正式生产环境的权限能够做到什么程度?
  5. 思考有什么情况,还会让代码落到别人手中。如果落到别人手中,能够马上 work 吗?