注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2017/11/12 20:00:09
许多程序在开发阶段,由于各种各样的原因,例如成本、或者技术人员的技术水平,导致在规划阶段就没有进行安全性的考虑,或者直到开发快结束时才开始考虑这个问题。这导致了两种可能的结果:一是埋下一个巨大的安全隐患,可能直接导致服务器或用户终端被黑;二是增加了更多的成本(相对于一开始就考虑安全问题而言),因为后期追加安全防护,要比一开始就规划并实施要难的多。
正确的做法是,从一开始就把安全性考虑在内。而这样做,需要做什么,在什么时候做?本章节着重回答这两个问题。
一、确定威胁
首先,确定业务和产品需求,并根据业务和产品的需求,来确定系统的整体架构,根据整个系统的架构来确定需要保护的对象。常见的需要保护的对象有:用户账号、与跟金钱有关的数据、文件系统权限、用户的隐私数据、程序的源码、文档等。详细情况如下:
- 用户账户:这是最常见的需要保护的对象,也常常是优先度最高的对象。
- 与跟金钱有关的敏感数据:跟金钱有关的数据,例如用户余额,用户收入与支出,用户信用额度等等。在电子商务系统中,这些数据跟账户是绑定而密不可分的。
- 文件系统权限:程序所能操作和下载的文件和文件夹,需要考虑这样的问题:如果程序某个部分被破坏,会不会导致文件权限系统跟着被破坏?
- 用户的隐私数据:某些用户数据可以向大众开放,另一些则不能,比如用户的健康记录等。
- 程序的源码:例如COM+对象,脚本,通讯程序等。
- 文档:软件系统、硬件系统、管理系统的文档等,不可外泄。
- 物理对象:例如,硬件和技术人员的安全性。
除上述常见的保护对象外,Web应用因为其对外公开或半公开的特殊性,有一些需要特别注意的保护对象,例如,数据库的安全,站点文件的安全,网络传输数据通道的安全性等。
第二,根据需要保护对象的重要程度、易受攻击程度,来确定威胁和威胁等级。
例如,用户账户信息往往都是一个系统中最敏感的信息,并且和其他许多信息都相连。且用户账户使用界面总是存在用户输入的情况,因此,可以将其威胁程度设为最高。一个简单确定威胁影响的办法是,预估某个威胁的两个参数:即威胁发生概率和后果。两者相乘即为威胁的影响。其数值单位可以自行定义,比如25%代表发生概率,1级为最轻微的后果,10为最严重后果。在考虑后果时,不但要考虑金钱因素,还要考虑用户的信任度。金钱的信任度可以再赚,信任度是很难挽回的。
第三,处理好安全性策略与威胁评估的优先度。安全性策略与威胁评估正好相反,安全性策略从系统本身功能的角度,来提出安全要求,并且需要保护一些隐私数据。安全性策略规定,还没有完工的软件系统能够对威胁如何侦测、预防、应对以及如何进行灾难恢复。
使用者所在的单位环境可能不停的在变,外部世界的操作系统、互联网环境、安全技术等都在发生改变,因此,不但要把安全性策略写入一个文档,而且要不断的对其进行更新。深入理解这些文档,有助于技术人员识别和抵御入侵。
不同的系统软件,有着不同的安全性策略,其制定必须结合实际,重点保护使用者最需要的保护的东西,重点防范使用者最害怕的东西。例如,一个电子银行系统,最要保护的东西是用户的账户安全和财产安全,银行方面肯定要求不惜一切代价对其进行保护。
这里有一个重要而不可回避的问题就是,安全性策略与前文提到的威胁评估,肯定会有不一样的地方。比如,一个医院的封闭医疗系统,并不与外界联网,且对线路有极好的物理防护,理论上,患者的医疗记录泄露概率应该极其的低。在评估威胁的时候,往往因为其概率的低下导致其威胁影响程度的低下。但安全性策略必定将其安全等级定的极高——即不惜一切代价。因为这涉及到的不但是普通的经济问题,还有患者的生命安全和医院的信誉。在一般情况下,我们应该优先考虑安全性策略中的问题,如果安全性策略确定的安全等级比威胁评估的高,应该优先考虑。但是,反过来,如果安全性策略规定的安全等级低、而威胁评估数值较高的部分,应该以威胁的影响程度分开区别对待:
- 如果是威胁影响小,但由于发生概率高而导致的威胁评估数值较高,其安全性策略规定的安全等级低的情况下,应该考虑保护成本,如果成本过高,可以选择接受该威胁,但做一些必要的防护,并100%确定这个威胁不会导致系统性的问题。
- 如果是威胁影响大,导致的威胁评估数值较高,应该予以高度重视,因为会发生一些难以预知影响系统安全的事件。
在拟定安全性策略的时候,还应该考虑一些非技术因素,如可以购买保险,分担一部分威胁。
二、选择安全性技术、定制安全性服务应对威胁
在威胁影响较大或安全性策略高,要求保护的情况下,应该使用一定的安全性技术来抵御威胁。安全性技术可以是软件,也可以是硬件。
需要注意的是,某些应对措施可能自身也是某种漏洞,比如一款存有漏洞的防火墙设备,一款有漏洞的安全软件本身。
在安全性技术的选择上,应对症下药,直捣黄龙。例如,面对数据篡改的危险,就要对用户的输入进行充分的验证。面对身份验证的安全性,可以选择使用SSL、TLS等进行数据的加密处理和传输。面对DDoS,就要加强防火墙的部署、设置服务器软件的带宽限制。面对特权提升攻击,就要以最低权限运行Web服务。
在选择安全性技术后,应着手设计安全性服务。安全性服务是指利用一些技术/非技术手段,实现一些运营上的特征的措施总称。例如,在具体开发程序的时候,应该注意所谓的“松耦合”问题,即加大程序模块之间的相互依赖程度。避免“一处挂,处处挂”。大方面说,一台服务器跑文章,另一台服务器跑直播,再一台服务器跑专题。往小的方面说,网站用户系统挂了,文章还在,图片系统挂了,专题还在,这就是松耦合的例子。在编写具体代码时,也应该将各个模块尽量的分开运行(虽然面向对象设计往往要求提高耦合度)。
安全性服务应该包含充分预防措施,包括从物理上保证系统的安全。在威胁发生时,安全性服务应该能够及时发现它,并有适当的反应。同时还应有灾难恢复措施,当系统真的被攻陷后,应该有相应措施,例如数据恢复、紧急补丁,或是断网、重启服务器等。
安全性服务不应该是一时的,它应该伴随着系统运行的全程。应该根据内外部具体环境的改变,对安全性服务做出相应的调整。
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2017/11/12 20:00:09