SMTP 检查器

SMTP 检查器概述

类型

检查器(服务)

使用方式

检测

实例类型

多实例

所需其他检查器

stream_tcp

已启用

true

简单邮件传输协议 SMTP 使邮件客户端能够向邮件服务器发送消息。SMTP 发出命令以将邮件传送给收件人。SMTP 服务器将 TCP 端口 25 用于不安全的会话,或将 TCP 端口 587 用于基于 SSL/TLS 的 SMTP。

smtp 检查器会检测 SMTP 流量并分析 SMTP 命令和响应。

smtp 检查器识别 SMTP 邮件的命令、信头和正文部分,并提取和解码多用途互联网邮件扩展 (MIME) 附件。MIME 附件可能包括多个附件和跨越多个数据包的大型附件。

smtp 检查器识别 SMTP 邮件并将其添加到 Snort 允许列表。启用后,入侵规则将针对异常 SMTP 流量生成事件。

您可以将 smtp 检查器配置为:

  • 记录发件人邮件 ID、收件人邮件 ID、邮件标题和附件文件名,以及生成的所有事件。

  • 删除无关的空格字符,使 SMTP 命令行规范化。smtp 检查器会将空格 (ASCII 0x20) 或制表符 (ASCII 0x09) 规范化。

  • 忽略 TLS 加密流量以提高性能。

  • 忽略纯文本邮件数据以提高性能。

配置 SMTP 检查器的最佳实践

我们建议您按照 RFC 2821 中的准则来配置 smtp 检查器的核心配置参数:

  • max_command_line_len:512 个字符

  • max_header_line_len:1024 个字符

  • max_response_line_len:512 个字符

SMTP 检查器参数

SMTP 服务配置

绑定程序 检查器定义 SMTP 服务 配置。有关详细信息,请参阅绑定程序检查器概述

示例:
[
    {
        "when": {
            "service": "smtp",
            "role": any
        },
        "use": {
            "type": "smtp"
        }
    }
]

alt_max_command_line_len[]

指定 SMTP 命令数组和该命令的备用最大行长度。备用最大行长度将覆盖 SMTP 命令的 max_command_line_len 的值。您可以启用规则 124:4 为此参数生成事件。

类型: 数组

示例:
{
    "alt_max_command_line_len": [
        {
            "command": "AUTH",
            "length": 240
        }
    ]
}

alt_max_command_line_len[].command

指定命令字符串。

类型: 字符串

有效值: SMTP 命令

默认值: 请参阅 SMTP 命令和默认备用命令长度

alt_max_command_line_len[].length

指定备用最大命令行长度。指定 0 将禁用命令的命令行长度检测。

类型: 整数

有效范围:04,294,967,295(最大 32)

默认值: 请参阅 SMTP 命令和默认备用命令长度

表 1. SMTP 命令和默认备用命令长度

命令

长度

ATRN

255

AUTH

246

BDAT

255

数据

246

DEBUG

255

EHLO

500

EMAL

255

ESAM

255

ESND

255

ESOM

255

ETRN

500

EVFY

255

EXPN

255

HELO

500

帮助

500

IDENT

255

邮件

260

NOOP

255

ONEX

246

QUEU

246

QUIT

246

RCPT

300

RSET

255

SAML

246

SEND

246

大小

255

SOML

246

STARTTLS

246

TICK

246

TIME

246

TURN

246

TURNME

246

VERB

246

VRFY

255

XADR

246

XAUTH

246

XCIR

246

XEXCH50

246

X-EXPS

246

XGEN

246

XLICENSE

246

X-LINK2STATE

246

XQUE

246

XSTA

246

XTRN

246

XUSR

246

auth_cmds

指定发起身份验证交换的 SMTP 命令列表。使用空格分隔多个 SMTP 命令。

类型: 字符串

有效值: SMTP 身份验证交换启动命令

默认值: AUTH XAUTH X-EXPS

b64_decode_depth

指定要从每个 Base64 编码的 MIME 邮件附件中提取和解码的最大字节数。可以指定小于 65535 的整数,或指定 0 以禁用解码。指定 -1 以对要解码的字节数不设限制。

您可以启用规则 124:10 来生成此参数的事件,并且在内联部署中,当解码失败时丢弃违规数据包。

类型: 整数

有效范围: -165535

默认值: -1

binary_data_cmds

指定一系列 SMTP 命令,这些命令启动发送数据,并在命令后使用长度值(以八位组为单位)以指示要发送的数据量。使用空格分隔多个 SMTP 命令。

