网络入侵检测系统之Suricata(一)_网络入侵检测系统之 suricata_于顾而言的博客-程序员宅基地

技术标签: 网络入侵检测系统  网络入侵检测  suricata  网络安全  

What is Suricata

  • Suricata是一个免费,开源,成熟,高性能,稳定的网络威胁检测引擎
  • 系统功能包括:实时入侵检测(IDS)、内联入侵预防(IPS)、网络安全监控(NSM)和离线pcap处理
  • Suricata依靠强大的可扩展性的规则和特征语言过滤网络流量,并支持LUA脚本语言
  • 输出文件格式为YAML或JSON,方便与其他数据库或安全数据分析平台集成 Suricata采用社区驱动开发,有利于版本的维护和新特性的迭代

Features

  • IDS / IPS
完善的特征语言用于描述已知的威胁和恶意行为,
并兼容Emerging Threats Suricata ruleset(Proofpoint和Intel规则)
和VRT ruleset(snort规则),支持 Barnyard 和 Barnyard2 工具
  • High Performance
单个suricata示例可检测千兆网络流量,该引擎基于多线程编码和硬件加速(pf_ring,af_packet)
  • Automatic protocol detection
自动对端口协议扫描,有利于发现恶意软件和通信信道
  • NSM: More than an IDS
Suricata可记录所有的http请求链接,DNS请求和tls密钥交换,并支持从流中提取信息存储到磁盘中。
  • Lua scripting
LUA脚本可以弥补规则集中无法描述的特征
  • Industry standard outputs
主要日志输出格式为Eve,即所有的协议事件,警报输出
(可单独指定主机或子网段,可配置全局规则或单独规则),流量记录
  • Operation System
Linux、FreeBSD、OpenBSD、macOS / Mac OS X、Windows
  • Configuration
YAML作为规则文件格式,可读性好
  • TCP/IP engine
支持IPV6,支持隧道解码包括:Teredo、IP-IP、IP6-IP4、IP4-IP6、GRE、
VXLAN、Geneve,支持会话跟踪和流重组,IP分片重组,
支持多种协议解码包括IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE,Ethernet, 
PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN, VXLAN, Geneve,HTTP, HTTP/2, 
SSL, TLS, SMB, DCERPC, SMTP, FTP, SSH, DNS, Modbus, ENIP/CIP, DNP3, NFS, NTP, 
DHCP, TFTP, KRB5, IKEv2, SIP, SNMP, RDP, RFB, MQTT
  • HTTP engine
实现基于libhtp有状态的http解析器,可解析URL,请求和响应首部,cookie,
user-agent,request body and response body,请求方法和状态码,host
  • Detection engine
可基于多特征进行检测匹配,包括:协议关键字,正则(Hyperscan),
快速模式和预处理,文件匹配,JA3 / JA3S / HASSH匹配。
规则方面支持实时加载规则而不重启suricata,规则延迟初始化
  • Packet acquire
高性能捕获模式:AF_PACKET,PF_RING,NETMAP
标准模式:NFLOG ,PCAP
IPS模式:Netfilter ,NETMAP,AF_PACKET (Linux),ipfw (reeBSD and NetBSD)
  • Muti threading
线程支持可配,一个到几十个都可以;互斥操作采用原子函数提高性能;

Architecture

