企业安全建设是企业发展的必要任务,它会伴随业务发展的整个生命周期,并且它的必要性在业务发展壮大之后显得尤为突出。

我们的企业,在创业初期一般都不太会考虑安全建设。当公司发展到一定规模,业务线扩张,公司营收激增以至于被黑客觊觎的时候,公司领导者开始关注和重视安全,这是常态,它是由安全本身的属性决定的。当我们开始重视安全,试图着手做点什么的时候,本文中的观点可能会对你有所帮助。

企业安全建设是保障业务正常运行,保护用户数据不被窃取,保全企业资产的首要任务。

做安全建设一定是围绕:业务用户企业这三个方面来进行的。

保障业务正常运行

要保障业务正常运行,我们首先需要保证服务器的稳定。要保证服务器稳定,需要抗DDoS和防止被入侵。

抗击DDoS对于大多数公司来说都是一件特别奢侈的事情。过去的十几年,大多数公司可能会选择购买ADS设备,而现在有一部分公司会选择云上的解决方案。有点类似于购买保险,我们不确定一年会不会遭受一次DDoS攻击,但是如果遭受一次DDoS攻击给公司带来的损伤可能是灾难性的,所以我们需要抗DDoS。相对于抗DDoS来说反入侵的工作就十分复杂了。首先,需要在网络层部署防火墙防护,其次需要在主机层部署入侵检测和防病毒。另外,还需要对网站的做定期测试和扫描。最后,网络服务器、数据库服务器、中间层等软件版本需要及时地更新和打补丁,做到以上这些才能抵抗得住一般程度的脚本小子(脚本小子:指的是并没有太多的计算机和网络知识,只是能拿已经公开的漏洞利用工具或高度集成的自动化扫描工具进行攻击的人)。

保护用户数据不被窃取

一般来说,互联网公司主要的盈利来源就是用户,用户在体验业务时不可避免地会将自己的隐私数据上传到服务器,而公司也有义务保护用户的数据不被外部窃取。一些国内外非常知名的互联网公司曾经因为不慎泄漏的用户数据而面临几近破产的窘境。所以,保护用户数据是一件大事。(因为在上一个话题中已经提到了防止入侵,这里就不再赘述。)除了防止入侵之外,还需要防止内部人员买卖,还需要防止误操作等等情况的发生。

首先,我们看如何防止内部人员买卖。如果把用户数据从用户的客户端提交,到服务器逻辑处理,最后到储存在数据库中比做一条河流的话,这条河流所有流域都会覆盖相应的业务人员,这些人员就是审计的重点对象。另外用户数据必须加密,而且加密和存储应当由不同的人员来担任。在存储的工作上应当特别谨慎,这也是数据泄漏事件中最经常出问题的环节,数据的读取权限最理想的情况应该只分配给机器而不是人,因为人员会流动,从人性角度来看这个问题就变得相对不可控。

再来看一下如何防止误操作,“delete * from very_important where id=1 or 1=1”、“rm –rf /”等等这样的误操作我们先不去看背后是否有其他神秘力量驱使,假设真的是无知的运维或开发人员误操作带来的毁灭性灾难,我们应当如何防御。首先,数据库和重要的文件应当备份,这句话尽管大多数开发运维人员都谙熟于心,但是却鲜有人会去真的这样操作,不然也就不会有这么多“删库跑路”的事件发生了。所以,需要有相应的制度保证,并且需要有效监控。另外,划分清楚人员权限也可以在很大程度上避免此类事件,能够拥有“delete” 和 “rm”的角色我认为不应该是实习生,应该是企业内较少数的一部分人,拥有更高的权限意味着拥有更大的责任,一旦悲剧事件发生,必须要追查到底,而不是每次都找一个实习生来承担一切。对于托管在云平台的业务来说,定期保存镜像也是一个不错的选择,建议保存两份镜像并分两个服务器存放,毕竟我们不能总“把鸡蛋放在同一个篮子里”。

保全企业资产

