网络流量抓取与还原系统Xplico架构

                               网络流量抓取与还原系统Xplico架构

0×1 概述


关于


xplico的目标在于从抓取的网络流量处还原应用中的数据。


例如:xplico可以从pcap包中还原出每一封邮件(POP,IMAP,SMTP协议),所有的http内容等等.Xplico并不是协议分析工具,而是网络取证工具。


特性


  • 支持 HTTP,SIP,IMAP,POP,SMTP,TCP,UDP等协议的还原;


  • 端口无关协议的解码探测;


  • 多线程处理机制;


  • 输出数据存储在SQLite或mysql数据库中,并有原始文件输出;


  • 解码后的有xml描述流相关信息;


  • 有实时捕获能力(与计算机硬件性能有关);


  • 有TCP中ACK校验能力;


  • DNS解析能力;


  • 对输入包大小没有要求;


  • 支持IPV4与IPV6;


  • 模块化,每一个单独的功能都是模块.输入,解码器,输出均为模块,可自由组合;


  • 有自行定制解码器能力。


构成


Xplico系统由以下4小系统构成:


一个解码管理器叫做DeMa;


一个IP解码器叫做Xplico;


一组主要应用解码器(HTTP解码器,SMTP解码器等);


一个结果输出界面。


使用的语言:


C;


python;


php;


JavaScript。


0×2 架构


整体架构


Xplico系统:


Xplico系统由以下4小系统构成:


一个解码管理器叫做DeMa


一个IP解码器叫做Xplico


一组主要应用解码器(HTTP解码器,SMTP解码器等)


一个结果输出界面


各自的关系如下图所示:



数据流示例


通过一个解码数据流的例子,可以更直观的展示整套系统是如何工作的


通过main()方法,调用CapInit()方法来初始化可能用到的捕获模块,然后调用CapMain()来开始捕获过程.CapInit()方法会指定一个捕获模块,Capmain()方法会调用这个模块.在使用pcap文件的例子中,使用了 cap_pcap.so这个模块,故在CapMain()中,会调用 capt_dissectors/pcap/pcap.c:CaptDisMain()方法.


当过程进行到 PCAP捕获模块时, pcap_loop(pcap处理流程)就会被调用.然后每个包都会被PcapDissector()处理. ProtDissec()函数有一整个过程,能将包发送到正确的解码器上进行解码.


0×3 解码管理器模块


解码管理器(Dema)有以下功能:


规范化输入数据


初始化解码设置选项,初始化历史文件,解码器,分配器


启动解码器和分配器


操作解码器和分配器


0×4 解码模块概述


Xplico的解码模块可以在整体架构中使用,也可以单独使用.解码器的最大特点是模块化,扩展性,和可配置


解码器的设计是为了独立于输入数据(原始数据)和输出数据的格式


在Xplico中的数据流和信息流如下图所示:




原始的数据输入到 “capture dissector”(抓取分析) 模块,然后被送到protocol(协议分析)模块,最后被重组和拼接的数据被送到dispatcher(分配)模块


dispatcher(分配模块)会重新组织数据或者发给其他应用(比如分配器),如果需要的话


故 Xplico 是由一下3个类型的模块组成的:


抓取模块


解析模块


分配模块


下图展示了模块化的 Xplico ,系统内核是模块内部链接的基础



 

上述模块的配置工作是通过配置文件来进行的.所以,选择或者创建合适的抓取和分配模块,Xplico可以在很多的场景下使用。    



 

0×5 模块


介绍


Xplico读取网络流量(抓取模块),从该数据中解析出协议信息(解析模块),然后把信息发送到需要的目的模块去(分配模块)


解码器的每一个部分都是一个插件,也就是所谓的模块.在Xplico(解码器)中,我们把模块分为以下三个种类:


抓取模块: 理论上能够接入任何数据获取系统


解析模块: 这些模块负责协议解码,针对不同的协议有不同的解码器


分配模块: 这些模块理论上能够把数据发送到任何数据存储系统(目录/文件,SQLite.Oracle,MySQL,网络socket发送,能想得到的),这些都可以实现,并且不影响到协议分析模块.


抓取模块


抓取模块在源代码的 capt_dissectors 的第一层目录中. pcap 抓取模块用来抓取pcap包的流量, rltm(有可能是 ‘real time’的缩写)模块抓取网卡的流量.


解析模块


这些模块从流量中提取特定于协议的信息,可以在解析器顶层目录中找到。 它们被分为每个支持的协议(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的接口。具体来说,您将需要实现3个函数:DispInit(),DispEnd(),DispInsPei()。 DispInit()通常用于设置特定于您的分配程序要使用的协议的ID号,并且还可以设置分配程序可能需要的其他任何内容(套接字,数据库连接等) – 我相信这个函数只能在分配器调用一次。 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解析器,和Ethernet解析器


操纵器


操纵器PEI之前允许执行一些操作。 它们在捕获分离器→协议解析器→调度程序链中的作用可以在这里描述:过程略


操纵器可以对PEI文件进行更改,并且重新发送给分配器。


出处:FreeBuf.COM


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。


-END-


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值