在这里插入图片描述

  • Packet Capture

    AF_PACKET and PF_RING通过flow (5 tuple)对称哈希到线程上
    RSS技术通过分发到网卡上不同队列来分发流量,但缺点是非对称加密这会使类似TCP的双向流量检测有误
    所以通常我们配置一个rss队列或用对称哈希算法,并且不启用网卡流量卸载,卸载会会无法跟踪某些流状态,举个配置例子:
    PF_RING: 1 RSS queue and use cluster-type ‘cluster_flflow’. Disable NIC offlfloading except the rx/tx csum

  • Hyperscan

    Hyperscan is a high-performance multiple regex matching library, In Suricata it can be used to perform multi pattern matching (mpm).
    首先安装一下hyperscan:

    apt-get install cmake ragel
    	​
    	apt-get install libboost-dev
    	​
    	sudo apt-get python-dev libbz2-dev
    	wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz
    	tar xvzf boost_1_66_0.tar.gz
    	cd boost_1_66_0
    	./bootstrap.sh --prefix=~/tmp/boost-1.66
    	./b2 install
    	​
    	git clone https://github.com/intel/hyperscan
    	cd hyperscan
    	mkdir build
    	cd build
    	cmake -DBUILD_STATIC_AND_SHARED=1 ../
    	​
    	cmake -DBUILD_STATIC_AND_SHARED=1 -DBOOST_ROOT=~/tmp/boost-1.66 ../
    	​
    	make
    	sudo make install
    
     其次默认情况suricata在编译时没有启用hyperscan, 我们需要显示的编译suricata时加入命令:
     
     –with-libhs-includes=/usr/local/include/hs/ –with-libhs-libraries=/usr/local/lib/
     然后再suricata.yaml中修改 mpm-algo and spm-algo values to ‘hs’.
    

    在这里插入图片描述

  • High Performance Confifiguration

    If you have enough RAM, consider the following options in
    suricata.yaml detect: profile: custom custom-values:
    toclient-groups: 200 toserver-groups: 200 sgh-mpm-context: auto
    inspection-recursion-limit: 3000

  • Statistics

    每隔8s中会向stats.log file写入包数数据:
    在这里插入图片描述

    关闭suricata时,也可以看到总的收发包数和丢包数
    在这里插入图片描述

    capture mode不同,显示的数目有可能有差别:

    In AF_PACKET mode: • kernel_packets is the number of packets correctly
    sent to userspace • kernel_drops is the number of packets that have
    been discarded instead of being sent to userspace In PF_RING mode: •
    kernel_packets is the total number of packets seen by pf_ring •
    kernel_drops is the number of packets that have been discarded instead
    of being sent to userspace

  • Ignoring Traffific

    可通过配置bpf文件进行忽略某些类型的流量
    echo “not host 1.2.3.4” > capture-filter.bpf
    suricata -i ens5f0 -F capture-filter.bpf
    语法类似于:“not (host IP1 or IP2 or IP3 or net NET/24)”或 “ tcp or udp”
    或者也可根据suricata规则即可:
    pass/drop ip 1.2.3.4 any <> any any (msg:“pass all traffic from/to 1.2.3.4”; sid:1;)
    设置tls关键字,可以将https握手之后的流量全部放行,不去检测:
    app-layer.protocols.tls.encryption-handling

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33823833/article/details/111679454

智能推荐

