2012年(272)
分类: 网络与安全
2012-06-26 10:10:51
昨天微软的
Mike Adrews 在BlueHat
的blog上写了一篇很不错的文章 Learning By Our Mistakes
老外习惯把漏洞分为两种: Flaw 和 Bug
Flaw 是指一些流程设计上的缺陷,比如Dan
Kaminskys 发现的那个DNS的漏洞。
Bug 是指一些程序错误,比较典型的像溢出、注射等,都属于Bug的范畴。
不说这篇博文后面的精彩内容,他提到的这两种分类也是很有道理的。
目前国内的安全工作者或者第三产业的主要贡献者大多精于研究“bug”类型的漏洞,关注于程序错误,而对于一些flaw类型的漏洞,往往是关注不足。
这也是由于业务的复杂性所造成的。设计上的问题往往会体现为一些缺陷或者是逻辑错误。这种设计错误的涉及范围会更广泛,更灵活,更具有创意,和业务的关联更紧密。
一个有趣的例子,就是以前的ATM取款机。取出来钱后,如果不去提,超时后会自动把钱吞回去,这时候卡上的钱并不会少。
出于设计上的缺陷,或者是技术实现上的问题,取款机超时吞钱的时候并没有去验证钞票的真伪,只清点了数量。
因此这个flaw就被有些“黑客”利用,取出来钱后,从里面抽几张,然后填几张白纸回去,等超时后再把卡拿回来,白赚了几百块。
这类问题是目前国内安全工作者的软肋,大家似乎更喜欢研究一些比较通用的程序错误,比如溢出问题。
设计缺陷往往是公司内部工作人员发现居多,因为需要长期的关注业务,关注细节。所以一个外部用户在没有经过仔细分析和研究的情况下,确实也难以找出这些问题。
在SDL的过程中,分析和处理flaw类漏洞应该是在需求分析和系统设计阶段完成的。到了代码阶段,应该就只剩下“bugs”需要去fix了~。