suricata HTTP关键字
http request
http request请求包括请求行、请求头、空行和内容。一个普通的request请求如下:

http response
http response应答包括应答行,头部,空行和内容,整体结构和request差不多,下图是针对上节request的应答包

HTTP关键字
之前的常用关键字中介绍了content以及许多修饰它的关键字,除此之外,http协议中还有一些修饰content的关键字,也是由于http协议使用量较大,关键字较多,因此单独拿出来学习。
1、http_method
http_method是content的修饰符,表示其所修饰的content只匹配http method部分。http可以使用的方法包括:GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS, CONNECT和PATCH。下面这个例子匹配GET方法,无论是否加http_method都能匹配:

但是下面这种情况就必须加http_method关键字,因为在http的uri部分也有GET:

2、http_uri和http_raw_uri
http_uri和http_raw_uri这两个关键字都是说明所修饰的content是用来匹配http uri部分的内容。所不同的是http_uri指在匹配之前先对URI进行标准化,所谓的标准化就是对数据包中的uri按照RFC文档规定进行一定的转化,包括保留语义转化、一般保留语义转化、改变语义转化。保留语义转化有以下几种,详细的解释参考URL标准化-维基百科,而http_raw_uri则是直接对uri进行匹配。下面这两个关键字用法的一个例子:


3、uricontent
uricontent的作用和http_uri相同,都是匹配uri部分的,不同的是uricontent可以独立使用,相当于content+http_uri的效果。但是官方文档里说明这个关键字已经被弃用,但目前还对其进行支持


4、urilen
该urilen关键字用于匹配请求URI的长度。可以使用<和>运算符,分别表示小于和大于

5、http_protocol
该http_protocol关键字用于匹配http协议部分
alert http any any -> any any (flow:to_server; http_protocol; content:"HTTP/1.0"; sid:1;)
6、http_request_line和http_response_line
该http_request_line关键字用于匹配 http request的request_line部分,该http_response_line关键字用于匹配 http request的request_line部分,
alert http any any -> any any (http_request_line; content:"GET / HTTP/1.0"; sid:1;)
7、http_header和http_raw_header
和http_uri一样,http_header也是只匹配http的header部分的内容(不包括cookie),http_raw_header则是匹配没有标准化过的header(参考HTTP header),简单来说就是标准化的header在每个字段的结尾\r\n之前都会去掉其余的空白字符。两个简单的例子

8、http_cookie
http_cookie从http_header中独立出来,但其使用方法和前几个关键字并无区别,这里就直接贴出例子

9、http_user_agent
http_user_agent用于匹配http的User-Agent字段的内容,它是http_header的一部分,但是把它单独拿出来说明其出现的频率比较高,用法与前几个没什么差别。关于http_user_agent和http_header的性能对比可以参考Suricata http_user_agent vs http_header,得出的结论是http_user_agent比http_header要快大约10%,除此之外规则中使用http_user_agent的可读性也比较好。例子如下:

10、http_client_body和http_server_body
使用了这两个修饰符的content表示只匹配http包中的内容部分,前者值匹配request包,而后者只匹配response。用法很简单:

11、http_accept
匹配http_header中的accept部分
alert http any any -> any any (http_accept; content:"image/gif"; sid:1;)
12、http_accept_enc
匹配http_header中的HTTP Accept-Encoding部分
alert http any any -> any any (http_accept_enc; content:"gzip"; sid:1;)
13、http_accept_lang
匹配http_header中的HTTP Accept-Language部分
alert http any any -> any any (http_accept_lang; content:"en-us"; sid:1;)
14、http_connection
匹配http_header中的Connection部分
alert http any any -> any any (http_connection; content:"keep-alive"; sid:1;)
15、http_content_type
匹配http_header中的Content-Type部分
alert http any any -> any any (flow:to_client; http_content_type; content:"text/javascript"; sid:2;)
16、http_content_len
匹配http_header中的 Content-Length部分,并配合flow:to_server 或者 flow:to_client来表明是请求包还是响应包
alert http any any -> any any (flow:to_server; http_content_len; content:"666"; sid:1;) alert http any any -> any any (flow:to_client; http_content_len; content:"555"; sid:2;)
17、http_referer
匹配http_header中的Referer部分
alert http any any -> any any (http_referer; content:".php"; sid:1;)
18、http_stat_code和http_stat_msg
这两个content修饰符分别匹配response应答包返回的状态码和状态信息,例子如下:


