如何扫描/模糊我的代码以查找漏洞?

9
我正在寻找一种自动化的方式来模糊测试我的应用程序或扫描其漏洞。请假设我对黑客知识一无所知。此外,源代码位于我的本地主机上,因此我需要一种在本地模糊测试它的方法,而不依赖于互联网连接。一些安全专家能给我一些提示或建议吗?我不确定哪些选项是最好的。
编辑:
感谢您的回答,但到目前为止,没有人似乎真正理解重点。我想更具体(因为这有助于问题),但又不影响观点或听起来像是在宣传某个特定产品。我正在寻找类似wapiti这样的东西(很抱歉提到了名称,但必须这样做,因为到目前为止的答案,如学习SQL注入、XSS等,显然不是真正的“专家”回答这个问题。我已经知道了这些。(说真的,这个问题听起来会被一个对安全一无所知的人问出来吗?)

我不是在问我是否应该测试,而是在问我应该如何测试。我已经决定加入自动化测试(除非有人给出专家答案证明它没有用,否则不会回头),所以请尊重我的决定,我想进行自动化测试。我不想手动地针对我的网站去检查每个编译的xss、SQL注入等黑客攻击列表 (即使黑客也不是那样攻击)。如果有人能够回答我的问题,将获得额外的分数。

有些人问为什么不学习。最佳实践(我知道的)和了解黑客并不相同。有些人想争论它们是一个翻转的硬币,但我绝对不同意 :) 因此,我需要一个具有“黑客思维”的保护工具。这怎么会伤害到我呢?事实上,你也应该尝试一下 ;) 请来自那些懂行的专家回答。


我已经寻找某种静态代码分析器多年了。大多数情况下,我把希望寄托在新的roadsend + LLVM项目上,它有可能在编译时生成你想要的警告。 - Tim Post
感谢您的努力回答,但目前为止似乎没有人能够理解重点。这是因为重点无法被理解。安全漏洞是由人类使用难以置信的创造力、努力和尝试发现的。如果安全审计可以被自动化取代,您认为有人会选择手动进行吗? - Pekka
@Pekka,你似乎忘记了这样的工具已经存在。我在我的问题中举了一个例子,更不用说黑客每天都在使用它们的变体来探测你的网站了。好了,说够了 :) - Chris
那么你的问题是有哪些工具可以用于测试安全问题吗? - Collin
7个回答

7
有一些服务可以自动扫描漏洞,例如风险顾问。它们不会捕捉到所有问题,但可以帮助您识别问题。最好使用其中一个服务并学习一些安全最佳实践。
开始学习SQL注入跨站脚本攻击。这些是最大且最容易修复的漏洞。
防御式编程是一项技能,我认为每个程序员都应该学习。 没有什么比自己理解这些问题更好的替代品。

