软件在设计阶段达到的安全性能,将是软件整个生命周期的基础。如果在设计阶段没有考虑某些安全问题,那么在编码时就几乎不被考虑。这些隐患将可能成为致命的缺陷,在后期爆发出来。所以,安全问题应该从设计阶段就开始考虑,设计要尽可能完善。
传统的软件设计过程中,将工作的重点一般放在软件功能的设计上,没有仔细考虑到安全问题。因此,在软件设计阶段,针对安全问题,应该明确安全方面有哪些目标需要达到、软件可能遇到的攻击和安全隐患等。
一般采用安全威胁建模的方法,在软件设计阶段加入安全因素。安全威胁建模除了和设计阶段的其他建模工作类似外,更加关心安全问题,是一种比较好的安全问题的表达方法。
如前所述,分析系统中可能存在的安全威胁,可能是一件比较繁琐的工作,因为很多安全威胁是不可预见的。但是,在设计阶段尽可能多地将安全威胁考虑到,在编写代码前修改方案,代价比较小。安全威胁建模的过程一般如下。
(1)在项目组中成立一个安全小组
在此过程中,项目组应该成立一个有信息安全方面的专业人员参加的安全小组,安全小组全程参与项目的开发过程。
(2)分解系统需求
本过程中,可按照需求规格说明书和设计文档中的内容,站在安全角度,分析系统在安全方面的需求。当然,传统的软件工程中的一些工具也可以使用,如数据流图(Data Flow Diagram,DFD)、统一建模语言(Unified Modeling Language,UML)等。
(3)确定系统可能面临哪些威胁
系统可能遇到的安全威胁有很多种,在这里可以首先将安全威胁进行分类,如系统缓冲区溢出、身份欺骗、篡改数据、抵赖、信息泄露、拒绝服务、权限提升等。由于同类的安全问题可以用类似的方法解决,因此该过程可以减小后期工作量。
另外,对安全威胁进行分类后,可以画出威胁树,其目的是对软件可能受到的安全威胁进行表达。
图3-1是一个针对用户密码安全问题画出的威胁树。
(www.xing528.com)
图3-1 针对用户密码安全的威胁树
(4)选择应付安全威胁或者缓和安全威胁的方法
针对不同的安全问题,可以选择应付安全威胁或者缓和安全威胁的方法。一般来说,可以应付或缓和安全威胁的方法有很多,但是考虑到实施的成本,根据安全威胁可能的危害程度,还是要有所选择。在面对安全威胁时,可以采用的方法有:
●不进行任何处理。一般不建议采用此方法。
●告知用户。如果软件无法通过技术解决某种安全威胁,则可以告知用户,如提醒用户要杀毒等。
●排除问题。在软件中采用某种技术来避免出现安全问题。
●修补问题。某些问题如果无法预见和解决,则可以提供修补接口,待出现问题之后进行扩展。不过此方案的代价是比较大的,对软件的设计提出了较高的要求。
(5)确定最终技术
在各种备选的方案中,确定最终选用的技术。一般可以将最终选用的技术,直接在威胁树中描述或者用图表画出来。图3-2就是针对用户密码安全的威胁树进行的修改。
图3-2 针对用户密码安全的威胁树进行的修改
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。