SQL示例-漏洞覆盖率

这些示例查询可以让您了解Security Console有多少漏洞覆盖率,以及最近添加了哪些漏洞。

所有的漏洞

安全控制台已定义的漏洞是尺寸的,并且可以位于DIM_VULNERABLED维度内。此维度公开了安全控制台具有覆盖率的漏洞的共同属性。要获取所有漏洞的列表,您可以针对此维度执行简单的查询:

          
SQL.
1
选择nexpose_id.标题proofAsText描述作为描述date_publishedcvss_vector
2
severity_score严重程度pci_severity_scorepci_statusriskscore::数字0作为风险_CASORE.
3.
cvss_score::数字2作为cvss_score利用malware_kits.
4
dim_vulnerability
5
订单通过标题asc.

上面的查询项目在维度,格式化和别名中投影多个列,以使输出清除。校样函数将描述列中的HTML标记置于纯文本格式。内置圆功能用于将Risk_Score和CVSS_Score列舍入到精度的两位数。简单顺序通过表达式按升序按标题按字母顺序排列结果。

最近出版的漏洞

要细化返回哪些漏洞,可以添加WHERE子句,该子句只返回最近两周发布的漏洞。要设置日期比较的范围,可以使用间隔数据类型。指PostgreSQL日期/时间类型有关使用自定义日期间隔的更多信息。

          
SQL.
1
选择nexpose_id.标题proofAsText描述作为描述date_publishedcvss_vector
2
severity_score严重程度pci_severity_scorepci_statusriskscore::数字0作为风险_CASORE.
3.
cvss_score::数字2作为cvss_score利用malware_kits.
4
dim_vulnerability
5
在哪里现在-date_published<时间间隔2周的
6
订单通过标题asc.

最近发布的Microsoft漏洞

此查询可以进一步自定义为包括过滤漏洞类型。dim_vulnerability_category维度提供漏洞和其类别之间的关联。此查询返回Microsoft相关类别中定义的最近发布的漏洞:

          
SQL.
1
选择nexpose_id.标题proofAsText描述作为描述date_publishedcvss_vector
2
severity_score严重程度pci_severity_scorepci_statusriskscore::数字0作为风险_CASORE.
3.
cvss_score::数字2作为cvss_score利用malware_kits.
4
dim_vulnerability
5
在哪里现在-date_published<时间间隔2周的vulnerability_id
6
选择截然不同的vulnerability_id
7
dim_vulnerability_category
8
在哪里较低的category_name就像“微软% %”
9
10.
订单通过标题asc.

由于dim_vulnerability_category维度包含所有类别关联,子选择只返回与术语“microsoft”(大小写不敏感)匹配的漏洞的不同标识符。子选择技术是避免返回重复行的理想方法,如果dim_vulnerability维度自然地与dim_vulnerability_category维度结合在一起,则可能返回重复行。

最近发布了严重的Microsoft漏洞

通过使用安全控制台严重性描述,可以进一步缩小漏洞的搜索:

          
SQL.
1
选择nexpose_id.标题proofAsText描述作为描述date_publishedcvss_vector
2
severity_score严重程度pci_severity_scorepci_statusriskscore::数字0作为风险_CASORE.
3.
cvss_score::数字2作为cvss_score利用malware_kits.
4
dim_vulnerability
5
在哪里现在-date_published<时间间隔2周的严重程度“关键”vulnerability_id
6
选择截然不同的vulnerability_id
7
dim_vulnerability_category
8
在哪里较低的category_name就像“微软% %”
9
10.
订单通过标题asc.

最近发布了带有cve的Microsoft漏洞

漏洞和cve之间的关系在dim_vulnerability_reference维度中存储为“引用”。这是一个一对多的维度,这意味着如果一个漏洞有多个引用,那么它将在这个表中有多个记录。因此,在SQL中有几种方法提取该数据:(1)子选择(2)用GROUP BY表达式JOIN,或(3)with表达式。您选择的方法是一种设计偏好。在这两种情况下,我们都会将多个引用折叠到一个列中,这意味着我们必须执行分组聚合。聚合函数array_aggarray_to_string在执行此非正常化时格式化输出功能非常宝贵。让我们看看所有这些选项:

使用子选择

          
SQL.
1
选择nexpose_id.标题proofAsText描述作为描述date_publishedcvss_vector
2
severity_score严重程度pci_severity_scorepci_statusriskscore::数字0作为风险_CASORE.
3.
cvss_score::数字2作为cvss_score利用malware_kits.
4
选择array_to_stringarray_agg参考”、“dim_vulnerability_reference.在哪里来源'cve'vulnerability_iddvvulnerability_id作为cf
5
dim_vulnerability dv
6
在哪里现在-date_published<时间间隔2周的vulnerability_id
7
选择截然不同的vulnerability_id
8
dim_vulnerability_category
9
在哪里较低的category_name就像“微软% %”
10.
11.
订单通过标题asc.
12.

在这种方法中,使用子选择来查找来自dim_vulnerability_reference维度中具有匹配源名称“CVE”的所有引用。为了比较dim_vulnerability维度中的vulnerity_id,需要使用一个名为“dv”的别名来避免歧义。由于每个漏洞都有多个潜在的CVE引用,因此需要将它们压缩为一个输出字符串。这是通过使用array_agg聚合函数实现的。它接受单个值并将它们放入一个数组中。但是,输出中将使用方括号格式化数组,因此在CSV格式中不是很清晰。为了使输出更加美观,可以使用array_to_string函数将该数组解析为带有自定义分隔符的字符串。在本例中,使用逗号作为分隔符,数组中的字段被平铺成字符串。

使用一个连接

          
SQL.
1
选择nexpose_id.标题proofAsText描述作为描述date_publishedcvss_vector
2
severity_score严重程度pci_severity_scorepci_statusriskscore::数字0作为风险_CASORE.
3.
cvss_score::数字2作为cvss_score利用malware_kits.vcfcf
4
dim_vulnerability dv
5
加入
6
选择vulnerability_idarray_to_stringarray_agg参考”、“作为cf
7
dim_vulnerability_reference.
8
在哪里来源'cve'
9
团体通过vulnerability_id
10.
作为vcf使用vulnerability_id
11.
在哪里现在-date_published<时间间隔2周的vulnerability_id
12.
选择截然不同的vulnerability_id
13.
dim_vulnerability_category
14.
在哪里较低的category_name就像“微软% %”
15.
16.
订单通过标题asc.

在该方法中,嵌套连接执行搜索以查找每个漏洞的所有CVE(具有上述相同的聚合技术)。然后,该结果数据自然地连接以拉出圆顶。

使用WITH表达式

          
SQL.
1
2
vulnerability_cves作为
3.
选择vulnerability_idarray_to_stringarray_agg参考”、“作为cf
4
dim_vulnerability_reference.
5
在哪里来源'cve'
6
团体通过vulnerability_id
7
8
选择nexpose_id.标题proofAsText描述作为描述date_publishedcvss_vector
9
severity_score严重程度pci_severity_scorepci_statusriskscore::数字0作为风险_CASORE.
10.
cvss_score::数字2作为cvss_score利用malware_kits.vcfcf
11.
dim_vulnerability dv
12.
加入vulnerability_cves vcf使用vulnerability_id
13.
在哪里现在-date_published<时间间隔2周的vulnerability_id
14.
选择截然不同的vulnerability_id
15.
dim_vulnerability_category
16.
在哪里较低的category_name就像“微软% %”
17.
18.
订单通过标题asc.

在这个方法中,我们利用PostgresSQL与表达式,或更正式地称为公共表表达式。该技术很简单,并在SQL查询导出示例篇文章。vulnerable _cves表达式首先执行搜索,以找到每个漏洞的所有CVEs(使用上面描述的相同聚合技术)。然后,通过vulnerable _id将此输出自然地与dim_vulnerability维度连接起来,以拉出cves列。正如您可以自己测试的那样,输出与前两种方法相同。与JOIN方法相比,您将看到一些显著的相似之处,但许多SQL开发人员会声称这种方法更具可读性。

最近发表了kbs的严重Microsoft漏洞

请尝试为cve扩展上面的示例,以便自己提取Microsoft KB引用。

如您所见,定制查询以检索感兴趣的漏洞非常简单,并且可以根据您的需要进行定制。尝试查看以名称“dim_vulnerity_”开头的其他维度,以查看可供过滤的其他元数据。