类型: 字符串

有效值: 使用数据长度参数的有效 SMTP 数据发送启动命令

默认值: BDATA XEXCH50

bitenc_decode_depth

指定要从每个非编码的 MIME 邮件附件中提取的最大字节数。可以指定一个小于 65535 的整数,或指定 0 以禁用未编码 MIME 附件的提取。指定 -1 对要提取的字节数不设限制。这些附件类型包括 7 位、8 位、二进制以及各种多部分内容类型(例如,纯文本、JPEG 和 PNG 图像、MP4 文件等)。

类型: 整数

有效范围: -165535

默认值: -1

data_cmds

指定发起发送数据并使用数据结束符 (<CRLF>.<CRLF>) 的 SMTP 命令列表。

类型: 字符串

有效值: 使用数据结束分隔符的 SMTP 数据发送启动命令。

默认值: DATA

decompress_pdf

指定是否解压缩 MIME 附件中的 application/pdf (PDF) 文件。

类型: boolean

有效值: truefalse

默认值: false

decompress_swf

指定是否解压缩 MIME 附件中的 application/vnd.adobe.flash-movie (SWF) 文件。

类型: boolean

有效值: truefalse

默认值: false

decompress_vba

指定是否解压缩 MIME 附件中的 Microsoft Office Visual Basic for Applications 宏文件。

类型: boolean

有效值: truefalse

默认值: false

decompress_zip

指定是否解压缩 MIME 附件中的 application/zip (ZIP) 文件。

类型: boolean

有效值: truefalse

默认值: false

email_hdrs_log_depth

指定要从 SMTP 数据中提取的电邮信头的字节数。指定 0 以禁用电邮信头提取。

类型: 整数

有效范围: 020480

默认值: 1464

ignore_data

指定是否对邮件数据部分进行解码(MIME 邮件信头除外)。

类型: boolean

有效值: truefalse

默认值: false

ignore_tls_data

指定是否解码 TLS 加密数据。

类型: boolean

有效值: truefalse

默认值: false

log_email_hdrs

指定是否解码和记录 SMTP 邮件信头以及所有已生成的会话事件。

类型: boolean

有效值: truefalse

默认值: false

log_filename

指定是否解码和记录从 MIME 正文内的 Content-Disposition 报头提取的 MIME 附件文件名,以及为会话生成的所有事件。如果邮件包含多个 MIME 附件,则 SMTP 检查器会记录用逗号分隔的文件名。SMTP 检查器记录的内容不超过 1024 字节。

类型: boolean

有效值: truefalse

默认值: false

log_mailfrom

指定是否解码和记录从 SMTP MAIL FROM 命令提取的发件人邮件地址,以及生成的所有会话事件。如果邮件包含多个发件人,则 SMTP 检查器将记录用逗号分隔的发件人。SMTP 检查器记录的内容不超过 1024 字节。

类型: boolean

有效值: truefalse

默认值: false

log_rcptto

指定是否解码和记录来自 SMTP RCPT TO 命令的收件人邮件地址,以及生成的所有事件事件。如果邮件包含多个收件人,则 SMTP 检查器将记录用逗号分隔的收件人。SMTP 检查器记录的内容不超过 1024 字节。

类型: boolean

有效值: truefalse

默认值: false

max_auth_command_line_len

指定 SMTP 身份验证命令行接受的最大字节数。

您可以启用规则 124:15 以生成事件,并在内联部署中丢弃违规数据包。指定 0 以禁用对 SMTP AUTH 命令的警报,或从 Snort 配置中省略 max_auth_command_line_len 参数。

类型: 整数

有效范围: 065535

默认值: 1000

max_command_line_len

指定 SMTP 命令行接受的最大字节数。

RFC 2821(网络工作组关于 SMTP 的规范)建议的最大命令行长度为 512 字节。指定 0 以禁用对 SMTP 命令行长度的警报,或从 Snort 配置中省略 max_command_line_len 参数。

您可以启用规则 124:1 来生成事件,并在内联部署中丢弃违规数据包。

类型: 整数

有效范围: 065535

默认值: 512

max_header_line_len

指定 SMTP 数据信头行接受的最大字节数。

RFC 2821(网络工作组关于 SMTP 的规范)建议的最大数据信头行长度为 1024 字节。指定 0 以禁用 SMTP 数据信头行长度警报,或从 Snort 配置中省略 max_header_line_len 参数。