企业是以盈利为目的的,企业的资产是企业得以维持的物质支柱。举个例子,有些企业的服务器存在某种通用型的漏洞被黑客攻击以后用来挖矿,管理者在不知情的情况下误以为服务器资源紧张,进行了扩容。由于平行扩容,服务器配置不变,运行的实例不变,还是存在一样的漏洞,这批服务器又被黑客拿下,继续挖矿。这样就相当于抱薪救火,薪不尽火不灭。服务器作为企业的资产需要被保护,而保护的方式就是反入侵,而反入侵的首要任务就是发现入侵。还有一些企业深受羊毛党的迫害,每年的利润有一大半都贡献给了薅羊毛的人,这就需要维护我们的业务安全,维护业务安全需要依靠一些成熟的安全产品,当然更需要我们的程序员写出逻辑严谨的代码,因为十几行存在逻辑漏洞的代码所导致的支付漏洞可以在一夜之间让这个企业彻底破产。

有很多企业的领导者都存在一个认识上的误区,他们认为安全像某币一样是一个炒作出来的概念,认为这个世界上有一批黑客,他们中一部分人专门研究漏洞,公开新的漏洞,另一部分人创办了安全公司,声称能帮助企业减缓和防御漏洞来挣钱。还有一部分人,去直接通过漏洞来挣钱。

首先,你要知道:“这个世界并不是因为有黑客才不安全,而是因为不安全才有了黑客。”

当你认同这个观点以后,企业安全建设就变得简单了。至少我们不是以一种抱怨的态度来面对这个问题的。就像有人会抱怨这个世界为什么不是物质极大丰富,为什么不能不劳而获一样,有人也在抱怨为什么互联网不是始终安全的,为什么我需要购买这么多的安全产品,购买这么多的安全服务。安全建设是常态,不建设安全才是特例

企业安全建设是指通过网络安全基础设施建设、人员安全意识培养、安全规范落地、内部审计等方面的定向投入,提升企业网络安全的整体防御能力和监控能力。

请原谅我给企业安全建设私自下了一个定义,但是我想至少这个定义能在未来5年内是相对正确的。

一、网络安全基础设施建设

这里提到了基础设施这个词,而且是网络安全的基础设施。但是基础设施并不一定都是硬件,还包括软件,甚至是安全服务。我们先来看一下现在的常见的网络安全基础设施有哪些:

十八年前是什么样呢?

也就是人们经常说的安全设备“老三样”。为什么安全发展这么快?为什么安全基础设施多了这么多呢?其实是安全技术进步了,检测和防御的手段变多了。那根本原因呢?其实是业务进化了。

我始终认为安全建设是伴随业务的一项工程,什么样的业务就需要匹配什么样的安全建设

我不会为了公司业绩而生硬地向一个仅用UDP发包的游戏公司推销WAF产品,因为场景不匹配。正如近年来移动端的兴起,也让提供移动APP加固解决方案的安全厂商收获了可观的市场一样,其他安全基础设施的存在也都依附于相应的业务需要。

我简要地来介绍一下这些安全产品:

1.防火墙

具有划分和隔离内网网段,设置在互联网开放的主机和端口,封堵恶意ip的流量等功能。

2.网络应用防火墙

简称WAF(Web Application Firewall),针对HTTP/HTTPS协议的流量进行协议解析,检测攻击并拦截攻击,同时记录攻击流量和来源。

3.入侵检测

简称IDS(Intrusion Detection Systems),检测攻击行为,查杀webshell、反弹shell、木马,检测内网端口扫描、弱口令爆破等疑似服务器权限被黑客夺取后发起的敏感行为,来发现入侵。

4.ADS(抗DDoS系统)

ADS(Anti-DDoS System),抗DDos系统,主要用来清洗DDos的攻击流量和防御CC攻击。

5.蜜罐系统

蜜罐(HoneyPot),通过在目标网络中预埋蜜罐,引诱攻击者进入蜜罐来发现攻击,同时在监控和掌握攻击者使用的攻击手法,追查攻击来源上起到一定的作用。是一种被动感知的入侵检测系统。

6.APT防御设备

APT防御设备,在浏览器下载,word、pdf、ppt文档打开,邮箱附件下载,U盘自动播放等APT常见的攻击面上监控,在0day漏洞利用(exploit)攻击链上进行狙击,检测和防御APT攻击。

7.流量分析

流量分析系统,从网络流量中捕获异常发现数据偷取、反弹shell、webshell上传等攻击行为。

8.威胁情报

