caoz的心得与分享,只此一家,别无分号.

创业公司如何做好信息安全(上)

发布日期:2015-09-28 13:16:33 +0000

缘起


在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多次尝试不同的帐号登录,再出现验证码,验证码也要先易后难,防止程序破解,这样兼顾了用户体验以及防止机器人扫描和撞库。


说道这里,介绍一个第三方平台,洋葱网。 利益相关,创始人吴洪声是我的好朋友,也是挂名徒弟。(但其实人家比我厉害很多的) 洋葱网试图通过第三方的一种登录机制管理将传统的密码方式彻底淘汰,当然目前很多应用都将洋葱网作为第三方登录的一种选择,而没有作为自己网站或应用登录的完全替代,但是有兴趣的创业者确实可以了解一下。


今天先到这里,未完待续


后续我会写下篇,关于数据安全和员工管理所涉及的安全问题。