我在网上遇到以下短语:
软件安全性不是一层 应用程序的顶部,它是 从一开始就纳入您的申请。
但是,您如何设计一个考虑安全性的系统?
答案 0 :(得分:4)
作为第一件事,也是所有安全考虑的起点,你需要定义一个threat model:你想要发生什么事情,你想要防止发生什么事情,什么是如果他们发生了你不关心的事情?
然后,针对每种威胁,解释您的系统如何防止该威胁。使安全专家的专业知识主要是对系统中通常发生的威胁的直觉。您通过阅读文献了解到这一点 - 它通常与挑战许多系统的威胁相同。
答案 1 :(得分:1)
安全性由许多不同的领域组成,坦率地说是一个巨大的领域。我可以给你一些要点,但你真的需要研究。例如:
但就像我说的那样 - 这是一个不断变化的大片区域。你最好的选择就是拿一本关于这个主题的书。
答案 2 :(得分:1)
威胁模型是无稽之谈,安全“专家”建议的任何东西都可能是垃圾。如果代码在特定情况下仅是安全的,则代码不安全。正确的封装与安全性是一致的,这正是E所证明的。
查看具有正交安全性(对象能力模型)的E语言。这是一个很好的概念证明,还有其他类似的语言,例如Joe-E,它是Java的相同范例,Emily for Ocaml,Oz-E for Oz。不幸的是,E是动态类型的,但幸运的是,它比我见过的其他动态类型语言更加智能。即使你最终没有将E用于任何东西,它仍然会教你如何通过声音设计实现安全性。
这实际上是应该如何进行安全的;当我想到一台计算机时,我想到了一个运行算法和软件的设备。从来没有我期望Flash游戏能够危及我的整个系统并窃取我的所有数据。但是几天前我在我的实验室PC上运行了一个完全最新的Windows 7安装程序,并且在一天之后使用完全更新的Firefox / Flash浏览互联网后它受到了损害。这不是计算应该如何工作,您不必担心阅读某段文字会使您的银行帐户被盗。但令人遗憾的事实是,每一个事实上的操作系统都会以这种方式存在根本性的缺陷,并且永远都是,因为它们是用不安全的语言编写的。
无论如何,一些有助于安全的基本方面:
基本上,只要遵循良好的做法(在现实世界中不存在很多),你就会安全。声音设计=安全=速度=可用性(但不是愚蠢)。封装是关键,E迫使你做适当的封装。
*禁止使用C / C ++。期。即使是世界上最优秀的数学家也无法编写没有重大漏洞的大规模C / C ++程序。我所知道的最好的情况是~4000K线微内核,最终得到了250K线。我从来没有见过用C ++编写的没有重大漏洞的大型视频游戏。
** Python是强类型的,但它仍然容易出错,因为它鼓励做像猴子修补,继承这样的事情(但是没有办法防止私有成员名称冲突,这一直是一个问题)。范围是虚拟的,因此当您访问任何局部变量时,它会在dict中查找它。它有eval / exec。每个人都只是腌制东西,导致任意代码执行(即,你永远不能使用别人的Python程序数据,因为它可能有一个泡菜,当你从中读取它时会拥有你)。这很慢,可能总是与静态类型的语言进行比较。
答案 3 :(得分:0)
有一些软件开发流程,例如Microsoft的安全开发生命周期(SDL),您可以在开发过程中与您的常规开发方法并行使用。引用是非常正确的,你不能在完成后为应用程序添加安全性,或者当你这样做时,它会比从一开始就这样做更昂贵。安全流程可以帮助您确定风险所在(风险管理)并保护包含最敏感信息的应用程序部分。
然而,对于道德开发者(像我自己)来说,开发安全软件很困难。如果安全对您的老板或客户来说足够有价值:聘请安全工程师。他应该能够帮助你完成整个过程。