常见漏洞检查示例

自定义漏洞检查数据与Insight Platform不兼容dota2必威联赛

如果您是利用本文中描述的自定义漏洞检查功能的InsightVM订阅者,请注意,您创建的任何自定义检查以及从这些检查派生的任何扫描数据都将包含在内部安全控制台中并仅限于此。自定义检查及其扫描结果不会上游传送到洞察平台。dota2必威联赛这意味着它们将不存在于InsightVM基于云的功能和体验中,例如指示板修复项目,目标和sla

写作漏洞检查本教程将通过一个简单的示例介绍如何编写基于http的漏洞检查并在安全控制台中运行它。这个页面包含了更多你可以创建的不同类型检查的例子。

服务旗帜检查

这<代码类=“prism-code language-text">元素检查是否存在在网络上运行的某个服务。这<代码类=“prism-code language-text">类型Attribute表示协议。多个<代码类=“prism-code language-text">d类型由a分隔<代码类=“prism-code language-text">|(管)字符。下面的示例使用<代码类=“prism-code language-text">http | https.表示HTTP或HTTPS。

这<代码类=“prism-code language-text"><产品>元素表示在该服务上发现的指纹产品。这<代码类=“prism-code language-text"><版本>元素检查产品版本号的范围。要注意<代码类=“prism-code language-text">版本号是独家——换句话说<代码类=“prism-code language-text">应该等于该产品的下一个非脆弱版本。在下面的示例中,Apache 2.0.45包含这个补丁。

http-apache-frossive-newline-dos.vck

         
XML.
1
<VulnerabilityCheckid=http-apache-excessive-newline-dos范围=端点>
2
<NetworkService类型=http | https.>
3.
<产品的名字=Apache>
4.
<版本>
5.
<范围><>2.0.0><>2.0.45>范围>
6.
版本>
7.
产品>
8.
NetworkService>
9.
VulnerabilityCheck>

ftp-proftpd-cwd-format-string.vck

此检查测试是否使用FTP横幅版本测试存在漏洞:

         
XML.
1
<VulnerabilityCheckid=ftp-proftpd-cwd-format-string版本=1.0范围=端点>
2
<NetworkService类型=FTP.>
3.
<产品的名字=ProFTPD>
4.
<版本><范围><>1.2.0RC3.>范围>版本>
5.
产品>
6.
NetworkService>
7.
VulnerabilityCheck>

ftp-servu-directory-traversal.vck

此检查使用任何可用凭证连接到FTP服务器,执行目录更改命令,并检查结果代码和文本:

         
XML.
1
<VulnerabilityCheckid=ftp-servu-directory-traversal版本=1.0范围=端点>
2
<NetworkService类型=FTP./>
3.
<FTPCheck登录=1>
4.
<ftprequeresteSponse.>
5.
<FTPRequest>慢性消耗病\\20.FTPRequest>
6.
<FTPResponse代码=250>
7.
<正则表达式>目录更改为/正则表达式>
8.
FTPResponse>
9.
ftprequeresteSponse.>
10
FTPCheck>
11
VulnerabilityCheck>

http-website-long-options-bof.vck

这个示例版本检查意味着在一个检查文件中有两个不同的产品版本。

         
XML.
1
<VulnerabilityCheckid=http-website-long-options-bof范围=端点>
2
<NetworkService类型=http | https.>
3.
<产品的名字=网站>
4.
<版本><范围><>3.5.15>范围>版本>
5.
产品>
6.
<产品的名字=WebSitePro>
7.
<版本><范围><>3.5.15>范围>版本>
8.
产品>
9.
NetworkService>
10
VulnerabilityCheck>

有时你想检查某个特定的版本<代码类=“prism-code language-text">< >组件A.<代码类=“prism-code language-text"><产品>,例如PHP。

php-ecalloc-integer-overflow.vck

         
XML.
1
<VulnerabilityCheckid=PHP-ECALLOC-整数溢出范围=端点>
2
<NetworkService类型=http | https.>
3.
<产品的名字=Apache>
4.
<成分的名字=PHP>
5.
<版本><范围><>4.0.0><>4.3.0>范围>版本>
6.
<版本><范围><>5.0.0><>5.2.0>范围>版本>
7.
成分>
8.
产品>
9.
NetworkService>
10
VulnerabilityCheck>

