开发者的安全意识

计算机安全,随着历史的进程,曾被称过系统安全、开发安全、软件安全、信息安全等等,最近被称为网络安全,是计算机系统的属性。系统构建者关注的主要属性是正确性,他们希望他们的系统表现如预期的情况一样。

如果我正在开发一个银行网站,我所关心的是,当客户从她的一个账户中转出一笔1000块钱的资金时,如果资金余额足够,那么1000块钱就能转出成功。如果我正在开发一个文字处理器,我关心的是,当一个文件被保存并重新加载时,我上次离开时保存的数据能够被成功开启……等等诸如此类。

安全的计算机系统是在较宽范围的环境下防止特定的不良行为。虽然正确性在很大程度上是关于系统应该做什么的,但安全性是关于不应该做什么的。即使有对手居心叵测地试图规避任何可能实施的保护措施。昆明亭长朗然科技有限公司IT安全专员董志军说:通常有三个经典的安全属性需要系统来努力满足。这些是广为人知的属性,这些属性的破坏会导致不良的行为。根据系统的不同,它们将具有这些属性的某些特别实例。

  • 第一个属性是保密性。如果攻击者能够操纵系统以窃取个人信息或公司秘密等信息资源,那么他就破坏了机密性。
  • 第二个属性是完整性。如果攻击者能够修改或破坏系统所保留的信息,或者能够滥用系统功能,那么他就破坏了系统的完整性。破坏行为包括损毁记录、修改系统日志、安装不受欢迎的程序如间谍软件等。
  • 最后一个属性是可用性。如果攻击者侵入一个系统,以便使系统拒绝对合法用户提供服务,被拒绝服务的例子包括线上购物或网络银行访问,那么攻击者就破坏了系统的可用性。

今天,很少有系统是绝对安全的,如同您可能在新闻中看到的的一样,安全漏洞不断涌现。例如,在2011年,美国RSA公司被入侵,我在稍后将详谈。入侵者能够窃取与RSA SecureID设备相关的敏感令牌。然后,这些令牌被用来侵入使用了SecureID的公司。2013年底,美国Adobe公司遭到入侵,被盗的不仅有源代码,还有客户记录。几乎在同一个时期,攻击者入侵了美国零售业者Target的销售终端,部分门店内的客户信用卡和借记卡资料被盗。董志军表示:即使在标榜言论自由媒体自由的美国,典型的安全事故案例也都是尽可能被捂着的,如上这些只是一些影响较大且被媒体披露的例子,其实只是冰山一角。

攻击者是如何侵入这些系统的呢?许多入侵行为首先是利用了相关系统中的漏洞(也称弱点)。一项漏洞就是一项缺陷,入侵者可以利用精心构建的交互来使系统运行的不安全。一般来说,缺陷是系统在设计或实施时就已经产生了,这就使得它在后期无法避免出现问题。换句话说,它的运行就不安全。

缺陷是设计中的欠缺,而错误是实施中的欠缺。一个漏洞是一个影响安全相关行为的缺陷,而不是简单的正确性。让我们说回到RSA在2011年被入侵的案例,这种入侵行为取决于Adobe Flash播放器的执行缺陷。Flash播放器本来应该顺利地拒绝格式错误的输入文件,但是事实上,它的这个缺陷让攻击者成功利用了一个精心构建的输入文件,该文件可以操纵程序来运行攻击者编定的代码。该输入文件可以嵌入到微软Excel电子表格中,以便在电子表格在被打开时自动调用Flash播放器。

在实际的攻击中,入侵者将这样的电子表格发送给目标公司的执行官。由于电子邮件被伪装成来自于同事,所以执行官被误导而开启了该文件。这种伪造电子邮件的方法被称为鱼叉式网络钓鱼攻击,这种攻击方式是很常见的。一但电子表格被打开,攻击者就能够在该执行官的机器上悄悄安装恶意软件,并从那里发起进一步的渗透攻击。这个例子突出了通过正确性和通过安全性两个不同的视角来查看软件时的重要区别。

从正确性的角度来说,Flash漏洞只是一个错误而已,除了非常简单的小程序之外,其它所有的软件不可避免会出现错误。软件公司通常在认可他们的软件有已知错误的情况下出售软件,因为要解决这些错误花费过于昂贵。相反,开发人员主要关心在通常情况下会出现的错误。剩下的错误,比如Flash漏洞,很少会出现,用户们也习惯于自己处理它们。如果做某些事情导致了软件的崩溃,用户们很快就会了解到,这不算什么大不了的事情,重试一下或者换种方式就好了。最终,只有当大量用户的遭遇到同样的错误时,软件公司才会解决这个问题。

另一方面,从安全性的角度来看,仅仅针对常规典型的用例来判断错误的重要性是不够的。开发者必须考虑非常规非典型的滥用情况,因为这正是入侵者所处心积虑的地方。