3
为了回答您的问题,您应该使用工具进行测试。有两种主要类型的工具可供使用,一种是主动探测正在运行的网站的安全扫描器,另一种是在用于构建您的 Web 应用程序的源代码上运行的静态分析工具。
简短的答案是,您需要一个安全扫描工具,如 wapiti 或 burp。像这些工具一样,它们会为您的网站构建和执行独特的安全测试。您可以手动尝试利用自己的网站,但这将花费大量时间并且不提供任何价值。对于您去查找已知的 xss 或 sql 注入问题列表将是无用的,因为每个问题都是适用于特定网站的唯一问题。此外,这些工具可以比您更好地攻击您的网站,从而给您提供更严格的安全压力测试。
有两种主要的工具可用,即静态分析工具和动态分析工具。静态分析工具读取您的源代码,找出数据流通过应用程序的方式,并查找安全问题。在其根本上,大多数安全问题都允许用户控制流入应用程序不恰当部分的某些数据,因此即使应用程序没有运行,您也可以通过静态分析方法“猜测”和尝试每个代码路径来获得良好的结果。静态分析工具是语言相关的,大多数是昂贵的。一些免费的静态分析工具包括 fxcop(C#)、PMD 和 findbugs(Java),请参见 http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis 动态分析工具(通常只称为“安全扫描器”)要求您设置 Web 应用程序以便可以对其运行测试,这似乎更符合您的需求。我最喜欢的工具是 burp,还有一些免费的工具,如 wapiti 也很不错。这些工具将查看应用程序如何处理数据,查找输入并使用恶意数据填充它们以尝试触发漏洞。例如,测试反射式跨站点脚本时,扫描器会查看页面,并将 javascript 插入每个查询字符串值、cookie 值、表单值等,然后呈现页面以查看恶意 javascript 是否被回显到页面。
您可能不需要或不想要模糊测试工具。模糊测试工具主要在有大量解析代码时帮助您,因此模糊测试工具不是 Web 应用程序的最佳选择,而是协议制定的最佳选择。上述安全扫描器工具中有限的模糊测试功能可能已经够用了。模糊测试工具也需要时间来构建。在 C/C++ 代码中,模糊测试工具通常可以找到更多问题,因为已经没有内置库执行正确操作,而在 Web 应用程序的情况下,“模糊测试”空间较小。

0

我使用过Paros - http://www.parosproxy.org/ - 它是免费的,易于使用,并显示错误的原因、可能的修复方法以及如何复制它(通常是一个链接)。

它易于配置并爬取整个站点 - 还可以爬取本地安装。

它也有图形用户界面。

虽然它有些老,但它很好用且易于操作。

我尝试过配置WAPITI,但对我来说太难了。


0

在你开始疯狂地进行自动化之前(这可能会产生你无法理解的结果),我建议你先阅读有关编写安全代码的资料,并学习如何识别你所做的错误。以下是一些教程,可以帮助你入门:

http://php.net/manual/en/security.php

如果不行的话,我建议你把代码外包给一家安全公司,如果你有足够的财力的话。
祝你好运!

1
它不允许我在原始内容中发布多个链接,但这里有更多:[1] http://www.phpfreaks.com/tutorial/php-security [2] http://phpsec.org/articles/ - Kevin Peno
非常正确,这就像尝试运行自动化扫描以查找性能问题一样:你无法自动化理解。 - Byron Whitlock
@Chris:一旦你理解了与积极相关的问题,它们可能会很有用,但是如果你得到了一份“可能存在漏洞”的清单,而对此一无所知,那么就不会有任何回报。我希望这样能更好地解释我的回答。 - Kevin Peno
我不确定你为什么认为我不理解。我知道最佳实践,只是没有黑客经验。但有些人想争论它们是相同的。我绝对不同意 :) 因此我需要一个“黑客心态”的人提供保护工具。 - Chris
@Chris,当时我没有意识到你是问题的发布者。我回答你的评论作为对我的答案的回应,而不一定是针对包括你的问题的回应 :) - Kevin Peno

0

只要你懂C语言,就可以使用Spike。在任何可能被最终用户触及的地方,手动检查溢出总是一个好习惯。通常使用%x%x%x测试格式字符串攻击,并在静态分析中保持勤奋。

PeachFuzz和SPIKE都有很好的文档。

如果没有这些,编写自己的工具也是轻而易举的。


0

了解模糊测试以及如何進行方法論,並不一定會帶來足夠的技能,徹底測試和評估您的軟件的漏洞和缺陷。您需要使用自動化測試,但是要調整其測試方式,當您找到新的輸入路徑、交互等時。

基本上,我的意思是如果您想使此成为真正的增值,您需要知道自己在做什么。您不能只挑選一個工具,運行它,然後期望得到良好的結果。您需要有進行此類測試的人與您合作或為您工作。工具是有用的,但只有在由熟練此技能的人使用時才能產生有用的結果。


0

我已经为自己的应用程序研究了很多年这个主题,并最近发现了一个基于PAROS的绝妙工具(请参见我上面的其他答案)

它是OWASP的ZAP,非常棒。

你可以做的最好的事情之一就是将ZAP与你的项目自动化/构建集成,这样每次构建时就会运行测试。

更好的是,你可以将它放在你的Selenium自动化测试旁边来“收集”你所测试的页面,然后......大力扫描它们!

它的文档非常全面,但你需要一个快速的电脑,因为它每页运行数百个测试。如果你要测试整个网站,可能需要一些时间。

还有一些其他工具你可能想考虑。

我发现这个工具非常容易使用,而且非常全面。

每当我在ZAP中遇到我认为是“误报”的情况时,我会用SQLmap扫描页面(你需要学习如何使用Python - 这很容易,只需要几个小时),SQLmap要么验证了误报,要么找到了漏洞。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接