美文网首页程序员
一种ring3环境下还原FTP协议的方法

一种ring3环境下还原FTP协议的方法

作者: 渔子舟人 | 来源:发表于2020-05-04 14:15 被阅读0次

    鉴于目前企事业单位存在FTP协议还原的需求,提出一种基于ring3层FTP协议还原的方法。传统做法基本上都基于winpcap/libpcap,但因工作于ring0层,从一定程度上来说存在不稳定因素。原始套接字是基于IP数据包的编程,可以自行组装IP数据包,可以直接用于接收IP层的报文数据,因此原始套接字理论上可以接收TCP/UDP报文。
    原始套接字技术原理介绍:
    下面以linux平台tcp协议为例说明原始套接字报文接收流程:


    linux 收流程图.png

    匹配系统已注册的原始套接字,若匹配成功则调用skb_clone()拷贝网络数据包至原始套接字处理。
    创建原始套接字伪代码如下:
    sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    FTP协议还原整体流程如图2:


    整体模块流程图.png
    整体模块说明:
    1, 原始套接字抓取模块通过混杂模式抓取网卡收发网络数据报文,为保证性能,抓取的数据立即通过put()存储至缓存数据队列,并设置event;
    2, 业务线程池等待到event,触发某一线程(线程池其他线程无业务处理时处于休眠状态)通过get()获取新增的网络数据报文信息;
    3, 业务线程池拿到数据后通过WM算法匹配”stor”/”retr”等关键字信息以识别当前数据报文对应的具体操作行为;

    原始套接字抓取数据模块伪代码如下:
    while(1){
    recv(sock, recvBuf, sizeof(recvBuf), 0);
    if(recvBuf-> proto== IPPROTO_TCP){
    put();
    setevent();
    }
    }
    业务线程池模块伪代码如下:
    while(1){
    result=waitevent(event);
    if(result==0){
    wm_match(get());
    del();
    //record
    }
    }

    引入WM算法意义说明:
    WM算法采用坏字符表跳转与字符块技术,增大了目的字符串与模式串不匹配的可能性,从而加快了匹配速度。本文为基础框架,后续可能引入其他业务协议的识别,故协议识别引擎采用WM算法而不是单模匹配算法诸如KMP、BF等。WM算法一般由三个表构成,SHIFT,HASH,PREFIX。SHIFT表:用于记录文本串向右移动的长度,即一张跳转表。 HASH表:HASH表记录了所有模式串后缀(长度为B)与模式串本身的映射关系。当SHIFT [h]=0时,B与对应模式串P的映射关系,但是存在一对多的映射,因为模式串集合中存在相同后缀的模式串,所以HASH表的value应该是一个链表的形式,存储多个模式串。PREFIX表:PREFIX记录了所有模式串前缀(长度为B)与模式串本身的映射关系。同HASH表一样,B与对应模式串P的映射关系存在一对多,所以PREFIX表存储多个模式串。

    相关文章

      网友评论

        本文标题:一种ring3环境下还原FTP协议的方法

        本文链接:https://www.haomeiwen.com/subject/uyveghtx.html