经过身份验证的Windows检查

为了让Security Console执行经过身份验证的Windows检查,它必须访问WMI或Remote Registry服务,这通常是使用默认帐户检查(已知默认密码)或站点配置中指定的管理凭据发现的。

ActiveXControlInstalled

此检查将验证是否存在ActiveX控件。这<代码类=“prism-code language-text">< ActiveXControlInstalled >元素允许您测试Windows系统上ActiveX控件是否存在(通过GUID)。默认情况下,该元素不支持kill-bit。换句话说,如果安装了ActiveX控件,但设置了kill-bit,检查将报告“不容易攻击”。如果即使设置了终止位,也希望报告漏洞,请指定<代码类=“prism-code language-text">< ActiveXControlInstalled honorKillBit = " 0 " >

ibm-access-support-activex-bof.vck

         
XML.
1
<?xml version = ' 1.0 '编码=“utf - 8”?>
2
<VulnerabilityCheckid=ibm-access-support-activex-bof范围=节点版本=1.0>
3.
<ActiveXControlInstalledguid=74 ffe28d - 2378 - 11 - d5 - 990 - c - 006094235084/>
4.
VulnerabilityCheck>

WindowsRegistry

Windows注册表检查测试是检查安全控制台在扫描过程中找到的Windows注册表服务中是否存在某些键、值或值数据的测试。

w32-protoride-b-worm.vck

         
XML.
1
<VulnerabilityCheckid=w32-protoride-b-worm范围=节点>
2
<WindowsRegistry>
3.
<RegistryKey.的名字=微软HKEY_LOCAL_MACHINE \ Software \ \ Windows \ CurrentVersion \运行mustNotBePresent=1>
4.
<registryValue的名字=Windows任务栏管理器><正则表达式cflags=Reg_icase.>*正则表达式>registryValue>
5.
RegistryKey.>
6.
WindowsRegistry>
7.
VulnerabilityCheck>

这<代码类=“prism-code language-text">< WindowsRegistry >元素是Windows注册表测试的顶层元素。此元素必须至少包含一个<代码类=“prism-code language-text">< registryKey >子元素。不允许其他元素。

这<代码类=“prism-code language-text">< registryKey >元素是描述要测试的注册表项和值的顶级元素。它有两个属性:<代码类=“prism-code language-text">的名字和<代码类=“prism-code language-text">mustNotBePresent.这<代码类=“prism-code language-text">的名字要检查的注册表项的名称。请注意,<代码类=“prism-code language-text">mustNotBePresent属性的措辞是否定的。如果<代码类=“prism-code language-text">mustNotBePresent = " 1 ",它的意思是“如果键存在,则触发此检查,否则返回not vulnerable”。

这<代码类=“prism-code language-text">元素指定分配给特定注册表值的预期数据。它包含三个属性:<代码类=“prism-code language-text">的名字那<代码类=“prism-code language-text">类型,<代码类=“prism-code language-text">默认的(在下面描述)。

  • 这<代码类=“prism-code language-text">的名字属性指定注册表值的名称(在父键下)。
  • 这<代码类=“prism-code language-text">类型属性指定注册表值的预期类型,该类型必须是以下类型之一。看到http://msdn.microsoft.com/en-us/library/ms724884%28VS.85%29.aspx有关不同值类型的更多信息。
    • REG_SZ
    • REG_EXPAND_SZ
    • REG_BINARY
    • REG_DWORD
    • REG_DWORD_LITTLE_ENDIAN
    • REG_DWORD_BIG_ENDIAN
    • REG_LINK
    • REG_MULTI_SZ
    • REG_RESOURCE_LIST
    • REG_FULL_RESOURCE_DESCRIPTOR
    • REG_RESOURCE_REQUIREMENTS_LIST
    • REG_QWORD
    • REG_QWORD_LITTLE_ENDIAN
  • 这<代码类=“prism-code language-text">默认的属性用于当您希望检查键下的注册表“默认值”而不指定<代码类=“prism-code language-text">的名字属性。

