初创公司从创业之初到上市的安全建设之路

参考项目:https://github.com/forter/security-101-for-saas-startups

当你创业的时候,首先考虑的是自己的产品是否可以得到市场的认可,对于安全性而言并不会关注太多,对企业内部的安全性也会有所忽略,比如:内部使用的 ElasticSearch 是否使用了账号密码认证,增加认证之后,对于使用效率上以及人力成本上都会有所提升,为了防御未授权访问,那么就需要增加防火墙的规则,禁止外部人员随意访问,在有了足够的人力和物力来保障 ElasticSearch 集群的时候,才会考虑如何做好访问控制以及认证体系。

初创公司在企业文化形成之后就很难做更改,比如:哪些习惯不做代码审查就提交代码的开发人员,觉得做代码审查会拖慢整个开发的进度,从而很难改变这个习惯。

那么在创业的早期,应该做哪些安全方面的考虑呢?

1、你的产品中哪些安全特性是用户期待并且会为之买单的?

2、你所在的行业(金融、医疗、企业)对于安全的期待是什么?

3、你的目标市场法规对安全的要求是什么(等级保护、隐私保护等)?

4、哪些安全策略、使用的安全工具不会影响员工的工作效率?

5、存在哪些安全风险:知识产权、商业计划书、数据等被窃有哪些影响?如何防止数据泄漏?如何在数据泄漏后减少损失?

下面是在企业的不同阶段需要考虑的安全建议,初创企业掌握的资金和数据越多,那么相应的对于安全方面的投资就要越多。

第一阶段:未融资,刚起步

共享管理员密码

一、对于任何系统来说,为了安全起见都会存在认证系统,只要存在认证系统就会存在管理员账号以及普通账号,假如你是系统账号管理员,公司其他员工需要使用系统,该怎么办?

1、把密码直接发给他(这是最直接的方式,但是比较麻烦,如果需要的人越来越多,那么你会很累,而且在员工离职之后,账号回收也是个问题)

2、使用密码管理软件(这个方式比较安全,只要员工记住自己的密码管理器的口令以及自己笔记本电脑的密码即可轻松获得系统的访问权限,在离职之后账号回收的时候,将该用户的密码管理器的访问口令删除即可)

二、理想的情况下,对于不同的系统和服务需要使用各自独立的账号密码,但是这在实际操作中并不现实,而且还是初创企业,所以可以选择比较基础的方式,设置三个账号:

admin:特殊情况下使用

developer:日常工作使用

service:供应用程序使用

这样设置的好处是,在 developer 离职之后,应用程序也不需要做相应的改动。

三、在员工设置密码的时候需要注意,工作使用的密码不要跟生活使用的密码相同,因为很有可能生活使用的密码已经被泄漏,从而导致公司的信息被泄漏。

防范钓鱼邮件

一、员工经常会使用工作电脑做一些个人的事情,比如:使用 bt 下载、访问一些有问题的网站,通常这类行为是木马病毒传播有效途径,如果非要访问这些有问题的网站,可以选择使用自己的笔记本电脑而不是工作电脑,或者在工作电脑上安装一个专门用来个人上网的虚拟机。

二、个人电脑被黑客攻击,最有效的方式就是钓鱼邮件了,攻击者在钓鱼邮件中携带恶意的附件、诱使你输入账号密码的链接,对于初创企业,钓鱼测试可以作为企业的一项有趣的活动。

三、很多人有打开邮件附件的习惯,这个习惯会使员工一不小心安装恶意软件,我们可以选择使用一些公共的文件共享平台来分享文档,这样,邮件中的恶意附件和正常工作附件就区别开来,减少这方面的威胁。

四、内部使用即时聊天工具,电子邮件用来联系客户和供应商。

五、使用密码管理器来分享密码、证书和一些敏感的笔记。

六、不要使用 U 盘这类设备,因为一个 badusb 让你的电脑瞬间沦陷。

设备加密

当员工电脑被偷或者自己丢掉,这时威胁最大的不是电脑的价值,而是员工电脑里的资料,这些资料你一定是不想让别人知道的,那么这种情况怎么办?下面三种系统有不同的应对措施:

1、Mac 用户一键加密磁盘

2、Windows pro 并且硬件支持 TPM

3、Linux 系统需要重新格式化

对于移动设备的选择,如果我们想在未来集中管控这些移动设备,比如 MDM(移动设备管控),大多数的供应商是不支持 Linux 的,它们支持 Mac 、Windows pro、Android、iphone、部分 Linux 版本,未越狱的 iPhone 比 android 难破解的多,默认情况下,移动设备是没有开启屏幕锁或者加密的,我们要确保管理者是开启屏幕锁和启动加密的。

修复已知漏洞

绝大多数的操作系统都有自动更新补丁的功能,操作虽然简单,但是安全性可以提升十倍。

准备至少 2 到 3 个域名

三个域名分别供外部、api 和 内部使用:

