我希望这个问题对RE来说不是OT,但我对通常如何发现漏洞感到好奇。

我当然知道公司正在进行代码审核以识别安全问题,但是我怀疑此类审核的结果是否公开可用。查找潜在攻击的另一种方法当然是考虑特定技术的细节并发现其弱点(定时攻击可能符合这种条件)。

但是,在缓冲区溢出的情况下,我我一直想知道人们如何发现它。我的意思是,考虑到这需要做多少工作,如果发布了某些软件,则将其反转并希望以这种方式找到缓冲区溢出对我来说似乎是没有希望的。如果您的软件由于某些特殊输入而崩溃,那么当然可以对此进行分析,并可能导致安全漏洞。那么,恶意软件作者是否只是监视各种来源(错误报告站点或类似站点),以期希望了解此类情况以进行调查?我不敢相信。

评论

有点模糊-研究反汇编代码-研究格式/结构和突然的意外崩溃-并没有希望;)

研究崩溃当然是发现漏洞的一种方法,但是我想知道的是,众多恶意软件是否真的仅依赖于他们可以研究的崩溃报告,或者是否有更积极的策略来增加发现此类崩溃的机会。 。

#1 楼

闭源产品中的大多数漏洞都是通过模糊测试和静态逆向工程发现的。


进行反向转换并希望以这种方式找到缓冲区溢出
对我而言,绝望的是通常这需要多少工作量


通常,您不需要分析整个程序,而只需分析用户输入的入口点。是的,仍然有很多工作要做,但是如果结果富有成果,那就很重要。


恶意软件作者是否也仅监视各种来源(错误报告
网站或类似),希望能听到有关此类案件的信息?


大多数恶意软件不是通过安全漏洞进行传播,而是通过简单的社交工程传播(“在这里,运行此.exe”)。对于确实利用安全漏洞的恶意软件,作者要么依赖于Metasploit的模块,要么从黑市购买漏洞。一个人同时成为漏洞发现者和恶意软件作者的情况极为罕见。

评论


我认为答案的模糊部分应再详细一点。基本上,如果模糊器知道协议或文件格式,或者盲目地翻转位,则将大有不同。

– 0xC0000022L♦
2014年1月9日在17:23

#2 楼

到目前为止,模糊检测发现大多数缓冲区溢出。逆向工程既可以帮助进行模糊测试,又可以自己发现其他问题。如果模糊器知道“特殊”值,这将导致代码以不同的方式分支或在没有它们存在的情况下更早退出解析,则可以加权这些值的包含范围,确保输入将超过特定点或填充CRC。总是正确的。

如果您对要发现的缺陷类型有所了解,那么逆向工程就非常有用。例如,如果您以使用atoi()的人不会期望负数为起点,那么很容易在代码中找到这些位置并向前看数据会发生什么。另一个示例可能是假设内存分配大小可能是整数溢出的,因此,请查看对分配的每次调用,然后查看其前面的计算是否进行了必要的检查。如果不是,请查看输入是否可以影响分配以达到缺陷。

使用逆向工程的另一种方法是让其他人为您进行缺陷查找。只需比较供应商发布更新时修补的内容,您就会看到已修复的内容。

正如Jason所说,编写恶意软件的人通常不是发现缺陷甚至是发现缺陷的人。开发漏洞。