如何评估一个软件或程序的安全性
在评估软件系统时,通常需要一些指标来评估性能,以淘宝为例,我们可以很容易的设计出几个性能指标,
- 每秒能支持多少笔交易,
- 最多能支持多少人同时在线浏览等等
- xxx
但是如何评估软件系统安全性呢,绝对的安全性是不存在的。
例如,淘宝系统总会存在不知道的漏洞,如何确认淘宝不能抵御哪些攻击?这种问题很难用指标评估,因为安全是一个“负面目标”,能做到的事情并不重要,重要的是无法做到的事情(即无法抵御的攻击)
常见评估方式是代码量和漏洞量的,同样代码量下存在更少的漏洞,我们就称这个系统更安全。
威胁模型
尽管绝对的安全无法达到,但是我们可以为为安全设置合适的目标,这个方法就是设计并明确威胁模型。
在一定的假设和前提下,实现与安全相关的系统属性。
威胁模型是指与安全相关的前提和假设,包括
- 系统中哪些组件是可信的
- 哪些组件不需要是可信的
- 有哪几类攻击者
- 攻击者具有哪些能力
等等,以淘宝系统为例,我们可以认为服务器是安全的,通信是不安全的,攻击者可能通过通信信道伪造交易发送到服务器,从而实现零元购等等。(以上只是一种假设,为了方便理解)。
总的来说,通过明确系统中可信的组件,不可信的组件,以及攻击者及攻击类型,缩小模型范围,从而明确系统的安全能力和范围。
两个示例:
1.https://arxiv.org/pdf/2201.08133
In our system, we assume that the central servers are
considered as semi-trusted, in other words, honest but curious.
More specifically, these servers execute specific protoc