如何自动化的对PCAP数据包进行suricata/snort/zeek分析

news2025/1/13 7:38:23

在前一篇文章中,这里介绍了dalton的安装,以及使用dalton中的多种探针手动分析pcap数据包。在和其他程序联动的时候,手动分析无法满足要求,本篇文章将介绍如何通过使用dalton提供的API进行数据包的自动化分析。

在手动提交数据包分析的过程中,UI界面选择了若干参数,以suricata的操作为例实际抓包看一下,如下图1:

在这里插入图片描述
图1
图1中选择的参数如红框所示,包括待分析的数据包,suricata版本,规则集,以及日志种类。针对submit之后的请求进行抓包,如下图2:

在这里插入图片描述
图2
可以看到针对/dalton/coverage/summary路径提交了HTTP payload中的参数请求。此处涉及到文件上传,因此遵循文件上传协议的约定,具体原理见这里。图2中http的全部payload格式如下:

------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap0"; filename="3_Web......................pcap"
Content-Type: application/octet-stream

此处填充上传数据包内容数据
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap1"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap2"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap3"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap4"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap5"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap6"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap7"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap8"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="coverage-pcap9"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="sensor_tech"

suricata/6.0.10 此处填充探针版本
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="optionUseSC"

use_sock_control
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="optionProdRuleset"

prod
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="prod_ruleset"

/opt/dalton/rulesets/suricata/test.rules  此处填充规则集路径
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="custom_ruleset"


------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="optionAlertDetailed"

optionAlertDetailed
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="optionEveLog"

optionEveLog  此处选择EVE格式日志
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="optionOtherLogs"

optionOtherLogs  此处选择其他日志
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="overrideExternalNet"

eoverride
------WebKitFormBoundaryigr7CmJeZgBwpw0Z
Content-Disposition: form-data; name="custom_engineconf"
此处填充suricata.yaml文件内容
------WebKitFormBoundaryigr7CmJeZgBwpw0Z--

可以看到payload中的数据部分(汉字说明部分)和上图1中的UI部分选择的数据包内容,suricata版本,规则集,以及日志种类是可以对应上的。因此可以通过python的request库发起相应HTTP请求,替换payload中的对应内容即可以向dalton提交数据包分析的请求。同时结合HTTP的响应可以提取job ID ,提取对应JOB ID中的分析结果,如下图3:

在这里插入图片描述
图3
图3中在HTTP的响应部分可以通过location字段获取重定向的URL,因此对重定向的URL发起请求即可获取job ID对应的分析结果。

通常来说如果dalton没有对外暴露API,则可以通过上述分析HTTP请求和响应的方式,构造对应的请求和响应,自动化的提交数据包进行分析。但是dalton的说明文档中提供了对应的API,因此上述的分析可以作为API背后的原理解释。如下图4为dalton提供的API:

在这里插入图片描述
图4
dalton将API的功能封装在了api/dalton.py中,并提供了示例examples/job_submission.py,如下图5:

在这里插入图片描述
图5
可以看到,使用该示例,替换对应的输入参数,即可使用python 自动的提交pcap进行分析。当然可以根据需要将其输入参数改造成为对应的命令行形式。可以看到示例中的代码只是做了代码的提交工作,并没有涉及到对相应的返回数据解析以及eve日志的获取。如果需要获取eve格式文件,需要对job_submission.py代码进行改造,如下:

"""Example on how to submit a job using the Dalton Client API. Mock data is in mocks directory."""
import os
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).resolve().parents[2])) 
from api.dalton import DaltonAPI
import json
import time

DALTON_URL = os.getenv("DALTON_URL", "http://localhost")
SENSOR_NAME = "suricata"
CURRENT_PATH = os.getcwd()

# create API client
dalton_client = DaltonAPI(DALTON_URL)

# this file needs to include the sensor configuration in yaml format. Make sure that the files are in the proper directory.
conf = open(f"{CURRENT_PATH}/api/examples/mocks/engine_conf.yaml", "r")
configuration = conf.read()

# this file needs to include any custom rules you want to test
cust = open(f"{CURRENT_PATH}/api/examples/mocks/custom_rules.rules", "r")
custom_rules = cust.read()

# get rulesets and sensor techs to use in job submission parameters
dalton_rulesets = dalton_client.get_prod_rulesets(SENSOR_NAME)
dalton_sensor_techs = dalton_client.get_sensor_tech(SENSOR_NAME)