如果要测试注册表项和注册表值是否存在,请使用<代码类=“prism-code language-text">< registryKeyExists >和<代码类=“prism-code language-text">< registryValueExists >元素。

WindowsFileExists

这<代码类=“prism-code language-text">元素用于确定文件在系统中是否可用。这trojan-gimmiv.vck下面的示例展示了这种检查是如何工作的。这<代码类=“prism-code language-text">的名字属性是文件的名称。可以使用百分比替换指定某些知名的Windows路径。例如,并不总是知道Windows目录在哪里。通常,这是<代码类=“prism-code language-text">C:\ Windows,但根据设备配置的不同会有所不同。在运行时(扫描),安全控制台将发现被测试设备的Windows根目录并替换<代码类=“prism-code language-text">%列出%路径中的字符串<代码类=“prism-code language-text">fileVersion使用设备上的实际Windows根目录进行测试。支持以下替换字符串:

  • % SystemDrive %
  • %列出%
  • %csidl_system%
  • % CSIDL_SYSTEMX86%
  • % ProgramFiles %
  • %Programfiles(x86)%
  • % CommonProgramFiles %
  • % CSIDL_PROGRAM_FILES_COMMONX86%
  • % SQLPath %
  • % ExchangePath %
  • % OfficePath %

trojan-gimmiv.vck

         
XML.
1
<VulnerabilityCheckid=trojan-gimmiv范围=节点>
2
<>
3.
<--由滴管创建成分Gimmiv一种的)-->
4.
<WindowsRegistry>
5.
<registryKeyExists的名字=HKLM \ System \ CurrentControlset \ Services \ Sysmgr \参数>
6.
<registryValueExists的名字=ServiceDll/>
7.
<registryValueExists的名字=ServiceMain/>
8.
registryKeyExists>
9.
<registryKeyExists的名字=HKLM \ SYSTEM \ \ sysmgr CurrentControlSet \服务>
10
<registryValueExists的名字=DisplayName/>
11
<registryValueExists的名字=ImagePath/>
12
registryKeyExists>
13
WindowsRegistry>
14
<WindowsFileExists>
15
<--由滴管创建成分Gimmiv一种的)-->
16
<fileExists的名字=% CSIDL_SYSTEM % \ wbem \ sysmgr.dll/>
17
<--由蠕虫创造成分GimmivB.的)-->
18
<fileExists的名字=% CSIDL_SYSTEM % \ wbem \ winbaseInst.exe/>
19
<fileExists的名字=% CSIDL_SYSTEM % \ wbem \ winbase.dll/>
20.
<fileExists的名字=% CSIDL_SYSTEM % \ wbem \ basesvc.dll/>
21
<fileExists的名字=% CSIDL_SYSTEM % \ wbem \ syicon.dll/>
22
WindowsFileExists>
23
>
24
VulnerabilityCheck>

WindowsFileVersion -检查Windows的。exe或。dll的版本

这个检查查找Windows的版本<代码类=“prism-code language-text">. exe或<代码类=“prism-code language-text">. dll.<代码类=“prism-code language-text">< WindowsFileVersion >测试允许测试在扫描期间从被测试端点的文件系统上的文件中检索到的版本。如果在扫描过程中发现文件版本控制服务,安全控制台将使用它们来执行这些测试。

文件版本检查测试类似如下:

         
XML.
1
<WindowsFileVersion>
2
<fileVersion的名字=% % \ system32系统\ scesrv.dll列出mustExist=1>
3.
<版本><范围><包容=0.>5.0.2195.3649>范围>版本>
4.
fileVersion>
5.
WindowsFileVersion>

