• caoz
    caoz:创业公司如何做好信息安全 编者按:本文作者曹政,常用 ID caoz,从事互联网十多年,技术大牛、数据控、历史控、考证控。曾参与创建一统统计、cnzz 站长统计,曾主持搭建百度商业分析支撑平台。文章首发于其微信公众号 “caoz 的梦呓”(微信号:caozsay)。   缘起 在 IC 咖啡分享会的时候,有人问到了这个问题,关于创业公司,在资金和技术短缺的情况下,如何做好信息安全呢? 这真是个好问题,我觉得有必要单开一篇。   很抱歉的是,其实在这个领域我自己做的也不够好,甚至可以说劣迹斑斑,好多次都是靠朋友帮忙才躲过一劫。所以,我会将自己的很多次教训一起放进去,尽可能整理,欢迎高手批评指导。   另外,需要提前说明的是,本文会涉及多个第三方平台的名称,其中部分项目来自于我的好友熟人,简单说就是可能被认为是广告文,我只能说写此文时确实没有收钱,(相关负责人要不要给赞赏自己看着办吧)而且我所列出的都是我认为对创业者或有帮助的。如果您执意认为此文是广告,那么,您随意吧。   运维 1、搭建系统平台,建议选择可靠的云服务商 自己搭建系统,主机托管,你需要运维工程师非常有安全经验,而且需要随时跟进最新的安全漏洞去打补丁,其实对创业公司来说,成本还是有点高的。而第三方比较大的一些云平台,其安全技术团队肯定比绝大部分创业团队的要好很多。   基本上云平台操作系统上的安全性是比较有保证的,当然 100%这话不能讲,但是只要有重要的安全公告出来,补丁还是很勤快的,而且如果出现新的漏洞,较好的云服务商多半会帮你做一次检测并发邮件提醒你,这几乎已经是行规了,你只要注意邮件提示一般不会错过重大的问题。部分云服务商还会提供额外的安全检测和系统入侵防范的一些功能选择,前段时间阿里云出了一个较大的故障,就是因为其防入侵的系统出现了一个明显 bug,这个事情你分两面看,出问题当然不好,但是不出问题的时候这个功能还是能救你一命的。   目前国内比较大的云平台,腾讯云,阿里云,amazon 也进入中国了,当然还有我一直推荐的 ucloud 云。ucloud 老板叫做季昕华,曾先后在华为,腾讯,盛大负责信息安全,是国内有名的信息安全专家,(利益相关,季总是我十多年的老朋友)。 国际上的有 amazon,linode,digitalocean 等等。   云平台的风险在于,存在穿透风险,以及受到不靠谱邻居的影响,但你做主机托管也存在不靠谱邻居的影响,因为今天的主题是创业公司,如何保障信息安全,所以我建议,拥抱云主机是前期成本较低的情况下能较好保障系统安全的选择。   2、选择合适的第三方安全服务平台 实际上现在创业的平台服务商比十几年前好太多,十几年前个人网站一旦被拒绝服务攻击,除了等死几乎没有选择,而现在,国内有 360 网站卫士,加速乐,安全宝等免费服务可以帮你扛过中低规模的攻击;国际上有 cloudflare 帮你扛。 这些服务都是比较可靠的,当然如果被攻击的量级比较高可能需要较多付费,这就要看创业公司的人品了,如果你才刚刚天使轮,手里没几个钱,就被人巨量 DDOS 攻击,你来问我怎么办,实话说,这个就真没办法了。 但如果你拿了 A 轮,B 轮,你被人打的很惨,你可能还是可以考虑一些付费服务商的。比如加速乐也提供付费的服务,比如厦门零日科技也帮一些创业中的网站提供过抗拒绝服务攻击的支持,(利益相关,这家公司有我的少许投资)   此外,必须说明,如果被攻击,建议立即报警,不能向恶势力低头。一般攻击者会有利益诉求,基于利益诉求去追查比基于技术更容易追到攻击者。   另外,所有国内创业者,建议都应该关注乌云平台,(利益相关,乌云创始人方小顿是我的好朋友),乌云是国内影响力最大的白帽安全平台,很多一线互联网公司的高危漏洞都是由乌云白帽率先发现的。 国内互联网有一种特别不好的风气,很多互联网公司觉得谁爆了他们漏洞谁就是坏人,异常敌视,特别是一些不懂技术的老板和市场人员,往往把爆漏洞混淆为攻击和恶意竞争,但实际上,我们稍微动点脑子就知道,如果白帽没有爆漏洞,你的漏洞依然是存在的,如果这个漏洞一直在黑产圈子里传递,你那才是欲哭无泪。前几天我这边的公司被乌云白帽爆了一个超恐怖的高危问题,我觉得非常侥幸,幸亏是白帽发现的,否则真是死都不知道怎么死的,后面会说这个案例。   乌云提供一些付费的安全众测服务,但如果作为比较草根的初创团队,觉得这个成本较高的话,可以考虑先在乌云开一个企业账户,时刻关注重要的安全公告和白帽子提交的问题,也是有用的。   研发 1、研发和运维环境的安全   相信很多人都被 ios 这次 xcode 木马事件所震惊,这里强调,开发环境和运维环境软件,特别特别要注意。   第一是编译器和相关开发工具包,务必从官方下载。   第二是远程维护工具,例如 putty, sshclient 等,务必从官方下载。   如果使用第三方下载,比如迅雷,务必于官方核对 md5 值。   第三,我发现目前 telnet 用的人已经非常少了,但是依然有很多开发者还是习惯使用 ftp!ftp 是明文传输,所有经过的路由器和交换机均可以轻松截取密码信息!务必使用加密传输的 sftp 替代 ftp。使用 ssh 替代 telnet!   2、代码分享 很多工程师喜欢将工作成果,代码分享到 github 或其他代码分享网站,如果说禁止这样做确实不是很尊重工程师的劳动成果,但是我想提醒一点,创业团队如果没有很好的安全开发架构,或缺乏有经验的工程师,如果想分享到 github 务必将代码私有化,不要公开!不要公开!不要公开!   分享不是说就一定是有问题有隐患的,但是对于一些架构比较简单的开发而言,一些经验匮乏或者疏忽的程序员,很容易把关键密码写到代码里然后分享到 github 上,这样的案例已经非常非常多了!   说来惭愧,前些日子我的公司技术人员就犯了这个错误,将代码分享到 github 的时候没有注意到里面包含了一个关键密码,幸亏乌云白帽及时发现,这样的问题如果被黑产发现,可导致任意盗号,而且一旦真的发生了,我肯定会找错方向,去追踪代码安全,找 SQL 注入的可能性,想要快速追查定位真是难上加难。   3、是全部独立开发还是选择开源系统? 实际上,如果你的开发工程师水平一般,能力不是非常突出,代码的安全质量通常不会比成熟的开源系统更好,成熟的开源系统大多经历了多重的安全风险,至少不会有过于显而易见的安全漏洞。   说一下开发过程中容易犯的安全问题。   第一,SQL 注入,第二,跨站脚本,以上两条都是对用户输入和参数传递没有做严格校验导致的。所有通过客户端传递的参数必须做格式校验或强制类型转换才可以使用,这是一个特别特别重要的要求。   第三个常见的安全问题是数据库对用户密码的保存。   不管你认为自己系统多么安全,请相信我,被人扒库的问题永远存在。明文密码保存是一种流氓行为,但如果只做 md5 也是非常不负责任的,网上早有人把所有常用密码组合的 md5 全算好了,随便搜一下就可以反解出来。昨天分享的文档提到了随机 SALT,但没有具体解释。今天写到这里有点懒了,只说一个结论,使用随机 SALT 可以让黑客拿到数据库后的破解用户密码的成本极度增加,从而保护用户密码安全。   以 discuz 为例,我面试过很多程序员,很多都说 discuz 有很多问题,但是很少有程序员认真去分析过 discuz 的一些细节,一个典型的是 ip 地址反查的实现机制,另一个典型的就是密码采用了随机 salt +md5 的方式,说来惭愧,我开始研究 discuz 的时候也是很长时间不太理解这个 salt 是干嘛用的。 所以回过头来说,很多开源软件在技术细节上和安全细节的打磨是远超创业团队的开发人员的。   使用开源系统当然也存在安全风险,比如开源系统一旦爆出漏洞,传播性会非常快,很快就有扫描工具在网上流行,一旦你疏漏了一下,就会中招,产生严重后果,但即便如此,我认为,如果你不具备足够的安全开发能力,使用开源系统的整体安全性还是会优于自己开发,如果你使用开源系统,然后某天因为这个系统漏洞中招了,你来埋怨我,请想想,你自己开发的话,因为不流行,所以惦记着的人少,但是你确信这样就安全了?一旦你业务起来,如果程序员水平不足,别人稍微别人研究一下(是的,即便不开源,研究你系统漏洞的方式也是成熟的,所有的登录入口,参数传递调用,以及交互输入的地方,都是可以做恶意渗入测试的)就能扒出一堆问题,这一点真的不夸张。   如果使用开源系统,又想减少中招的风险,建议将默认配置的目录修改掉,特别是后台管理的目录,以及管理的进入程序名,略微调整一下目录和文件命名规则就能躲避扫描器的跟踪,而且多关注该系统的官方公告和最新安全新闻,也会防止中招,请相信一点,如果知名开源系统出现严重风险,乌云第一时间一定会爆出来,如果是你自己开发的系统,一旦被黑产先发现,真没人知道,你自己想去修补,真的很难找到问题点。   4、防撞库,防暴力破解的验证码 这里只是提醒一下,验证码是对机器访问,撞库攻击,暴力破解(特别是找回密码环节)非常好的一种抵御方式,但验证码其实也是伤害用户体验的,所以要有所取舍,此外,如果采用容易识别的验证码,网上已经有识别验证码的程序流传了,我都用过的,这样作用基本就不存在了。   个人建议,用户第一次输入不出现验证码,输入错误或者同一个 ip 多次尝试不同的帐号登录,再出现验证码,验证码也要先易后难,防止程序破解,这样兼顾了用户体验以及防止机器人扫描和撞库。   说道这里,介绍一个第三方平台,洋葱网。 利益相关,创始人吴洪声是我的好朋友,也是挂名徒弟。(但其实人家比我厉害很多的) 洋葱网试图通过第三方的一种登录机制管理将传统的密码方式彻底淘汰,当然目前很多应用都将洋葱网作为第三方登录的一种选择,而没有作为自己网站或应用登录的完全替代,但是有兴趣的创业者确实可以了解一下。   数据 这又是一个我特别惭愧的话题,因为就在前几天,amazon 的一台云主机崩溃,居然无法恢复,导致我们线上的一个游戏服务出现故障,原本是做了数据备份的,但是由于是一款长期没有维护的游戏,数据备份的机制不合理,恢复起来特别慢,而且,更加崩溃的是,由于开发商原团队多人离职,程序和资源备份已经非常难找了,以至于恢复周期极长。。。   今天先说一下关于备份的话题,前几天冯大辉也特别提过这个话题。   数据备份也存在一个悖论,因为创业者其实有两个担心,第一个担心,数据泄露怎么办?第二个担心,数据损坏怎么办? 而这两个担心在备份策略上是互斥的,如果你想防止泄露,理论上你要尽可能减少数据在不同地区存储的机会,尽可能让数据只存储在你完全信任的环境里,但,如果你担心数据损坏,那么你可能需要把数据更多放在不同地方保存备份。 防止比如说,机房失火,或者地震等重大事故,你可能一个地方的数据全部损坏,你仍然可以异地恢复起来。   此外,数据备份又分为热备和冷备一说,前者是保持实时有效性,一旦线上数据库出现访问故障或硬件故障,甚至可以自动切换完成故障转移,但热备也有显著的缺点,就是万一线上数据出现了严重的误操作,或者被 SQL 注入者执行了一条 drop table,对不起,秒秒钟的事情你的热备就完蛋了! 这时候就只能靠冷备来救命,冷备往往存在一个时间差,会有丢失最新的数据,游戏行业常说的就是,回档。   所以,二者都存在风险,但也都有意义,因此正常情况下建议冷备热备最少各要保留一份,冷备务必要留一些时间差,并且最好要保留多个时间节点备份,防止出现重大的误操作或恶意操作后没有足够发现的时间冷备就被干掉了。   如果热备被误操作或攻击者干掉,最理想的恢复方法是基于最新的冷备先恢复,再用冷备后的数据库日志文件,手工摘除掉最后的错误操作命令然后执行增量恢复。   下面推荐一个平台,叫做多备份,www.dbfen.com,(利益相关,暂时还没利益相关,不知道他们会不会给我赞赏)。 想想连 amazon 都会有不可恢复的损坏,所以这种备份机制还是有必要的,当然,使用多备份,你必须想清楚,数据泄露的风险毕竟存在,备份越多,泄露风险越大。 所以再次强烈建议,用户密码的处理非常重要,明文保存是流氓行径,md5 或 md5+md5 都保护不了绝大部分用户密码,随机 salt 是成本最低的高效密码保护策略。   其实,我一直觉得,如果是创业公司,我是不是要用户在我的平台有帐号密码呢?现在 QQ,微博,乃至微信一键登录都那么成熟,国外更成熟,facebook, google 一键登录什么的,多兼容第三方一键登录,自己不用管密码,就不用担心用户密码丢失了,至少丢了也找不到你这边来。 (当然,也要考虑用户的顾虑,很多用户怕你到他社交网络的时间线乱发消息,所以不希望用自己的社交网络帐号登录,特别是游戏,这个也是一种用户需求吧)   对你认为机密的数据做一些简单的加密存储,然后使用这种多备份平台,可能会极大减少数据泄露的风险。因为黑客也是有成本考虑的。   普通的数据库主从是一种常见备份方法,但主从其实并不能彻底保证数据的一致性,另外一种是通过原始的数据库日志文件,比如 mysql 的 binlog 恢复数据,一致性较好,但恢复效率极差。 所以很多时候,并没有绝对正确的方案,你必须评估自己的需求,选择适合自己的就好。   代码备份也是一种数据备份,其意义也非常重大,代码备份同时要兼顾版本管理,有些产品,比如游戏,发布到不同国家不同地区的版本都不一样,这个管理就更加复杂了,这一块我们目前做的也不是很好,所以这次灾难备份恢复的周期格外漫长。而且这里还涉及一个问题,开发商和运营商彼此如果配合不到位,开发商也担心运营商会获得原始代码,然后自己甩开开发商开私服,所以如何协调和保障双方的诉求就特别重要。   传奇私服为啥会起来呢?就是因为当时有一个遥远的国度的发行版本被泄露了,代码迅速在地下黑市扩散普及。。。 所以涉及代码版本备份的工作也相当具有挑战性,因为开发商对泄露的敏感度极高。这一块我只能说,目前我们也没有太好的办法来做到大家都能满意,只能说是尽量把这个问题先让双方都清楚,一旦代码服务器发生不可逆转的损坏,备份恢复机制如何进行。   到这里插播一个本应昨天的话题,作为创业公司,如果开发是外包的,务必要求源代码。我见过这样的案例,有个公司外包开发了一套系统,这个系统是 php 开发的,代码做了加密,后来他们要修改的时候找不到开发者了,来求助我,我帮他们解开了源代码。不看不知道,里面赤果果的留着一个非常显眼的远程控制的炸弹,就是从地址栏输入一个参数可以直接删除数据库,这种后门主要是开发者防止发包商拖欠尾款的,但是这样的后门性质还是相当恶劣的。虽然没有被引爆,但当时他们的技术人员也震惊了。 在这里推荐一个对 php 加密代码能做解密的工具,利益关联,这个真的一点关联都没有关联了,http://zendecode.com/ 不同加密方式的解密途径不同,这个是一个比较好用的工具。   员工管理 1、电脑严禁裸奔,不管自称多么懂电脑懂互联网,必须装杀毒软件和安全工具,而且必须装主流的杀毒软件和安全工具。 你说你就不花钱你用 360 可以,你说你不信 360 你装卡巴斯基也可以,但必须保持不断更新病毒库和保持付费可用状态。   2、保持公司的邮件帐号密码和其他第三方网站的不一致,这也是硬性规定,防止撞库,有些人在第三方网站也就是普通用户,密码丢了也没啥影响,他自己也不知道,黑客也不去改他密码,但是可能在公司里是个管理员,黑客借用第三方网站的盗号撞库杀入你公司系统,可能就有大麻烦。   3、对外合作方式和一些第三方帐号管理   公司员工对外合作经常留有 QQ,或者微信,邮件地址。   QQ,微信这个如果让员工换掉有些强人所难,创业毕竟也要人性化。 (部分有条件的公司可以使用企业 QQ 服务,便于公司统一管理,而对外合作微信可以考虑使用企业公众号来处理,将在职员工设置为公众号客服,这样企业对外合作可以不用因员工变化而改变微信联系方式,但目前这种配置也不是很流行,所以不做硬性推荐),但是邮件务必要用公司的企业邮箱,大公司这一点都不会觉得有问题,有些创业公司会觉得我搞企业邮箱好麻烦,干脆大家用私人邮件干活吧,但如果存在人员流失和离职这个麻烦就很大,有些重要的业务合作邮件可能就无法追溯了。企业邮箱其实有很多免费和廉价的方式,QQ 企业邮局,网易企业邮局,google 企业邮局,等等。管理员把权限设置好,后续可以省很多麻烦。   我以前助理经常要跟各个业务伙伴进行邮件沟通,该助理离职后,我直接设置将旧邮件地址所有收到的邮件转发给新助理,这样一些合作伙伴的问询和沟通就完全没障碍的转了过来,我甚至没有通知他们联系人发生了变更。   一些重要的邮件账户也要做好备份,管理员应该可以有设置的能力,这样防止主要员工离职后会删除重要资料。 目前我身边听到多个案例有员工遭辞退后删除所有信息的情况。   公司发展业务时,经常需要设置和安排一些第三方的帐号,比如 google 开发者帐号,苹果开发者帐号,域名管理的帐号,很多帐号里还要设置多个权限角色,因为不同目标的员工需要上去做一些设置和调整的工作,这里之强调一点,这些帐号务必使用公司邮箱来注册,而不是个人邮箱,这样才能保证公司在人员流动的时候不会突然出现某些第三方平台你需要重新申请重新配置的麻烦。   这种问题对于大公司来说似乎都是理所当然的,但是对于很多刚开始起步的创业团队,他们一开始很可能疏忽了这些,你一个帐号,我一个帐号就开干了,中间一旦产生人员变化,这麻烦折腾的就大了。   4、关于公司的一些机密的维护 其实从我角度讲,我不喜欢防备员工,公司收入,支出,几乎都是公开的,大部分人都可以看得到,只要业务需要,申请一些第三方平台的权限我也基本上都给开,那么,这里是否存在数据及业务泄露的风险呢?其实肯定会有,不过我觉得对于创业公司,你还真别太在意这个,真正有价值的一定不是冷冰冰的信息和数据,而是人对信息的思考和反馈的能力,我不喜欢那种公司里面各种藏着掖着的作风,如果公司规模大了,竞争环境复杂了,我觉得这个当然还是重要的,但是现在我就琢磨,我们这点小破生意,腾讯这样的肯定懒得看吧,我把我数据给他估计他都懒得瞅一眼,同行?和我们差不多的?大家合一起连腾讯的零头都比不上,我们彼此叫啥劲呢。   但不排除有些企业有些领域有核心竞争力的信息是需要保密的,这一点我也没太好的办法,以前朋友的公司做了款产品叫做铁卷,是干这个的,但是,实话说,不是创业公司玩的。   这里多说一点,安全性和便利性肯定是矛盾的存在,如果你过于刻意强调安全,可能很多工作的复杂度就会增加很多,大家也看到我的介绍里,更多推荐使用第三方平台的产品和服务,也是为了创业团队能专心打磨自己的竞争力,没有必要在安全上投入太大精力,实际上,有个安全大牛说过这样一句话,其实除了极少数安全公司的范例,虽然你看每年互联网安全事故那么多,死于安全事故的公司还真不太能找出来。所以,注意安全是必要的,但是,我们也不是说为了安全,弄得人人自危,大家都不安生,那就有点过犹不及了。   好吧,坦白说,死于私服 + 外挂的大作游戏还是有几款的,要说如何彻底解决这种问题,我真没办法。我只能说,如果你担心这种事情会发生,你只能尽量让你的竞争力不依赖于这个了,比如快速调整的能力,快速应变的能力,即便出现了比较严重的版本外泄,你升级更快,性能调优更强,版本迭代更迅猛,总还是有机会的,之前那些案例,主要还是因为开发商和运营平台不齐心,遇到问题的应对缓慢,策略保守。   5、辞退及离职 创业公司遇到骨干离职会很头大,如果他手里有一些重要的帐号资源,那真是非常紧张和危险的事情。   这就是之前提到的,全部使用公司邮件地址,辞退离职的时候,只要邮件权限拿回,所有帐号都可以通过密码找回重设。   但问题是,你确认你知道他有多少账户么?很可能不知道的。   这需要平时做好记录。谁在什么系统拥有什么帐号,拥有什么权限,平时需要有个记录,当员工辞退或离职时,应明确这些帐号已经被收回。   当然,这里还有一个重点,缘聚缘散都是缘分,大家同事一场,一起创业,尽可能不要出现不愉快的收场,作为公司创始人或者管理者,即便你认为有人不适合这个公司,请他离开,也应尊重和善待每一个伙伴,这样可能比你加很多条安全策略还要重要。你就想一下,就算员工有不对的,当你决定招聘他进来的时候,首先是你看走眼了对不对,所以第一个责任肯定在你身上,这样去思考,就会减少很多冲突的可能,事实上,非常高比例的企业内部安全事件,是由心存报复的离职员工发起的。   6、办公软件和工具 前文提到,员工应使用正版或来源有保障的软件,包括但不限于编译器,远程管理工具,邮件客户端,办公软件,图形制作软件。 并且,应及时跟进最新安全补丁。   在家办公或远程办公,涉及帐号密码操作,以及登录操作,应尽可能使用加密传输协议,有条件的建立 vpn 线路。   最后一个话题   应急处理及响应 这是特别难的一个话题。 涉及很多领域 数据损坏 数据泄露 遭受拒绝服务攻击 域名劫持 服务器被入侵 网站被挂马 等等等等 你跑来问我,对不起,我也没招,找专业安全人士处理。 那么你说,你去哪里找啊? 下面,我告诉你一个大绝招,这是我这样低水平的人还能横行的一个重要原因,一般人绝不外传的!   做好信息安全,三分靠技术,七分靠人脉! 别笑,别笑,真的。   遇到好多次险情,危急时刻,都是我还毫不知情的时候被朋友发来消息,“你们服务器出大篓子了,赶紧处理!” 嗯,这事遇到过,还不止一次呢。   这就是几次死里逃生的真相。   这里我必须再度强调一次,如果你选择了一些巨头的云服务,遇到紧急情况可以请他们支援,无论是 ucloud,还是阿里云,或腾讯云,几个比较大牌的云服务商背后,都有业内非常顶级的安全专家镇守,或者与非常专业的安全公司有深度合作。第二是可以去找乌云求助,让他们帮你做一次紧急的评测和加固服务,那,上一篇文章评论里,乌云的朋友给了一个福利:   报 caoz 的名字过来的乌云众测,免 3 个高危漏洞的奖金。微信 id:2036234   有兴趣的自行联系勾兑。   ----------   留个彩蛋吧,名词解释,云服务穿透。   云服务其实也是一种虚拟空间,每个人认为自己获得了一台独立的服务器,但是很多是彼此共存在同一个系统中的,这就存在一个风险,如果这个虚拟机系统出现一些安全漏洞,就可能被人利用漏洞穿透虚拟机,进入上层的实际系统,然后再进入其他虚拟机,我猜你一定想到了,没错,就跟黑客帝国一样,穿透了自己的世界,进入 zion,另一台虚拟机。这是云服务目前最大的风险之一。   不过还好,这样的风险出现过,但是大规模的破坏还没发生过。   另外,任何云服务商的数据存储和系统都不是 100%安全的,选择时要知道这一点,不能完全信任任何一个平台,个人建议在其他云平台搭建一个同样的系统,数据完成热备,但不用启用,这样成本其实也不高,最低成本运作就好,在 dns 服务上做好一个备份的域名,也不启用,一旦主力云平台出现非常重大的事故的时候,可以 dns 直接 cname 到备份域名上,然后快速增加资源,启动完整的备份平台。尽可能减少运营损失。   当然,实话说,我自己还没完全实现这个,只是部分做了一点。      
    caoz
    2015年10月09日