1、第一个域名通常是公司的名字或者品牌,它作为对外的营销和员工的电子邮件,用 SPF 和 DKIM 保护这个邮件域名。

2、第二个域名 SaaS 服务需要的,例如 rest api,比如 google.com 和 gmail.com 使用的 googleapis.com。

3、第三个域名作为内部办公使用,这个域名要明显与前两个不同,并且容易写。大部分的公司会使用公司域名的二级域名,但是这就意味着,域名不能由后台系统开发者管理,当他们需要频繁更新域名的情况下,就会成为瓶颈;这种方式还会将外部使用的域名和内部使用的域名相混淆,导致不知道哪个是外部可见,哪个是内部使用。

4、面向市场,我们会发送大量的邮件,将营销邮箱与内部邮箱区分开,可以防止由于营销邮箱被标记为垃圾邮箱而影响到内部邮箱的正常使用。

在所有地方使用 SSL/TLS/HTTPS

1、在网站、API、后台办公系统、甚至内部服务之间都应该使用 SSL。

2、监控所有公开证书的过期日期,防止过期

API 管理

确保每一个客户都有自己相对应的访问证书,防止一个客户的测试 bug 导致服务下线

使用 Git

在代码变更管理方面,使用 git 和 pull-request 是标准做法,通过权限变更可以在一段时间增加外包或者自由开发者。

第二阶段:A 轮融资

使用双因子认证

对于关键的系统登录都需要双因子认证,比如:邮箱登陆、VPN、堡垒机登陆等,第二步验证使用的技术包括:硬 token(use key)、软 token(app、短信、api),在员工需要远程重置密码的时候,如果不是很紧急,可以等他来公司之后重置,如果时间不允许,需要验证个人信息(视频通话等方式)。

内部员工窃取信息

1、准备一个可勾选的表单,列出离职员工需要解除的所有授权服务。

2、检查敏感文件的下载记录,是否有解雇的员工下载敏感文件。

3、使用安全终端管理设备禁止外设(u 盘、手机、蓝牙)从笔记本拷贝数据。

4、如果离职员工有管理员密码,推荐更换敏感系统的密码。

5、雇佣新员工要做背景调查,向他们的前同事打听他们的人品。

VPN

1、选择已经成熟的产品供应商,不要自己造轮子。

2、将 VPN 部署在办公室,办公室内的服务器设置静态 IP,做好访问控制,只允许在办公室或者在家里通过 VPN 来访问服务器的 22 端口,而不是网络上的任何 IP 均可访问。

3、如果使用的是云主机,可以使用云 VPN 访问云主机的管理端口,这样办公室与云之间的通信都是加密了,还能降低对物理安全的需求,办公地点可以是任何可以上网的地方。

4、VPN 的认证方式要启用两步验证。

防病毒软件、防火墙

1、安全端点安全产品要确保支持所有笔记本电脑的操作系统,配置成自动更新,并发送邮件提醒。

2、工作电脑在初始化时就把防病毒软件安装上。

使用合适算法对用户密码进行处理后存储

由于不能保证数据库百分之百安全,保存用户密码的表可能会被黑客获取,由于用户使用同一个密码的情况很多,为了保护用户的密码不被还原,建议使用  bcrypt,PBKDF2 或带一个参数的 scrypt,不建议使用 md5 、 sha1  或不是专门为密码设计的算法,因为这样的方式很容易被破解。

物理安全

1、设置笔记本离开后最多 5 分钟休眠,并且需要密码才能再次打开,或者要求员工离开电脑之前锁定屏幕。

2、不要让陌生人接触到工作的电脑,物理渗透是最有效最快的方式。

3、提醒员工在离开时锁好门窗、并启动报警器。

4、办公室入口设置密码,使用密码可以进入办公室。

5、锁好机房。

云服务器安全

1、检查云防火墙的配置,定时外部扫描以及内部审核配置是否生效,是否有漏掉的情况。

2、设置一个安全邮箱并公开你的 OpenPGP 的公钥,供安全专家在发现安全问题的时候及时反馈。

第三阶段:为大众服务、有了企业客户

认证合规

1、在进行大客户销售的时候需要提供认证合规的报告,这时不用着急,首先找一个能够处理会议、文档和懂技术的员工。

2、招标一个做等级保护的第三方机构,根据认证相关标准准备相关材料,购买安全产品,以满足等保合规的要求,并持续整改。

3、认证的很大部分是关于公司各部分的流程和过程文档,这些文档可以共享在内部的 wiki 平台,把它当作新员工的入职材料来写,并保持更新。

开发安全

1、当开发人员的权限被回收之后,会让他感觉不被信任,还会在工作中感觉束手束脚。

2、不是每个人都能做决策,开发者通常不会反对,只是不明白做给谁看,可以把安全需求落实到具体客户上。

3、对于常见任务且需要高权限的操作,考虑自动化流程,例如:Jenkins 任务,所有开发人员都可以操作。