您可以启用规则 124:2 和 124:7 以生成事件,并在内联部署中丢弃违规数据包。

类型: 整数

有效范围: 065535

默认值: 1000

max_response_line_len

指定 SMTP 响应行接受的最大字节数。

RFC 2821(网络工作组关于 SMTP 的规范)建议的最大响应行长度为 512 字节。指定 0 以禁用有关 SMTP 响应行长度的警报,或从 Snort 配置中省略 max_response_line_len 参数。

您可以启用规则 124:3 以生成事件,并在内联部署中丢弃违规数据包。

类型: 整数

有效范围: 065535

默认值: 512

规范化

指定规范化所有命令、无命令还是命令列表。您可以在 normalize_cmds 参数中指定命令列表。检查器会检查命令后是否存在多个空格 (ASCII 0x20) 或制表符 (ASCII 0x09) 字符。

类型: enum

有效值:

  • none

  • cmds

  • all

默认值: none

normalize_cmds

指定要规范化的 SMTP 命令列表。使用空格分隔多个 SMTP 命令。

类型: 字符串

有效值: SMTP 命令

默认值: None

qp_decode_depth

指定要从每个 Quoted-Printable (QP) 编码的 MIME 邮件附件中提取和解码的最大字节数。可以指定小于 65535 的整数,或指定 0 以禁用解码。指定 -1 以对要解码的字节数不设限制。

您可以启用规则 124:11 来生成事件,并在内联部署中丢弃违规数据包。

类型: 整数

有效范围: -165535

默认值: -1

uu_decode_depth

指定要从每个 Unix-to-Unix 编码(UuEncode 编码)的 MIME 邮件附件中提取和解码的最大字节数。可以指定小于 65535 的整数,或指定 0 以禁用解码。指定 -1 以对要解码的字节数不设限制。

您可以启用规则 124:13 来为此参数生成事件,并且在内联部署中,当解码失败(例如,由于编码不正确或数据损坏)时,丢弃违规的数据包。

类型: 整数

有效范围: -165535

默认值: -1

valid_cmds

指定 SMTP 检查器认为有效的 SMTP 命令的其他列表。

即使此列表为空,预处理器仍允许下列有效命令:ATRN AUTH BDAT DATA DEBUG EHLO EMAL ESAM ESND ESOM ETRN EVFY EXPN HELO HELP IDENT MAIL NOOP ONEX QUEU QUIT RCPT RSET SAML SEND SIZE STARTTLS SOML TICK TIME TURN TURNME VERB VRFY X-EXPS X-LINK2STATE XADR XAUTH XCIR XEXCH50 XGEN XLICENSE XQUE XSTA XTRN XUSR.

您可以启用规则 124:5 以生成事件,并在内联部署中丢弃违规数据包。

类型: 字符串

有效值: SMTP 命令

默认值: None

xlink2state

指定 SMTP 检查器如何处理属于 X-Link2State Microsoft Exchange 缓冲区数据溢出攻击的数据包(有关漏洞的说明,请参阅 CVE-2005-0560)。您可以禁用检测 (disable),启用检测并生成警报 (alert),也可以启用检测并丢弃违规数据包 (drop)。

您可以启用规则 124:8 来生成此参数的事件,并且在内联部署中丢弃违规数据包。

类型: enum

有效值:

  • disable

  • 警报

  • 丢弃

默认值: alert

SMTP 检查器规则

生成事件并在内联部署中丢弃攻击性数据包启用 smtp 检查器规则。

表 2. SMTP 检查器规则

GID:SID

Rule Message

124:1

尝试的命令缓冲区溢出

124:2

数据报头缓冲区溢出尝试次数

124:3

尝试的响应缓冲区溢出

124:4

特定命令缓冲区溢出尝试次数

124:5

未知命令

124:6

非法命令

124:7

已尝试报头名称缓冲区溢出

124:8

尝试的 X-Link2State 命令缓冲区溢出

124:10

base64 解码失败

124:11

Quoted-Printable 解码失败

124:13

Unix-to-Unix 解码失败

124:14

Cyrus SASL身份验证攻击

124:15

命令缓冲区溢出所尝试的身份验证

124:16

文件解压缩失败

SMTP 检查器入侵规则选项

vba_data

将检测光标设置为 Microsoft Office Visual Basic for Applications 宏缓冲区。

语法: vba_data;

示例: vba_data;