通过 Vulnerability Protection 趋势科技服务器深度安全防护系统日志审查模块,您可以收集并分析操作系统及应用程序日志以识别隐藏在数千日志条目中的重要安全事件。可以将这些事件发送至安全信息和事件管理 (SIEM) 系统或集中式日志记录服务器,以进行关联、报告及归档。同时集中在 Vulnerability Protection 趋势科技服务器深度安全防护系统管理中心安全收集所有事件。
通过 Vulnerability Protection 趋势科技服务器深度安全防护系统日志审查模块,您可以:
Vulnerability Protection 趋势科技服务器深度安全防护系统日志审查以多种方式自动收集重要安全事件:
尽管 Vulnerability Protection 趋势科技服务器深度安全防护系统附带用于多种常见操作系统和应用程序的日志审查规则,但是您仍可以选择创建自己的定制规则。要创建定制规则,您可以使用“基本规则”模板,也可以采用 XML 格式编写新规则。本文章将描述日志审查规则语言并提供定制编写规则的示例。有关现有日志审查规则属性的描述,请参阅参考部分的日志审查规则和检查日志审查规则文档。
日志审查规则由要监控更改的文件列表和触发规则要满足的一组条件组成。当日志审查引擎在受监控日志文件中检测到更改时,将由解码器解析该更改。解码器将原始日志条目解析为以下文本框:
规则将检查这些已解码数据,查找与规则中定义的条件相匹配的信息。
如果匹配项的严重性级别足够高,则可以执行以下任意操作:
日志审查引擎将日志审查规则应用于计算机的日志条目,以确定其中是否有条目可生成日志审查事件。
单个日志审查规则可包含多个子规则。这些子规则有两种类型:原子或复合。原子规则评估单个事件,而复合规则检查多个事件并可评估事件间的频率、重复和关联。
必须在 <group></group> 元素内定义每个规则或规则分组。属性名称必须包含希望成为该组一部分的规则。在以下示例中,已表明组包含 syslog 和 sshd 规则:
<group name="syslog,sshd,"> </group>
一个组可包含所需的任意数量的规则。规则使用 <rule></rule> 元素定义,且必须至少包含两个属性,即 id 和 level。id 是该特征的唯一标识符,level 是警报的严重性。在以下示例中,创建了两个规则,每个规则都具有不同的规则 id 和级别:
<group name="syslog,sshd,"> <rule id="100120" level="5"> </rule> <rule id="100121" level="6"> </rule> </group>
可以使用 <group></group> 标记在父组内定义其他子组。该子组可引用下表列出的任意组:
| 组类型 | 组名 | 描述 |
| 侦察 | connection_attempt web_scan recon |
连接尝试 Web 扫描 常规扫描 |
| 认证控制 | authentication_success authentication_failed invalid_login login_denied authentication_failures adduser account_changed |
成功 不成功 无效 拒绝登录 多次不成功 添加用户帐户 更改或移除用户帐户 |
| 攻击/滥用 | automatic_attack exploit_attempt invalid_access spam multiple_spam sql_injection attack virus |
蠕虫病毒(无目标性攻击) 入侵特征码 无效访问 垃圾邮件 多封垃圾邮件 SQL 注入 常规攻击 检测到病毒 |
| 访问控制 | access_denied access_allowed unknown_resource firewall_drop multiple_drops client_misconfig client_error |
拒绝访问 允许访问 访问不存在的资源 防火墙丢弃 多个防火墙丢弃 客户端配置错误 客户端错误 |
| 网络控制 | new_host ip_spoof |
检测到新主机 可能的 ARP 欺骗 |
| 系统监控 | service_start system_error system_shutdown logs_cleared invalid_request promisc policy_changed config_changed low_diskspace time_changed |
服务启动 系统错误 关闭 日志已清除 无效的请求 接口已切换至混杂模式 策略已更改 配置已更改 磁盘空间不足 时间已更改 |
包含 <description></description> 标记。如果触发了规则,将在事件中显示描述文本。
<group name="syslog,sshd,"> <rule id="100120" level="5"> <group>authentication_success</group> <description>SSHD testing authentication success</description> </rule> <rule id="100121" level="6"> <description>SSHD rule testing 2</description> </rule> </group>
<decoded_as></decoded_as> 标记指示日志审查引擎仅在已由指定解码器解码日志时应用规则。
<rule id="100123" level="5"> <decoded_as>sshd</decoded_as> <description>Logging every decoded sshd message</description> </rule>
要在日志中查找特定字符串,请使用 <match></match>。下面是一个 Linux sshd 密码不成功日志:
Jan 1 12:34:56 linux_server sshd[1231]:Failed password for invalid user jsmith from 192.168.1.123 port 1799 ssh2
使用 <match></match> 标记搜索 "password failed" 字符串。
<rule id="100124" level="5"> <decoded_as>sshd</decoded_as> <match>^Failed password</match> <description>Failed SSHD password attempt</description> </rule>
下表列出了支持的正则表达式语法:
| 正则表达式语法 | 描述 |
| \w | A-Z、a-z、0-9 之间的单个字母和数字 |
| \d | 0-9 之间的单个数字 |
| \s | 单个空格 |
| \t | 单个制表符 |
| \p | ()*+,-.:;<=>?[] |
| \W | 非 \w |
| \D | 非 \d |
| \S | 非 \s |
| \. | 所有内容 |
| + | 匹配以上任意项中的一个或多个(例如,\w+、\d+) |
| * | 匹配以上任意项中的零个或多个(例如,\w*、\d*) |
| ^ | 指示字符串的开头 (^somestring) |
| $ | 指定字符串的结尾 (somestring$) |
| | | 指示多个字符串之间的 "OR" 关系 |
规则评估可有条件地基于已被评估为 true 的其他规则。<if_sid></if_sid> 标记指示日志审查引擎仅在标记中标识的规则已评估为 true 时评估此子规则。以下示例显示三种规则:100123、100124 和 100125。已使用 <if_sid></if_sid> 标记将规则 100124 和 100125 修改为 100123 规则的子规则:
<group name="syslog,sshd,"> <rule id="100123" level="2"> <decoded_as>sshd</decoded_as> <description>Logging every decoded sshd message</description> </rule> <rule id="100124" level="7"> <if_sid>100123</if_sid> <match>^Failed password</match> <group>authentication_failure</group> <description>Failed SSHD password attempt</description> </rule> <rule id="100125" level="3"> <if_sid>100123</if_sid> <match>^Accepted password</match> <group>authentication_success</group> <description>Successful SSHD password attempt</description> </rule> </group>
<if_sid></if_sid> 标记本质上创建了一组具有层次结构的规则。也就是说,通过在规则中包含 <if_sid></if_sid> 标记,该规则成为 <if_sid></if_sid> 标记所引用的规则的子规则。在对日志应用任何规则之前,日志审查引擎将评估 <if_sid></if_sid> 标记并生成父/子规则的层次结构。
下表显示了可用原子规则条件选项的列表:
| 标记 | 描述 | 注意 |
| match | 特征码 | 匹配事件(日志)的任意字符串。 |
| regex | 正则表达式 | 匹配事件(日志)的任意正则表达式。 |
| decoded_as | 字符串 | 任意预先匹配的字符串 |
| srcip | 源 IP 地址 | 解码为源 IP 地址的任意 IP 地址。使用 "!" 可否定 IP 地址。 |
| dstip | 目标 IP 地址 | 解码为目标 IP 地址的任意 IP 地址。使用 "!" 可否定 IP 地址。 |
| srcport | 源端口 | 任意源端口(匹配格式)。 |
| dstport | 目标端口 | 任意目标端口(匹配格式)。 |
| user | 用户名 | 解码为用户名的任意用户名。 |
| program_name | 程序名称 | 从 syslog 进程名称解码的任意程序名称。 |
| hostname | 系统主机名 | 解码为 syslog 主机名的任意主机名。 |
| time | 采用 hh:mm - hh:mm 或 hh:mm am - hh:mm pm 格式的时间范围 |
为触发规则事件必须落入的时间范围。 |
| weekday | 周内日期(星期日、星期一、星期二等) | 为触发规则事件必须落入的周内日期。 |
| id | ID | 从事件解码的任意 ID。 |
| url | URL | 从事件解码的任意 URL。 |
使用 <if_sid>100125</if_sid> 标记可使此规则基于 100125 规则。将仅针对已匹配成功登录规则的 sshd 消息检查此规则。
<rule id="100127" level="10"> <if_sid>100125</if_sid> <time>6 pm - 8:30 am</time> <description>Login outside business hours.</description> <group>policy_violation</group> </rule>
以下示例采用之前的示例并添加了 maxsize 属性,该属性告知日志审查引擎仅评估字符数少于 maxsize 的规则:
<rule id="100127" level="10" maxsize="2000"> <if_sid>100125</if_sid> <time>6 pm - 8:30 am</time> <description>Login outside business hours.</description> <group>policy_violation</group> </rule>
下表列出了可能的原子规则的树状结构选项:
| 标记 | 描述 | 注意 |
| if_sid | 规则 ID | 将此规则添加为与指定签名 ID 相匹配的规则的子规则。 |
| if_group | 组 ID | 将此规则添加为与指定组相匹配的规则的子规则。 |
| if_level | 规则级别 | 将此规则添加为与指定严重性级别相匹配的规则的子规则。 |
| description | 字符串 | 规则的描述。 |
| info | 字符串 | 关于规则的附加信息。 |
| cve | CVE 编号 | 要与规则关联的任意常见弱点和漏洞 (CVE) 编号。 |
| 选项 | alert_by_email no_email_alert no_log |
指示警报是否应生成电子邮件 (alert_by_email),不生成电子邮件 (no_email_alert),或者不生成任何内容 (no_log) 的附加规则选项。 |
原子规则检查单个日志条目。要关联多个条目,必须使用复合规则。复合规则应将当前日志与已接收的日志相匹配。复合规则需要两个其他选项:frequency 选项指定事件/特征码必须出现多少次后规则才会生成警报,timeframe 选项告知日志审查引擎查看之前日志应追溯到的时间范围(以秒为单位)。所有复合规则都具有以下结构:
<rule id="100130" level="10" frequency="x" timeframe="y"> </rule>
例如,您可以创建一条符合规则,该规则可在 10 分钟内输入密码 5 次均不成功后生成较高严重性级别的警报。使用 <if_matched_sid></if_matched_sid> 标记,可以指示在所需频率和时间范围内需要出现哪条规则,新规则才会创建警报。在以下示例中,frequency 属性设置为当发现 5 个事件实例时触发,timeframe 属性设置为将时间范围指定为 600 秒。
<if_matched_sid></if_matched_sid> 标记用于定义复合规则将监视的其他规则:
<rule id="100130" level="10" frequency="5" timeframe="600"> <if_matched_sid>100124</if_matched_sid> <description>5 Failed passwords within 10 minutes</description> </rule>
存在多个可用于创建更详细的复合规则的其他标记。通过这些规则(如下表所示),您可以指定事件的某些部分必须相同。这样您可以优化复合规则并减少误报:
| 标记 | 描述 |
| same_source_ip | 指定源 IP 地址必须相同。 |
| same_dest_ip | 指定目标 IP 地址必须相同。 |
| same_dst_port | 指定目标端口必须相同。 |
| same_location | 指定位置(主机名或客户端名称)必须相同。 |
| same_user | 指定已解码的用户名必须相同。 |
| same_id | 指定已解码的 ID 必须相同。 |
如果想要复合规则在每次认证不成功时都发出警报,您可以将 <if_matched_sid></if_matched_sid> 标记替换为 <if_matched_ group></if_matched_ group> 标记,而不是特定的规则 ID。这使您可以指定一个类别(如 authentication_ failure)来搜索整个基础架构中的认证不成功。
<rule id="100130" level="10" frequency="5" timeframe="600"> <if_matched_group>authentication_failure</if_matched_group> <same_source_ip /> <description>5 Failed passwords within 10 minutes</description> </rule>
除了 <if_matched_sid></if_matched_sid> 和 <if_matched_group></if_matched_ group> 标记之外,您还可以使用 <if_matched_regex></if_matched_regex> 标记指定正则表达式,以便在接收到日志时搜索日志。
<rule id="100130" level="10" frequency="5" timeframe="600"> <if_matched_regex>^Failed password</if_matched_regex> <same_source_ip /> <description>5 Failed passwords within 10 minutes</description> </rule>
Vulnerability Protection 趋势科技服务器深度安全防护系统包含许多常见和常用应用程序的缺省日志审查规则。通过安全更新,可定期添加新规则。尽管日志审查规则支持的应用程序不断增多,您可能会发现还是需要为不受支持或定制的应用程序创建定制规则。
在本节中,我们将逐步完成 Microsoft Windows Server IIS .Net 平台上托管的定制 CMS(内容管理系统)的创建,并将 Microsoft SQL 数据库作为数据存储库。
第一步是确定以下应用程序日志记录属性:
对于我们的定制 CMS 示例,答案如下:
第二步是按应用程序功能确定日志事件的类别,然后将这些类别组织成级联组层次结构以进行审查。并非所有受审查的组都需要生成事件;可将匹配项用作条件语句。对于每个组,确定规则可将其用作匹配条件的日志格式属性。通过审查所有应用程序日志以了解其模式和日志事件的自然分组,可反向执行此操作。
例如,CMS 应用程序支持将为其创建日志审查规则的以下功能特性:
此结构将提供用于创建规则的良好基础。现在,在 Vulnerability Protection 趋势科技服务器深度安全防护系统管理中心中创建新的日志审查规则。
创建新的 CMS 日志审查规则:
<group name="cms"> <rule id="100000" level="0"> <category>windows</category> <extra_data>^CMS</extra_data> <description>Windows events from source 'CMS' group messages.</description> </rule>
<rule id="100001" level="0"> <if_sid>100000</if_sid> <id>^100|^101|^102|^103|^104|^105|^106|^107|^108|^109|^110</id> <group>authentication</group> <description>CMS Authentication event.</description> </rule> <rule id="100002" level="0"> <if_group>authentication</if_group> <id>100</id> <description>CMS User Login success event.</description> </rule> <rule id="100003" level="4"> <if_group>authentication</if_group> <id>101</id> <group>authentication_failure</group> <description>CMS User Login failure event.</description> </rule> <rule id="100004" level="0"> <if_group>authentication</if_group> <id>105</id> <description>CMS Administrator Login success event.</description> </rule> <rule id="100005" level="4"> <if_group>authentication</if_group> <id>106</id> <group>authentication_failure</group> <description>CMS Administrator Login failure event.</description> </rule>
<rule id="100006" level="10" frequency="5" timeframe="10"> <if_matched_group>authentication_failure</if_matched_group> <description>CMS Repeated Authentication Login failure event.</description> </rule>
将此规则分配给策略或计算机后,日志审查引擎应立即开始审查指定的日志文件。
完整的定制 CMS 日志审查规则:
<group name="cms">
<rule id="100000" level="0"> <category>windows</category> <extra_data>^CMS</extra_data> <description>Windows events from source 'CMS' group messages.</description> </rule>
<rule id="100001" level="0"> <if_sid>100000</if_sid> <id>^100|^101|^102|^103|^104|^105|^106|^107|^108|^109|^110</id> <group>authentication</group> <description>CMS Authentication event.</description> </rule> <rule id="100002" level="0"> <if_group>authentication</if_group> <id>100</id> <description>CMS User Login success event.</description> </rule> <rule id="100003" level="4"> <if_group>authentication</if_group> <id>101</id> <group>authentication_failure</group> <description>CMS User Login failure event.</description> </rule> <rule id="100004" level="0"> <if_group>authentication</if_group> <id>105</id> <description>CMS Administrator Login success event.</description> </rule> <rule id="100005" level="4"> <if_group>authentication</if_group> <id>106</id> <group>authentication_failure</group> <description>CMS Administrator Login failure event.</description> </rule> <rule id="100006" level="10" frequency="5" timeframe="10"> <if_matched_group>authentication_failure</if_matched_group> <description>CMS Repeated Authentication Login failure event.</description> </rule> <rule id="100007" level="5"> <if_sid>100000</if_sid> <status>^ERROR</status> <description>CMS General error event.</description> <group>cms_error</group> </rule> <rule id="100008" level="10"> <if_group>cms_error</if_group> <id>^200|^201|^202|^203|^204|^205</id> <description>CMS Database error event.</description> </rule> <rule id="100009" level="10"> <if_group>cms_error</if_group> <id>^206|^207|^208|^209|^230|^231|^232|^233|^234|^235|^236|^237|^238| ^239^|240|^241|^242|^243|^244|^245|^246|^247|^248|^249</id> <description>CMS Runtime error event.</description> </rule> <rule id="100010" level="0"> <if_sid>100000</if_sid> <status>^INFORMATION</status> <description>CMS General informational event.</description> <group>cms_information</group> </rule> <rule id="100011" level="5"> <if_group>cms_information</if_group> <id>^450|^451|^452|^453|^454|^455|^456|^457|^458|^459</id> <description>CMS New Content added event.</description> </rule> <rule id="100012" level="5"> <if_group>cms_information</if_group> <id>^460|^461|^462|^463|^464|^465|^466|^467|^468|^469</id> <description>CMS Existing Content modified event.</description> </rule> <rule id="100013" level="5"> <if_group>cms_information</if_group> <id>^470|^471|^472|^473|^474|^475|^476|^477|^478|^479</id> <description>CMS Existing Content deleted event.</description> </rule> <rule id="100014" level="5"> <if_group>cms_information</if_group> <id>^445|^446</id> <description>CMS User created event.</description> </rule> <rule id="100015" level="5"> <if_group>cms_information</if_group> <id>^447|449</id> <description>CMS User deleted event.</description> </rule> </group>
| 级别 | 描述 | 注意 |
| 级别 0 | 忽略,不执行操作 | 主要用于避免误报。对这些规则的扫描先于所有其他规则,规则中包含与安全无关的事件。 |
| 级别 1 | 无预定义的使用 | |
| 级别 2 | 系统低优先级通知 | 与安全无关的系统通知或状态消息。 |
| 级别 3 | 成功/授权事件 | 成功登录尝试、防火墙允许事件等 |
| 级别 4 | 系统低优先级错误 | 与错误配置或未使用设备/应用程序相关的错误。这些错误与安全无关,通常由缺省安装或软件测试导致。 |
| 级别 5 | 用户生成的错误 | 丢失密码、拒绝操作等。这些消息通常与安全无关。 |
| 级别 6 | 低关联攻击 | 表示对系统无威胁的蠕虫病毒或病毒,如攻击 Linux 服务器的 Windows 蠕虫病毒。还包括频繁触发的 IDS 事件和常见错误事件。 |
| 级别 7 | 无预定义的使用 | |
| 级别 8 | 无预定义的使用 | |
| 级别 9 | 来自无效源的错误 | 包括以未知用户身份或从无效源登录的尝试。该消息可能与安全有关,尤其是消息重复出现时。还包括有关 admin 或 root 帐户的错误。 |
| 级别 10 | 多个用户生成的错误 | 包括多个错误密码、多次登录不成功等。可能表示攻击,也可能只是用户忘记了自己的凭证。 |
| 级别 11 | 无预定义的使用 | |
| 级别 12 | 高重要性事件 | 包括来自系统、内核等的错误或警告消息。可能表示对特定应用程序的攻击。 |
| 级别 13 | 异常错误(高重要性) | 常见攻击特征码,如缓存溢出尝试、异常大的 syslog 消息或异常大的 URL 字符串。 |
| 级别 14 | 高重要性安全事件 | 通常为多个攻击规则关联的结果,表示攻击。 |
| 级别 15 | 攻击成功 | 误报几率非常小。需要立即引起注意。 |
| 说明符 | 描述 |
| %a | 缩写的周内日期名称(如 Thu) |
| %A | 完整的周内日期名称(如 Thursday) |
| %b | 缩写的月份名称(如 Aug) |
| %B | 完整的月份名称(如 August) |
| %c | 日期和时间表示(如 Thu Sep 22 12:23:45 2007) |
| %d | 月内某日 (01 - 31)(例如 20) |
| %H | 24 小时制中的小时 (00 - 23)(例如 13) |
| %I | 12 小时制中的小时 (01 - 12)(例如 02) |
| %j | 年内某日 (001 - 366)(例如 235) |
| %m | 以十进制计数的月份 (01 - 12)(例如 02) |
| %M | 分钟 (00 - 59)(例如 12) |
| %p | AM 或 PM 标记(如 AM) |
| %S | 秒 (00 - 61)(例如 55) |
| %U | 周数(第一个星期日为一周的第一天)(00 - 53)(例如 52) |
| %w | 以十进制计数的周内日期(星期日为 0)(0 - 6)(例如 2) |
| %W | 周数(第一个星期一为一周的第一天)(00 - 53)(例如 21) |
| %x | 日期表示(如 02/24/79) |
| %X | 时间表示(如 04:12:51) |
| %y | 年份,后两位数 (00 - 99)(例如 76) |
| %Y | 年份(如 2008) |
| %Z | 时区名称或缩写(如 EST) |
| %% | % 符号(如 %) |
可在以下 Web 站点找到更多信息:
www.php.net/strftime
www.cplusplus.com/reference/clibrary/ctime/strftime.html