软件系统经历过需求的分析、设计、开发到最终运行,安全在设计的时候已经融入进去了,运行的时候是安全最为重要的一个环节。有的软件要求7*24小时、7*365天不能出现问题,甚至出现问题后需要在多少秒之内解决。
我们现在很多云、云服务器都是由开源的组件去搭成的,对于OpenSource组件应该去做一些安全检查和版本更新,尤其是版本管理,定期对在运行以及已经设计出来的软件OpenSource组件去做检查。
比如说组件的安全漏洞已经被披露出来,做了一些补丁更新,这些补丁,新发布的版本必须去更换。但是作为一个软件来说,从低版本换到高版本会存在一些开发或者维护的工作量,需要去适配一下,看能不能用,但是不管难度有多大,一定要把工作做到,否则沿用存在安全隐患的版本会导致更大范围的安全隐患问题。
再就是注重安全扫描,一个是动态扫描,可以用AppScan、WebInspect等工具,再一个是静态扫描,可以用Fortify工具。这些工具都是全球知名的IT公司开发的,用这些工具可以解决知识储备不足的问题。如果没有安全从业人员,但是又想保证产品的安全,那就用工具来扫码就可以,工具里面集成了大公司里面安全专家总结出来的扫描知识库、编码的规则。在安全从业人员等级不够的情况下就可以用工具来替代。
同样,这些工具也是我们安全从业人员应该掌握的,第一掌握它的原理,第二掌握它的规则,为什么使用这些规则。
再就是注重WAF和Firewall,WAF全称是Web Application Firewall,还有我们物理的Firewall。应用防火墙是在过滤每一个访问的请求数据包里面有没有安全的风险,里面有没有SQL注入、XSS攻击、远程的攻击命令或者木马等,物理的防火墙是保证了只允许信任的主机或者信任的客户端去连接某一个端口。这两个一个是软件层面的防火墙,一个是硬件层面的防火墙。
如果说WAF没有做到有效拦截的时候,就会导致木马进入到服务器里面,木马进入到服务器里面之后,就可能导致一些越权的执行命令,比如说拿到了一些特殊的文件。举一个极端的例子,通过WAF入侵了一个服务器,将这个服务器作为一个跳板,可以向局域网中去散布木马和恶意软件,网络维护人员刚好中招这个木马,他的电脑中招之后,电脑上保存的连接每一个交换机、每一个防火墙的连接口令都会泄露,导致一连串的蝴蝶效应,硬件防火墙也就被破解掉了。
这时候从网络到服务器到数据库一直到最终外界,就变成像我们说的“犹入无人之境”一样。这是比较严重的,所以我们要更多的注重WAF,因为WAF是能够快速识别到这些访问数据的,而物理防火墙只识别IP地址。
注重端口扫描和异常记录,我们既然有了防火墙,主机上开放的端口肯定比防火墙上开放的端口多,主机上这些端口是不是应该开,是不是安全呢?每个端口通信记录是什么?有没有异常,这些都需要去监控或者审计,定期去分析,这是运维上保证安全的一种手段。
设计分层、环境迁移测试、模块隔离部署,之前有一次出差,在客户现场,是做银行系统的,他们的开发有一个安全信条,俗称八荣八耻,放置在大家最常去的地方,这个标语的内容就是:以开发安全的、可用的软件为荣,以在系统中留后门留彩蛋为耻。为什么会有这样的口号呢?因为银行系统但凡有一个彩蛋或者一个后门在的话,相当于是留了一个取款机。
我们设计分层主要是不要把服务器去混着用,小公司或者不成熟的开发公司可能会把所有东西都放到一个服务器上,不管是应用、数据库还是API接口,都在一个服务器上,就导致业务数据、运行数据、客户数据都在一起,这时候风险就很大,当任何一个层面出问题,都是不可控的。
再就是环境迁移测试,我们既然做了设计的分层,那就必须保证这些分层的模块去独立的运行,应该经得起环境迁移的测试,而不能是只能在某一种容器上跑而不能做迁移。
模块隔离部署,什么叫模块隔离?我们说数据和应用要分开来部署,应用里面的应用也要进行模块隔离。给财务部门的应用应该跟给信息化部门的应用分开、跟生产部门的分开。为什么呢,因为财务是大家都比较关心的,安全级别会高一些,生产比信息化要高一些,应用层面也要隔离,否则一个服务器上布了很多个应用,当一个应用出问题的时候,就会出现像我们一开始说的链珠的例子的情况,当一个珠子断掉的时候,所有的珠子都会断,这时候安全根本没有办法去做防御。
整流、熔断、防DDoS攻击,这些如果部署在云上应该都会有,但是应用层面一定要考虑整流、熔断,建议大家可以用一些开源的组件。整流、熔断的隐患不属于安全的隐患,它属于性能的隐患,但是性能隐患最终会导致安全隐患,性能出了问题,服务器宕机之后,安全问题就会随之而来。
注重审计和日志记录、不留后门入口,这也是刚才举的例子里的,我们做软件开发、软件测试、软件设计,要保证没有人为的损害,因为人是最不可控的,程序是运行的逻辑,写的是if,就运行if,写的是else,就运行else,写的循环就运行循环,但是人确是不可控的,我们经常听到“删库跑路”的情况,这也就是为什么要留审计日志、审计不留后门,第一个是为了防止“删库跑路”,再者不把所有权限都开放给一个人。一定要注重账号权限,账号权限就是一把钥匙。