网络安全的状况:
首先不知道你是否还记得 2017 年 9 月美国知名征信公司 Equifax 的数据泄露事件,这事导致了 1.45 亿美国居民个人隐私信息被泄露。受事件影响,Equifax 公司市值瞬间就蒸发了 30 亿美元,最后还赔偿给用户 4.25 亿美元,可谓损失惨重。后来,Equifax 公司复盘了安全事故的原因,发现这个事故的罪魁祸首,居然是一个早已被披露出来的安全漏洞,叫作 Apache Struts,真是让人哭笑不得。因此,我们在追求开发效率的同时,一定要把“安全”这俩字“放在心上”,其次,从公司的角度来说,安全同样是不可或缺的一环。任何一家公司都会存在安全的刚需问题,肯定需要有人来解决它。但是,公司招人组建安全团队,需要投入较大的成本。而这部分安全的成本,很多时候并不产生直接的收益。因此,对很多公司来说,业务都没成熟,就去考虑安全,是不合算的。这也就产生了一种现状:小公司没有安全,大公司都在“补”安全。
对于小公司没有安全,这话太有感触了!曾在一个小公司做压力测试,通过抓包软件分析业务时,发现用户名和密码竟然没有加密就在互联网上传输。赶紧反映,赶紧加密。我一直担心这个软件的安全性呀!但是我对安全也没有什么更深的了解,只是在网上杂七杂八地看,希望能了解基本的安全知识,扩展安全知识的宽度,掌握安全规划,为开发和管理人员提供思路,但现实往往没这么简单。
从安全发展角度上来讲,这种前期不重视安全,后期再补安全的做法,是很不利的。一方面,在发展前期留下了极大的安全隐患,公司可能在一次攻击后就彻底垮台了。另一方面,后期补安全,会因为安全去改动已经发展成熟的业务,导致安全和业务产生冲突,从而阻碍安全发展。
企业信息安全由安全技术架构、安全流程制度和安全人员(意识)组成,相辅相成,光买产品堆砌无法达到很好的安全防护效果,因为安全在于建设更在于运营。运营既有技术层面的分析处置,也有流程制度方面的检查和规范。总的来说靠技术实现安全太难,从意识源头开始会事倍功半,如普通员工的安全意识,系统管理员的安全意识,开发人员的安全意识。当安全人人有责的意识深入人心,再辅以技术(安全产品,安全技巧),大部分的安全问题都能规避了。
什么是网络安全?
当你所在的企业内网被入侵,数据被窃取之后,你也许能知道,是某个业务漏洞导致黑客能够进入内网,但你是否意识到,数据安全保护机制上同样产生了问题?类似这种的问题有很多。当我们遇到某一个特定的攻击或者安全问题时,往往看到的都是表象的影响,而能否找到根本原因并进行修复,才是安全投入的关键。
任何应用最本质的东西其实都是数据。用户使用产品的过程,就是在和企业进行数据交换的过程。比如,用户在使用微博时,或是将数据写入到微博(发博、评论、点赞等)中,或是从微博中获取数据(刷 feed、热门流);用户在使用支付宝进行交易时,则是将资产以数据的形式进行转移。
因此,从另一个层面来说,安全的本质就是保护数据被合法地使用。怎么才叫“被合法地使用”呢?我们可以从机密性、完整性、可用性这 3 个方面具体来看。这也是在安全领域内最为基础的 3 个安全原则。
机密性(Confidentiality)、完整性(Integrity)、可用性(Availability),我们可以简称为 CIA 三元组,是安全的基本原则。理论上来说,一个完整的安全保障体系,应该充分考虑到所有的 CIA 原则。当然,实际情况中,我们会根据企业需求,对安全在这三个方向上的投入做取舍。我们平时在评判一个企业的安全水平时,也会分别从这三个方向进行考量。
机密性:我们先来看机密性。机密性用一句话来说就是,确保数据只被授权的主体访问,不被任何未授权的主体访问。 简单用一个词总结就是“不可见”。如何理解这个定义呢?举个例子,你不会允许陌生人查看你的个人隐私信息,但你可能会允许父母、朋友查看部分信息。同样的,对于应用中的数据,比如微信的朋友圈,你可以允许好友查看三天内的数据,但不允许好友查看三天前的数据。这些都是机密性在日常生活中的表现。那么,针对机密性的攻击,都有哪些形式呢?在更多的时候,我们面临的机密性攻击,其实是人为原因导致的疏忽,也就是错误使用访问控制机制或数据保护技术。比如,因为权限滥用,导致开发人员拥有敏感数据的无限制访问权限;因为弱密钥,导致加密被破解;甚至显示器上的数据被别有用心的人窥探。所以说,当前机密性保护的要点是引导人去做正确的事情,避免这类看似低级、实则普遍的漏洞发生。机密性强调的是数据的“不可见”,但这并不代表数据是正确的。比如,将一个“True”存成了“False”,这就不是机密性要考虑的事了,而这种错误的存储,则是完整性需要考虑的事情。
完整性:完整性就是确保数据只被授权的主体进行授权的修改,简单来说,就是“不可改”。所谓“授权的修改”,就是对主体可进行的操作进行进一步的限制。比如,只能追加数据的主体无法执行删除的操作。以个人隐私信息为例,法律允许学校或者公司在个人档案内追加信息,但不能做任何修改。又或者说,你自己发的朋友圈,不希望被其他人进行修改。这些都是完整性的典型表现。针对完整性的攻击也和机密性一样,更多的是由于人为原因导致的疏忽。除了黑客本身对数据的恶意篡改,已授权的主体也可能对数据完整性产生破坏,比如员工意外地误删除数据、程序 bug 导致错误数据被写入、正常用户的一些无效输入等。
可用性:可用性应该是我们最熟悉的原则。因为它不仅仅是安全方向上的问题,也是工程上面临的主要挑战。用一句话来说就是,可用性就是确保数据能够被授权的主体访问到,简单来说,就是“可读”。但事实上,可用性往往没有被划分到安全的责任中去,因为对于大部分企业来说,开发是最受到重视的,而开发会比安全首先去考虑可用性的问题。举个典型的例子,面对高峰期的集中用户访问,如何保障用户能够正常地获取数据(“双 11”购物或者 DDoS 攻击等),你可以看到大量的研发人员对这个问题进行探讨和分享,但这其实都属于安全在可用性上的考量范围。
在运维层面上,有很多技术在为可用性提供支撑,比如,在基础建设上的机房建设(如何在断电、高温、火灾等情况下保护设备)、多地冗余,以及在服务中的备份、资源冗余等。
在研发层面上,如何降低响应延迟、如何处理海量数据、如何在峰值进行扩容等,这些问题其实都是在可用性上的挑战。
在攻击的角度上,黑客也会对可用性发起攻击,也就是我们常说的 DoS(Denial of Service,拒绝服务)攻击。比如,通过发送大量的流量来占满带宽资源。
我们应该如何学习网络安全呢?
你可能会存在这样的顾虑:安全可能需要花上几年时间学习和实践才能小有所成,时间成本是否有点高呢?确实,想要真正做好安全,时间的磨砺是不可或缺的。但是,这并不意味着你需要几年后再去从事安全相关的工作。正如上面所说的,公司初期的安全需求相对简单。因此,你完全可以快速入门,然后投入到公司的安全需求中去。
那么,学习安全是否门槛很高、难度很深呢?学习安全的过程中,你可能需要懂前端、懂后端、懂操作系统、懂网络。需要懂的知识非常多,但幸运的是,对于安全入门来说,宽度比深度更重要。因此,对于这些基础知识,深刻理解自然更好,但是懂些皮毛也足够了。在后续的文章中,我也会由浅入深,对安全需要的基础知识进行讲解。
这里,我为你准备了一张安全攻防知识全景图,包含你需要掌握的所有相关知识。建议你最好保存下来,在之后的学习过程中,有针对性地去训练自己。
写在最后
通常来说,在互联网企业发展初期,可用性的优先级较高。如果涉及金钱相关的业务,则完整性的优先级更高;而涉及个人隐私相关的业务,则保密性的优先级更高。对于大部分企业而言,可用性在初期受到的挑战更多,则越发展越稳定,后期在可用性上的投入会逐渐降低。而完整性和机密性,会随着业务的发展,重要性越来越高,在企业的安全投入中,占比会越来越大。
在实际公司中,网络安全的人力资源投入,资源投入,需要取得老板的认可还是比较困难的,那有没有什么办法给老板洗脑,增加网络安全防护意识呢?最有效的办法是,挨了打就知道疼了。被入侵过,被薅几把羊毛,领导就开始重视了。即使目前没人搞你,我觉得也可以在允许范围内,做一次演练,把问题暴露出来,推动起来会好做一些。
另外当你不知道学习什么的时候,比如你是某乙方公司做安全运营的,可以考虑按需分配精力是最直接有效的方法。不知道学啥的时候,我认为首先需要明确未来的发展方向或者职业目标是什么。确定了之后,可以去列举出来对应的能力矩阵来,然后按照自己现状,找出薄弱点,进行补充学习。