Snort正在接收流量,但似乎未应用规则


11

我已经在本地网关上通过NFQUEUE安装了snort,并通过NFQUEUE以串联模式运行(因为我可以走进隔壁的房间并触摸它)。我的规则如下/etc/snort/rules/snort.rules

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"ET CURRENT_EVENTS D-LINK Router Backdoor via Specific UA"; flow:to_server,established; content:"xmlset_roodkcableoj28840ybtide"; http_header; pcre:"/^User-Agent\x3a[^\r\n]*?xmlset_roodkcableoj28840ybtide/Hm"; reference:url,www.devttys0.com/2013/10/reverse-engineering-a-d-link-backdoor/; classtype:attempted-admin; sid:2017590; rev:2; metadata:created_at 2013_10_13, updated_at 2013_10_13;)

此规则与某些DLink路由器中的后门有关。我选择此规则是因为它看起来很容易测试。规则本身是由新兴威胁中的pullpork添加的,因此我认为规则语法是正确的。

为了进行测试,我在面向互联网的端口80上配置了lighttpd网关,并确认该网关可访问。然后,在远程计算机上,运行命令curl -A 'xmlset_roodkcableoj28840ybtide' 'http://<EXTERNAL_IP>'。这会立即将响应从lighttpd打印到控制台并退出。网关上不会生成任何Snort警报。

另外,netfilter似乎仅利用了我运行的四个snort进程中的两个。我可以看到这一点,htop因为使用bittorrent测试时,CPU 1和2上的snort进程负担很重...但是CPU 0和3上的snort进程仍然完全空闲。

我的测试方法错误吗?还是snort不应该在什么时候发出警报(即由于配置错误)?我在哪里可以看到为什么netfilter无法在所有四个队列之间平衡流量?

组态

我的Snort / Netfilter配置

我的netfilter链的特定相关部分是:

Chain wan-fw (1 references)
 pkts bytes target     prot opt in     out     source               destination         
25766 2960K smurfs     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID,NEW,UNTRACKED
    4  1380 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:67:68
 4267  246K tcpflags   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           
 3820  550K ~comb0     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED     <<=== this one for established connections ====!
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED
  937 79669 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:!0x17/0x02
   13   506 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 /* Ping */
    4   240 ~log0      tcp  --  *      *       <remote_server>      0.0.0.0/0            tcp dpt:80 /* Tiphares Allowed In */     <<=== this one for new connections ====!
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type BROADCAST
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type ANYCAST
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type MULTICAST
21506 2454K NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: up to 1/sec burst 10 mode srcip nflog-prefix  "IPv4 wan-fw REJECT " nflog-threshold 1
24808 2878K reject     all  --  *      *       0.0.0.0/0            0.0.0.0/0           [goto] 
Chain ~log0 (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    4   240 NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: up to 1/sec burst 10 mode srcip /* Tiphares Allowed In */ nflog-prefix  "IPv4 HTTPTest NFQUEUE " nflog-group 1 nflog-threshold 1
    4   240 NFQUEUE    all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* Tiphares Allowed In */ NFQUEUE balance 0:3 bypass cpu-fanout     <<=== passes packets to one of 4 snort processes ====!
Chain ~comb0 (4 references)
 pkts bytes target     prot opt in     out     source               destination         
 474K  196M NFQUEUE    all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED NFQUEUE balance 0:3 bypass cpu-fanout     <<=== all established connections from 'wan' are monitored by snort ====!
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0      

额外的皱纹:

我不确定是否相关。我发现网关上的某些东西似乎将TCP重置数据包发送到Internet上的IP。并且这些数据包不与现有连接关联。

鉴于在此网关后面的计算机上使用bittorrent时会发生这种情况,并且大多数重置数据包都将torrent端口列为源端口,对我而言唯一有意义的是,这是在阻止某项内容时发出snort发送重置信息(是吗? )。

但是我使用nfqueue daq ...所以,如果它是snort,那么为什么要以netfilter视为新连接的方式snort发送这些数据包,而不是将数据包直接插入netfilter链并将它们与现有的过滤器关联它阻塞的连接?而且,snort并未设置为丢弃数据包或发送重置(仅警报)...那么为什么要这样做呢?因此,为什么我不确定这是snort在做什么。

其他资讯

根据@Lenniey的建议,我也使用进行了测试curl -A 'asafaweb.com' http://server-ip。这也没有产生警报。我再次检查了规则文件中是否存在与此相关的规则。那里有两个:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"ET POLICY ASafaWeb Scan User-Agent (asafaweb.com)"; flow:established,to_server; content:"User-Agent|3a| asafaweb.com|0d 0a|"; http_header; reference:url,asafaweb.com; classtype:network-scan; sid:2014233; rev:2; metadata:created_at 2012_02_16, updated_at 2012_02_16;)

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"MALWARE-CNC User-Agent ASafaWeb Scan"; flow:to_server,established; content:"User-Agent|3A| asafaweb.com"; fast_pattern:only; http_header; metadata:policy balanced-ips alert, policy security-ips drop, ruleset community, service http; reference:url,asafaweb.com; classtype:network-scan; sid:21327; rev:7;)

我还更新了我的配置。我上载的显然是旧的(http netfilter规则显示为ACCEPT而不是NFQUEUE)。


评论不作进一步讨论;此对话已转移至聊天
迈克尔·汉普顿

iptables除非您对计数器特别感兴趣,否则输出永远不是一个好选择。iptables-save如果您希望人类阅读它
则更可取-poige

@poige同意。当时,我只是遵循“ iptables”标记附带的建议。但是,将来,我可能会使用iptables-save。
克里夫·阿姆斯特朗

Answers:


5

在聊天中“已解决”。

在调试完几乎所有内容(iptables + NFQUEUE,systemd.service和插入单元,snort警报等)之后,问题出在测试方式上。

通常,作为内联IDS / IPS本身的snort并未定义为检查可疑流量,而是仅检查HOME_NET(也称为本地LAN子网),而不检查其自身的公共IP。原始规则已针对该公共IP进行了测试,因此未生成任何警报,因为警报的默认值类似于EXTERNAL_NET any -> HOME_NET any


此外,由于问题主要是为了验证我的测试方法是否有效,并且您是第一个确认它是否...接受答案的人。
克里夫·阿姆斯特朗

您是否可以在这篇文章中加入更多相关内容?理想情况下,人们不应觉得自己应该阅读整个聊天记录以确保他们理解答案。
迈克尔·汉普顿

@MichaelHampton非常正确,我添加了一些信息。更好?
Lenniey

1
好,现在我知道了。这意味着其他读者也可能也会这样做。
迈克尔·汉普顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.