威胁情报系统,通过订阅安全博客、CVE漏洞库、微博等情报来源以及搜索引擎爬取进行情报监控,第一时间获取情报。当系统使用的软件版本受到最新公开漏洞影响时,可以快速响应,修复漏洞。

9.扫描器(企业安全巡检)

扫描器,现在也叫企业安全巡检系统,可以定期轮询扫描企业全量的线上业务。扫描方法集成了已公开的安全漏洞的POC(POC:指的是漏洞的验证程序或代码,通过判断提交返回结果可快速判断漏洞是否存在)和常见web漏洞(例如:SQL注入、XSS)检测引擎。

除了上述的通用安全产品之外,还有一些比较有针对性的安全产品和工作。

1. 移动APP加固系统

针对移动APP为主的业务提供加固方案,例如:代码混淆、加壳、数据加密等,主要是Android和IOS客户端。

2.业务安全防护产品

防止外部黑客恶意爬取网站数据,防止机器人自动操作完成网站悬赏任务,防止薅羊毛、业务刷单等。

3.代码审计

代码审计有服务也有产品,这里是指提供代码审计功能的产品,可以扫描业务代码,输出安全报告,开发人员可根据漏洞详情修补漏洞。

4.应急响应中心

应急响应中心,简称SRC(Security Response Center),并非安全产品,而是需要建设的一部分工作,公司设立应急响应中心可通过悬赏的方式吸引白帽子(白帽子:在安全界是指愿意将漏洞报告给厂商的网络安全爱好者)。一定程度上可以减缓企业内部漏洞被外部恶意利用,同时还可以收集威胁情报,快速响应和处理安全突发事件。

相比于安全产品,安全服务也同样重要。有相当大一部分工作,至少在目前这个安全发展的阶段,是无法产品化的。有人经常会将渗透测试和漏洞扫描做对比,认为一款好的扫描软件可以完全代替人工测试,这个观点是错误的。虽然漏洞扫描和渗透测试都是通过模拟黑客攻击的方式站在攻击者视角发现现有系统中的安全问题,但是人工智能还并没有完全普及,要想写出一款可以自动做渗透测试的扫描器比写出Alphago还要艰难得多。所以,扫描器无法适配所有的网络环境,扫描器的开发人员的安全经验也无法覆盖所有的业务场景,人工的渗透测试是不可或缺的。

我们接下来简要介绍一下常见的安全服务:

1. 渗透测试

渗透测试,以模拟黑客攻击的方式进行黑盒测试,重点在于全量测试线上业务,帮助企业发现系统中的安全隐患。

2. 代码审计

代码审计,通过对程序或服务的源代码的人工观察,发现安全漏洞和业务逻辑漏洞,也叫白盒审计。

3. 移动APP测试

测试IOS和Android客户端的安全性,包括客户端安全性:加壳强度、是否可被反编译,通信安全性,以及业务逻辑安全性,用户数据安全性等。

4. win/mac/linux客户端测试

测试windows、mac、linux客户端软件是否存在被反汇编、dll/so劫持等风险,测试通信安全性,业务逻辑安全性,用户数据安全性等。

5. 基线检查

观察服务器服务和软件等配置项,发现不安全配置或运行不安全版本的软件带来的风险。

6. 应急响应

当遭遇入侵事件时,协助企业排查入侵痕迹,分析入侵来源和漏洞成因,清理后门木马,修复系统漏洞。广义上的应急响应服务还包括与企业合作共建互联网安全生态,通过情报共享、漏洞预警等方式协助企业建设应急响应体系。

7. 安全扫描

提供安全扫描服务,使用扫描器对企业业务进行扫描,输出安全扫描报告,批量化自动化地快速发现较为明显的风险。

8. 安全培训

针对企业员工开展安全培训,提高员工安全意识。可以针对具体某种开发语言开展专项的编码规范培训,提高代码安全质量。也可以介绍安全攻防经验,增强开发运维人员的安全综合技能。

9. 红蓝对抗

以APT攻击者视角作为蓝军发起模拟攻击,攻击面包括企业员工,公司Wi-Fi等较为全面的攻击面,高度还原真实的APT攻击案例。通过红蓝对抗(攻防演练)可以暴露企业面临最严峻的安全风险,同时也可以对企业现有的安全防御体系(红军)进行验证,以检测入侵事件发现能力,内部安全管控能力。

