欢迎关注原创公众号:
本系列文章共分为8篇,主要分享作者自身在企业网络安全建设和运维保障过程中的经验总结,包括网络安全管理、网络安全架构、网络安全技术以及安全实践等,力求全方位阐述企业在网路安全中的方方面面,为企业网络安全建设提供实践指南。
网络安全保护的核心对象是应用系统,探究应用系统的生命周期,从应用的设计、开发和测试到应用的上线、运营和下线,全流程介入,经网络安全的工作提前进行,做到软件工程的前面,最大程度的降低和减少应用系统的风险漏洞。
对于网络安全全生命周期的阐述,实际上早期的SDL安全开发生命周期和新近的DevSecOPS都是差不多的思想。
安全开发生命周期(SDL)即Security Development Lifecycle,是一个帮助开发人员构建更安全的软件和解决安全合规要求的同时降低开发成本的软件开发过程。 自2004年起,微软将SDL作为全公司的计划和强制政策,SDL的核心理念就是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度。安全开发生命周期 (SDL)是侧重于软件开发的安全保证过程,旨在开发出安全的软件应用。简单来说,SDL是微软提出的从安全角度指导软件开发过程的管理模式,在传统软件开发生命周期 (SDLC) 的各个阶段增加了一些必要的安全活动,软件开发的不同阶段所执行的安全活动也不同,每个活动就算单独执行也都能对软件安全起到一定作用。当然缺少特定的安全活动也会对软件的安全性带来影响。
上述图片非原创,微软SDL安全活动简图
DevSecOps相比SDL,其所关注的周期领域较短一些,主要聚焦DevOps持续交付过程中增加Sec安全这一缓解,是对DevOps的一个补充。我们知道,DevOps 不仅仅涉及开发和运维团队,其目的是为了实现快速的交付高质量的软件,而如果想充分发挥出 DevOps 的敏捷性和响应力,就必须将IT 安全防护融入应用的整个生命周期中。在 DevOps 协作框架下,安全防护是整个 IT 团队的共同责任,需要贯穿至整个生命周期的每一个环节。基于这一理念,因此催生出了"DevSecOps"一词,强调必须为 DevOps 计划打下扎实的安全基础。DevSecOps意味着从一开始就要考虑应用和基础架构的安全性;同时还要让某些安全网关实现自动化,以防止 DevOps 工作流程变慢。选择合适的工具来持续集成安全防护(比如在集成开发环境(IDE)中集成安全防护功能)有助于实现这些目标。但是高效的 DevOps 安防需要的不仅是新工具。它更需要整个公司实现 DevOps 文化变革,从而尽早集成安全团队的工作。
上述图片非原创,来自FreeBuff,一个很不错的安全网站
实际上,不管是SDL还是DevSecOps,都是强调在应用系统或软件的全生命周期中引入网络安全。接下来,就应用系统的全生命周期如何进行网络安全介入,进行简单介绍。
在应用系统的设计阶段,产品经理、系统分析师等相关人员应该具有网络安全意识。在产品的功能设计能增加安全防护功能,如验证码、密码失败N次用户锁定、图片防盗等等,同时还应在业务流程、业务逻辑等业务层面,进行安全设计,避免业务漏洞造成安全损失。对于安全设计这一块,可以参考下述网络安全域章节中业务安全域备份的描述。
在研发阶段,主要总代码方面进行安全介入,包括制定和实施安全编码规范,避免使用不安全的类、不安全的依赖、未知的第三方引入等,同时针对编码规范,对代码进行动静态审计和走查,确保代码的规范性、安全性。
对于安全编码规范,可以参考OWASP安全编码指南。
下载地址:http://www.owasp.org.cn/owasp-project/secure-coding
可以以此编码规范为基础,编写相应的编码规范,如java编码规范、Sql书写规范、js编写规范等。通过安全、规范编码,并且配套代码审计走查,在安全研发阶段,规避80%甚至以上的系统漏洞。
在测试阶段进行安全介入应该是整个应用系统最枯燥且最有意思的阶段,尤其是针对福尔摩斯迷或柯南迷们的IT工程师来说。枯燥是因为需要不断的利用测试工具、测试技巧进行挖洞,挖不出来的时候的,真的很枯燥、郁闷;有意思是指当测试出一个安全漏洞的时候,那种兴奋的满足感,难以言表。
宽泛来说,压力测试、并发测试、性能跟漏洞测试同属于安全测试的范畴:通过压力测试、并发测试和性能测试明确应用系统的压力临界值、并发承受值和性能曲线,以此可以作为系统监控的重要指标,同时也是弹性伸缩的重要触发值;通过漏洞测试,深挖应用系统漏洞,及时整改补救,避免漏洞上线。通过安全测试保障应用系统的安全和稳定。
常用的安全测试工具和手段非常多。安全测试的主体可以是渗透工程师、第三方工程师等,安全测试的工具手段也有很多商业设备也有开源框架,常用的有:Burpsuite、nmap、sqlmap等。通过测试工具和安全测试,不只可以测试应用系统本身,还可以评估系统运行的环境如操作系统、中间件、数据库、网络等的安全状况进行测试和评估,进而保证应用本身和其运行环境整体上的大致安全(网络安全,难有100%安全)。
业务安全测试也是安全测试阶段的重要一环,往往也比较容易忽视。业务安全测试要求比较高,除了对测试者的安全测试技能要求比较高外,还需测试者对所测应用系统的业务理解要很深。此之,较难,在企业内部培养专业的人员。
运维阶段安全介入更多强调的是安全运维、合规运维,根据运行标准流程,进行运维保障工作。包括应用系统上线是应参与上线风险评估、根据应用系统制定相应的应急演练方案及计划、应用系统的备份及监控方案等。同时运维是整个安全工作的高风险点,因为运维直面生产环境,控制不严的话,运维掌控者整个应用系统的所有。所以运维阶段的安全防范,重在削权、合规、谨慎,即赋予运维最小化权限,审计运维操作合规性以及运维在日常工作时,要小心谨慎,避免高危操作(如rm -rf),每一步运维操作、每一个命令输入前,要考虑影响和备案。
应用系统或是项目进入运营阶段,网络安全工作也应转化为日常性的安全运营阶段。安全运营与第二部分第二章企业安全运营中心建设有较大管理,除此之外,系统安全运营应特别注意如下内容:
(1)系统权限管理。特别注意权限分立、最小权限原则,业务权限与管理权限分割,增加审计角色、完善离职人员权限回收流程等。
(2)应定时检查或随机抽查应用系统、数据以及文档等相关重要内容的备份评估工作,特别注意备份的标准规范性、备份集的准确性、恢复时间和恢复量(RPO/RTO)以及备份启用条件等。
(3)应加强数据提取、数据修改、批量查询等敏感操作的监督管理工作,杜绝人为数据泄露和数据篡改等。
(4)应注意加强日志管理和日志审计工作,充分挖掘日志价值。
(5)对于应用系统、数据库以及服务器等,应特备注意异常的链接,如非法账户、非授权账户链接等。
(6)对于系统变更流程应加强标准化管理和安全质量把控。
对于网络安全的全生命周期管理实际上在系统运营范畴中还有一个应用系统下线的处理。这个几乎是最容易被忽略的一个收尾过程。实际上对于下线、不再使用的系统的安全处理,也是一个非常重要的内容,这一块也是企业网络安全的一个高危风险点。
质量安全测试为空(渗透测试)
--------------------------------------------------------------------------------------------------------------
作者简介:
战学超(Jan) ,某航空公司运维经理,高级架构师。曾任职于NEC软件、海尔集团。拥有丰富系统运维、系统架构经验,熟悉企业运维管理、系统架构、数据库架构、数据平台搭建、虚拟化、混合云部署及管理、自动化运维以及企业网络安全等。