二十年安全架构师:安全自动化平台运维开发之路
在12月8日运维开发腾讯蓝鲸社区沙龙上,新钛云服安全架构师王爱华分享了题为《安全自动化平台运维开发之路》的内容,并回答了听众关心的三个问题,本文是分享和回答的文字精华版。
◆ ◆ ◆ ◆ ◆
目录
安全平台需求背景
安全平台功能规划
安全平台架构和实现
问题和解决方法
后续改进
安全平台需求背景
(图可以点击放大)
在座的各位做运维工作的比较多,其实运维和安全结合是比较紧密的。从企业安全管理的角度来看,其实是需要建立一个信息安全的管理体系,这个体系不应该是一个技术人员的能力,甚至不仅仅是技术方面的能力。信息安全体系最终的目标是建立一个类似于ISO27001这样的安全体系。
方法有很多,比较常见的PDCA的模型,先有安全规划,规划完了以后做安全项目,如购买安全设备,或者是自己做一些安全产品的开发,或者是做一些前期安全项目的改造,然后我们还需要长期的安全运营,要有很多的数据来描述当前的安全现状。知道每天从外面是不是有发现新的安全漏洞,漏洞的数量是怎样,类似的安全数据我们可能需要经常并且是通过不同的安全设备收集,有了这些安全数据就可以和开发或运维沟通,然后去解决。整个体系当中会涉及到安全平台的开发和安全工具的管理。
(图可以点击放大)
从实际经验来看,安全人员会维护很多的检查脚本、扫描工具或者是扫描平台。我们会有一扫描对象,如不同机房的IP地址,但IP地址也会变化的,可能是机房搬迁或者是新的一些业务上线,会产生一些新的IP地址数据,安全人员需要去和运维人员沟通,手动录入然后再做安全扫描。
另外,扫描完了之后,结果需要人工进行分析、整理,确认问题后再去和运维或开发沟通和解决。所以说这整个的周期过程中,会有很多重复性的事情,从安全人员的角度来看,这种重复性的一些劳动其实也缺乏技术挑战性,同时会有很大的时间沟通成本。
(图可以点击放大)
这一前提下,我们想搭建一个安全平台,安全平台可以集成我们需要的各类安全工具,可以实现统一管理,包括多种扫描器、不同检查脚本、版本管理等等。另外我们的扫描对象也可以通过平台统一获取。包括其它现有的一些安全数据,我们也可以通过平台获取,然后通过平台做一些图表展现,或者是更高级地做一些安全数据的可视化,为以后的安全风险或者是大数据的分析做一些准备。另外也希望通过安全平台打通不同部门人员的信息,可以获取到运维人员的信息,包括运维资产的信息等等。
安全平台功能规划
(图可以点击放大)
安全平台的功能规划,第一是把现有的一些安全数据能够导入,因为之前我们也做了很多安全方面的事情,包括一些WAF平台的数据,一些流量分析的数据,还有DDOS检测脚本的数据等等,我们想第一步就是把现有数据统一接进来,不管是通过安全平台提供的API接口还是数据源提供的API接口,确保之前的数据可以接入我们安全平台。
第二是把常用的工具通过安全平台管理,安全平台可以定期做高危端口扫描,系统漏洞扫描,WEB扫描,包括安全基线的审计,希望通过安全平台实现。过程当中涉及到的运维信息,以及Windows系统、Linux系统,操作人员是哪些,可以通过平台来获取,有这些数据我们就可以做一些展现,如了解到每天有多少高危端口暴露在外面,每天扫描发现的漏洞是什么样,整个责任人员的分布是什么样,这些可以体现安全部门的价值。
安全平台架构和实现
(图可以点击放大)
安全平台使用BS架构,用户通过浏览器访问Web服务器,然后可以访问后台的应用服务。应用服务用Diango实现。用户管理主要有SSO模块和权限管理模块,用户使用域账号登录,然后根据权限配置访问不同的功能页面。如网络人员可以访问流量分析模块,一些开发人员可以访问WAF模块页面的拦截数据等等。
安全平台和扫描工具的底层使用Paramiko模块通信,端口扫描使用nmap,系统漏洞扫描使用openvas 的OMP API,Web漏洞我们是使用Arachni Rest Api,安全审计是通过运维平台提供的API接口,统一去推送审计脚本和获取审计结果。现有安全数据我们是通过安全平台自身提供的一些API或者是安全数据源提供的API来实现接入的。另外我们也和运维这边沟通过一些安全需要的数据,然后通过运维部门提供的一些API,可以获得扫描对象、对象明细信息、或者是运维人员相关的数据。
(图可以点击放大)
安全平台的部署不影响原有的各类扫描工具、扫描平台的部署架构,我们只是在之前做了一个管理平台,通过管理平台调用原有的端口扫描服务、系统扫描服务、Web漏洞扫描服务等等。
(图可以点击放大)
安全管理平台里面有一块功能是高危端口扫描,每天会去做一些端口扫描,然后报警出来,公司所有资产里面有哪些服务器是暴露在外网的。高危端口有一个NMAP管理模块,管理模块首先从CMDB获取到机房信息,然后获取到机房里面所有的IP地址信息,因为它这是每天自动获取的,所以信息是准确的,我们不会担心扫描到其它公司的IP地址。NMAP管理模块取到IP地址数据后会做一步检查,因为NMAP工具对IP范围的定义格式,可能和运维人员输入的格式不一样,然后NMAP管理模块继续生成需要的脚本,同时自动生成crontab脚本,上传到扫描服务器,然后重启需要的服务,返回上传成功的状态。
(图可以点击放大)
生成的高危端口扫描脚本会根据crontab定义的时间计划去执行,夜里一点钟、两点钟等。同时我们会有另外一个模块,NMAP解析模块,每天早晨七、八点钟会登录到NMAP扫描服务器,下载扫描结果文件,对XML格式的扫描结果文件做解析,然后会和我们定义好的高危端口数据比较,最终会得到这次扫描的IP地址里面发现了哪些高危端口数据,然后通过邮件自动发给对应运维人员,同时会把这些数据写到数据库里面去。
这是一个简单的页面显示,每天会更新我们扫描到的对外开放的高维端口,高危端口对外开放是服务器被入侵的前提。及时发现和关闭高危端口,这个对安全来说是减少攻击面暴露的一个安全措施。
(图可以点击放大)
操作系统如Windows、Linux系统层的漏洞扫描,我们也是通过平台自动实现的。Openvas扫描模块通过查询CMDB接口,获取到所有机房服务器IP地址信息,然后通过OMP api接口创建扫描目标和扫描计划,然后创建一些扫描任务。在扫描计划定义的时间去执行对应的扫描任务,扫描任务执行完返回结果,结果我们会写到postgresql数据库。这边就是一个简单的扫描截图,扫描到的一些IP地址存在漏洞,以及扫描时间、对应的运维负责人等等。
同样的,WEB漏洞扫描也是使用了一些开源的扫描平台,通过提供的API,我们也可以执行一些如创建扫描目标、管理扫描操作、创建扫描计划,然后执行扫描,扫描完成后结果写到postgresql里面。
这边是WEB漏洞扫描的截图,有扫描开始时间,扫描漏洞的描述,包括它是高危还是低危漏洞等等,但是有些漏洞还是需要人工验证和确认的,所以我们还有另外一个页面,安全人员通过自己的经验来对发现的漏洞进行确认,主要是确认漏洞是否是误报。
我们每个月或者每个季度会对服务器做定期的安全审计,检查服务器有没有一些临时账号、过期账户或者是异常进程等等。通常会有一个审计脚本,包括Windows和Linux脚本,安全审计模块其实也是先从CMDB里面查询到不同服务器IP地址信息,然后调用SALT接口,分发执行脚本,执行完了以后再统一收集审计结果文件,做XML解析,把解析的结果写到数据库,用户通过这个界面可以去查询。
还有一些其它的模块,比如说流量分析模块。我们每个机房出入口的流量都做了镜像,应用系统有问题的时候,可以看流量,比较方便和直接。我们也做了一个流量分析模块,可以实现数据包的统计分析,对一些协议如http、dns进行解析。在攻击的时候,通过流量分析模块可以发现一些问题。
另外一个是CVE模块,我们也是每天有一个定时任务,从NVD下载最新漏洞文件,解析后存储到数据库,作为知识库在我们的平台上展现。这个可以和公司现有的版本管理结合起来,可以通过这个模块查询到公司现有版本里面,有没有已知的CVE漏洞。
公司开发人员可能会把一些代码上传到github上面,所以我们也做了一个Github扫描模块,通过自定义的公司关键词和关键字进行扫描,及时发现违规上传的代码和文档。因为之前我们也发现很多的公司,开发人员会把代码上传到Github上面去,上面会有公司的IP地址、数据库连接字符串等等,所以这也是一个很重要的安全模块。
问题和解决方法
(图可以点击放大)
在安全平台研发过程中,我们也遇到了很多问题,这边是一些例子。如我们有很多的计划任务需要定期执行,之前使用python的一些计划执行模块,但后来发现使用系统提供的crontab更加稳定。还有PDF格式支持,某些扫描结果可能需要扫描器重新编译以支持PDF格式的报告,或者使用datatable提供的模块实现PDF导出。
另外刚开始数据量比较小的时候,我们可以直接通过前端做一些排序等操作。后期部分模块的数据量很大,达到百万级别时,前端排序速度很慢,需要在服务端排序后再在前端展现。另外就是尽管我们本身是做安全的,但是做安全平台开发的时候,有时候也是更多的考虑到功能的实现而缺乏安全考虑,平台自身的安全也是一个关键点。
后续改进
(图可以点击放大)
平台还是有很多可以改进的地方,第一是安全需求,因为后续会有不同安全项目的实施,会有不同安全系统的接入。如果有新的安全项目,则对应的数据也需要接入,另外现在还有HIDS的数据没有接入。第二是安全平台的一些性能,数据量大的时候,服务的冗余性和扩展也是需要考虑的点。
安全数据接入越来越多,需要使用数据的用户也会越来越多,角色和权限的开发也是需要的,还有登录和操作日志也会加入进去。
平台一些固有的缺陷是不能改变的,像扫描器自身的漏报和误报,是在我们平台考虑之外的,安全工具能够实现什么样的功能,安全工具自身的有效性等和平台关系不大,会另行处理。
◆ ◆ ◆ ◆ ◆
听众提问和王爱华精彩回答
王爱华
我们在安全平台开发过程中也遇到过类似的需求,但是安全平台搭建的主要目的是收集各类安全数据,通过安全数据汇总公司资产整体上的安全风险和漏洞情况,然后我们也可以通过其它工具或者是人工确定风险和漏洞是否确实存在。
安全漏洞根据不同原因,有可能是运维修复、有可能开发修复,也可能是通过流程体系的完善去修复。另外不同的漏洞,它的修复方式是不一样的。一些关键业务的安全漏洞,需要制定详细的修复方案,需要测试,测试通过后还需要审批才可在产线环境更新。如果你缺乏这些过程,可能会影响到线上环境的稳定性和安全性,漏洞修复流程本身也是一个需要慎重考虑的过程。所以安全平台暂时没有提供这样一个机制。我们平台本身定位在发现安全问题,然后及时通知到运维或开发,剩下的是要走另外一个流程。
王爱华
数据是需要分类和分级的,因为不同的数据对不同的公司价值会不一样。完整的评估过程是,第一公司有哪些数据,这些数据的分类分级标准是什么;第二数据在哪些地方,可能是存在数据库里面,可能是存在于文件里面;第三有哪些人接触到这些数据,整个数据的生命周期是什么样的,怎样产生,有哪些控制措施,如有没有流转记录,到最终的销毁环节。
整个过程我们需要去评估一下,我们会发现一些问题,哪些方面有缺陷,是授权访问,还是没有加密等等,通过整体风险评估以后,根据数据采取的不同控制措施以及控制措施的有效性情况,才能知道公司数据安全保护是一个什么样的等级。
王爱华
按我的经验,首先你要深入了解下证监会具体的安全要求规范。合规内容里面也会有一些明确要求采取的安全控制措施和安全要求。
第二个从安全实践来讲有很多需要做的事情,包括你刚才讲的是一块,还有平常的漏洞扫描,你要模拟黑客,从外面发现问题,包括有一些定期的高危险端口扫描、WEB渗透测试等等。
从防守来看的话,还有代码本身的安全测试,代码本身是不是有问题,还有包括到一些运维操作规范,其实也和安全紧密相关,比如数据库端口不允许对外开放。
第三就是数据的安全是最关键的,数据的安全和网络的安全,包括数据库本身的分库、分表,数据库访问的权限和应用的角色等。数据要加密,这是最基本的原则。
总结下,第一要符合合规要求的具体细节,第二是安全实践方面,外部的扫描,以及内部代码的检测,包括操作系统的安全检查等等,第三是数据安全。其实所有应用系统的安全防护都会涉及这些内容,只是不同等级的应用需要考虑的安全防护程度不一样而已。
王爱华简介
二十年IT行业安全咨询、安全技术和安全管理经验,拥有安全行业CISSP、CISA认证,曾任浦东中软、络安、盛大网络、平安付、沪江网等公司安全咨询顾问、安全经理、高级安全研究员、安全架构师职位。处理过互联网公司各类安全问题,包括信息基础架构安全,应用架构和代码安全,应用运维安全,数据安全和灾难恢复等。
熟悉ISO17799、等级保护、PCI-DSS、SOX等信息安全标准规范,具有支付牌照、等级保护、PCI认证的申请、实施和年审经验。熟悉Shell、Python、Java等语言,曾负责搭建metron开源大数据平台,单独开发OWASP TOP 10安全演示平台和企业信息安全管理平台等。
了解新钛云服
新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照
新钛云服超预期完成第一阶段目标,启动新一轮融资,迎接下一轮挑战!
从盛大游戏G云COO到独自创业!2018中国财经峰会专访新钛云服CEO冯祯旺
新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁
新钛云服出品的精品技术干货
使用FieleRader API创建VUE.JS文件读取器组件
99%运维不知道,系统文件md5变了,竟然是因为......
OpenStack Rocky:专注于裸机云管理,快速升级以及硬件加速
Ceph BlueStore 与 FileStore:利用 Micron NVMe SSD 进行性能比较
OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等