# since techs and rulesets are a list we use a loop to get the corresponding tech and ruleset
# you will probably use this if you want to test with multiple versions of the sensor
for tech in dalton_sensor_techs:
    # have to reread the file to send it to multiple instances of the sensor
    pcap = open(f"{CURRENT_PATH}/api/examples/mocks/test_job.pcap", "rb")
    files = {"coverage-pcap0": ("test_job.pcap", pcap)}
    job_ID = dalton_client.submit_job(
        sensor_tech=tech,
        prod_ruleset=dalton_rulesets[0],
        configuration=configuration,
        custom_rules=custom_rules,
        files=files,
    )
    print(job_ID.content)
    time.sleep(5)#由于运行需要一定的时间,因此此处需要等待几秒,不然请求内容为空
    job_content = dalton_client.get_job_content(job_ID.content.decode())
    
    data = job_content.text
    with open(job_ID.content.decode()+'.json', 'w') as data_file:
        data_file.write(data)

    break

需要注意的是在提交job内容和请求job结果之间需要间隔几秒,不然由于数据没有被引擎解析完毕之前发起请求,请求job结果为空。由于需要获取EVE格式的文件,因此对于dalton.py中需要将data指定为eve格式,如下:

data = {
            "sensor_tech": sensor_tech,
            "optionProdRuleset": "prod",
            "prod_ruleset": prod_ruleset,
            "custom_engineconf": configuration,
            "custom_ruleset": custom_rules,
            "optionEveLog": "optionEveLog", #添加eve格式输出
            "teapotJob": 1,
        }

同时在dalton.py中添加获取eve格式文件的请求代码如下:

def get_job_content(self,job_id:str) -> requests.Response:
        response = self._dalton_get("dalton/controller_api/v2/"+job_id+"/eve/raw")
        return response

通过上述代码即获取对应的eve格式的文件,因为eve格式文件路径可以通过UI界面操作抓包进行获取,如下图6:

在这里插入图片描述
图6

生成的eve文本文件如下图7:

在这里插入图片描述

图7

有了自动化的数据包分析,就可以在wireshark中实时的分析数据包的威胁检测结果了。下一篇文章将介绍如何使用wireshark在打开数据包情况下自动的提交数据包分析,并根据数据包分析结果显示suricata告警结果。上述使用了suricata进行了介绍,对于snort和zeek的自动化分析同理。

在dalton官方提供的示例中,由于在dalton.py中设置了"teapotJob": 1,因此请求响应和正常手动操作有所不同,这个需要注意下。设置该标志位的主要目的是在数据量提交比较多的情况下,减少结果数据存储的时间,如下图8:
在这里插入图片描述

图8

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零手写操作系统之RVOS系统调用实现-09

从零手写操作系统之RVOS系统调用实现-09 系统模式:用户态和内核态如何让任务运行在用户态下 系统模式的切换用户模式下访问特权指令测试系统调用系统调用执行流程系统调用传参规范系统调用封装 系统调用完整流程解析执行测试 本系列参考: 学习开发一个RISC-V上的操作…

基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统

运行环境: 最好是java jdk 1.8,我在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本 tomcat服务器环…

一般人不要轻易去自学网络安全(黑客)

笔者本人 17 年就读于一所普通的本科学校,20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂,现就职于某大厂安全联合实验室。 我为啥说自学黑客,一般人我还是劝你算了吧!因为我就是那个不一般的人。 首先我谈下对黑客&a…

[游戏开发][Unity]Assetbundle下载篇(1)热更前准备与下载AB包清单

热更流程都不是固定的,每个人写的状态机也有所差别,但是一些必要步骤肯定不可能少,例如下载清单,对比版本,下载AB包,标记下载完成。我接下来的每一篇文章都是下载AB包的重要步骤,大概率是不能省…

Kibana:使用 Kibana 自带数据进行可视化(三)

在今天的练习中,我们将使用 Kibana 自带的数据来进行一些可视化的展示。希望对刚开始使用 Kibana 的用户有所帮助。这是这个系列的第三篇文章。这个是继上一篇文章 “Kibana:使用 Kibana 自带数据进行可视化(二)” 的续篇。 前提条…

学成在线----day5

1、媒资管理需求分析 2、为什么要用网关 当前要开发的是媒资管理服务,目前为止共三个微服务:内容管理、系统管理、媒资管理,如下图: 后期还会添加更多的微服务,当前这种由前端直接请求微服务的方式存在弊端&#xff…

微服务架构中的数据一致性:解决方案与实践| 得物技术

1 为什么要做服务之间的数据一致性 作为互联网公司的研发工程师,微服务的架构思想对于各位读者朋友来说,已经不是陌生东西。我们当中的大多数人,或多或少经历过从单体应用到微服务化的系统拆分和演进过程。我们按照庞大系统的业务功能和特征…

都说网络安全渗透工程师前景好,好在哪?

