欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

suricata_未完草稿

程序员文章站 2022-07-10 20:23:32
...

suricata

suricata安装

规则管理 Oinkmaster

依赖

apt-get install liblua5.1-dev #配置支持lua,--enable-lua
apt-get install libgeoip-dev  #配置支持GeoIP,--enable-geoip
apt-get install cargo #配置支持Rust

suricata配置相关

设置EXTERNAL_NET参数值为!$HOME_NET会将所有没有设置在HOME_NET以外的IP当成外部网络地址对待,也可以将该值设置成any

配置点-1

libhtp.default-config.request-body-limit / libhtp.server-config..request-body-limit controls how much of the HTTP request body is tracked for inspection by the http_client_body keyword, but also used to limit file inspection. A value of 0 means unlimited.

将request/response的请求体或响应体设置得尽可能大,这两个参数用于在使用http_client_body关键字时控制追踪的body大小,也会被用在file inspection的功能上,类似于后面提到的file Extraction

request-body-limit: 1gb
response-body-limit: 1gb

概念

默认设置下,suricata运行在IDS模式。

IDS (Intrusion Detection Systems)入侵检测系统,是一种网络安全设备或应用软件,可以对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施。

IPS(Intrusion Prevention System)入侵防御系统,是一部能够监视网络或网络设备的网络数据传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络数据传输行为

suricata本身是不具备拦截功能的,想要让它拦截包需要配合iptables使用,参照章节11。


suricata能做什么?

章节3 命令行选项

参数 注解
-i 嗅探指定网卡的数据包
-s 规则测试文件单独运行

章节4 规则配置的关键字们

按照规则在规则文件的顺序进行加载,但规则的行为顺序是存在的:pass、drop、reject、alert

  • pass :若规则匹配,则停止规则扫描,直接跳过所有规则

  • content关键字可以叠加效果:It is possible to use several contents in a signature.

NOTE:下面的符号不可以出现在content值中(如果上面复制的user-agent字段出错),要匹配这些值需转义成16进制代码,参照payload:

符号 16进制
|22|
; |3B|
: |3A|
| |7C|

For example:

content:"http://""
写成
content:"http|3A|//"
  • nocase关键字可以忽略匹配时的大小写差异,该关键字放于其对应的content之后
  • depth关键字指明对payload的检索深度,四个二进制位为一个单位(4bit=1),参数于content之后,多半用于协议包匹配

配置http关键字-1-(http_user_agent)

配置规则匹配请求中的user_agent字段,如果只是匹配user_agent,使用http_user_agent的效率要优于使用http_header.

alert http any any -> any any (msg:"request from chrome";content:"Mozilla/5.0...略";http_user_agent;sid:5;rev:1;)

验证方式:使用python脚本,变换user_agent进行请求,可以比对http.log文件与fast.log文件。

运用1:如果把alert改成drop或者reject,则可以对指定的浏览器请求进行丢包.

  • note:Drop行为只能在IPS模式下进行,Reject行为虽然没说(需后续验证),但似乎也需在该模式下运行
  • note:IPS模式的配置参考章节11
  • note:该运用已验证通过

运用2:能根据user-agent不同而进行后续不同的策略,而这个策略不是简单的python脚本可以实现?比如包保存包转发。

配置http关键字-2-(http_method)

匹配http请求的method类型(GET、POST…)

alert http any any -> any any (msg:"It is POST Method";content:"POST";http_method;rev:1;sid:1)
alert http any any -> any any (msg:"It is GET Method";content:"GET";http_method;rev:1;sid:2)

验证方式:python-requests,已验证通过

SSL/TLS关键字-3

SSL是用于HTTPS的,因此这个关键字主要运用于HTTPS请求。

tls_cert_serial : 用于配置证书***的匹配
tls_cert_fingerprint:证书指纹匹配


章节11 Setting up IPS/inline for Linux

注解:
模式配置

step-1:检查suricata是否开启了NFQ功能

suricata --build-info

step-2:以NFQ模式运行suricata

sudo suricata -c /etc/suricata/suricata.yaml -q 0

step-3:配置Iptables
根据运用场景进行配置

  • 网关场景(forward_ing)
    suricata运行在作为网关的设备,网络中的流量经由该设备访问互联网
	sudo iptables -I FORWARD -j NFQUEUE
  • 主机场景(host)
    suricata运行在本机,监控本机自身出入流量
	sudo iptables -I INPUT -j NFQUEUE
	sudo iptables -I OUTPUT -j NFQUEUE

检查iptables是否配置正确

iptables -vnL

step-4:测试

curl www.baidu.com
cd /var/log/suricata
ls
tail http.log
tail fast.log

step-5:还原

擦除iptables规则,否则不能正常上网
note:对于ssh连接访问的虚拟机,需要先擦除规则再关闭suricata

iptables -F

章节15 File Extraction

参考

  • File extraction in Suricata
  • 具体字段配置可以参照文档:Suricata-Rule.File-Keywords
  • 主题配置可以参照文档:File-Extraction

注解:

提取经过的HTTP流量中的文件,不管是上传还是下载,这个动作需要分为两步来操作。

规则配置(解决提取谁的问题)

根据规则文件进行extraction.如果没有这一步,便不会有这个File Extraction.
主要指导:

  1. 提取出来的文件,以什么文件后缀进行保存
  2. 提取什么后缀的文件
#这条规则将提取所有的http流量中的任意类型的文件
alert http any any -> any any (msg:"FILE store all";filestore;sid:1;rev:1;)
#这条规则将提取HTTP流量中的后缀为txt的文件
alert http any any -> any any (msg:"File txt save";fileext:"txt";filestore;sid:2;rev:1;)

假设有一种情景:文件后缀虽然为.pdf,但实际不是pdf格式的文件,只是修改后缀欺骗。
避免陷入这种陷阱,可以使用filemagic参数以判断文件是不是真的是pdf文件

alert http any any -> any any (msg:"FILE pdf detected";filemagic:"PDF document";filestore;sid:3;rev:1;)

记录配置(解决怎么保存的问题)

保存两个文件,一个是记录目标文件的信息,一个是目标文件本身

测试

  1. 在路径中新建test.rules,并添加上面的规则语句进行测试
  2. 启动自运行的http server进行测试
suricata -c /etc/suricata/suricata.yaml -i eth1 -s test.rules
wget target(服务端文件)

疑点排查与解决方案

  • 提取的文件大小不正确

图片文件 OK
txt文件 OK

  • 有时提取不到文件

问题描述:访问同局域网内文件的请求能被提取,访问外网的文件提取未生效

分析1:可能是网卡问题,监控的是eth1,处于192.168.0.1/24网段,而wget的路由跟踪命令是eth0网卡出去,如
笔者suricata运行在vagrant的虚拟环境上,vagran box虽然配置了桥接模式,也能互通,但上网还是走的NAT模式。因此
如果监测eth1(桥接模式)的流量,那么访问外网的文件自然无法提取到。