4、管理员尽量不使用管理账号进行操作,能自动化就用自动话完成。

5、定义一个流程,为特定组件特定员工在特定时间内提供管理员权限,并设置日志记录跟踪的流程。在某些情况下,开发人员需要两天的管理员权限以便加快开发新组件或自动执行重复性任务。

变更管理

对每一个影响生产的变化都要做记录,方便检查故障,以及及时恢复系统可用性。

单点登录

1、随着员工以及内部系统的指数增长,内部系统的账号密码管理问题随之而来,在人员变动的时候更是非常麻烦,除了管理员密码,其他所有 SaaS 应用程序都应该使用统一的身份认证管理。

2、可以使用 OAuth 或 SAML 协议,存储用户信息使用 ldap 或 radiu s

3、认证的过程可以使用双因子认证,增加认证的安全性。

物理安全

1、报警器定时启动,防止员工忘记。

2、办公室入口安装摄像头。

3、使用基于芯片的门禁系统来替换使用密码的锁。

第四阶段:签到大客户或快速发展

客户用户管理

有许多身份及服务的供应商提供登录和密码管理服务,他们在客户密码管理方面可能比我们自己做的好。

他们还提供自助服务和 api 来进行授权、设置密码策略、找回密码等。

敏感数据泄漏

数据泄漏造成的业务损失和赔偿的财务影响可能导致创业公司破产:

1、在安全培训时向员工解释什么是私人信息,以及在组织里如何处理它。

2、向员工解释有意泄漏数据和不慎泄漏数据的区别,在发生数据泄漏的时候及时反馈以便用最少的代价解决问题。

3、在发布公开信息的时候,要将个人信息从数据中剔除,来减少数据泄漏的潜在风险。

在不同的场合使用正常的工具来防止数据泄漏:

1、工作时使用远程桌面,数据保存在远程而不是本地计算机。

2、使用浏览器隔离技术,通过远程服务器中转浏览的信息。

3、在员工的工作设备上安装数据防泄漏监控工具,配置对特定数据类型进行监控。

4、使用移动设备管理系统来监控或管理员工笔记本或移动设备上的应用程序授权配置或操作系统设置(屏幕锁定/加密、VPN 等)。

5、收集保护所有身份认证和授权过程留下的数据,以被法庭调查和数据取证。

6、对于冷数据,使用应用级加密,对数据使用的磁盘和网络加密。

web 服务安全

1、根据 OWASP Top 10 来对代码进行安全测试。

2、使用 WAF 和 DDoS 缓解服务。

3、在外部使用 web 漏洞扫描器,定期扫描,来防止一些初级黑客。

4、在内部使用漏洞扫描器定期扫描,来预防内网被黑客入侵之后的横向攻击,造成更大的破坏。

5、使用渗透测试服务以及开设漏洞奖励计划,吸引更多的白帽子对企业外部服务做渗透,提交安全报告。

6、定期升级第三方依赖库。

7、使用源代码扫描工具,从源代码中发现安全问题。

数据备份

对关键数据进行备份,及时备份和还原都需要时间:

1、确保备份都是自动、持续的,并覆盖所有的数据集,以防止数据丢失。

2、确保备份到不同的账户,以防止人为错误或恶意删除。

3、确保备份都不同的数据机房,防止天灾导致的数据丢失。

4、有些甚至使用不同的云服务商。

5、并不是所有数据对公司来说都至关重要,如果备份的成本过高,可以从关键数据开始。

6、确保恢复的过程有详细的记录和测试,你并不想备份的数据无法恢复吧?

数据泄漏应急

1、启用所有云服务的日志,并收集日志进行保存,保存周期最少 1 年,在发生事件的时候,可以有据可查。

2、制定事件应对计划,与律师事务所和会计事务所合作,因为他们有这样的经验,可以快速制定计划。

第五阶段:上市公司

在有了明确的业务需求和可靠的安全预算时,可以寻找适应组织的安全主管(安全 VP 或 CISO),这个过程会比较慢,因为,第一个阶段要求的技术技能比较高,而且还要分担一些 CEO/CTO 的职责,比如参与销售周期,签署官方公司文件。

构架威胁模型

威胁模型是你可以用来决定对一个安全措施投资是否合理的经验法则。

各种考虑

1、公司发展壮大时,你的攻击面以及对你的攻击动机越来越大,那么你在安全方面的预算也要随之增长,这笔投资可以向投资者展示你是在认真做安全的。

2、对于企业的安全问题,要先解决最大的漏洞,因为攻击者会先找能够造成最大危害且最容易得手的漏洞,也就是先要不足短板。

3、一些来自客户的担忧和合规性的要求,并不一定是你的风险,比如你所使用的云服务商可能获取你的企业数据。

风险管理

对一些潜在的业务风险,作出有依据的猜测,这是一个例子:

下一个阶段,应对所有威胁的防御技术,如下表:

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2019-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券