19、file_data
file_data的作用和http_server_body差不多,都是使content匹配response body中的内容,唯一不同的是使用了file_data关键字的规则,其在file_data之后的content都会受到它的影响。比如下面这条规则,值为”abc”和”xyz”的content都必须在response body里面匹配:
alert http any any -> any any (file_data; content:"abc"; content:"xyz";)
suricata HTTP关键字的更多相关文章
- suricata学习笔记1--初步认识
1.前言 最近工作需要对网站的关键字进行检测,找出敏感词.这个过程需要对报文进行收集.解码.检测和记录日志.当前只是简单实现功能,根据关键字进行简单的匹配,而没有进行关键字的语义分析.导致的结果就是 ...
- Suricata是什么?
不多说,直接上干货! 见Suricata的官网 https://suricata.readthedocs.io/en/latest/what-is-suricata.html snort.suirca ...
- python中的GIL(全局解释锁)多线程能够提升效率
预启动的时候,应用程序仍然会调用 OnLaunched 方法的,在 OnLaunched 方法调用之后,会马上发生 Suspending 事件,随后应用就会暂停. 我先基于develop主分支拉出一个 ...
- suricate学习笔记1--初步认识(转)
最近在研究关于dpi网卡采集的代码重组这块,公司一个同事,简单的用CPP讲解了suricata内部的一些处理逻辑,,,其中大部分代码是用C语言写的,对于用C重构代码有很好的借鉴作用,,,如果有相关工作 ...
- 作为一个新手的Oracle(DBA)学习笔记【转】
一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...
- Suricata规则编写——常用关键字
本篇转载自:http://blog.csdn.net/wuyangbotianshi/article/details/44775181 1.简介 现在的NIDS领域snort一枝独秀,而suricat ...
- suricata 关键字补充说明
基本关键字 1.msg(对匹配到的规则的说明,第一部分约定用大写字母表示,msg始终是签名的第一个关键字) 注意:msg中必须转义以下字符: ; \ " msg :“ATTACK-RESPO ...
- Suricata配置文件说明
本系列文章是Suricata官方文档的翻译加上自己对其的理解,部分图片也是来自那篇文章,当然由于初学,很多方面的理解不够透彻,随着深入后面会对本文进行一定的修正和完善. Suricata使用Yaml作 ...
- Suricata默认规则集相关
Suricata规则集 Suricata 基于规则检测和控制数据流量,所有规则的配置文件保存在rules目录内 .这些是已知和确认的活动僵尸网络和其C&C(command and contro ...
随机推荐
- 【转载】Spring Cloud全家桶主要组件及简要介绍
https://blog.csdn.net/xlgen157387/article/details/77773908
- Crontab中的除号(slash)到底怎么用?(转载)
转载于:https://www.cnblogs.com/cocowool/p/5865397.html crontab 是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash) ...
- 指导手册02:伪分布式安装Hadoop(ubuntuLinux)
指导手册02:伪分布式安装Hadoop(ubuntuLinux) Part 1:安装及配置虚拟机 1.安装Linux. 1.安装Ubuntu1604 64位系统 2.设置语言,能输入中文 3.创建 ...
- 阶段01Java基础day22IO流03
22.01_IO流(序列流) 1.什么是序列流 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推. 2.使用方式 整合 ...
- Ubuntu系统下安装免驱动摄像头
最近想玩一下视频系列的深度学习模型,便网上淘了一个linux下免驱动的摄像头,直接插上usb接口就行,但是一般还不能直接使用,下面将简单说一下如何使用摄像头: 在你的ternimal下输入以下命令: ...
- c++中关于预编译头的设置问题
在运行代码时会遇到缺少预编译pch.c 或者stadfx.h之类的, 这个时候,先查看有没有包含, 然后看一下预编译头设置中, 是否正确设置.
- GPU知识了解
前言 今天在使用阿里云的时候,无意间看到了有GPU服务器,于是对它做了一个大概的了解. 概念 GPU是Graphics Processing Unit的缩写,翻译成中文就是图形处理器.是一种专门在个人 ...
- SamplesHashtable
using System; using System.Collections; public class SamplesHashtable { public static void Main() { ...
- Java学习笔记42(数据库连接池 druid连接池)
druid连接池: 是阿里的连接池,druid的稳定性及效率都很高,目前用的比较广,所以建议开发过程中尽量用druid连接池(支持国产最重要) druid连接池也需要配置文件,配置文件必须是prope ...
- Java学习笔记34(sql基础 :增删改查1)
create database qy97;/*创建数据库*/ use qy97; /*使用数据库 use 数据库名*/ show tables; /*查看所有的表*/ select database( ...