前言
安全,长期以来是企业最容易忽视的关键点之一。安全问题发生前,存在感低;然而发生以后,损失却已经难以挽回。
「声网开发者创业讲堂 • 第四期丨创业团队如何保障产品业务的安全合规?」活动特别邀请白山云安全研发总监胡金涌,以「攻防视角下,初创企业安全实战经验分享」为题进行分享。
胡金涌拥有十年云安全产品研发经验,主持研发了 SCDN、抗 DDoS、云 WAF、SoC、零信任等安全产品,在攻防领域有丰富的经验。
本文从攻防的视角分享业务上线后可能遇到的常见攻击,并分享安全研发规范、上线前的安全巡检、上线后的安全防护等实战经验并给出一些安全建议。
本文基于胡金涌分享内容二次整理。
01 一些安全建设的误区
1、几个典型的安全误区
■图 1
首先给大家介绍一下安全建设常见的误区,如图 1 所示。
第一个误区是:大家普遍认为初创公司受到攻击的概率比较小,而安全总归是要花钱的,因此安全建设是不是能省就省,先放一边,保证项目上线。但其实黑客的攻击是没有差别的,攻击目标可能是大企业,也可能是小企业,所以我觉得初创企业一刚开始还是要有起码的安全建设意识。
第二个误区是:很多人认为只要安装了防火墙,并且买了安全服务,就可以高枕无忧了。这其实也是不对的,不管是防火墙,还是 WAF,或者其他的安全产品,其功能都是相对有限的,可能只针对一个点进行防护,但是安全建设是一个纵深范围非常深非常广的领域,单独依赖一两个安全产品,解决所有的安全问题可能也不是很现实。
第三个误区是:有企业认为行业没有损失就代表很安全,这其实也是不对的,可能有些攻击已经发生了,但我们都不知道,比如数据泄露、拖库等,这些安全隐患可能我们都没有感知到。
2、网络安全问题决定未来发展的天花板
其实因为不重视网络安全问题,很多知名企业受到重创。大家可能比较熟悉的 zoom 在美国上市,市值曾经也很高,但是曾经因为一些安全问题,导致股价下跌得比较厉害。Clubhouse 也是美国的一家公司,它在起初的发展是非常迅速的,但是也因为一些网络安全问题,导致后来的衰落。微盟也是因为内部的安全建设没有做好而出现了问题。
这可能不光是内部管理的规范问题,也是缺乏安全意识的问题。从某种程度上来说,网络安全问题可能就决定了未来发展的天花板。
3、安全建设的重要性和必要性
网络安全事件造成的影响是比较大的,特别是最近几年,国家对网络安全越来越重视,也发布了一系列的安全法规,明确了企业从业者的法律上责任,强调了安全建设的重要性跟必要性。很多公司重业务轻安全,可能起初没有问题,感觉安全好像无关紧要,当出现问题的时候,又感觉安全建设也没起到什么作用,但是这样的后果往往是比较惨重的。
所以初创企业一开始就要重视安全建设,虽然说安全建设是需要花钱的,但是起码可以先做一些高优先级的安全建设,建立安全基线。另外,《数据安全法》《个人信息保护法》《网络安全法》等政策法规,也明确了网络经营者要承担的责任,初创企业也是不例外的。
4、 常见的安全威胁
我今天主要是从两方面介绍常见的安全威胁,第一个是外部安全威胁,第二个就是内部安全威胁。外部安全威胁比较常见,比如 DDoS、CC 等,这些攻击其实在整个产业链中已经非常成熟了,从金主到接单的平台,整个链路是非常完整的,而且攻击成本非常低。因为现在网络越来越发达,很多设备的漏洞非常多,特别是物联网设备等,针对它们的攻击打法是比较多的,攻击面也比较广,破坏力非常强。但是防护就没那么容易,它存在严重的攻防不对等问题。
■图 2
图 2 所示为一个网络平台,只需 100 块钱就可以打一个攻击,这类攻击的成本很低,是我们面临的常见威胁。Web 安全也是一种常见的安全威胁,比如搜索注入、XSS、远程命令执行等。我从一份 2017 年到 2021 年的知名报告中摘取了一些数据,如图 3 所示,可以看到整个攻击类型的变化和攻击的趋势。
■图 3
第三种常见威胁就是 API 安全,其实现在基本上没有什么业务是不用 API 的,无论是 API 的数量,还是总体调用 API 的数量,都是越来越多的。所以 API 也会有很多的安全问题,比如水平越权、敏感数据暴露、代码漏洞、鉴权、配置错误以及业务逻辑缺陷等。第四种业务安全,比如我们在业务初期做活动推广的时候,就面临着薅羊毛的威胁,此外还有数据泄露、App 安全、主机安全、信息劫持、爬虫等。
02 业务防护方法和最佳实践
1、初创公司的安全建设
那么面对这些安全威胁,我们应该怎样防范呢?初创企业的安全建设与大公司的安全建设是非常不一样的,初创企业的各方面资源比较紧缺,不可能进行大规模的安全建设,但是仍要符合安全基线的要求。我主要从三个方向进行介绍。
首先,在进行开发的时候,我们要具备非常强的安全意识,对所有的外部输入都要做严格的校验,并且开发必须要规范,比如代码规范、发布规范、code review 规范。然后,在开发测试之后要做上线前的准备,此时要做安全防护的规划,针对工具类型进行相对应的安全规划。
不同的这个业务类型所面的攻击类型可能是不一样的,如果是游戏能力业务,那么遭遇 CC、DDoS 攻击的概率很高;如果是 App 业务,那么被逆向、被破解、被薅羊毛的概率就比较高。上线之前还要做安全巡检,比如是否存在弱密码、密钥有没有放到代码中等。最后,上线之后需要制定防护方案以及进行安全运营。
2、业务系统开发生命周期
从开发角度来说,整个的业务的开发周期从需求分析,然后到方案设计,再到开发、测试、上线、运营,其实每个环节都会涉及相应的安全的规范,具体如图 4 所示。
■图 4
比如在做需求分析阶段,可能要把安全因素考虑进来,做相关的需求分析调研;在方案设计阶段,要做相应的安全的设计,比如针对业务类型可能面临的攻击类型建模,对攻击面进行分析;开发阶段可能更重要的是开发规范;测试阶段可能要做相关的基安全基线的测试;上线阶段要做的是相关的安全检查、配置,以及相应的 checklist;上线运营阶段要对持续关注最新的安全漏洞,并作出相关漏洞的应对,这就是整个的这个业务开发周期。
■图 5
我们在开发阶段就要做很多的开发规范,如图 5 所示,数据库的访问规范、相关的文件操作,相关的代码规范、缓冲区、异常处理等都是我们要关注的。
图 6 所示为 CI/CD 的流程,我们在整个流程中都要引入相关的安全机制。
■图 6
3、 防护方法和最佳实践
我结合实践梳理了安全防护的方法,主要包括程序代码安全、代码仓库安全、密码安全、通讯安全、日志安全、组件使用安全、App 安全、安全测试等。因为安全领域涉及范围非常广,所以这里面只介绍对初创企业来说比较容易落地的几点。
1) 程序代码安全
程序代码安全是一个非常重要的环节,如图 8 所示,针对常见的 SQL 注入、XSS 漏洞、用户输入是否合法,我们都要做相应的校验,有时我们还要对输入长度、输入内容做转义等处理。另外,针对数据库相应的规范包括永远使用最低的权限操作数据库,机密信息存放不能放在程序代码中;针对特殊的场景也要做相关的处理、合理设置同源策略等都是我们在开发的时候要考虑到的。
2) 代码仓库安全
对初创企业来说,可能各方面的流程制度不是很规范,会将代码和工作文档传到公网上,比如 GitHub、GitLab,这就没有遵循很好的开源规范。另外,将用户名、密码、token 等敏感信息直接写在代码中非常容易造成信息泄露,也是不好的习惯。
3) 密码安全
密码安全是一个非常普遍的问题,程序面对暴力破解也要能做相应的防范,比如可以通过验证码或者双因子认证等机制来解决暴力破解问题。而且在整个的传输过程中要做加密链路,不允许使用弱密码。如果在开发过程中没有注意到这些问题,在上线之后可能会导致很大的风险。
4) 通信安全
刚才也提到,所有的数据传输应该尽可能做到端到端的加密,尤其是互联网外部数据传输一定要做 https 的加密传输,这也是一个最基础的安全保障。推荐大家一定要做这样的安全措施。
5) 日志安全
系统相关的所有访问都要保留痕迹,包括操作时间,操作人、IP、URL、访问内容等,我们都要做尽可能详细的记录。当然,其中可能也会考虑到企业自己的数据安全,有些信息是不记录的,这要满足相关的政策法规。记录数据的目的就是方便故障分析、安全事件的处理,甚至安全取证等。现在基本上对日志的要求是最低保存六个月,尤其是一些重要的日志数据。
6) 组件安全
在开发的过程中会大量使用第三方的各种开源组件。前段时间 Log4j 的漏洞影响方非常广,因为它是一个非常基础的日志组件,很多应用都会用到这个组件,Redis、MySQL 技术组件的使用面是非常广的,使用这些技术组件时要注意哪些内容呢?
第一个就是重点关注公网的端口暴露,非必要不要暴露在公网上,保持最低可见的范围。第二个就是不要使用默认的端口,比如 Redis 6379、MySQL 3306,应尽可能使用非标的端口来降低攻击的风险(这里只能是降低,但是不可能完全避免,但这是一个很有效的举措)。对于内部的应用,比如 ES、grafana 等,我们也要做相应的权限控制。如果是做认证,那么认证密码也要满足一定的条件,尽可能不要使用弱密码。
7) App 安全
很多初创企业都有自己的 App,对于它们来说,重要的密钥、token 等信息不能硬编码到 App 中。这样很容易被破解。同时,尽可能做加固,其实现在有很多商用的解决方案可以使用。App 在采集用户数据的时候也要保持最低的权限,而且要做好数据隐私,这部分其实也有很多相关的政策法规,国家现在对此的管控也非常严格。我们的 App 中还会大量使用第三方的 SDK,这些第三方 SDK 可能对我们不那么透明,因此也要关注第三方 SDK 的安全性。
8) 安全测试
在整个安全开发过程中,我们还要做好安全测试。首先是威胁建模,基于项目或者产品面临的威胁类型,根据不同的业务,要做好威胁的建模,并梳理攻击面来针对性地引入相关的安全测试。
我们刚才提到整个开发过程中要注意的规范,那么上线之前我们应该做哪些事情呢?如图 8 所示,HTTPS 证书是最低的要求,但在使用 HTTPS 证书时我们要注意监控证书的有效期,证书是有有效期的,特别是这种免费的证书,有效期可能只有几个月。一旦证书过期了,业务可能就会中断。
此外,我们还要做安全检测,检查程序漏洞、Web 应用漏洞等。当然安全检测的覆盖范畴比较广,有很多的商用方案,但是可能会比较贵。其实我们也可以使用一些免费开源的漏扫工具,通过这些工具也可以帮助我们扫描一些比较明显的问题。其实我们也可以在内部使用扫描器来做定期的扫描,尽早发现以避免攻击造成更大的破坏。
4、上线前的关注点
上线之前我们还要做好安全防护规划,这可能要跟项目经理或者产品 owner 做好沟通,确定安全防护方案。做安全防护是要花时间的,要确认是否会对整个项目计划和里程碑造成延期,这都是需要跟相关的管理方提前做好沟通的。我们还要明确安全防护涉及的安全和隐私质量的最低可接收级别。这都是我们上线之前需要做的准备工作。
5、推荐使用云防护
防护安全威胁要做的事情是非常多的,对初创企业来说,可能没有很多的资源支持,也没有专业的安全人员做相应的实施,所以比较可行的方法就是使用云防护,那使用云防护有什么好处呢?
首先云防护用起来比较方便,基本上是即开即用的,只要在平台上买好安全服务,做好相应的配置,然后通过 DNS 引流的方式可以把流量直接接过来就可以。而且云防护一般是按需付费的,所以对初创的企业来说成本是非常容易控制的。
此外,除了做防护之外,云防护普遍还能提供加速,比如 WAF、SCDN,除了防护之外,还提供静态加速,降低回源带宽,提升访问速度。云防护的资源可以弹性扩展,这对初创公司也是非常友好的。
6、如何进行云防护的产品选型
但是在使用云防护的时候也要注意很多问题,其实我们的很多客户在使用的过程中体验并不好,这不是说我们的产品不好,而是没有用对,怎么样做安全产品的选型呢?其实现在各种各样的云防护产品非常多,做产品选型可能要注意以下几个方面。
第一个是产品能力,这是我们最看重的,要具备针对常见攻击的防控能力,还要看节点数量,因为节点数量越多,就能满足就近接入,从而有更好的网络速度。产品价格也是初创企业比较敏感的,要尽可能选价格比较弹性的产品。
第二个就是防护设置,安全产品尤其是云防护,虽然使用非常灵活,但是如果用不好,防护效果也不会好。所以我们在使用云防护的时候要设置好相关的策略,策略跟业务是强相关的,API 业务跟网站业务的访问策略是完全不一样的,很多 API 可能没有办法做人机校验,浏览器可能通过输入验证码的方式就可以。我们还要做业务特征的学习,云防护的能力是比较强的,但是如果事先根据业务特征的流量模型来做分析,可能防护效果更好。
而且在业务接入的初期,推荐先使用观察模式,这样可能它会记录下认为的攻击行为,但是这并不会阻断业务,防护模式就会相对比较严格。所以在开始上线的初期,我们还是要做好业务的观察,从而避免误防。然后在攻击的时候,我们也可以做相关的告警,这样我们就可以第一时间接收到攻击的发生。我们还要了解云厂商在极端攻击下的处置措施,虽然云厂商的防护能力很强,但毕竟也不是无限的,如果超出了防护能力会如何处理,我们要事先了解清楚。我们使用这个防护的时候还要做一些安全预案,做好安全的底线。
第三个是就是安全服务,业务面对攻击时需要云厂商及时做出反馈跟响应。现在大部分云厂商是采用工单的方式,我们也需要去了解具体的响应速度,有的是人工服务,人工服务也是有时间限制的,这都需要做一些了解。
第四个就是源站保护。如果我们使用云防护,但是源站暴露了,那么黑客完全可以绕过云防,直接攻击源站,所以这是在使用云防护时尤其要注意的一点,要做好安全巡检,确保源站不暴露。同时在防护过程中,我们要回源,做黑名单设置,只允许防护节点,这样可以最大程度地保证安全性。我们的云服务比较弹性,还要注意避免忽略服务到期,导致失去防护。这是使用云防护过程中的一些小细节。
7、云防护 tips:我的源 IP 是如何暴露的?
刚才我们提到了源站,其实很多初创企业因为没有太多的经验,导致虽然接入了云防护,但实际上并没有取到防护的效果,因为 IP 暴露了,黑客已经获取了 IP,即使更换 IP 他也能找到。实际上有非常多的途径能暴露 IP,比如过去可能没有接入云防护,后面虽然接入了,但是过去的 DNS 记录是直接指向源站的,而很多平台可以查到历史 DNS 解析记录。
所以如果 DNS 解析记录直接指向源站,就有暴露的风险。
第二种是子域名,这个也很普遍,现在有很多的子域名,包括静态域名、动态域名、API 域名可能是独立的域名,可能接入的是动态域名或者 API 域名,而静态域名可能还是指向源站的,这可能也会导致源站泄漏也有被攻击的风险。
第三种是有些网站做得不是很好,能直接展示或接口展示源站信息。第四种是使用的安全产品可能回源,这也会也会暴露 IP。
另外,邮箱 MX 记录、邮件服务、内部泄露、网络空间的搜索引擎也会导致源 IP 暴露,现在网络空间搜索引擎能力是其实非常强的,很多的业务资产都能检索到,可以通过关联分析找到源站。其实各种方法也是非常多的,所以我们在做业务开发或者上线的时候一定要多加去注意,避免源站被暴露。因为一旦源站暴露,云防护基本上就失去作用了。
8、上线后的关注点
刚才提到上线之前的开发和业务规划,那么上线之后我们要关注哪些指标呢?首先就是关注防护情况,如果发生攻击,我们要做数据分析。然后要进行安全巡检,有条件的话还可以做攻击应急和攻击演练。最后就是要关注安全圈,刚才提到很多软件项目会大量使用第三方组件,如果关注安全圈的信息,就可以及时了解安全漏洞情况,进而做及时的响应,修复漏洞。
03 初创企业的安全规范建设
前面介绍了面临外部威胁的防护,其实企业内部自身的安全建设也是非常重要的,接下来分享一下初创企业应该从哪些重点方向来建立安全基线。
1、初创公司的安全规范建设
■图 7
初创公司的安全规范建设包括图 7 所示的几个方面。第一个是要做好安全培训,安全培训要从刚开始就在整个公司进行,要让大家建立安全意识,形成安全文化,具体来说包括行为安全、账密安全、安全意识和开发规范。
第二个是流程制度。流程制度可能跟安全没有直接的关系,但是也对安全有一定的影响。比如变更管理、权限管控、网络管理、设备管理、安全审计。第三个是数据安全,主要包括个人隐私、数据备份、数据脱敏。
2、布局零信任
传统的安全其实还是存在很多的问题,随着企业的转型,现在很难适应现阶段新的发展趋势。特别是远程办公,所以零信任很可能成为未来的新趋势。如果初创企业从一开始就布局零信任,基于零信任的最佳实践构建安全体系,其实是一件很好的事情。那么零信任的理念是什么呢?它的理念很简单,如图 8 所示,首先是身份的认证和授权。
■图 8
其次,对所有资源访问的权限是动态的,要基于整体的上下文来做这样相关的动态权限控制。然后在分配访问权限的时候,遵循最低权限的原则,并且对于重要的应用还可以做多因素的身份认证。这是零信任的几个重要的理念。所以如果我们一开始就能布局零信任,比如建立一个统一的身份管理、统一的权限管理、统一的应用管控,遵循零信任的理念进行安全建设,我觉得是一个很好的开始。
布局零信任其实也有几个技巧,如图 10 所示。第一个是我们要以层为单位做整体性思考,因为零信任涉及的范围比较广,所以我们要遵循最佳实践,按照分层的方式做整体的考量。第二个是尽可能使用多因素认证,然后是做单点登录,就是前面提到的一个企业中可能有很多平台和各种各样的系统,如果能打通单点登录,就可以简化使用。
另外,因为零信任的原则是不信任任何人,不管员工是内部还是外部的,都要做相关的权限控制和身份认证,所以是没有内外部区分的。同时,实施零信任需要全公司自上而下的整个推动,所以高层也需要配合,全员参与过渡。
最后零信任中其实有一些重要的细节,传统安全过渡到零信任附加了很多的内容,整个防护理念完全不一样,在这个过程中要尽可能避免对工作效率的影响,实现平滑过渡。所以如果有条件的话,建议初创公司从一开始就去做零信任设计,这样可以解决一些很长远的问题。
关于「声网开发者创业讲堂」
当下是一个人人可创业的时代,对技术人来说,更是一个创业友好的时代。如果你懂技术,会比其他人更容易将自己的创业想法和梦想付诸实践。
但创业意味着要从 0 到 1,意味着要持续的创造和创新,意味着创业者和团队需要不断的成长和突破。只有这样才能打造出满足市场需求的、有价值的产品,逐渐形成企业的优势和壁垒,成长为一家成熟的企业。
声网关注有创新能力、开发能力和创业意向的开发者,并希望为开发者提供相应的支持和服务。为此,我们推出了「声网开发者创业讲堂」系列创业分享,以便为大家在成长和创业路上提供更多的帮助。