logo资料库

snort抓包命令.docx

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
snort.conf 分析 此文件包含一个 snort 配置样例。 共分五步骤: 1 设置你的网络变量 2 配置动态加载库 3 配置预处理器 4 配置输出插件 5 增加任意的运行时配置向导 6 自定义规则集 step1:设置你的网络变量 1 其中针对本地网络给出 3 种方式: a) 清晰指定你的本地网络 var HOME_NET 192.168.1.0/24 (如果希望构建的 Snort 支持 IPV6 支持,则这里定义网段的类型就 应该改为 pvar) b) 使用全局变量 var HOME_NET $eth0_ADDRESS c) 也可一定义一个地址列表,中间用逗号隔开: var HOME_NET [10.1.1.0/24,192.168.1.0/24] (列表中不能有空格) d) 定义任意的 IP 地址 var HOME_NET any 2 针对外部网络 a) 全部 var EXTERNAL_NET any b) 除了 HOME_NET 之外的 var EXTERNAL_NET !$HOME_NET 3 配置你的服务器列表 (如果你都没有运行一个 web server,干嘛还要检测 HTTP 攻击呢?这样可以基于 IP 地址进 行快速的过滤,这些配置必须保持和$HOME_NET 相同的配置框架) DNS 服务: var DNS_SERVERS $HOME_NET SMTP 服务: var SMTP_SERVERS $HOME_NET
Web 服务: var HTTP_SERVERS $HOME_NET SQL 服务: var SQL_SERVERZ $HOME_NET Telnet 服务: var TELNET_SERVERS $HOME_NET FTP 服务: var FTP_SERVERS $HOME_NET SNMP 服务: var SNMP_SERVERS $HOME_NET 4 配置你的服务端口 这使得 snort 去跟踪针对特点端口应用的攻击,如你的 web server 在端口 8180 上,则你应 这样配置: portvar HTTP_PORTS 8180 不过这个值通常为 80,因此定义为: portvar HTTP_PORTS 80 如果你希望定义多 HTTP 端口,语法是这样的: portvar HTTP_PROTS [80,8080] 或者 portvar HTTP_PROTS[80,8000:8080] 但是在 rule 中只能定义$HTTP_PORTS 一次,之前曾有方法对此变量进行重定义,包含了两 次定义,这种做法已经不再使用。 eg: 定义你希望发现 SHELLCODE 的端口: portvar SHELLCODE_PORTS !80 可能发想对 ORACLE 的攻击: portvar ORACLE_PORTS 1521 针对 FTP 服务的端口: portvar FTP_PORTS 21 AIM 服务(聊天服务): AOL 公司有增加新的 AIM 服务的习惯,我们将他们都增加到服务列表中,而不是修改它们 的签名(这一句话,我还理解的不够透彻,原文是:AOL has a habit of adding new AIM servers,
so instead of modifying signatures when they do, we add them to this list of servers.) var AIM_SERVERS [64.12.24.0/23, ....] 5 配置你的 rules 文件路径 这个可以是一个相对路径(不过对于 windows 用户,最好给绝对路径) var RULE_PATH /etc/snort/rules var PREPROC_RULE_PATH /etc/snort/preproc_rules6 配置你的解码器 说明:snort 的解码器会因为很多事情而产生警报,如报文头截断、不正常的长度和不经常 使用的 tcp 选项。 关闭一般解码事件: config disable_decode_alerts 关闭针对实验 TCP 选项的警告 config disable_tcpopt_experimental_alerts 关闭针对失效 TCP 选型的警告 config disable_tcpopt_obsolete_alerts 关闭针对 T/TCP 警告的相应 config disable_tcpopt_ttcp_alerts 关闭针对所有 TCP 选项类型事件的相应 config disable_tcpopt_alerts 关闭针对非法 ip 选型的警告 config disable_ipopt_alerts 开启警告:如果(IP,TCP,UDP)的长度域中的值要比真实捕获数据包的长度值要大,则发出警告: config enable_decode_oversized_alerts 同上面场景但是,但如果在 inline 模式中,将直接 drop 此包,但需保证上面的 config: enable_decode_oversized_alerts 已经开启: config enable_decode_oversized_drops 7 配置你的检测引擎 如果你的电脑只有非常限定的资源,则需使用不同模式匹配: config detection: search-method lowmem 8 配置 inline 重置(resets) 如果你在 snort 的 inlineMode()模式中运行 iptables 防火墙,我们现在可以通过物理设备执行 重置操作。我们从 iptables 中获取 indev,然后使用此作为发送 resets 的接口。这个配置将 使用源 mac 地址来作为你想重置包的参数。这种方式 bridge 将会继续保持 stealthy. 如果源
mac 地址选项没有设置,我们默认将通过 raw socket 发送 resets,但需要 ip 地址。 config layer2resets: 00:06:76:DD:5F:E3 ********************************************** Step2: 配置动态加载库 如果 snort 配置了使用动态加载库,则库将会在这里加载。 下面的配置选型都可以通过 command 行执行。 1 从安装路径加载所有动态预处理器 (=在命令行选型:--dynamic-preprocessor-lib-dir) dynamicpreprocessor directory /usr/lib/snort_dynamicpreprocessor/ 2 从安装路径加载指定的动态预处理器 (=命令行选型: --dynamic-preprocessor-lib) dynamicpreprocessor file /usr/lib/snort_dynamicpreprocessor/libdynamicexample.so 3 从安装路径加载动态引擎 (=命令行选项:--dynamic-engine-lib) dynamicengine /user/lib/snort_dynamicengine/libsf_engine.so 4 从安装路径加载所有动态规则库 (--dynamic-detection-lib-dir) dynamicdetection directory /usr/lib/snort_dynamicrule/ 5 加载指定动态规则库 (--dynamic-detection-lib) dynamicdetection file /usr/lib/snort_dynamicrule/libdynamicexamplerule.so ************************************************ Step3: 配置预处理器 一般针对预处理的配置形式如下: preprocessor : 1. frag3: 基于目标的 IP 分片重组 Frag3 是一个新的 IP 分片重组处理器,可以执行基于目标的 IP 分段处理。通过 doc 目录下的 README.frag3,你可以得到更多相关背景和配置消息。 Frag3 配置分为两步,首先是全局的初始化阶段,之后是定义分段引擎设置。 全局配置定义了 snort 可以同时跟踪的分片包数目,并且给你考虑子系统内存的一些选型, 你可以选择将所有内存预分配给 frag3 系统。
a) frag3_global 选项: max_frag3: 同时最大分片跟踪数,默认是 8192 mem_cap: frag3 可以在任意指定时间访问的最大内存,默认为 4MB prealloc_frages: 一次能够处理的最大分片数目。它取代 memcap 系统,而是通过静态分配来 提高性能。没有默认值,每一个典型的预分配分段占有 1550bytes 左右,然而,精确数量是 由 snaplen(解释:SnapLen, Snap Length, or snapshot length is the amount of data for each frame that is actually captured by the network capturing tool and stored into the CaptureFile. This is sometimes called PacketSlicing.)决定的,要留意这个可以高达 64k。 b) frag_engine 选项: timeout: 一个分片的包在消亡前可能激活需要的总时间,默认是 60sec。 ttl_limit: 在分片中可允许的包的 TTL 值。这要基于初始接受的片段的 TTL。 min_ttl: 分片中可接受的最小 TTL 值,分片的 TTLs 要是低于此值将会被丢弃,默认值 0. detect_anomalies: 激活 frag3 的异常检测机制 policy: 分配到此引擎的基于目标的策略,默认为 BSD,linux 系统为 LINUX bind_to: 绑定到此引擎的 IP 地址集,默认是所有主机。 c) Frag3 配置例子: preprocessor frag3_global: max_frag3 65536, prealloc_frag3 65536 preprocessor frag3_engine: policy linux/ bind_to [10.1.1.12/32,10.1.1.13/32] / detect_anomalies preprocessor frag3_engine: policy first / bind_to 10.2.1.0/24 / detect_anomalies preprocessor frag3_engine: policy last/ bind_to 10.3.1.0/24 preprocessor frag3_engine: policy bsd 在 snort.conf 默认开启的配置是: preprocessor frag3_global: max_frags 65536 preprocessor frag3_engine: policy first detect_anomalies overlap_limit 10 2. Stream5 stream5 是 snort 中的一个基于目标的流引擎。它能够处理 TCP 和 UDP 跟踪连接,以及 TCP 组装。 在 README.stream5 可以看到更详细的配置选项。 eg: preprocessor stream5_global: max_tcp 8192, track_tcp yes, track_dup no. preprocessor stream_tcp: policy first
在产品系统中不推荐的: preprocessor stream5_tcp: policy first, use_static_footprint_sizes preprocessor stream5_udp: ignore_any_rules 3 性能策略: 这一部分在 Snort Manual 中有介绍,你可以阅读。 preprocessor perfmonitor: time 300 file /var/snort/snort.stats pktcnt 10000 4 http 检查:标准化和检测 Http 流量和协议异常 这里提供了很多选项,可以查看/doc/README.http_inspect. unicode.map 应该在你 snort.conf 所在的地方,你应该给一个 snort 可以找到的全路径。 preprocessor http_inspect: global / iis_unicode_map unicode.map 1252 preprocessor http_inspect_server: server default / profile all ports {80 8080 8180} oversize_dir_length 500 5 单一应用服务器的配置: proprocessor http_inspect_server: server 1.1.1.1 / ports { 80 3128 8080 } server_flow_depth 0 / ascii no / double_decode yes / non_rfc_char { 0x00 } / chunk_length 500000/ non_strict / oversize_dir_length 300 / no_alters 6 rpc_decode: 标准化 RPC 流量 除了默认的通常的 4-byte 编码,RPC 被当作候补编码。这个插件需要 RFC 的服务端口作为参 数(假定给出的端口都是运行此类型服务的,如果不是,将改变端口或者关闭) RPC 解码预处理器使用产生器 ID 106 参数:需要使用空格分开 alert_fragments: 警报,在所有 RPC 分段 TCP 数据 no_alert_multiple_requests: 当 1 个包中的 rpc 查询大于 1 时,发生警报 no_alert_large_fragments: 当分片大小超过当前包大小时不报警 no_alert_incomplete: 当一个单片段大小超过当前包大小时不报警 (我对 fragment 和 segment 的区别还不是清楚) eg: preprocessor rpc_decode: 111 32771 7 bo: Back Orifice 后门检测器 用来检测网络上的 后门流量
参数: 语法: preprocessor bo: noalert {client | server | general | snort_attack } / drop {client | server | general | snort_attack} 案例: preprocessor bo: noalert {general server} drop { snort_attack} 后门检测器 Bo 使用发生器 ID:105,并使用以下 SIDS: SID 事件描述 1 后门流量检测 2 后门客户端流量检测 3 后门服务端流量检测 4 后门 Snort 缓冲区攻击 proprocessor bo 8 ftp_telnet: FTP & Telent 标准化,协议强制和缓冲区溢出 这个预处理器会标准化 telnet 协商字符串从 telnet 和 ftp 流量中。它查找打破协议数据流标 准化的流量,使用标准化的表示取而代之。这样的内容模式匹配关键词可以在不进行修改情 况下的工作。 它同样可以执行协议正确性检测对于 FTP 命令频道,并鉴定开放的 FTP 数据转移。 FTPTelnet 有很多可选型,可以读 README.ftptelnet 来寻求配置选项,对于全局telnet、ftp server, 协议的 ftp clinet 分段。 在 Step2 中,可以这样设置来加载 ftptelnet 预处理器: dynamicpreprocessor file 或者使用命令行: --dynamic-preprocessor-lib eg: preprocessor ftp_telnet global / encrypted_traffic yes/ inspection_type stateful preprocessor ftp_telnet_protocol: telnet / normalize / ayt_attack_thresh 200 下面的是符合 2004-09-18 发布的规则: cwd 可以包含长度为 200 的参数; MODE 有一个额外 z 模式(压缩); 检查字符串格式,通过 USER & PASS 命令; 检查 nDTM 命令(设置文件的修改时间). preprocessor ftp_telnet_protocol: ftp server default /
def_max_param_len 100/ alt_max_param_len 200 {CWD} / cmd_validity MODE / cmd_validity MDTM <[data nnnnnnnnnnnnnn[.n[n[n]]] string >/ chk_str_fmt { USER PASS RNAR RNTO SITE MKD } / telent_cmds yes/ data_chan preprocessor ftp_telnet_protocol: ftp client default / max_resp_len 256 / bounce yes / telenet_cmds yes 9 SMTP smtp 标准化,协议强制和缓冲区溢出 这个预处理器通过取出多余的空间来标准化 SMTP 命令,它会查找过长的命令行,响应行以 及数据头行。它会在非法的命令或者指定的合法命令行发出警报。可以有选择的忽略邮件数 据,并且可以忽略 TLS 加密数据。 SMTP 有很多选项提供,可以查看 README.SMTP。 在 Step2 中,可以通过以下设置来加载 smtp 预处理器。 dynamicpreprocessor file or use commandline option --dynamic-preprocessor-lib 配置 Smtp 预处理器: preprocessor smtp: / ports {25 587 691} / inspection_type stateful / normalize cmds / normalize_cmds { EXPN VRFY RCPT } / alt_max_command_line_len 260 { MAIL } alt_max_command_line_len 300 { RCPT } alt_max_command_line_len 500 { HELP HELP ETRN} / alt_max_command_line_lne 255 { EXPN VRFY } 10 sfPortscan 预处理器 端口扫描检测模块。检测各种不同类型的端口扫描。通过 README.sfportscan 可以得多更多 关于检测原理、警告类型以及端口扫描细节。 配置选项: proto { tcp udp icmp ip all }
分享到:
收藏