正常用户可能会跳过软件错误,然后导致软件崩溃,但是入侵者则会尝试让该崩溃情景重现,以便了解其为什么发生,然后操纵交互将该崩溃转化为利用方式。简而言之,为了确保系统达到其安全目标,我们必须努力消除错误和设计缺陷。我们必须仔细思考哪些安全属性是我们要牢牢掌握的,并确保我们在设计和实施时不会出现危害安全的缺陷。我们还必须设计系统,使得任何不可避免的缺陷都难以被入侵者恶意利用。

而软件特别是互联网创新的市场竞争那么激烈,时间就是效率,在争分夺秒增加系统功能的时候,别指望开发者或测试人员能主动解决危害安全的缺陷。昆明亭长朗然科技有限公司董志军表示:入侵者不断发现和利用这些缺陷,或者在找出缺陷之后立即在地下市场当天出售(零天漏洞)。要防范入侵者利用零天漏洞借助用户的失误造成破坏,提升用户安全意识是较为有效的途径。在上述RSA被入侵的案例中,如果执行官有足够的信息安全防范意识,不去开启被黑客伪造的电子表格,直接删除那封钓鱼邮件,则至少可以在Flash漏洞被厂商修复之前,保护住自己。

说到底,对安全管理者来讲,安全是一整套解决方案,立体防御、多重防御无疑是正确的安全战略;开发者的安全意识是软件产品和服务是否稳健与安全的关键;用户的信息安全防范意识,也是整体安全管理体系中的不可或缺的重要一环。

在针对用户的网络信息安全意识方面,昆明亭长朗然科技有限公司创作了几十部安全教程模块、互动小游戏,以及三百来部信息安全动画视频、宣传画和培训系统等等。有多种沟通方式和展示渠道来灵活地使用它们,学员也可以通过电脑、平板和智能手机随时随地参与信息安全学习。如果您有兴趣预览,欢迎您通过如下方式快速联系到我们。

昆明亭长朗然科技有限公司

电话:0871-67122372

手机:18206751343

微信:18206751343

邮箱:info@securemymind.com

QQ:1767022898

软件安全问题探究

在IT行业里,软件开发人员是专业技术水平比较高的一类。高校每年都会生产出大量的计算机科学和软件工程毕业生,同时社会上也有不少软件开发培训机构,职场中的程序员们更是在不断学习和提升自己的水平。

看起来软件行业蓬勃发展,其实问题还很多。昆明亭长朗然科技有限公司的信息安全分析师James Dong表示:尽管我只是一名业余的软件开发人员,但是我能够充分理解程序员吃“青春饭”的不易。程序员中的职场新人往往并非能够立即挑大梁,往往从低阶的较简单的重复性工作干起,比如帮助部署和定制化一些软件,对软件系统做一些维护和技术支持工作。

新人在学习和熟悉的过程中不断扩张知识面,同时也在自己感兴趣和有更大需求的领域深度挖掘。软件开发知识的积累和能力的提升并不是短时间内可以轻松完成的,即使天资异常聪明的开发者也需要了解和掌握一堆系统化的知识。

不过虽然说这个世界很复杂,软件开发人员的知识面并不广阔,特别是那些局限的环境造就了许多视野不够宽广的蹩脚开发人员。亭长朗然公司James说:懒散的目光短浅程序开发人员往往只关心代码和配置,殊不知在不完善的管理体系和混沌的工作环境中需要的是全能性的“复合型”人才,即能理解业务信息需求并完成软件相关的所有分析、设计、开发、测试、交付和支持工作。这种软件开发人才很难找,更难的是还懂安全的软件开发人才。

我们是要说软件安全,却谈了这么久软件开发人员的问题。其实软件开发,编程写代码之类的硬能力很重要,更重要的是却是标准化的管理问题,很多软件外包公司要通过CMM标准认证,为什么?说到底,软件安全问题的核心是开发人员的安全管理问题!

尽管不少公司在整个软件开发生命周期中都极力遵从最佳的行业实践标准,代码审核和测试检验也在交叉进行,但是仍然会有很多造成安全问题的意外情况。从科学上讲,很难写出没有任何安全漏洞的软件,正常的软件被非正常的使用时,总可能搞出意外的结果,这就会造成很多程序溢出和提权攻击。

为什么软件缺少很多用户输入校验措施呢?为什么软件开发人员要假设用户都是正常的使用者呢?与期说开发时间紧迫,后期培训流程可以解决,倒不如说程序开发人员的安全敏感度不够,安全敏感度源自于安全认知。重视安全的老练的资深程序员会有一种“特异功能”,知道哪里会有安全问题或隐患,这些家伙们即使不是公司的资深救火员,也可转身便成为发现大牌软件漏洞的赏金高手。

懂安全的资深程序开发员毕竟是少数,难道这样就让大多数软件系统布满漏洞、遍体鳞伤吗?亭长朗然公司James说:软件安全不是渗透测试,不是代码扫描,也不是应用层防火墙,相反它是和人员安全意识密切相关的。内部的创意设计和开发团队需要了解软件安全的问题,我们需要并为他们提供合适的工具,流程和培训,进而帮助树立正确的安全防范意识