2021-03-01_usage: nodemon [nodemon options] [script.js] [args_hackerPengJun的博客-程序员宅基地

最近在学Node.js需要用到监听工具nodemon,首先先全局安装 npm install -g supervisor nodemon 安装成功之后,开始监视文件,出现如下报错:Usage: nodemon [nodemon options] [script.js] [args]See “nodemon --help” for more.出现这个情况可能是当前你的笔记本系统设置了禁止运行脚本,解决办法是打开你的PowerShell,以管理员的身份运行输入set-ExecutionPolicy_usage: nodemon [nodemon options] [script.js] [args]

Jquery autocomplete 注意的一点破事_hack8的博客-程序员宅基地

前面使用Jquery autocomplete对输入框进行自动填充代码编写,如果远程url获取的数据为单纯的string返回的json数据,那么就可以正常显示,如果是返回的复杂的json数据就无法正常相应,非常的郁闷,在此记录一下解决该问题的方法,希望对遇到此类问题的童鞋们能够有所帮助。1、引入jquery的相关js和css代码@Scripts.Render("~/Scripts/jque

Lua:require的初步认识和使用_lua require 变量_夏_X__的博客-程序员宅基地

前言:require加载时都要寻找哪些路径以及是如何在文件夹中寻找的这里不做讨论,因为我也不是很懂,想了解底层如何加载可以去看看其他博客,很多。本文的目的是让你尽可能的理解require在Lua中的使用,以及一些应该注意的点。理解:可以把require当成C#中的using来看待,只不过Lua中的require是全局的,在一个脚本中引用之后在其他脚本也可以使用。一个被require的脚本,本质上是被“执行”了一遍,将该脚本中的所有全局成员加载到了 _G 中,包括表、变量、方法,在方法外的执行_lua require 变量

python-对超大遥感图像进行裁剪_python mmap pil 超大图像_地表最菜研究生的博客-程序员宅基地

代码如下:from PIL import Image# 解决文件过大问题from PIL import ImageFileImageFile.LOAD_TRUNCATED_IMAGES = TrueImage.MAX_IMAGE_PIXELS = Noneimport sys#先将 input image 填充为正方形def fill_image(image): width, height = image.size #选取长和宽中较大值作为新图片的 new_imag_python mmap pil 超大图像

LeetCode整理----合集一_goodluckwj的博客-程序员宅基地

一:两个数相加 一:需要考虑进位的问题,需要使用一个变量存储进位标识,每一次都去判断,而且在一个链表判断完成之后,另外一个链表,也是需要单独考虑进位问题的 二:在计算结束后,需要再次判断进位问题,如果有进位,则需要进行处理。class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { //进位标识 int flag = 0; ..._leetcode整理

随便推点

做实验验证MongoDB删除文档后索引是否会自动删除_csd753111111的博客-程序员宅基地

下面是实验步骤:> db.things.find(){ "_id" : ObjectId("5652d71a1524dc14663060e8"), "x" : 4, "j" : 2 }{ "_id" : O..._mongo.keyfile 删除会自动生成吗

vue 插槽scope_vue中的作用域插槽--理解(slot-scope)_weixin_39943547的博客-程序员宅基地

项目中使用了elementUI,在其官方demo中的complexTable.vue有如下代码: 对于 slot-scope不是很理解,当时学vue的时候也没有详细看。现在用到了,必须学会,个人理解如下:vue中的插槽有三种:单个插槽、具名插槽、作用域插槽,这个在官网上能看到(https://cn.vuejs.org/v2/guide/components.html#单个插槽)作用域插槽简单来说就...

详解桶排序——python实现_桶排序代码python_Icey苏泠的博客-程序员宅基地

文章目录背景桶排序的基本概念桶排序步骤注意!桶排序的python实现背景最近看到一个排序算法——桶排序。因为只看到了c语言的实现,所以想用python再写一遍。桶排序的基本概念桶排序算法会建立n个桶,每个桶都有一个编号,代表输入数列中对应数字的个数。桶排序步骤首先,我们建立一个长度为n+1的列表,这里称之为桶列表。n的值是数列中最大的数字。之所以列表长度是n+1,而不是n,是因为我们必须确保输入数列里的每一个元素在桶列表中都有其对应编号的元素,而列表的元素编号是从0开始的,数列里也可能出现0。_桶排序代码python

hack the box jerry靶机_hackthebox jerry_铁锤2号的博客-程序员宅基地

打开靶机,扫一下看看有什么东西。能看到是存在一个8080端口,tomcat,apache等信息nmap -sV -Pn -A 10.10.10.95这个机器给了提示,说什么远程命令执行,什么文件上传之类的。我感觉使用msf或许可以。于是打开msf进去搜索了一下。能看到确实有上传相关的漏洞。search apache tomcat这下好了,直接利用就好了,哈哈哈哈。首先配置远程主机为10.10.10.95,配置远程端口为8080,然后直接run!不出意外直接没用,非常尴尬。接着看了一下漏_hackthebox jerry

Tomcat部署Unity WebGL应用的3种方式_墨磨人的博客-程序员宅基地

一、将Unity WebGL包丢进webapps这是最简单粗暴的方式:将Unity WebGL包丢进tomcat/webapps目录即可。无需修改任何配置文件即可完成部署。使用tomcat10与Unity Pong Game包来做测试。①启动tomcat②将Unity Pong Game包丢进webapps目录浏览器直接访问:localhost:8080/Unity Pong Game,说明我们的Unity Pong Game包部署成功!(访问路径为Unity WebGL包的名称)二、修改_unity webgl

Flink 状态编程(七)状态生存时间(TTL)_flink状态ttl_Alienware^的博客-程序员宅基地

文章目录在实际应用中,很多状态会随着时间的推移逐渐增长,如果不加以限制,最终就会导致存储空间的耗尽。一个优化的思路是直接在代码中调用.clear()方法去清除状态,但是有时候我们的逻辑要求不能直接清除。这时就需要配置一个状态的“生存时间”(time-to-live,TTL),当状态在内存中存在的时间超出这个值时,就将它清除。具体实现上,如果用一个进程不停地扫描所有状态看是否过期,显然会占用大量资源做无用功。状态的失效其实不需要立即删除,所以我们可以给状态附加一个属性,也就是状态的“失效时间”。状态创建的_flink状态ttl

推荐文章

热门文章

相关标签