安全在传统上总是被当成软件开发过程中“事后再想”的部分。但人人闻之色变Heartbleed漏洞及其相关的补丁困难使安全性被推到了最前线。而一个使用安全运维管理,或SecOps的安全软件开发周期方式将可以加强AWS应用的安全性。
SecOps方法就有如DevOps原则一样,促进了开发者和运营之间更好的沟通,只是对应的是安全方面,Todd Vernon,一家DevOps工具供应商VictorOps的CEO说道。DevOps允许IT团队能够在部署云应用至生产前快速做出改动。但这也产生了显著的安全问题。
“过去,你可能三不五时会进行一次安全审计。但现在这能有什么用?”Vernon问道。安全运营管理即是不断的开发,测试和监测系统中威胁的过程。它也提供了对于DevOps的相互制衡。
将安全融于设计之中
“将安全性从一开头就放在设计里很关键,”David Eads,安全咨询公司Mobile Strategy Partners的CEO说道。“如果安全只是事后再想的问题,那真正的安全是没希望了。”对于基于云的环境来说更是放大了这种情形,他补充道。
在云里,新的漏洞可以很快补上。云配置脚本可以确保修复会快速的散播到所有其他受影响的环境,这样漏洞不会再度发生。云也使得寻找类似问题,修复相关脚本,和可能与此相关但是不同问题的安全环境变成可能。
“IT人员在传统环境下不可能做到这样的事,”Eads说道。如果某个组织有着反应式的软件开发文化,那它多半会先遭受近乎灾难的结果,然后才能严肃的考虑安全性的问题,而这些有时候已经太迟了。
“Code Spaces就是个很好的例子,”Sirish Raghuram,私有云基础架构供应商Platform9的CEO说道。“他们在他们的Amazon(Web服务)帐号中漏掉某些非常基本的安全防范措施,而他们再也没得到过第二次机会。你需要在组织里有某个有影响力的人,这人必须毫不迟疑的坚持改革,而不是等到一切都太迟了。”
未雨绸缪
那些在他们的开发过程中细密的罗织安全编程习惯的组织,多半对于安全性有着比较正确的观点,Zulfikar Ramzan,基于云SecOps供应商Elastica的CTO说道。虽然事后的安全测试是有价值的,但它永远无法揭露出底层真正的问题。
比如说,Heartbleed bug的严重性非常惊人。但是,多年来大家却对它视而不见。这个挑战部分存在于各种开发过程是依靠一个相当复杂的拼凑起来的东西来互相连接的。其中一个如果改动,就算这个改动看似无害,却可以在下游过程中造成大灾难。此外,顾客会要求云服务提供安全编程习惯的证明,Ramzan说道。那些企业们将处理他们数据的大任托付给厂商,自然必须加大保证的力度来确保该厂商正在以合理,安全和理智的方式来达成这件事。2014年的网络供应链管理和透明度法案强制要求所有的云服务供应商,例如AWS,将已知的漏洞对政府客户公布。
改善安全工程
一开始就将设计中的漏洞处理好是不可或缺的。在这些安全问题还在代码阶段的时候就处理掉对于预防跨站式脚本攻击、SQL注入和其他已知漏洞是更有效的,Mark Patton,一家反恶意软件供应商Malwarebytes的工程副总裁说道。而了解对于基于云系统对比本地系统的最佳实践常常是个挑战。
那些采用设计后安全编程实践的组织应该遵循以下的建议来更好保证你们的环境不会产生漏洞:
- 考虑API表面的安全性就跟保护网页一样重要
- 查看云平台安全性、AWS虚拟私有云布局和使用AWS安全组
- 讨论认证的技术(用户名和密码、令牌、双重认证等等)
- 不要将密码凭证嵌入代码,这会将它们泄漏给用户
- 使用基于角色的“需要知道”或“需要访问”来架构云资源的访问
一个成功且安全的组织会为团队提供围绕安全性,以及功能和进度的激励。企业应该将安全性包括在成功的定义中作为第一要素,并且从第一天起就被当作每个人的任务。
认清战术上的障碍 确保安全开发
过渡到安全的开发生命周期绝不简单。根据以安全为基础的安全供应商Veracode的说法,公司要创建一个具有安全意识的企业文化,必须克服一些战术上的障碍。
创建扩展的测试方法。随着组织向敏捷化的迁移和持续部署,他们需要自动化的可以和已有流程整合的测试方法。
提供对开发人员有用的结果。一个手动测试(和某些自动化测试的结果)的缺点是很难给出有用的信息可以让开发人员解决问题。代码行数的报告比起不包括到底哪里出错的诊断信息的漏洞类型报告更有用。
雇佣足够的人才。要将安全贯彻到软件开发中并且在过程中带动开发人员一起需要专业的技能。对大多数组织来说,市场上没有足够的拥有正确技能的人来让一个程序规模化的运行。