渗透工程师前景非常好,网络安全发展规模不断扩大,未来行业类的人才需求也会越来越多。就目前看来在网络安全方向上就业的薪资待遇也十分可观。 其就业方向有很广泛,如网络安全工程师,渗透测试工程师等。 渗透测试人员通常对网络…

keras搭建轻量级卷积神经网络CNN开发构建国家一级保护动物识别分析系统,集成开发GradCAM实现热力图分析可视化

动物识别相关的项目本质上属于图像识别,在我之前的博文中已经有过不少实践了,感兴趣的话可以自行移步阅读即可,这里不是说想要单纯地去做一个动物识别的项目,昨晚在玩手机的时候突然被小孩问到一个动物是不是国家保护动物&#xf…

SpringBoot 事件监听处理(五十一)

当死亡笼罩在脑海,请用生的信念打败它 上一章简单介绍了Retry重试机制(五十), 如果没有看过,请观看上一章 参考文章: https://blog.csdn.net/qq_37758497/article/details/118863308 一. Spring 事件监听 Spring的事件监听(也叫事件驱动)是观察者模式的一种实现&…

Windows 10磁盘碎片整理:含义和操作方法

什么是Windows磁盘碎片? 随着电脑硬盘使用时间的增长,磁盘上会产生大量的垃圾碎片。这些碎片会分布在磁盘的各个角落,严重影响磁盘的响应速度。为了在一定程度上提高系统性能,定期使用Windows10的磁盘碎片整理工具来进行碎片整…

Vue.js中的Mixin和组件插槽

Vue.js中的Mixin和组件插槽 介绍 在Vue.js中,Mixin和组件插槽是两个非常有用的概念。Mixin是一种可重用Vue组件的方式,而组件插槽则提供了一种在组件之间共享内容的方式。虽然这两个概念在功能上有所不同,但它们对于Vue.js应用程序的开发都非…

Vue 中的数据请求如何进行拦截与错误处理

Vue 中的数据请求拦截与错误处理 在 Vue.js 中,我们经常需要向后端服务器发送数据请求,以获取或提交数据。在这个过程中,我们可能会遇到一些问题,例如无效的请求参数、网络连接错误、服务器错误等。为了更好地处理这些问题&#…

优化和扩展:处理不同操作和参数的数字列表

引言 在编程中,我们有时需要根据输入执行不同的操作,而这些操作涉及到数字列表,并且每个操作可能具有不同数量的参数。本文将介绍如何优化和扩展代码,以便更好地处理这种情况。 问题描述 当前遇到的问题是需要根据输入执行不同…

Mysql中的Buffer pool

Buffer Pool在数据库里的地位 1、回顾一下Buffer Pool是个什么东西? 数据库中的Buffer Pool是个什么东西?其实他是一个非常关键的组件,数据库中的数据实际上最终都是要存放在磁盘文件上的,如下图所示。 但是我们在对数据库执行增…

2023最新Java面试八股文,阿里/腾讯 / 美团 / 字节 1 000道 Java 中高级面试题

企业调薪、裁员、组织架构调整等等,坏消息只多不少,最近也有很多来咨询跳槽的朋友,都是因为之前的公司出现了比较大的薪资和组织变动 近期有许多粉丝非常关注最新的面试题!于是小编去各大平台搜罗了一份近期大厂面试的一些内容&a…

基础工程(cubeide串口调试,printf实现,延时函数)

0.基础工程(cubeide串口调试,printf实现,延时函数) 文章目录 0.基础工程(cubeide串口调试,printf实现,延时函数)外部时钟源CLOCK(RCC)系统时钟SYS与DEBUG设置UART串口设置cubeide设置…

世界研发管理组织在美国成立,中国籍研发管理专家江新安当选总干事

World R&D Management Organization世界研发管理组织(WRDMO)由来自世界各地的研发管理研究组织,创新技术研究机构,院校以及研发管理咨询机构联合发起。是一个具有开放性,无党派性,非营利性的国际先进研…

如从亿点点失误,到一点点失误,我是如何做的【工作失误怎么办】

前言 只要我们还在做事,或者说还活着,就没有不犯错的时候。作为一名前端搬砖工,哪怕工作中再仔细小心,也免不了一些失误。 那这是不是说,失误很正常,改了就是嘛? 这么说好像没错。作为失误本…

【计算机组成与体系结构Ⅰ】知识点整理

第一章 计算机系统概论 1.1 从源文件到可执行文件 .c源程序、.i源程序、.s汇编语言程序、.o可重定位目标程序、可执行目标程序;后两个为二进制,前面为文本 1.2 可执行文件的启动和执行 冯诺依曼结构计算机模型的5大基本部件:运算器、控制…