在第1部分我们探讨了黑客的思维,他们所具备的技能以及他们用来破解系统的很多线索和相关漏洞。在第2部分我们将讨论在开发过程中可以采取哪些切实有效的措施同时最小化系统设计的风险,本文结束后大家将关注一下几点:
执行风险评估
在这个开发周期内加入系统安全设计
积极的进行测试
选择敏捷性而不仅仅是强硬的
保持整洁
使用云服务
执行风险评估
对整个开发环境(包括实践)进行全面的风险评估是第一步,NIST 800-53文档给出了风险评估的一些方法,大家可以借鉴。如果MIST文档太过于深奥,大家也可以尝试行业的其他方法。在Anitian公司我们使用RiskNow方法,融合了技术评估。通常使用风险评估来指导大家的安全工作目的是关注系统设计过程中威胁最大或风险最高的领域。
在这个开发周期内加入系统安全设计
不是等到系统设计或搭建完成后才对其进行安全方面保护,相反安全性考虑应该集成到系统开发周期中的每个方面,因此我们需要作出如下工作:
将开发、测试和生产环境分开
创建和遵循一套正式的变更控制流程
代码存储在安全的地方,不能有共享访问权限
对于所有访问开发源代码或设计的访问采用多重验证
对集成的第三方组件进行代码审查(或安全测试)
要求所有开发者参加每年举办的安全培训研讨会
使用安全的编码标准,比如MISRA C
积极的进行测试
集成到开发过程中一个更重要的步骤就是进行安全性测试,对每个阶段都进行测试:
设计阶段:对你的架构设计和第三方组件进行进行安全审查
开发阶段:代码检查和漏洞扫描
测试阶段:现场部署系统进行渗透测试
生产:在实际环境中尝试破解系统
选择敏捷性而不仅仅是强硬的
你永远不可能建立起足够高的墙来阻止所有的黑客,所以不如让你的系统变得更加的敏捷不仅仅是强硬的,如果你的系统遭受了攻击,你能做出哪些反应:
多快能进行系统更新?
你怎么知道系统被攻击了?
攻击引发的后果是怎样的?
谁有可能发动了这次攻击?
如果你的加密系统(如果有采用)被攻击了会怎样?
其他技术比如防火墙能够减轻攻击吗?
保持整洁
将一些潜在的弱点转变为优势,我们可以采取如下措施:
在接收和发送数据之前都进行验证
禁止不必要的访问,严格限制所有的访问请求除非是绝对必须的
阻止不受信任的应用程序
严格限制所有的远程访问
对所有数据进行加密:不管是在数据保存还是发送过程中
在系统启动前执行完整性检查
避免系统的复杂,对系统进行模块化细分
移除调试功能(如果可能的话)
产品为什么要这样设计?如果没有更好的理由开发某个功能那么不如去掉它
使用云服务
97%的公司将一些基础设施或者全部放到云服务器上,这是由一定原因的,云服务具有敏捷性、灵活性和更高的安全性,使用云服务还可以收集日志、推送更新或发布API。
然而云服务最大的好处其实是自动化,你可以搭建整个代码环境,并随时销毁然后重新创建它们。这可以称为一次性基础设施,系统可以被销毁并从已知的系统镜像将其恢复。自动化销毁和重新创建具有很大的安全优势,如果我们的系统每周定期的消失一次,那么黑客的攻击不可能持续的存在,一次性基础设施是任何复杂系统最终的理想状态。
总结
像黑客一样思考需要你以不同的方式来看待你设计的系统,包括观察明显的情况、理解人所犯的错误,了解黑客会去寻找并使用哪些线索(参见第1部分)。设计工程师应该并且能够采取措施来改进系统开发流程从而将系统的风险降至最低。执行风险评估、将安全集成到整个开发流程中、测试、开发自动化一次性的基础设施以及使用云服务都是非常关键的措施,这些措施应该会提升你的整个开发过程并且最小化系统风险。
贸泽电子致力于帮助工程师开发更安全的系统,参加“像黑客一样思考”网络研讨会(与Anitian公司联合举办)并且订阅我们出版的数据安全电子杂志。
全部0条评论
快来发表一下你的评论吧 !