【问题标题】:Buffer overflow - how a possibility of an attack is found?缓冲区溢出 - 如何发现攻击的可能性?
【发布时间】:2019-04-06 10:53:16
【问题描述】:
我一直在阅读有关缓冲区溢出漏洞利用的信息,并且我理解这个概念(我了解堆栈、覆盖返回地址、shell 代码、NOP 等)
youtube、文章、书籍中的所有漏洞利用示例均指存储在本地的程序,因此您可以检查 exe 文件或开源。
我的问题是:黑客如何知道远程应用程序(即软件)可能受到攻击,并且他/她可以开始发送恶意字符串?他/她如何找到漏洞利用?
【问题讨论】:
标签:
security
buffer-overflow
exploit
【解决方案1】:
这真的取决于攻击场景。通常在安全方面,您假设攻击者了解您的系统/安全性的一切(除了您的秘密,即加密密钥)。假设您正在攻击一个开源应用程序。然后这个软件的代码是众所周知的。一个不同的场景可能是一个闭源软件。然后你必须对程序进行逆向工程(一旦你得到它)来理解它的逻辑。
有很多方法可以获取目标软件的样本。无论是通过某种技术方式还是通过社会工程,都几乎不可能获得目标程序的样本。
【解决方案2】:
当您没有可用的源代码时,缓冲区溢出攻击最常被fuzzing 发现。模糊测试是向系统发送无效、随机或故意超大数据以查看其行为方式的做法。作为攻击者,您希望看到的是崩溃而不是错误。对于远程系统,崩溃通常看起来像 500 HTTP 响应代码。这告诉您您的数据将系统置于未定义状态。有了这些,您就可以开始设计攻击以利用该未定义状态。
这是考虑避免在 400 和 500 范围内有用的返回代码的原因,对于任何可能的错误,可能只返回“400 - 发生错误”。在一些高度安全的系统中,我对每个可能的问题都返回了 404 错误。这使得调试变得非常痛苦,但它使自动扫描更具挑战性。我一般不推荐这种方法,但在更高安全性的系统中需要考虑。