10. 安全众测

借助众多白帽子的力量针对同一个目标系统在规定时间内进行漏洞悬赏测试,按漏洞风险等级给予第一个提交者一定的奖励。优势是按漏洞付费,性价比较高。但是由于是以漏洞为导向,白帽子很有可能在漏洞密度较高的区域花费大量时间,而导致测试不全面的问题。

前面概念性的内容特别多,我们需要问自己一个问题:如何落地?

再优秀的安全产品安全服务,再完美的安全解决方案都需要有可靠的落地措施,如果不能落地,那一切都成了空架子。

如何落地?回答这个问题需要先回答以下四个问题:

  • 我们的现状是怎样的?(N,now)
  • 对外提供的服务形式是怎样的?(S,service)
  • 面临的威胁是什么?(T,threat)
  • 同行业是怎么做的?(O,others)

管理学领域有一个很有名的SWOT分析,请原谅我这里生僻地造出了一个在安全行业的NSTO分析,通过NSTO分析可以快速定位我们的企业在安全建设方面的所处区间,找出接下来一到两年内安全建设的紧要工作。

例如我们根据当前企业现状整理出了这样的一张NSTO分析图:

通过这张图我们可以看出,我们提供的服务中,移动APP业务用户量最多,受到的威胁最大。而且,APP漏洞时有发生,已经影响到了公司的外部声誉和口碑。数据泄漏事件偶尔也时有发生,但不会像APP漏洞那么频繁。同行业中有相当一部分已经采购了WAF,但是采购ADS的比较少。

我们就可以做出决策:优先解决APP漏洞,可以寻求APP加固的安全服务。同时在产品采购方面,优先考虑采购WAF产品。

什么时候需要安全服务

下面将这个问题再拆解为四个问题:

  • 为什么需要借助外部力量?

内部力量是否能在短时间内完成指标?如果可以,完成的成本是多少?如果不行,我们需要在哪些方面借助外部提供安全服务?这是否是标准化的安全服务?安全服务带来的实际收益是否能解决企业安全建设遇到的痛点?从长远来看,这是合作还是工作量转移?合作是长久之计,如果是长期的工作量转移,说明企业需要设立相应的岗位来完成这部分工作。

  • 寻求安全服务供应商,我的诉求和预期是什么?

先思考一下我想要什么,再去问你有什么。这是商品价值交换的核心原则,因为商品需要满足用户的需要和心理预期。如果盲目挑选势必会造成预期不符而带来不愉快的服务体验。但是,如果当我们不清楚企业安全面临的困难如何解决时,可以向安全服务供应商寻求建议,一个成熟的安全服务供应商会给出满足客户企业现阶段安全建设急所的服务参考,而不是盲目地追逐眼前利益,轻易地推荐无效服务。

  • 如何对比安全服务质量?

甄选一家合适的安全服务供应商就像大学还未毕业的少女用每个月仅存的一些零花钱挑选自己喜欢的裙子,精挑细选,反复斟酌,货比三家。当然如果是不差钱的企业可以直接采购,甚至同时选择多家安全厂商一起来做项目。但是现实情况往往是我们的经费有限,如何选择一家更为可靠的合作伙伴。笔者建议在挑选时,不要只看这个家公司的客户案例,而更多地去关注这个安全供应商和其他客户合作之后带来的安全效益和口碑是怎样的,后续还有没有新的合作项目。假如有,后续再次选择那家服务商的原因是什么,这样可以更客观地评价一家安全服务供应商。

另外还有十分重要的一点,就是技术实力,技术实力虽然不是评价一家安全服务供应商的唯一标准,但却是最重要的,技术实力能够转化成优质服务的驱动力,能够自动地形成优胜劣汰,变成一家公司长久赖以发展的金字招牌。假如经费有限,不要盲目地去寻找安全经验不足的服务供应商,除非是为了做项目而做项目,我们花钱购买安全服务并不是买一个心安,而是要货真价实地获得安全收益和回报。换个角度来看,乙方的安全从业人员也应当从实际的安全回报角度来认识和实施每一个安全项目,更好地满足客户需要。

  • 内部团队能否吸收经验并形成沉淀?

