我刚开始使用snort,但我不知道如何正确创建规则。 我希望有人向我解释如何创建用于检测特定内容的规则。例如:当我在Google上搜索“恐怖主义”一词时,我想生成一个警报。
我尝试使用在YouTube或Google上看到的示例创建规则,但是它们都不起作用,我也不知道该尝试什么。例如,我正在使用Snort 2.9.9
警报tcp $ HOME_NET任意-> $ EXTERNAL_NET任意(msg:“发现恐怖主义内容”; content:“恐怖主义”; nocase; sid:1000000;)
我在local.rules文件中没有任何错误,但是由于PulledPork出现了一些问题,因此我注释了'include $ RULE_PATH / snort.rules'这一行。 我希望在CLI中有一个警报,但是没有输出。
答案 0 :(得分:0)
我知道这已经太迟了,但这是供以后参考的答案。
数据包可能是使用HTTPS连接发送的(这就是为什么它们被加密的原因)。
这可能是没有警报的原因。
请参阅here以获得详细说明。
答案 1 :(得分:0)
规则已准备就绪,您只需将警报替换为丢弃:
find /home/www \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'
答案 2 :(得分:0)
好 答案在这里:http://manpages.ubuntu.com/manpages/xenial/man8/u2spewfoo.8.html 下载Snort源代码,制作日志服装,编写您的代码以控制日志流 然后构建源并运行 成功吧:)
答案 3 :(得分:0)
可以发送警报消息和一些与数据包相关的数据 通过unix套接字嗅探,以执行其他单独操作 处理警报数据。 Snort必须使用spo_unsock.c / h来构建。 -取消袜子(或通过配置文件等效) 用过的。 Unix套接字文件应在/ dev / snort_alert中创建。您的 侦听此unix套接字的“客户端”代码应充当“服务器”。 Snort将向您发送包含警报的Alertpkt结构 消息,事件ID。原始数据报,libpcap pkthdr和偏移量 数据链路,网络层和传输层标头。
下面是一个如何使用unix套接字的示例。如果你有任何 评论错误报告和功能要求,请联系 snort-devel@lists.sourceforge.net或给我发送电子邮件至Fygrave,地址为 Tigerteam点网。
-费奥多尔
[有关版权声明,请参见snort分发代码]
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include
#include "snort.h"
int sockfd;
void
sig_term (int sig)
{
printf (“Exiting!\n”);
close (sockfd);
unlink (UNSOCK_FILE);
exit (1);
}
int
main (void)
{
struct sockaddr_un snortaddr;
struct sockaddr_un bogus;
Alertpkt alert;
Packet *p;
int recv;
socklen_t len = sizeof (struct sockaddr_un);
if ((sockfd = socket (AF_UNIX, SOCK_DGRAM, 0)) < 0)
{
perror (“socket”);
exit (1);
}
bzero (&snortaddr, sizeof (snortaddr));
snortaddr.sun_family = AF_UNIX;
strcpy (snortaddr.sun_path, UNSOCK_FILE);
if (bind (sockfd, (struct sockaddr *) &snortaddr, sizeof (snortaddr)) < 0)
{
perror (“bind”);
exit (1);
}
signal(SIGINT, sig_term);
while ((recv = recvfrom (sockfd, (void *) &alert, sizeof (alert),
0, (struct sockaddr *) &bogus, &len)) > 0)
{
/* do validation of recv if you care */
if (!(alert.val & NOPACKET_STRUCT))
{
if ((p = calloc (1, sizeof (Packet))) == NULL)
{
perror ("calloc");
exit (1);
}
p->pkt = alert.pkt;
p->pkth = &alert.pkth;
if (alert.dlthdr)
p->eh = (EtherHdr *) (alert.pkt + alert.dlthdr);
if (alert.nethdr)
{
p->iph = (IPHdr *) (alert.pkt + alert.nethdr);
if (alert.transhdr)
{
switch (p->iph->ip_proto)
{
case IPPROTO_TCP:
p->tcph = (TCPHdr *) (alert.pkt + alert.transhdr);
break;
case IPPROTO_UDP:
p->udph = (UDPHdr *) (alert.pkt + alert.transhdr);
break;
case IPPROTO_ICMP:
p->icmph = (ICMPHdr *) (alert.pkt + alert.transhdr);
break;
default:
printf ("My, that's interesting.\n");
} /* case */
} /* thanshdr */
} /* nethdr */
if (alert.data)
p->data = alert.pkt + alert.data;
/* now do whatever you want with these packet structures */
} /* if (!NOPACKET_STRUCT) */
printf ("%s [%d]\n", alert.alertmsg, alert.event.event_id);
if (!(alert.val & NOPACKET_STRUCT))
if (p->iph && (p->tcph || p->udph || p->icmph))
{
switch (p->iph->ip_proto)
{
case IPPROTO_TCP:
printf ("TCP from: %s:%d ",
inet_ntoa (p->iph->ip_src),
ntohs (p->tcph->th_sport));
printf ("to: %s:%d\n", inet_ntoa (p->iph->ip_dst),
ntohs (p->tcph->th_dport));
break;
case IPPROTO_UDP:
printf ("UDP from: %s:%d ",
inet_ntoa (p->iph->ip_src),
ntohs (p->udph->uh_sport));
printf ("to: %s:%d\n", inet_ntoa (p->iph->ip_dst),
ntohs (p->udph->uh_dport));
break;
case IPPROTO_ICMP:
printf ("ICMP type: %d code: %d from: %s ",
p->icmph->type,
p->icmph->code, inet_ntoa (p->iph->ip_src));
printf ("to: %s\n", inet_ntoa (p->iph->ip_dst));
break;
}
}
}
perror (“recvfrom”);
close (sockfd);
unlink (UNSOCK_FILE);
return 0;
}