以下是一个更复杂的检查,其中仅包含仅在Windows XP SP2上的特定文件版本(系统和Windows文件版本检查测试的组合):

         
XML.
1
<VulnerabilityCheckid=ACME-Windows-File-Check-1范围=节点版本=1.0>
2
<系统>
3.
<操作系统minCertainty=1.0的名字=Windows XP Professional.供应商=微软>
4.
<版本>
5.
<价值>SP2.价值>
6.
版本>
7.
操作系统>
8.
系统>
9.
<WindowsFileVersion>
10
<fileVersion的名字=% % \ system32系统\ shsvcs.dll列出mustExist=1>
11
<版本><范围><包容=0.>6.0.2900.3051>范围>版本>
12
fileVersion>
13
WindowsFileVersion>
14
VulnerabilityCheck>

以下是针对特定版本的Internet Explorer的一个示例检查,用于测试该特定产品的多个注册表值:

         
XML.
1
<VulnerabilityCheckid=acme-windows-registry-check-1范围=节点版本=1.0>
2
<InstalledSoftware>
3.
<产品minCertainty=1.0的名字=IE浏览器供应商=微软>
4.
<版本>
5.
<价值>5.01SP4.价值>
6.
版本>
7.
产品>
8.
InstalledSoftware>
9.
<WindowsRegistry>
10
<RegistryKey.的名字=HKLM \ SOFTWARE \ \ \ Microsoft Internet Explorer ActiveX兼容性\ {d9998bd0 - 7957 - 11 - d2 - 8美联储- 00606730 - d3aa}>
11
<registryValue的名字=兼容性旗帜类型=REG_DWORD>
12
<价值>1024.价值>
13
registryValue>
14
RegistryKey.>
15
<RegistryKey.的名字=HKLM \ SOFTWARE \ \ \ Microsoft Internet Explorer ActiveX兼容性\ {be4191fb - 59 - ef - 4825 aefc - 109727951 - e42}>
16
<registryValue的名字=兼容性旗帜类型=REG_DWORD>
17
<价值>1024.价值>
18
registryValue>
19
RegistryKey.>
20.
WindowsRegistry>
21
VulnerabilityCheck>

检查已安装软件的版本

此检查查找已安装软件的版本。

         
XML.
1
<InstalledSoftware>
2
<产品minCertainty=1.0的名字=Exchange 2000服务器供应商=微软>
3.
<版本>
4.
<价值>SP3.价值>
5.
版本>
6.
产品>
7.
InstalledSoftware>

默认的帐户检查

在Security Console中,所有用户名和密码检查的工作方式基本相同。你有一个<代码类=“prism-code language-text">具有服务类型的元素,其次是一个<代码类=“prism-code language-text">< DefaultAccount >元素。这<代码类=“prism-code language-text">< uid >和<代码类=“prism-code language-text"><密码>元素应该是不言自明的。可选<代码类=“prism-code language-text"><世界>元素可用于指定域名(对于CIFS),数据库或模式(用于数据库身份验证),或身份验证领域(对于HTTP)。

