如何创建snort内容规则

时间:2019-06-27 10:50:06

标签: snort

我刚开始使用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中有一个警报,但是没有输出。

4 个答案:

答案 0 :(得分:0)

我知道这已经太迟了,但这是供以后参考的答案。
数据包可能是使用HTTPS连接发送的(这就是为什么它们被加密的原因)。
这可能是没有警报的原因。

请参阅here以获得详细说明。

答案 1 :(得分:0)

规则已准备就绪,您只需将警报替换为丢弃

snort command and rules control, fast

find /home/www \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'

,您可以在配置文件中使用包含 enter image description here

答案 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;
}