在这些日子里,我对软件安全感兴趣。正如我正在阅读论文时,我发现有很多攻击,研究人员正在尝试为软件发明新方法以获得更安全的系统。
这个问题可以是一般性的,包括所有类型的攻击。在SO中有很多有经验的程序员,我只是想学习用什么来检查你的代码来对付这些攻击?您使用的是否有任何工具或者您不关心?
例如,我听说过静态/动态代码分析和模糊测试。
感谢
答案 0 :(得分:6)
我将在这里专注于Web应用程序安全性......
你真的想习惯在网站/应用程序中手动拖网,玩各种参数等等,所以代理工具有很大的帮助(它们允许你在到达服务器之前捕获表单并与之交互):< / p>
LiveHTTPHeaders - FireFox插件。
Burp Proxy - 基于Java。
显然,手动爬行整个网站变得相当费时/乏味,这就是自动扫描工具可以提供帮助的地方。
黑匣子:
WebSecurify - 没有使用它,但它是由一个知名的网络应用程序安全人员创建的。
Skipfish - Google最近发布了此消息,因此值得一看。
还有许多其他商业工具:WhiteHat Sentinel,HP Web Inspect以及其他许多我不记得的工具。
白框:
我见过的很多学术研究都与静态代码分析工具有关;我没有使用任何因为它们都只专注于PHP并且有一些限制。
其他资源:
ha.ckers.org - 很棒的博客,有一个与网络应用相关的活跃论坛。 OWASP - 正如前面提到的,这里有很多富有洞察力的文章/指南/教程。
如果您想了解有关手动攻击网站的更多信息,Damn Vulnerable Web App是一个不错的学习项目。我的意思是,这是一个故意不安全的Web应用程序,因此您可以合法地测试您对Web应用程序安全漏洞的了解。
我在Perl写了一个黑盒子扫描仪,用于我的第三年学位论文,这是一个非常有趣的项目。如果你想自己构建一些东西,它实际上只包括:
答案 1 :(得分:2)
你没有提到的东西,但我认为很重要:代码审查。
当您尝试尽可能快地实施某些内容时,很容易忽视安全问题。第二副眼睛可以解决许多问题或潜在的问题,特别是如果评论者有经验发现典型的安全漏洞。
我相信在很多情况下可以在没有特殊工具的情况下进行手动代码审查。只需坐在同一台计算机上,甚至打印出代码,然后在纸质副本上进行审核。但是,由于您特别要求提供工具,因此Rietveld是一种帮助进行手动代码审查的工具。我自己没有使用它,但它基于Google内部使用的相同想法(由同一个人编写,他也恰好是Python的作者)。
答案 2 :(得分:1)
安全性肯定是一个问题,开发人员至少应该意识到常见的漏洞(以及如何避免它们)。以下是我感兴趣的一些资源:
答案 3 :(得分:1)
有两种类型的软件缺陷会导致安全问题:实施错误和设计缺陷。
实现错误通常出现在代码的特定区域,它们相对容易检测,并且(通常)不太复杂而无法修复。您可以使用执行静态代码分析的自动化工具(Fortify或Ounce等工具)检测(大多数)这些工具,尽管这些工具很昂贵。话虽如此,您仍然必须记住,没有“银子弹”,您不能盲目地仅依靠工具输出而无需进行某种手动代码审查,以确认/了解工具报告问题背后的真正风险。 / p>
另一个问题是设计缺陷,这是另一个故事。它们通常是复杂的问题,不是代码中的错误,而是应用程序的设计或体系结构选择不当。这些不能通过自动化工具识别,并且实际上只能通过代码/设计/架构审查来手动检测。通过设计阶段,修复它们通常非常困难且昂贵。
所以我建议,检查一下可能影响安全性的实施错误的代码(使用Fortify / Ounce等自动化工具进行代码审查+工具结果的手动审查),并检查您的设计是否存在安全漏洞(没有这方面的工具,由知道安全的人来完成。
为了更好地了解软件安全性和设计安全软件背后的复杂性,请查看软件安全:建立安全性,作者:Gary McGraw(amazon link)
答案 4 :(得分:1)
我使用工具来帮助寻找漏洞,但你不能只是开火测试并假设一切正常。当我审核项目时,我会查看代码,然后尝试了解程序员的风格和技能水平。如果代码看起来很乱,那么很可能他们是新手,他们可能会犯新手错误。
在项目中识别与安全相关的功能并手动审核它们非常重要。 Tamperdata对手动审核和漏洞利用开发非常有用,因为您可以构建自定义http请求。 PHP手动审核的一个很好的例子是:他们是使用mysql_real_escape_string($var)
还是使用htmlspecialchars($var,ENT_QUOTES)
来停止sql注入? (ENT_QUOTES不会停止反斜杠,这与mysql的引号一样危险,mssql是另一回事。)安全功能也是“逻辑错误”的起点,没有工具可以检测到这个,这需要人工审核。
如果您正在进行Web应用程序测试,那么Acunetix是您可以使用的最佳测试工具。 Wapiti是一个非常好的开源替代方案。虽然任何工具都可以使用不当。在进行Web应用程序测试之前,请确保打开错误报告,并确保您没有抑制sql错误,例如使用try / catch。
如果您正在对缓冲区溢出等漏洞进行自动静态代码分析,那么Coverity是您可以使用的最佳工具(Fortify几乎与Coverity相同)。 Coverity花费数万美元,但美国国土安全部等知名人士使用它。 RATS是一个开源替代品,尽管Coverity是一个复杂的工具。这两种工具都会产生很多误报和漏报。 RATS寻找令人讨厌的函数调用,但不知道它是否仍然安全。因此RATS将报告对strcpy()strcat()sprintf()的每次调用,但是如果你只是复制静态文本,这些可以是安全的。这意味着你必须挖掘很多垃圾,但如果你正在进行同行评审,那么RATS可以通过缩小手动搜索来帮助很多。如果您试图在像Linux这样的大型代码库中找到一个可利用的漏洞,那么Rats将不会提供太多帮助。
我使用了Coverity,他们的销售团队声称它将“检测代码库中的所有****漏洞”。但我可以从第一手经验告诉你,我发现了基于香草堆栈的缓冲区溢出,其中peach是Coverity未检测到的。 (然而RATS确实发现了这些问题,还有1000多个安全的其他函数调用...)如果你想要一个安全的应用程序或者你想找到一个可利用的缓冲区溢出,那么Peach就是你可以用来构建你需要的工具。
如果您正在寻找更具异国情调的内存损坏问题,例如悬空指针,则Valgrind会有所帮助。
答案 5 :(得分:1)
市场上有大量的Web应用程序安全扫描程序
查看此列表:
WASC - Web application security scanner list和Netsparker Community Edition:这是Netsparker的免费版本。
答案 6 :(得分:0)
工具不知道您的代码是否不安全。
只有你(和攻击者)。
该工具充其量只会在您的代码中发现一种类型的漏洞,并让您意识到您从未抵御过此类漏洞,但您仍需要清理该工具错过的所有实例。