开源网络取证工具Xplico架构浅析

本文《开源网络取证工具Xplico架构浅析》 由宜人贷安全应急响应中心 入驻安全脉搏账号发布,作者宜信安全部syp,安全脉搏独家首发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。 0x1…

本文《开源网络取证工具Xplico架构浅析》 由愉快信用安全应急响应中心发布。作者负责syp的安全性,安全脉冲独家首先发表本文,如需转载,请联系安全脉冲授权;请不要擅自转载。 0x1 概述 关于 Xplico的目标是从已爬网网络流量中恢复应用程序中的数据。 例如, xplico可以从pcap包恢复每个电子邮件(POP,IMAP,SMTP协议),所有http内容等。 Xplico不是协议分析工具,而是网络取证工具。 特性 支持HTTP,SIP,IMAP,POP,SMTP,TCP,UDP等协议 解码端口无关协议的检测 多线程处理机制 输出数据存储在SQLite或mysql数据库中,并具有原始文件输出。 解码的xml描述流相关信息 实时捕获功能(与计算机硬件性能相关) TCP中的ACK检查功能 DNS解析 不要求输入数据包大小 支持IPV4和IPV6 模块化,每个单独的功能是一个模块。输入,解码器,输出均为模块,可自由组合 具有可定制的解码器功能 构成 Xplico系统 Xplico系统由以下4个小系统:组成 解码管理器叫做DeMa 一个叫做Xplico的IP解码器 一套主应用解码器(HTTP解码器,SMTP解码器等) 结果输出接口 使用的语言 C 蟒蛇 腓 JavaScript的 0x2 架构 整体架构 Xplico系统 Xplico系统由以下4个小系统:组成 解码管理器叫做DeMa 一个叫做Xplico的IP解码器 一套主应用解码器(HTTP解码器,SMTP解码器等) 结果输出接口 各自的关系如下所示。

