我正计划购买一个安全工具,如fortify,或者声呐,或者snyk。
如何评估扫描器是否真的检测到静态漏洞和恶意软件以及运行时攻击?
任何好的码头图像样本,其中包含良好的恶意软件和漏洞,我可以使用基准?
发布于 2021-11-11 17:40:22
您正在测试的安全工具类型将决定您需要哪种类型的测试容器。如果您正在测试恶意软件检测,请抓取包含EICAR恶意软件测试文件的容器。如果您想要测试具有有意漏洞的应用程序,请拆分一个该死的易受攻击的Web应用程序(DVWA) 容器。
如果您想知道它们是否会检测到活动的攻击,请旋开DVWA容器,并遵循如何利用它所具有的许多漏洞的在线指南。
发布于 2021-11-12 02:33:39
对于这一点,没有“简单”的答案,就像“只需遵循这些步骤,您就会知道它是否有效”。像您提到的工具将尽力分析应用程序,并在它们成为真正的问题之前通知您可能出现的问题。
因此,一般来说,当软件扫描一些代码时,有四种可能的结果:
这意味着应用程序检测到了一些真正是问题的问题。这方面的一个很好的例子可能是具有已知漏洞的过时软件。
工具非常擅长解析依赖文件中的版本信息,并将其与已知的易受攻击版本列表进行比较。因此,如果您使用的任何扫描程序都表示whatever.js的3.2.17版本易受某些问题的影响,那么它很可能是一个真正的问题,您应该进行更新。
这意味着程序将一些代码标识为不包含任何与安全相关的问题,这是正确的。在另一种情况下,扫描仪只是向前移动,你永远不会注意到它的发生。
这是第一种错误,也是很烦人的错误。假阳性是一种情况,在这种情况下,扫描仪在没有发现的情况下,会识别出某个潜在的安全漏洞。明智的做法是手动验证是否存在漏洞,然后以某种方式告诉扫描仪,这一发现是假阳性。
不明智的做法是“不惜一切代价解决问题”,在最好的情况下,这会导致浪费人力时间,这可能会被有效利用,而在最坏的情况下,将导致实际的安全漏洞。则会被浪费掉。
这些才是真正糟糕的。基本上,扫描器识别出一些良性的东西,而实际上,它包含了一个安全漏洞。下面是一个例子:
int strcmp(const char * s1, const char * s2) {
const unsigned char *p1 = (const unsigned char *) s1;
const unsigned char *p2 = (const unsigned char *) s2;
unsigned char c1, c2;
do
{
c1 = (unsigned char) *p1++;
c2 = (unsigned char) *p2++;
if (c1 == '\0')
return c1 - c2;
} while (c1 == c2);
return c1 - c2;
}这是实现字符串比较的一种相当合理的方法,对吗?基本上,遍历字符串直到达到空字节,或者只要两个字符是相同的,最后,返回它们之间的差异。
问题是当你用它来比较一个用户定义的输入和一个秘密。注意如果c1 != c2,循环是如何提前结束的?通过仔细测量执行时间,攻击者可以对秘密的状态做出有根据的猜测。这就是所谓的侧通道攻击。源代码扫描器很可能找不到这一点,认为它是合理的代码。
首先,确保你对你想要的静态分析工具有现实的期望。考虑到这是另一双眼睛,它可能会注意到测试人员没有看到的东西,这是一个合理的期望。相信它会抓住一切,“没有发现错误”意味着“不存在错误”是一个不那么合理的期望。
将静态分析工具相互比较,就像比较任何类型的专业软件一样--有人会做测试,并显示利弊。如果有疑问,你可以雇佣一家咨询公司为他们做评估。到目前为止,我在车里做了一些这样的事,所以这并不是闻所未闻的。
注意:您的问题提到了Sonarqube和Snyk,它们都只执行代码的静态分析和“类似代码的事情”,比如“基础结构为代码”。确保你知道你正在评估的解决方案实际上提供了什么。
不过,对于其他端点安全产品来说,答案并没有太大变化。
发布于 2021-11-12 14:43:48
在考虑购买安全工具之前,您应该定义您想要解决的问题。然后,您可以定义真正的阳性和真实的阴性测试案例。这些测试用例可以根据所选择的工具进行评估,这些工具可以广告来解决您定义的问题。
SAST的测试用例-静态应用程序安全测试-类似Sonarqube的工具:
DAST的测试用例-动态应用程序安全性测试-像OWASP ZAP这样的工具:
用于容器图像扫描的测试用例,以查找开放源代码组件中的漏洞:
如何评估扫描器是否真的检测到静态漏洞和恶意软件以及运行时攻击?
我不知道有一种扫描仪能够同时检测到两者。我知道的大多数工具只解决特定的问题。
任何好的码头图像样本,其中包含良好的恶意软件和漏洞,我可以使用基准?
只需将一些依赖项与已知的漏洞捆绑到一个映像中,并扫描它。根据我的经验,将依赖项中的可修复漏洞与不可修复的漏洞进行排序要困难得多。这个任务真的很难,因为有时没有最新的补丁程序可用,有时库不包括在操作系统的包管理器中。结果是,大多数最新的容器映像都包含必须手动评估的漏洞。因此,在评估依赖扫描工具时,您应该同时关注修复部分!
此外,检查如何处理发布版本,以及如何区分部署到生产中的容器映像和刚刚构建的映像。通常,工具对这些工作流主题的支持非常少,这需要您方提供额外的工具和脚本,而您并不需要这些工具和脚本。
https://security.stackexchange.com/questions/256977
复制相似问题