以下<代码类=“prism-code language-text">类型属性值可以用于<代码类=“prism-code language-text">与一个<代码类=“prism-code language-text">< DefaultAccount >检查:

  • IBM小型机PortMapper
  • pcAnywhere-control
  • CIFS(可选<代码类=“prism-code language-text"><世界>指定Windows域名)
  • DB2(<代码类=“prism-code language-text"><世界>指定数据库名称,例如<代码类=“prism-code language-text">样本的)
  • FTP.
  • http.
  • mysql.(<代码类=“prism-code language-text"><世界>指定数据库名称,例如<代码类=“prism-code language-text">mysql的)
  • Novell NetWare
  • 甲骨文(<代码类=“prism-code language-text"><世界>指定数据库名称)
  • Postgres(<代码类=“prism-code language-text"><世界>指定数据库名称,例如<代码类=“prism-code language-text">template1的)
  • 远程执行(rexec,如port<代码类=“prism-code language-text">512 / tcp的)
  • SNMP.(仅指定<代码类=“prism-code language-text"><密码>元素,它将是SNMP团体名,例如<代码类=“prism-code language-text">私人的的)
  • SSH
  • TDS(Microsoft SQL Server,<代码类=“prism-code language-text"><世界>指定数据库名称,例如<代码类=“prism-code language-text">的)
  • Sybase (<代码类=“prism-code language-text"><世界>指定数据库名称,例如<代码类=“prism-code language-text">的)
  • 远程登录

cifs-default-password-administrator-password.vck

此检查查找CIFS上的Administrator/密码:

         
XML.
1
<VulnerabilityCheckid=cifs-generic-0002范围=节点>
2
<NetworkService类型=CIFS/>
3.
<defaultAccount.>
4.
<uid>管理员uid>
5.
<密码>密码密码>
6.
defaultAccount.>
7.
VulnerabilityCheck>

ssh-default-account-root-password-password.vck * *

这个检查查找SSH上的root/密码:

         
XML.
1
<VulnerabilityCheckid=ssh-default-account-root-password-password范围=端点>
2
<NetworkService类型=SSH/>
3.
<defaultAccount.>
4.
<uid>uid>
5.
<密码>密码密码>
6.
defaultAccount.>
7.
VulnerabilityCheck>

telnet-default-account-root-password-password.vck * *

此检查在Telnet上查找root / password:

         
XML.
1
<VulnerabilityCheckid=telnet-default-account-root-password-password范围=端点>
2
<NetworkService类型=远程登录/>
3.
<defaultAccount.>
4.
<uid>uid>
5.
<密码>密码密码>
6.
<领域>领域>
7.
defaultAccount.>
8.
VulnerabilityCheck>

mysql-default-account-admin-nopassword。vck**(检查MySQL上没有密码的管理员)

这个检查在MySQL上寻找一个没有密码的管理员:

         
XML.
1
<VulnerabilityCheckid=mysql-default-account-admin-nopassword范围=端点>
2
<NetworkService类型=mysql./>
3.
<defaultAccount.>
4.
<uid>管理uid>
5.
<密码>密码>
6.
<领域>mysql领域>
7.
defaultAccount.>
8.
VulnerabilityCheck>

操作系统指纹检查

         
XML.
1
<系统>
2
<操作系统minCertainty=1.0的名字=Windows NT服务器供应商=微软>
3.
<版本>
4.
<价值>4.0SP5.价值>
5.
版本>
6.
<版本>
7.
<价值>4.0SP6a价值>
8.
版本>
9.
<版本>
10
<价值>4.0SP4.价值>
11
版本>
12
操作系统>
13
系统>

拒绝服务检查

有时你想做一个不安全的检查,例如拒绝服务检查。在这种情况下,请设置安全属性<代码类=“prism-code language-text">< VulnerabilityCheck >来<代码类=“prism-code language-text">0..这将导致跳过此检查,除非用户显式地在其扫描模板中启用不安全检查。

         
XML.
1
<VulnerabilityCheckid=http-jrun-long-url-bof安全=0.范围=端点>
2
<NetworkService类型=http | https.>
3.
<产品的名字=JRun/>
4.
NetworkService>
5.
<httpcheck.重新审=3.>
6.
<httprequest方法=得到>
7.
<Uri.>/<垃圾长度=5200.>R7垃圾>jspUri.>
8.
httprequest>
9.
<HTTPResponse><brokexception.=java.io.IOException/>HTTPResponse>
10
httpcheck.>
11
<tcpstatuscheck.等待=2500状态=关闭/>
12
VulnerabilityCheck>

布尔表达式

有时你可能想要将一组检查分组<代码类=“prism-code language-text"><和>或<代码类=“prism-code language-text"><、>(或两者结合)以形成复杂的布尔测试。例如:

         
XML.
1
VulnerabilityCheckid=”的例子-http.-敏感的-数据”范围=“端点”>
2
<NetworkService类型=“http | https”/>
3.
<httpcheck.>
4.
<httprequest方法=“获得”><Uri.>/Uri.>
5.
<HTTPResponse代码=“200”>
6.
<>
7.
<正则表达式>密码正则表达式>
8.
<正则表达式>SSN[0.-9.]{3.}-[0.-9.]{2}-[0.-9.]{4.}正则表达式>
9.
>
10
HTTPResponse>
11
httpcheck.>
12
VulnerabilityCheck>