数据流示例 可以使用解码数据流的示例来更直观地示出整个系统如何工作。 通过main()方法,调用CapInit()方法初始化可能使用的捕获模块,然后调用CapMain()来启动捕获过程。 CapInit()方法将指定将由Capmain()方法调用的捕获模块。在使用pcap文件的示例中,使用了cap_pcap.so模块,因此在CapMain()中,调用capt_dissectors/pcap/pcap.c: CaptDisMain()方法。 当进程进入PCAP捕获模块时,调用pcap_loop(pcap处理流程),然后由PcapDissector()处理每个数据包。 ProtDissec()函数有一个完整的过程,将数据包发送到正确的解码器进行解码。 (原始https://www.com/archives/57567.html)   0x3 解码管理器模块 解码管理器(Dema)具有以下功能: 标准化输入数据 初始化解码设置选项,初始化历史文件,解码器,分配器 启动解码器和拆分器 操作解码器和分离器   0x4 解码模块概述 Xplico的解码模块可以在整体架构中使用,也可以单独使用。解码器的最大特点是模块化,可扩展性和可配置性。 解码器设计为独立于输入数据(原始数据)和输出数据的格式。 Xplico中的数据流和信息流如下所示。

原始数据被输入“捕获解剖器”模块,然后将其发送到协议(协议分析)模块,其中重组和拼接的数据被发送到调度器模块。 如果需要,调度程序将重新组织数据或将其发送到其他应用程序(例如分配器) 因此Xplico由以下3种类型的模块:组成 抓斗模块 解析模块 分发模块下图显示了模块化Xplico,系统内核是模块内部链接的基础:

上述模块的配置是通过配置文件完成的。因此,通过选择或创建合适的捕获和分发模块,可以在许多场景中使用Xplico。

0x5 模块 介绍 Xplico读取网络流量(爬网模块),从数据中解析协议信息(解析模块),然后将信息发送到所需的目标模块(分配模块) 解码器的每个部分都是插件,也称为模块。在Xplico(解码器)中,我们将模块分为以下三类: 从理论上讲,Grab模块:可以访问任何数据采集系统 分辨率模块:这些模块负责协议解码,并为不同的协议提供不同的解码器。 分配模块:理论上,这些模块能够将数据发送到任何数据存储系统(目录/文件,SQLite.Oracle,MySQL,网络套接字交付,可以想象),这可以在不影响协议分析模块的情况下实现。   抓取模块 获取模块位于源代码的capt_dissectors的第一级目录中。 pcap fetch模块用于获取pcap包的流量,而rltm(可能是“实时”缩写)模块可以获取NIC的流量。 解析模块 这些模块从流量中提取特定于协议的信息,可以在解析器的顶级目录中找到。它们分为每个支持的协议(eth,ip,tcp,)的子目录。 FTP解析模块: 目前,FTP PEI.cmd组件指向存储FTP会话明文的文件。如果要提取FTP命令和会话响应(来自调度程序),建议使用两个选项。第一个(也是最简单的)是解析给定的文件名并获取信息。第二个选项是修改解析器以将此信息包含为PEI组件。 TCP解析模块: 为避免流之间的同步问题(例如,FTP命令和数据通道),建议您使用名为tcp_soft的TCP解析器。我们为两种不同的需求开发了两个独立的TCP解析器。两者都向上层解析器(FTP,POP,SMTP)提供相同的数据,但具有不同的时间限制(在不同的流之间)。我们的“应用程序”解析器(TCP上的解析器)旨在与两个TCP解析器一起正常工作。 分配模块 分发模块将数据导出到目标,无论是数据库(SQLite,Postgres,),一组目录和文件,网络套接字,还是您想要的任何内容。这些可以在调度顶级目录中找到。 要创建自己的分配器,需要实现位于xplico-src/dispatch/dispatch.h的接口。具体来说,您需要实现三个函数:DispInit(),DispEnd(),DispInsPei()。 DispInit()通常用于设置特定于您的调度程序的协议的ID号,您还可以设置调度程序可能需要的任何其他内容(solet,数据库连接等) - 我相信此功能只能是分配器被调用一次。 DispInsPei()被多次调用,每次都将指针传递给协议元素信息(PEI)对象(见下文)。调用DispEnd()来清理清理所需的所有内容(关闭文件/套接字句柄,数据库连接等) 如果要创建自己的分配器并发现无法从协议的PEI组件导出所需的协议信息,则需要修改相应的解析器以包含/构造所需的信息。 提示:要通过捕获/解码时间输出数据,请查看pei.time和pei.time_cap。 PEI 协议元素信息 PEI数据结构的定义可以在xplico-src/dispatch/include/pei.h中找到�� PEI包含元数据和PEI组件的列表。 Xplico支持的每个协议都有一个解析器,它解码来自流量数据的协议信息,然后将信息编码为协议特定的PEI格式。给定协议的PEI格式由相应解析器模块中的DissecRegist()函数定义,可以使用-i选项从命令行查看。例如,FTP PEI在xplico-src/dissectors/ftp/ftp.c:DissecRegist()中定义。目前,PEI组件的值可以是字符串(由解析器中的PeiCompAddStingBuff()生成)或文件(由解析器中的PeiCompAddFile()生成)。解析模块负责从原始数据包构造PEI,然后将这些PEI分配给分配模块(通过调用它们的DispInsPei()函数)进行输出。 并非所有解析模块都生成PEI;例如TCP解析器,IP解析器,UDP解析器和以太网解析器。 操纵器 允许操纵器PEI执行某些操作。它们在Capture Splitter→Protocol Parser→Scheduler链中的作用可以在这里描述: 处理稍微 操纵器可以更改PEI文件并将其重新发送给调度程序。   本文《开源网络取证工具Xplico架构浅析》 由愉快信用安全应急响应中心发布。作者负责syp的安全性,安全脉冲独家首先发表本文,如需转载,请联系安全脉冲授权;请不要擅自转载。