技术标签: 网络入侵检测系统 网络入侵检测 suricata 网络安全
完善的特征语言用于描述已知的威胁和恶意行为,
并兼容Emerging Threats Suricata ruleset(Proofpoint和Intel规则)
和VRT ruleset(snort规则),支持 Barnyard 和 Barnyard2 工具
单个suricata示例可检测千兆网络流量,该引擎基于多线程编码和硬件加速(pf_ring,af_packet)
自动对端口协议扫描,有利于发现恶意软件和通信信道
Suricata可记录所有的http请求链接,DNS请求和tls密钥交换,并支持从流中提取信息存储到磁盘中。
LUA脚本可以弥补规则集中无法描述的特征
主要日志输出格式为Eve,即所有的协议事件,警报输出
(可单独指定主机或子网段,可配置全局规则或单独规则),流量记录
Linux、FreeBSD、OpenBSD、macOS / Mac OS X、Windows
YAML作为规则文件格式,可读性好
支持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
实现基于libhtp有状态的http解析器,可解析URL,请求和响应首部,cookie,
user-agent,request body and response body,请求方法和状态码,host
可基于多特征进行检测匹配,包括:协议关键字,正则(Hyperscan),
快速模式和预处理,文件匹配,JA3 / JA3S / HASSH匹配。
规则方面支持实时加载规则而不重启suricata,规则延迟初始化
高性能捕获模式:AF_PACKET,PF_RING,NETMAP
标准模式:NFLOG ,PCAP
IPS模式:Netfilter ,NETMAP,AF_PACKET (Linux),ipfw (reeBSD and NetBSD)
线程支持可配,一个到几十个都可以;互斥操作采用原子函数提高性能;
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
最近在学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对输入框进行自动填充代码编写,如果远程url获取的数据为单纯的string返回的json数据,那么就可以正常显示,如果是返回的复杂的json数据就无法正常相应,非常的郁闷,在此记录一下解决该问题的方法,希望对遇到此类问题的童鞋们能够有所帮助。1、引入jquery的相关js和css代码@Scripts.Render("~/Scripts/jque
前言:require加载时都要寻找哪些路径以及是如何在文件夹中寻找的这里不做讨论,因为我也不是很懂,想了解底层如何加载可以去看看其他博客,很多。本文的目的是让你尽可能的理解require在Lua中的使用,以及一些应该注意的点。理解:可以把require当成C#中的using来看待,只不过Lua中的require是全局的,在一个脚本中引用之后在其他脚本也可以使用。一个被require的脚本,本质上是被“执行”了一遍,将该脚本中的所有全局成员加载到了 _G 中,包括表、变量、方法,在方法外的执行_lua require 变量
代码如下: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 超大图像
2019独角兽企业重金招聘Python工程师标准>>> ...
一:两个数相加 一:需要考虑进位的问题,需要使用一个变量存储进位标识,每一次都去判断,而且在一个链表判断完成之后,另外一个链表,也是需要单独考虑进位问题的 二:在计算结束后,需要再次判断进位问题,如果有进位,则需要进行处理。class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { //进位标识 int flag = 0; ..._leetcode整理
下面是实验步骤:> db.things.find(){ "_id" : ObjectId("5652d71a1524dc14663060e8"), "x" : 4, "j" : 2 }{ "_id" : O..._mongo.keyfile 删除会自动生成吗
项目中使用了elementUI,在其官方demo中的complexTable.vue有如下代码: 对于 slot-scope不是很理解,当时学vue的时候也没有详细看。现在用到了,必须学会,个人理解如下:vue中的插槽有三种:单个插槽、具名插槽、作用域插槽,这个在官网上能看到(https://cn.vuejs.org/v2/guide/components.html#单个插槽)作用域插槽简单来说就...
文章目录背景桶排序的基本概念桶排序步骤注意!桶排序的python实现背景最近看到一个排序算法——桶排序。因为只看到了c语言的实现,所以想用python再写一遍。桶排序的基本概念桶排序算法会建立n个桶,每个桶都有一个编号,代表输入数列中对应数字的个数。桶排序步骤首先,我们建立一个长度为n+1的列表,这里称之为桶列表。n的值是数列中最大的数字。之所以列表长度是n+1,而不是n,是因为我们必须确保输入数列里的每一个元素在桶列表中都有其对应编号的元素,而列表的元素编号是从0开始的,数列里也可能出现0。_桶排序代码python
打开靶机,扫一下看看有什么东西。能看到是存在一个8080端口,tomcat,apache等信息nmap -sV -Pn -A 10.10.10.95这个机器给了提示,说什么远程命令执行,什么文件上传之类的。我感觉使用msf或许可以。于是打开msf进去搜索了一下。能看到确实有上传相关的漏洞。search apache tomcat这下好了,直接利用就好了,哈哈哈哈。首先配置远程主机为10.10.10.95,配置远程端口为8080,然后直接run!不出意外直接没用,非常尴尬。接着看了一下漏_hackthebox jerry
一、将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
文章目录在实际应用中,很多状态会随着时间的推移逐渐增长,如果不加以限制,最终就会导致存储空间的耗尽。一个优化的思路是直接在代码中调用.clear()方法去清除状态,但是有时候我们的逻辑要求不能直接清除。这时就需要配置一个状态的“生存时间”(time-to-live,TTL),当状态在内存中存在的时间超出这个值时,就将它清除。具体实现上,如果用一个进程不停地扫描所有状态看是否过期,显然会占用大量资源做无用功。状态的失效其实不需要立即删除,所以我们可以给状态附加一个属性,也就是状态的“失效时间”。状态创建的_flink状态ttl