通过安全服务项目,能否带动内部团队学习攻防经验也是十分重要的。一家优秀的安全服务供应商会在最终的交付物上附加一定的经验传递价值,会引导企业开发人员规避安全漏洞,学习攻防经验。安全培训服务是比较标准化的做法,通过安全培训可以定向地解决一类问题,也可以通用地普及网络安全的发展和漏洞原理方面的相关知识。

二、人员安全意识培养

安全问题归根结底是人的问题。

提高人员安全意识,是建设企业安全的长久之计。

因为系统会升级,新的业务代码会不断更迭,安全漏洞会层出不穷,而人才始终是企业最有价值的资本。提高员工安全意识会产生羊群效应,让缺乏安全意识的员工自动离群,一旦培养形成公司内部的安全文化对公司受益无穷,而且在未来很长一段时间内无形中减少开发人员可能会制造出的安全漏洞。

培养安全意识, 关键在于安全价值的认同。

当我们认识到一件事情是必要的,自然会认同这件事情的价值。而安全的价值在于它能保证业务稳定,用户放心,公司平稳运营。对于依赖互联网数据交换而取得收益的企业来说,维持网络的安全是必要的,我们首先需要认同这一点。围绕保障网络的安全性,企业内不同岗位员工的安全意识培养都可以在这一点上形成共识。

如何落地

  • 我们是否需要SDL?

SDL( Security Development Lifecycle),最早由微软提出,是一种软件开发全生命周期的安全流程规范。其中主要由以下7部分组成:

  • 安全培训(Training):推广安全编程意识
  • 需求分析(Requirements): 寻找安全嵌入的最优方式
  • 系统设计(Design): 威胁建模设计
  • 实现(Implementation): 安全开发
  • 验证(Verification): 黑/白盒测试
  • 发布(Release): 最后检查确认
  • 响应(Response):应急响应,bug跟踪解决

首先需要看业务发展所处的区间和开发人员是否来自同一个团队。如果已经具有成熟的业务线,并且代码更新频率并不是很高,这时做SDL是一件吃力而不讨好的事,还可能会加剧开发负担。如果开发团队来自多个不同团队,使用多种不同的语言,这时要做SDL,除非你拥有绝对的决心和毅力并且在公司拥有一定的决策权,否则可能会适得其反。最理想的情况就是公司处于新项目的拓展时期,开发团队的编码习惯高度统一,涉及的业务还处于需求设计阶段。这时使用SDL就如同顺水推舟,带来的收益也是事半功倍的。这里列举出最好和最坏的两种极端情况,当处于其他中间情况,就需要看当前企业所面临的安全威胁,企业在安全方面的倾斜度,以及安全管理者所拥有的资源和做SDL的决心,需量力而行。

  • 开发、运维人员如何学习攻防,需要学到什么程度?

我始终认为,开发和运维人员在安全方面的积累会以一当十地回报给企业整体的安全建设,而且会带给企业一种良好的安全氛围,形成良性循环。但是需要学习和认识到何种程度,是否需要人人都会挖漏洞甚至做安全研究?我认为是没有必要的,需要认识常见的漏洞,了解漏洞成因和修复方法,能做到这一点,至少在开发运维层面,90%的安全漏洞都是可以在上线前避免的。

  • 其他员工的安全意识如何提高?如何看到效果?

其他员工的安全意识的提高也非常重要,因为APT攻击最开始的突破口往往是一些非技术类的员工,在大多数攻击者眼里这是一个公司中较为脆弱的切入点,设法利用社会工程学收集一些信息,并使用钓鱼、水坑攻击等常见的APT攻击手法层层渗透。所以,其他员工的安全意识的提高需要做定期的培训和引导性宣传,通过APT演习来印证宣传的效果。比如可以在公司内部群发钓鱼邮件,在食堂角落散发U盘等方式,观察受攻击员工的比例,来检验员工的安全意识是否得到了明显的加强。

  • 我们对待威胁情报的重视程度是怎样的?

一个在安全方面做得比较好的公司,应当对每一份安全情报都视若珍宝。因为你永远不知道是否下一份威胁情报就被用来敲开了公司严防死守的大门。

