SQL示例-漏洞覆盖率
这些示例查询可以让您了解Security Console有多少漏洞覆盖率,以及最近添加了哪些漏洞。
所有的漏洞
安全控制台已定义的漏洞是尺寸的,并且可以位于DIM_VULNERABLED维度内。此维度公开了安全控制台具有覆盖率的漏洞的共同属性。要获取所有漏洞的列表,您可以针对此维度执行简单的查询:
SQL.
1选择nexpose_id.,标题,proofAsText(描述)作为描述,date_published,cvss_vector,2severity_score,严重程度,pci_severity_score,pci_status,轮(riskscore::数字,0)作为风险_CASORE.,3.轮(cvss_score::数字,2)作为cvss_score,利用,malware_kits.4从dim_vulnerability5订单通过标题asc.
上面的查询项目在维度,格式化和别名中投影多个列,以使输出清除。校样函数将描述列中的HTML标记置于纯文本格式。内置圆功能用于将Risk_Score和CVSS_Score列舍入到精度的两位数。简单顺序通过表达式按升序按标题按字母顺序排列结果。
最近出版的漏洞
要细化返回哪些漏洞,可以添加WHERE子句,该子句只返回最近两周发布的漏洞。要设置日期比较的范围,可以使用间隔数据类型。指PostgreSQL日期/时间类型有关使用自定义日期间隔的更多信息。
SQL.
1选择nexpose_id.,标题,proofAsText(描述)作为描述,date_published,cvss_vector,2severity_score,严重程度,pci_severity_score,pci_status,轮(riskscore::数字,0)作为风险_CASORE.,3.轮(cvss_score::数字,2)作为cvss_score,利用,malware_kits.4从dim_vulnerability5在哪里现在()-date_published<时间间隔2周的6订单通过标题asc.
最近发布的Microsoft漏洞
此查询可以进一步自定义为包括过滤漏洞类型。dim_vulnerability_category维度提供漏洞和其类别之间的关联。此查询返回Microsoft相关类别中定义的最近发布的漏洞:
SQL.
1选择nexpose_id.,标题,proofAsText(描述)作为描述,date_published,cvss_vector,2severity_score,严重程度,pci_severity_score,pci_status,轮(riskscore::数字,0)作为风险_CASORE.,3.轮(cvss_score::数字,2)作为cvss_score,利用,malware_kits.4从dim_vulnerability5在哪里现在()-date_published<时间间隔2周的和vulnerability_id在(6选择截然不同的vulnerability_id7从dim_vulnerability_category8在哪里较低的(category_name)就像“微软% %”9)10.订单通过标题asc.
由于dim_vulnerability_category维度包含所有类别关联,子选择只返回与术语“microsoft”(大小写不敏感)匹配的漏洞的不同标识符。子选择技术是避免返回重复行的理想方法,如果dim_vulnerability维度自然地与dim_vulnerability_category维度结合在一起,则可能返回重复行。
最近发布了严重的Microsoft漏洞
通过使用安全控制台严重性描述,可以进一步缩小漏洞的搜索:
SQL.
1选择nexpose_id.,标题,proofAsText(描述)作为描述,date_published,cvss_vector,2severity_score,严重程度,pci_severity_score,pci_status,轮(riskscore::数字,0)作为风险_CASORE.,3.轮(cvss_score::数字,2)作为cvss_score,利用,malware_kits.4从dim_vulnerability5在哪里现在()-date_published<时间间隔2周的和严重程度=“关键”和vulnerability_id在(6选择截然不同的vulnerability_id7从dim_vulnerability_category8在哪里较低的(category_name)就像“微软% %”9)10.订单通过标题asc.
最近发布了带有cve的Microsoft漏洞
漏洞和cve之间的关系在dim_vulnerability_reference维度中存储为“引用”。这是一个一对多的维度,这意味着如果一个漏洞有多个引用,那么它将在这个表中有多个记录。因此,在SQL中有几种方法提取该数据:(1)子选择(2)用GROUP BY表达式JOIN,或(3)with表达式。您选择的方法是一种设计偏好。在这两种情况下,我们都会将多个引用折叠到一个列中,这意味着我们必须执行分组聚合。聚合函数array_agg和array_to_string在执行此非正常化时格式化输出功能非常宝贵。让我们看看所有这些选项:
使用子选择
SQL.
1选择nexpose_id.,标题,proofAsText(描述)作为描述,date_published,cvss_vector,2severity_score,严重程度,pci_severity_score,pci_status,轮(riskscore::数字,0)作为风险_CASORE.,3.轮(cvss_score::数字,2)作为cvss_score,利用,malware_kits.,4(选择array_to_string(array_agg(参考),”、“)从dim_vulnerability_reference.在哪里来源='cve'和vulnerability_id=dv.vulnerability_id)作为cf5从dim_vulnerability dv6在哪里现在()-date_published<时间间隔2周的和vulnerability_id在(7选择截然不同的vulnerability_id8从dim_vulnerability_category9在哪里较低的(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_published,cvss_vector,2severity_score,严重程度,pci_severity_score,pci_status,轮(riskscore::数字,0)作为风险_CASORE.,3.轮(cvss_score::数字,2)作为cvss_score,利用,malware_kits.,vcf.cf4从dim_vulnerability dv5加入(6选择vulnerability_id,array_to_string(array_agg(参考),”、“)作为cf7从dim_vulnerability_reference.8在哪里来源='cve'9团体通过vulnerability_id10.)作为vcf使用(vulnerability_id)11.在哪里现在()-date_published<时间间隔2周的和vulnerability_id在(12.选择截然不同的vulnerability_id13.从dim_vulnerability_category14.在哪里较低的(category_name)就像“微软% %”15.)16.订单通过标题asc.
在该方法中,嵌套连接执行搜索以查找每个漏洞的所有CVE(具有上述相同的聚合技术)。然后,该结果数据自然地连接以拉出圆顶。
使用WITH表达式
SQL.
1与2vulnerability_cves作为(3.选择vulnerability_id,array_to_string(array_agg(参考),”、“)作为cf4从dim_vulnerability_reference.5在哪里来源='cve'6团体通过vulnerability_id7)8选择nexpose_id.,标题,proofAsText(描述)作为描述,date_published,cvss_vector,9severity_score,严重程度,pci_severity_score,pci_status,轮(riskscore::数字,0)作为风险_CASORE.,10.轮(cvss_score::数字,2)作为cvss_score,利用,malware_kits.,vcf.cf11.从dim_vulnerability dv12.加入vulnerability_cves vcf使用(vulnerability_id)13.在哪里现在()-date_published<时间间隔2周的和vulnerability_id在(14.选择截然不同的vulnerability_id15.从dim_vulnerability_category16.在哪里较低的(category_name)就像“微软% %”17.)18.订单通过标题asc.
在这个方法中,我们利用PostgresSQL与表达式,或更正式地称为公共表表达式。该技术很简单,并在SQL查询导出示例篇文章。vulnerable _cves表达式首先执行搜索,以找到每个漏洞的所有CVEs(使用上面描述的相同聚合技术)。然后,通过vulnerable _id将此输出自然地与dim_vulnerability维度连接起来,以拉出cves列。正如您可以自己测试的那样,输出与前两种方法相同。与JOIN方法相比,您将看到一些显著的相似之处,但许多SQL开发人员会声称这种方法更具可读性。
最近发表了kbs的严重Microsoft漏洞
请尝试为cve扩展上面的示例,以便自己提取Microsoft KB引用。
如您所见,定制查询以检索感兴趣的漏洞非常简单,并且可以根据您的需要进行定制。尝试查看以名称“dim_vulnerity_”开头的其他维度,以查看可供过滤的其他元数据。