在现在这个“免费”媒体的时代,我们获取到信息可能花费不了太多的成本,所以,有人就会认为从微博或者公众账号推送过来的一条威胁情报不足为奇,但往往就是这些不足为奇的威胁情报以它独有的方式制造了一件件轰动世界的安全大事件,比如:“心脏滴血”、“永恒之蓝”。

现在的安全情报五花八门,有时候连一个拥有多年安全经验的专家也无法鉴别其中的真伪。我们如何判断安全情报的可信度,如何判断情报中提到的受影响软件是否影响到公司的线上业务呢?首先,建议收集和分析情报的这个工作由专人负责,一个长期处理安全情报的人会首先从情报来源判断情报的可信度,而且重大的安全情报都会在微信群、QQ群讨论。判断受影响的情况,就需要预先收集和掌握公司的资产明细,线上业务使用的服务器软件版本等信息。对于公开了POC的安全情报,可以第一时间使用POC验证业务的受影响情况,发现受影响的业务应当立即处置和响应。

三、安全规范落地

人员的安全意识类似道德,而安全规范类似法律。

一个计划在安全方面有所建树的企业必须要把安全规范列入公司规章制度的一部分

1.安全规范制订

制订安全规范需要依据公司现有业务情况,和满足评审的需要综合考量。对于一个公司来说业务发展就是生存之道,如果安全规范束缚了公司业务发展,就适得其反了。在创业时期,应当使用较为宽松的安全规范,在涉及资金、用户数据方面做适当的限制。而在比较成熟的大公司,应该事无巨细,规范越明确越细致越好。同时对于一些需要通过评审认证的公司来说,规范制度还应当满足评审的需要,比如内部评审,等级保护评审等等。

2.安全规范普及

制定好的安全规范,还需要从上而下地推广,上行下效,有专职人员进行宣读和解释,而不是让它成为一纸空文,沉睡在大多数员工闻所未闻的角落。

3.监督与审计

设立安全审计内部岗位,并结合审计项设计自动化的审计上报工具。对于违规行为的监督应当是不间断自动化的。可以考虑在数据传输的通道进行埋点设防,当员工触犯安全规范时可自动记录并追查到人。

4.对于违规行为的处理

严格依据安全规范条款实施,遇到违反规定的情况应当严惩不贷。

四、内部审计

内部审计是企业安全的最后一道防线。

前面的措施都是用来防外部黑客,而内部审计是用来防止内部人员监守自盗。

我们相信所有员工的职业操守和劳动合同上的约束,但也保留对巨大诱惑下的人性弱点的怀疑。

1.用户隐私数据防泄漏审计

涉及可触碰到大规模用户隐私数据的人员应当进行严格的内部审计。被外部买通窃取用户隐私的事件已经数见不鲜,如何判断用户数据泄漏的渠道,我们可以埋设标记。

2.涉及到营收部门的财务审计

涉及到资金保管,设备采购等部门应当进行严格的内部审计。

3.源代码泄漏审计

对于一个互联网公司或主营互联网业务的部门来说源代码就是整个团队的价值核心,也是商业命脉。一个游戏的源代码失窃,就会造成私服泛滥,游戏开发人员的数年苦心创造都会毁于一旦。源代码审计是重中之重,所以,除了严格划分svn、git权限以外,需要审计可以接触到源代码的开发、运维人员。

4.内网信息外传审计

不少员工都会有过将内网信息直接截图分享到外部的经历,并且这种行为在多数场合也无法带来直接的损伤。但是内网信息相对较为敏感,内网信息对外的输送应当进行有效监控。一旦发现重要的数据泄漏,能够追查到人,并及时挽回损失。

5. 员工权限分配与回收审计

离职账号多次登录系统,形成“幽灵账号”,这些账号有些还拥有着操作资金的权限,我们应当对离职员工的账号进行权限回收。内部员工也应当做严格的权限划分,需要临时使用的权限应当申请和审批,分配的临时权限应当及时回收。同时,每位员工在操作时应当具有自己身份标识和操作保留记录,以便于事后追查。

以上愚见仅供参考,就像站在稻田旁边看插秧并不会觉得辛苦,当双脚踩在泥土里的时候才能体会其中的苦涩,“足蒸暑土气,背灼炎天光”。希望能对同样是为了建设更安全互联网的你有所帮助,有所启发。