CN113220953B - 一种数据过滤方法及装置 - Google Patents
一种数据过滤方法及装置 Download PDFInfo
- Publication number
- CN113220953B CN113220953B CN202110566822.6A CN202110566822A CN113220953B CN 113220953 B CN113220953 B CN 113220953B CN 202110566822 A CN202110566822 A CN 202110566822A CN 113220953 B CN113220953 B CN 113220953B
- Authority
- CN
- China
- Prior art keywords
- file
- directory
- sector
- data
- sector number
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9035—Filtering based on additional data, e.g. user or group profiles
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Abstract
本发明公开一种数据过滤方法及装置,通过将真实USB存储设备中的文件挂载到嵌入式Linux系统下进行过滤,将风险文件记录并隐藏,从而将规则数据传输给目标主机。本发明,可以对基于FAT32/exFAT文件系统的USB存储设备进行数据过滤,将有风险的文件直接隐藏,为主机USB存储设备接入提供安全防护。
Description
技术领域
本发明涉及数据过滤技术领域。具体地说是一种数据过滤方法及装置。
背景技术
USB大容量存储设备(英语:USB mass storage device class,也称为USB MSC或UMS),允许一个USB接口的设备与主计算设备相连接,以便在两者之间传输文件。生活中常用的U盘/移动硬盘都属于此类产品。与硬盘的最大不同是,它不需物理驱动器,即插即用,且其存储容量大、操作速度较快、便于携带,是最常用的个人电脑数据交换设备。而FAT32/exFAT文件系统又是USB存储设备上常用的文件系统格式。随着U盘/移动硬盘类产品的普及,通过USB存储设备传播的病毒文件也越来越多。所以对USB存储类设备的杀毒文件过滤已经是使用过程中必备的操作。
目前USB存储类设备的杀毒最要是通过主机电脑安装杀毒软件,在打开USB存储类设备时,进行磁盘扫描隔离。
而现有技术存在如下不足:
1)主机电脑必须要安装软件;
2)杀毒软件扫描病毒主要依靠病毒库进行识别病毒,对于不能连接外网的主机无法升级病毒库。
发明内容
为此,本发明所要解决的技术问题在于提供一种数据过滤方法及装置,可以对基于FAT32文件系统或exFAT文件系统的USB存储设备进行数据过滤,将有风险的文件直接隐藏,为主机USB存储设备接入提供安全防护。
为解决上述技术问题,本发明提供如下技术方案:
一种数据过滤方法,利用嵌入式Linux内核对文件系统类型为FAT32格式或exFAT格式的真实USB存储设备中的数据进行过滤,具体包括如下步骤:
1)通过将真实USB存储设备FAT32文件系统或exFAT文件系统的磁盘分区挂载到Linux系统内并形成规则数据;
2)对规则数据的文件系统格式进行判别;
3)根据进行文件系统格式判别后的规则数据进行对应的数据过滤。
上述数据过滤方法,在步骤1)中,规则数据通过如下步骤形成:
1.1)在Linux系统内创建目录mnt且目录mnt为空目录,并将真实USB存储设备中的FAT32文件系统或exFAT文件系统的磁盘分区挂载到目录mnt上;其中,目录mnt可以自定义名称,例如可以自定义为目录adc等;
1.2)执行杀毒软件或关键字过滤软件对目录mnt内的文件进行遍历分析,同时记录风险文件的路径并形成风险文件记录;
1.3)遍历步骤1.2)中形成的风险文件记录,并根据步骤1.2)中记录的风险文件的路径依次打开风险文件以及该风险文件的各级父目录,调用fcntl函数获取该风险文件的扇区号以及该风险文件各级父目录的扇区号;
1.4)合并各个风险文件的各级父目录,形成规则数据。
上述数据过滤方法,步骤1.3)中的fcntl函数为增加了F_GET_DISK_SECTOR命令的fcntl函数,通过调用fcntl函数获取风险文件的扇区号以及该风险文件各级父目录的扇区号的具体方法为:fcntl函数中的F_GET_DISK_SECTOR命令先获取风险文件或与该风险文件相关的目录的file inode,然后调用bmap(file inode,0)获取扇区号,并将返回值拷贝到用户态。其中,file inode表示目录或者文件的文件节点结构体。
上述数据过滤方法,规则数据的格式如下:
[目录扇区号] [子目录1扇区号] [文件1扇区号] [文件2扇区号] [0xffffffff结束标记]和[子目录1扇区号] [文件1扇区号] [文件2扇区号] [0xffffffff结束标记]。
上述数据过滤方法,在步骤2)中对规则数据的文件系统格式判别的具体步骤为:
2.1)调用filp_open打开真实USB存储设备中的磁盘分区文件,通过调用kernel_read读取512字节的文件系统的DBR信息;
2.2)根据DBR信息判断文件系统是否为FAT32格式或exFAT格式,如果文件系统是FAT32格式,则通过调用fat_boot_sector结构体指针,提取文件系统参数,如果文件系统是exFAT格式,则通过调用boot_sector结构体指针,提取文件系统参数,文件系统参数包括扇区大小、FAT表起始扇区、FAT表大小和数据起始扇区;
2.3)根据FAT表起始扇区和FAT表大小,调用kernel_read将FAT表读取到内存中;
2.4)解析通过ioctl接收到的规则数据,为每个目录自定义一个用以表示该目录的结构体,该结构体内部成员至少包括该目录第一个扇区值和规则数据中该目录下所有文件的第一个扇区值的列表;然后将该目录的扇区号作为key、该结构体作为value插入结构体扇区基数树,将该目录下文件的扇区号作为key、该结构体作为value插入到文件扇区基数树;并将该目录下文件的扇区号加入到该结构体的成员变量中;如果目录文件的大小超过1簇,则遍历缓存的FAT表,将该目录文件所有簇的第1个扇区的值加入到结构体扇区基数树;在文件系统中,目录本身也是一种特殊文件,他的内容是此目录下各子目录或普通文件的相关目录信息;
2.5)在f_mass_storage模块的do_read函数返回之前增加过滤函数filter_bh_plugin,用于将读取的真实USB存储设备中的磁盘数据传入过滤模块处理,然后再返回给目标主机;
2.6)启动f_mass_storage模块模拟真实USB存储设备。
上述数据过滤方法,在步骤3)中对规则数据进行过滤的具体步骤如下:
3.1)当f_mass_storage模块调用filter_bh_plugin过滤函数时,在真实USB存储设备中的磁盘数据读取传入后,先判断当前所读取的数据的扇区号是根目录起始扇区的扇区号还是目录文件簇下的一个扇区的扇区号,如果当前所读取的数据的扇区号不是根目录起始扇区的扇区号与目录文件簇下的一个扇区的扇区号中的任意一种,表示当前所读取的数据为数据区数据,则直接退出过滤函数;如果当前所读取的数据的扇区号是根目录起始扇区的扇区号与目录文件簇下的一个扇区的扇区号中的任意一种,表示当前所读取的数据为目录文件内容,则进入下一步处理;
3.2)当目标主机读取的是目录文件内容时,根据规则数据对风险文件的目录项进行修改,实现对风险文件的隐藏;
3.3)在结构体扇区基数树和文件扇区基数树中查找是否有该扇区号作为key的结构体,如果没有,则使用临时变量作为结构体指针;
3.4)如果文件系统为FAT32格式,将从真实USB存储设备中读取到的数据地址赋值给msdos_dir_entry目录项指针,然后遍历msdos_dir_entry目录项指针,跳过attr为ATTR_EXT和ATTR_DIR的目录项以及跳过name[0]为0xE5的目录项,其中,ATTR_EXT为长目录项,ATTR_DIR为子目录项,0xE5为已删除目录项;如果文件系统为exFAT格式,将从真实USB存储设备中读取到的数据地址赋值给exfat_dentry目录项指针,然后遍历exfat_dentry目录项指针,跳过type不为0x85的File Directory Entry目录项和跳过file.attr置位为0x10的File Directory Entry目录项;
3.5)如果文件系统为FAT32格式,经过步骤3.4)遍历检查,从真实USB存储设备中读取的数据中剩下的目录项则都是文件的短目录项,从目录项中提取文件起始簇ID,并将该簇ID转换成扇区号,然后判断该扇区号是否在结构体的文件扇区号列表中,根据该判断的命中结果并结合预先设置好的黑/白名单模式,得出是否要隐藏该文件;如果文件系统为exFAT格式,经过步骤3.4)遍历检查,从真实USB存储设备中读取的数据中剩下的目录项则都是文件的File Directory Entry目录项,从Stream Extension Directory Entry目录项中提取文件起始簇ID,并将该簇ID转换成扇区号,然后判断该扇区号是否在结构体的文件扇区号列表中,根据该判断的命中结果并结合预先设置好的黑/白名单模式,得出是否要隐藏该文件,其中,从Stream Extension Directory Entry目录项中提取文件起始簇ID时目录项指针+1;
3.6)如果文件系统为FAT32格式,对于要隐藏的文件,则修改此文件的短目录项,将该文件的attr成员的值修改为ATTR_EXT;如果文件系统为exFAT格式,对于要隐藏的文件,则修改该文件的File Directory Entry目录项,将该目录项的type成员的值修改为EXFAT_INVAL,然后重新计算该目录项的file.checksum成员值。
上述数据过滤方法,在步骤3.1)中,如果文件系统是FAT32格式,则再判断数据内容的前64字节是否为“.”和“..”目录项;如果文件系统是exFAT格式,则再判断数据内容的前96字节是否包含有“File Directory Entry”目录项,如果该数据内容前96字节内不包含有“File Directory Entry”目录项,则对该数据内容进行放行,反之,则再判断该数据内容前96字节是否包含有 “Stream Extension Directory Entry”目录项和/或“File NameDirectory Entry”目录项。
上述数据过滤方法,在步骤3.2)中,在进行下一步处理之前,先计算当前目录下一次要读取的扇区号,并根据计算结果进行相应的处理,具体操作为:I)如果当前读取扇区号与当前读取扇区个数之和没有超过当前簇大小范围,则下一次读取的扇区号为当前读取扇区号与当前读取扇区个数之和;II)如果当前读取扇区号与当前读取扇区个数之和等于当前簇大小范围的最大值,通过内存中的FAT表中获取目录的下一簇的起始扇区号,并将计算得到的扇区号缓存到全局变量,以备下次过滤用于判断读取内容的扇区号是否为目录内容。
一种利用上述数据过滤方法进行数据过滤的装置,包括具有内置有FAT32和/或exFAT文件系统模块源代码的Linux内核的嵌入式Linux系统,嵌入式Linux系统通过USBhost物理端口与真实USB存储设备通信连接,嵌入式Linux系统通过USB Device端口与目标主机通信连接;嵌入式Linux系统的Linux内核内设置有用于生成过规则数据的业务模块和利用预设过滤函数对从业务模块下载的规则数据进行相关文件过滤的过滤模块。
上述装置,嵌入式Linux系统设置在SoC主板上。
本发明的技术方案取得了如下有益的技术效果:
本发明通过过滤USB通信数据,修改通信数据中的文件目录项,达到隐藏风险文件的效果,在底层直接将风险文件隐藏,从而可以不在目标主机上安装杀毒软件,也可以对已安装的杀毒软件不进行联网升级,同时完成数据的转移。
附图说明
图1为本发明中数据过滤装置工作原理图;
图2为本发明中规则数据形成流程示意图;
图3为本发明中规则数据过滤流程示意图。
具体实施方式
为了阻隔病毒通过真实USB存储设备向目标主机入侵,在真实USB存储设备与目标主机之间设置一个数据过滤装置,该数据过滤装置包括设置在SoC主板上且具有内置有FAT32和/或exFAT文件系统模块源代码的Linux内核的嵌入式Linux系统,如图1所示,嵌入式Linux系统通过USB host物理端口与真实USB存储设备通信连接,嵌入式Linux系统通过USB Device端口与目标主机通信连接;嵌入式Linux系统的Linux内核内设置有用于生成过规则数据的业务模块和利用预设过滤函数对从业务模块下载的规则数据进行相关文件过滤的过滤模块。在实际使用过程中,对于低于Linux kernel5.4版的Linux内核,将exFAT模块源代码置入该Linux内核中即可,而对于Linux kernel5.4版以上的Linux内核,则无需置入exFAT模块源代码。此外,Linux内核内设置FAT32文件系统模块源代码还是exFAT文件系统模块源代码,亦或二者均有,取决于应用环境的要求,例如常用真实USB存储设备文件系统的格式。
利用该数据过滤装置对文件系统类型为FAT32格式或exFAT格式的真实USB存储设备中的数据进行过滤,如图2所示,具体包括如下步骤:
1)通过将真实USB存储设备中的FAT32文件系统或exFAT文件系统的磁盘分区挂载到Linux系统内并形成规则数据,形成规则数据的具体步骤为:
1.1)在Linux系统内创建目录mnt且目录mnt为空目录,并将真实USB存储设备中的FAT32文件系统或exFAT文件系统的磁盘分区挂载到目录mnt上;
1.2)执行杀毒软件或关键字过滤软件对目录mnt内的文件进行遍历分析,同时记录风险文件的路径并形成风险文件记录;其中,记录风险文件的路径的具体操作为将风险文件的路径存入一个链表,这个链表即为风险文件记录;
1.3)遍历步骤1.2)中形成的风险文件记录,并根据步骤1.2)中记录的风险文件的路径依次打开风险文件以及该风险文件的各级父目录,调用fcntl函数获取该风险文件的扇区号以及该风险文件各级父目录的扇区号;其中,fcntl函数为增加了F_GET_DISK_SECTOR命令的fcntl函数,通过调用fcntl函数获取风险文件的扇区号以及该风险文件各级父目录的扇区号的具体方法为:fcntl函数中的F_GET_DISK_SECTOR命令先获取风险文件或与该风险文件相关的目录的file inode,然后调用bmap(file inode,0)获取扇区号,并将返回值拷贝到用户态;
1.4)合并各个风险文件的各级父目录,形成规则数据;其中,规则数据的格式如下:
[目录扇区号] [子目录1扇区号] [文件1扇区号] [文件2扇区号] [0xffffffff结束标记]和[子目录1扇区号] [文件1扇区号] [文件2扇区号] [0xffffffff结束标记];
2)对规则数据的文件系统格式进行判别,具体步骤如下:
2.1)调用filp_open打开真实USB存储设备中的磁盘分区文件,通过调用kernel_read读取512字节的文件系统的DBR信息;
2.2)根据DBR信息判断文件系统是否为FAT32格式或exFAT格式,如果文件系统是FAT32格式,则通过调用fat_boot_sector结构体指针,提取文件系统参数,如果文件系统是exFAT格式,则通过调用boot_sector结构体指针,提取文件系统参数,文件系统参数包括扇区大小、FAT表起始扇区、FAT表大小和数据起始扇区;
2.3)根据FAT表起始扇区和FAT表大小,调用kernel_read将FAT表读取到内存中;
2.4)解析通过ioctl接收到的规则数据,为每个目录自定义一个用以表示该目录的dir结构体,该dir结构体内部成员至少包括该目录第一个扇区值和规则数据中该目录下所有文件的第一个扇区值的列表;然后将该目录的扇区号作为key、该dir结构体作为value插入结构体扇区(dir_sector)基数树,将该目录下文件的扇区号作为key、该dir结构体作为value插入到文件扇区(file_sector)基数树;并将该目录下文件的扇区号加入到该dir结构体的成员变量中;如果目录文件的大小超过1簇,则遍历缓存的FAT表,将该目录文件所有簇的第1个扇区的值加入到结构体扇区基数树;
2.5)在f_mass_storage模块的do_read函数返回之前增加过滤函数filter_bh_plugin,用于将读取的真实USB存储设备中的磁盘数据传入过滤模块处理,然后再返回给目标主机;
2.6)启动f_mass_storage模块模拟真实USB存储设备;
3)根据进行文件系统格式判别后的规则数据进行对应的数据过滤,如图3所示,具体步骤为:
3.1)当f_mass_storage模块调用filter_bh_plugin过滤函数时,在真实USB存储设备磁盘数据读取传入后,先判断当前所读取的数据的扇区号是根目录起始扇区的扇区号还是目录文件簇下的一个扇区的扇区号,如果当前所读取的数据的扇区号不是根目录起始扇区的扇区号与目录文件簇下的一个扇区的扇区号中的任意一种,表示当前所读取的数据为数据区数据,则直接退出过滤函数,对该数据进行放行;如果当前所读取的数据的扇区号是根目录起始扇区的扇区号与目录文件簇下的一个扇区的扇区号中的任意一种,表示当前所读取的数据为目录文件内容,则进入下一步处理;如果文件系统是FAT32格式,则再判断数据内容的前64字节是否为“.”和“..”目录项;如果文件系统是exFAT格式,则再判断数据内容的前96字节是否包含有“File Directory Entry”目录项,如果该数据内容前96字节内不包含有“File Directory Entry”目录项,则对该数据内容进行放行,反之,则再判断该数据内容前96字节是否包含有 “Stream Extension Directory Entry”目录项和/或“FileName Directory Entry”目录项;
3.2)当目标主机读取的是目录文件内容时,根据规则数据对风险文件的目录项进行修改,实现对风险文件的隐藏;在进行下一步处理之前,先计算当前目录下一次要读取的扇区号,并根据计算结果进行相应的处理,具体操作为:I)如果当前读取扇区号与当前读取扇区个数之和没有超过当前簇大小范围,则下一次读取的扇区号为当前读取扇区号与当前读取扇区个数之和;II)如果当前读取扇区号与当前读取扇区个数之和等于当前簇大小范围的最大值,通过内存中的FAT表中获取目录的下一簇的起始扇区号,并将计算得到的扇区号缓存到全局变量,以备下次过滤用于判断读取内容的扇区号是否为目录内容;
3.3)在dir_sector基数树和file_sector基数树中查找是否有该扇区号作为key的dir结构体,如果没有,则使用临时变量作为dir结构体指针;
3.4)如果文件系统为FAT32格式,将从真实USB存储设备中读取到的数据地址赋值给msdos_dir_entry目录项指针(32个字节一个目录项),然后遍历msdos_dir_entry目录项指针,跳过attr为ATTR_EXT和ATTR_DIR的目录项以及跳过name[0]为0xE5的目录项,其中,ATTR_EXT为长目录项,ATTR_DIR为子目录项,0xE5为已删除目录项;如果文件系统为exFAT格式,将从真实USB存储设备中读取到的数据地址赋值给exfat_dentry目录项指针,然后遍历exfat_dentry目录项指针(32个字节一个目录项),跳过type不为0x85的File DirectoryEntry目录项和跳过file.attr置位为0x10的File Directory Entry目录项,如元文件、流文件、已删除文件等;
3.5)如果文件系统为FAT32格式,经过步骤3.4)遍历检查,从真实USB存储设备中读取的数据中剩下的目录项则都是文件的短目录项,从目录项中提取文件起始簇ID,并将该簇ID转换成扇区号,然后判断该扇区号是否在结构体的文件扇区号列表中,根据该判断的命中结果并结合预先设置好的黑/白名单模式,得出是否要隐藏该文件,其中,对于临时dir结构体肯定不命中;如果文件系统为exFAT格式,经过步骤3.4)遍历检查,从真实USB存储设备中读取的数据中剩下的目录项则都是文件的File Directory Entry目录项,从Stream Extension Directory Entry目录项中提取文件起始簇ID,并将该簇ID转换成扇区号,然后判断该扇区号是否在dir结构体的文件扇区号列表中,根据该判断的命中结果并结合预先设置好的黑/白名单模式,得出是否要隐藏该文件,其中,从Stream ExtensionDirectory Entry目录项中提取文件起始簇ID时目录项指针+1,对于临时dir结构体肯定不命中;
3.6)如果文件系统为FAT32格式,对于要隐藏的文件,则修改此文件的短目录项,将该文件的attr成员的值修改为ATTR_EXT;如果文件系统为exFAT格式,对于要隐藏的文件,则修改该文件的File Directory Entry目录项,将该目录项的type成员的值修改为EXFAT_INVAL,然后重新计算该目录项的file.checksum成员值。
本发明中,将真实USB存储设备中需要进行转移到目标主机的数据文件挂载到数据过滤装置中的嵌入式Linux系统下并对数据文件进行过滤,从而避免了直接将真实USB存储设备与目标主机进行连通转移数据文件,减少目标主机因接入真实USB存储设备而被电脑病毒感染的几率,从而在目标主机无需安装杀毒软件或者对杀毒软件进行升级的情况下安全获得外部信息,即可以在无需安装杀毒软件或者对杀毒软件进行升级的情况下对未联网的目标主机进行数据更新或者数据传输。
换言之,本发明中的数据过滤装置在真实USB存储设备与需要防护的目标主机之间充当了USB存储设备和中间目标主机的角色,即相对真实USB存储设备而言,本发明中的数据过滤装置的角色为目标主机,筛选出安全的数据信息并进行接收,相对于需要防护的目标主机而言,本发明中的数据过滤装置则相当于USB存储设备,向需要防护的目标主机提供安全可靠的数据信息。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本专利申请权利要求的保护范围之中。
Claims (5)
1.一种数据过滤方法,其特征在于,利用嵌入式Linux内核对文件系统类型为FAT32格式或exFAT格式的真实USB存储设备中的数据进行过滤,具体包括如下步骤:
1)通过将真实USB存储设备中的FAT32文件系统或exFAT文件系统的磁盘分区挂载到Linux系统内并形成规则数据;规则数据通过如下步骤形成:
1.1)在Linux系统内创建目录mnt且目录mnt为空目录,并将真实USB存储设备中的FAT32文件系统或exFAT文件系统的磁盘分区挂载到目录mnt上;
1.2)执行杀毒软件或关键字过滤软件对目录mnt内的文件进行遍历分析,同时记录风险文件的路径并形成风险文件记录;
1.3)遍历步骤1.2)中形成的风险文件记录,并根据步骤1.2)中记录的风险文件的路径依次打开风险文件以及该风险文件的各级父目录,调用fcntl函数获取该风险文件的扇区号以及该风险文件各级父目录的扇区号;fcntl函数为增加了F_GET_DISK_SECTOR命令的fcntl函数,通过调用fcntl函数获取风险文件的扇区号以及该风险文件各级父目录的扇区号的具体方法为:其中,fcntl函数中的F_GET_DISK_SECTOR命令先获取风险文件或与该风险文件相关的目录的file inode,然后调用bmap(file inode,0)获取扇区号,并将返回值拷贝到用户态;
1.4)合并各个风险文件的各级父目录,形成规则数据;规则数据的格式如下:
[目录扇区号] [子目录1扇区号] [文件1扇区号] [文件2扇区号] [0xffffffff结束标记]和[子目录1扇区号] [文件1扇区号] [文件2扇区号] [0xffffffff结束标记];
2)对规则数据的文件系统格式进行判别,具体步骤为:
2.1)调用filp_open打开真实USB存储设备中的磁盘分区文件,通过调用kernel_read读取512字节的文件系统的DBR信息;
2.2)根据DBR信息判断文件系统是否为FAT32格式或exFAT格式,如果文件系统是FAT32格式,则通过调用fat_boot_sector结构体指针,提取文件系统参数,如果文件系统是exFAT格式,则通过调用boot_sector结构体指针,提取文件系统参数,文件系统参数包括扇区大小、FAT表起始扇区、FAT表大小和数据起始扇区;
2.3)根据FAT表起始扇区和FAT表大小,调用kernel_read将FAT表读取到内存中;
2.4)解析通过ioctl接收到的规则数据,为每个目录自定义一个用以表示该目录的结构体,该结构体内部成员至少包括该目录第一个扇区值和规则数据中该目录下所有文件的第一个扇区值的列表;然后将该目录的扇区号作为key、该结构体作为value插入结构体扇区基数树,将该目录下文件的扇区号作为key、该结构体作为value插入到文件扇区基数树;并将该目录下文件的扇区号加入到该结构体的成员变量中;如果目录文件的大小超过1簇,则遍历缓存的FAT表,将该目录文件所有簇的第1个扇区的值加入到结构体扇区基数树;
2.5)在f_mass_storage模块的do_read函数返回之前增加过滤函数filter_bh_plugin,用于将读取的真实USB存储设备中的磁盘数据传入过滤模块处理,然后再返回给目标主机;
2.6)启动f_mass_storage模块模拟真实USB存储设备;
3)根据进行文件系统格式判别后的规则数据进行对应的数据过滤,具体步骤如下:
3.1)当f_mass_storage模块调用filter_bh_plugin过滤函数时,在真实USB存储设备中的磁盘数据读取传入后,先判断当前所读取的数据的扇区号是根目录起始扇区的扇区号还是目录文件簇下的一个扇区的扇区号,如果当前所读取的数据的扇区号不是根目录起始扇区的扇区号与目录文件簇下的一个扇区的扇区号中的任意一种,表示当前所读取的数据为数据区数据,则直接退出过滤函数;如果当前所读取的数据的扇区号是根目录起始扇区的扇区号与目录文件簇下的一个扇区的扇区号中的任意一种,表示当前所读取的数据为目录文件内容,则进入下一步处理;
3.2)当目标主机读取的是目录文件内容时,根据规则数据对风险文件的目录项进行修改,实现对风险文件的隐藏;
3.3)在结构体扇区基数树和文件扇区基数树中查找是否有该扇区号作为key的结构体,如果没有,则使用临时变量作为结构体指针;
3.4)如果文件系统为FAT32格式,将从真实USB存储设备中读取到的数据地址赋值给msdos_dir_entry目录项指针,然后遍历msdos_dir_entry目录项指针,跳过attr为ATTR_EXT和ATTR_DIR的目录项以及跳过name[0]为0xE5的目录项,其中,ATTR_EXT为长目录项,ATTR_DIR为子目录项,0xE5为已删除目录项;如果文件系统为exFAT格式,将从真实USB存储设备中读取到的数据地址赋值给exfat_dentry目录项指针,然后遍历exfat_dentry目录项指针,跳过type不为0x85的File Directory Entry目录项和跳过file.attr置位为0x10的File Directory Entry目录项;
3.5)如果文件系统为FAT32格式,经过步骤3.4)遍历检查,从真实USB存储设备中读取的数据中剩下的目录项则都是文件的短目录项,从目录项中提取文件起始簇ID,并将该簇ID转换成扇区号,然后判断该扇区号是否在结构体的文件扇区号列表中,根据该判断的命中结果并结合预先设置好的黑/白名单模式,得出是否要隐藏该文件;如果文件系统为exFAT格式,经过步骤3.4)遍历检查,从真实USB存储设备中读取的数据中剩下的目录项则都是文件的File Directory Entry目录项,从Stream Extension Directory Entry目录项中提取文件起始簇ID,并将该簇ID转换成扇区号,然后判断该扇区号是否在结构体的文件扇区号列表中,根据该判断的命中结果并结合预先设置好的黑/白名单模式,得出是否要隐藏该文件,其中,Stream Extension Directory Entry目录项的地址为File DirectoryEntry目录项指针+1;
3.6)如果文件系统为FAT32格式,对于要隐藏的文件,则修改此文件的短目录项,将该文件的attr成员的值修改为ATTR_EXT;如果文件系统为exFAT格式,对于要隐藏的文件,则修改该文件的File Directory Entry目录项,将该目录项的type成员的值修改为EXFAT_INVAL,然后重新计算该目录项的file.checksum成员值。
2.根据权利要求1所述的数据过滤方法,其特征在于,在步骤3.1)中,如果文件系统是FAT32格式,则再判断数据内容的前64字节是否为“.”和“..”目录项;如果文件系统是exFAT格式,则再判断数据内容的前96字节是否包含有“File Directory Entry”目录项,如果该数据内容前96字节内不包含有“File Directory Entry”目录项,则对该数据内容进行放行,反之,则再判断该数据内容前96字节是否包含有 “Stream Extension DirectoryEntry”目录项和/或“File Name Directory Entry”目录项。
3.根据权利要求2所述的数据过滤方法,其特征在于,在步骤3.2)中,在进行下一步处理之前,先计算当前目录下一次要读取的扇区号,并根据计算结果进行相应的处理,具体操作为:I)如果当前读取扇区号与当前读取扇区个数之和没有超过当前簇大小范围,则下一次读取的扇区号为当前读取扇区号与当前读取扇区个数之和;II)如果当前读取扇区号与当前读取扇区个数之和等于当前簇大小范围的最大值,通过内存中的FAT表中获取目录的下一簇的起始扇区号,并将计算得到的扇区号缓存到全局变量,以备下次过滤用于判断读取内容的扇区号是否为目录内容。
4.一种利用权利要求1~3任一所述的数据过滤方法进行数据过滤的装置,其特征在于,包括具有内置有FAT32和/或exFAT文件系统模块源代码的Linux内核的嵌入式Linux系统,嵌入式Linux系统通过USB host物理端口与真实USB存储设备通信连接,嵌入式Linux系统通过USB Device端口与目标主机通信连接;嵌入式Linux系统的Linux内核内设置有用于生成规则数据的业务模块和利用预设过滤函数对从业务模块下载的规则数据进行相关文件过滤的过滤模块。
5.根据权利要求4所述的装置,其特征在于,嵌入式Linux系统设置在SoC主板上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110566822.6A CN113220953B (zh) | 2021-05-24 | 2021-05-24 | 一种数据过滤方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110566822.6A CN113220953B (zh) | 2021-05-24 | 2021-05-24 | 一种数据过滤方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113220953A CN113220953A (zh) | 2021-08-06 |
CN113220953B true CN113220953B (zh) | 2022-08-23 |
Family
ID=77098139
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110566822.6A Active CN113220953B (zh) | 2021-05-24 | 2021-05-24 | 一种数据过滤方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113220953B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1434450A (zh) * | 2003-01-25 | 2003-08-06 | 华中科技大学 | 基于fat32磁盘文件系统结构的文件隐藏方法 |
CN1940950A (zh) * | 2006-09-21 | 2007-04-04 | 上海交通大学 | 计算机网络最小侵入式数据隐藏的方法 |
CN101882132A (zh) * | 2009-04-27 | 2010-11-10 | 深圳市闪联信息技术有限公司 | 虚拟fat文件系统的创建及读取方法以及装置 |
CN105045528A (zh) * | 2015-06-24 | 2015-11-11 | 武汉烽火众智数字技术有限责任公司 | 一种快速的fat32磁盘分区遍历及文件查找方法 |
CN107908967A (zh) * | 2017-10-30 | 2018-04-13 | 上海威固信息技术股份有限公司 | 一种Exfat文件系统的文件隐藏和恢复方法 |
CN110688657A (zh) * | 2019-09-26 | 2020-01-14 | 福州浩恒影音工程有限公司 | 一种u盘病毒隔离器及其工作方法 |
CN112800007A (zh) * | 2021-01-28 | 2021-05-14 | 上海华元创信软件有限公司 | 适用于fat32文件系统的目录项扩展方法和系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100169395A1 (en) * | 2008-12-26 | 2010-07-01 | Sandisk Il Ltd. | Device and method for filtering a file system |
KR101042246B1 (ko) * | 2009-10-09 | 2011-06-17 | 한국전자통신연구원 | 침해방지용 보안 usb 커넥터 및 이를 이용한 침해 방지 시스템 |
US9104893B2 (en) * | 2013-03-04 | 2015-08-11 | Microsoft Technology Licensing, Llc | Rule based access for removable storage |
CN106372080A (zh) * | 2015-07-22 | 2017-02-01 | 安恒通(北京)科技有限公司 | 一种文件清除方法、装置和系统 |
CN107358096B (zh) * | 2017-07-10 | 2020-06-09 | 成都灵跃云创科技有限公司 | 文件病毒查杀方法及系统 |
CN111259436B (zh) * | 2020-01-13 | 2023-03-31 | 山东浪潮商用系统有限公司 | 一种u盘隔离器隔离宏病毒的方法 |
-
2021
- 2021-05-24 CN CN202110566822.6A patent/CN113220953B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1434450A (zh) * | 2003-01-25 | 2003-08-06 | 华中科技大学 | 基于fat32磁盘文件系统结构的文件隐藏方法 |
CN1940950A (zh) * | 2006-09-21 | 2007-04-04 | 上海交通大学 | 计算机网络最小侵入式数据隐藏的方法 |
CN101882132A (zh) * | 2009-04-27 | 2010-11-10 | 深圳市闪联信息技术有限公司 | 虚拟fat文件系统的创建及读取方法以及装置 |
CN105045528A (zh) * | 2015-06-24 | 2015-11-11 | 武汉烽火众智数字技术有限责任公司 | 一种快速的fat32磁盘分区遍历及文件查找方法 |
CN107908967A (zh) * | 2017-10-30 | 2018-04-13 | 上海威固信息技术股份有限公司 | 一种Exfat文件系统的文件隐藏和恢复方法 |
CN110688657A (zh) * | 2019-09-26 | 2020-01-14 | 福州浩恒影音工程有限公司 | 一种u盘病毒隔离器及其工作方法 |
CN112800007A (zh) * | 2021-01-28 | 2021-05-14 | 上海华元创信软件有限公司 | 适用于fat32文件系统的目录项扩展方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113220953A (zh) | 2021-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101777062B (zh) | 场境感知的实时计算机保护系统和方法 | |
CN100504873C (zh) | 管理归档文件系统的方法和装置 | |
US7849462B2 (en) | Image server | |
Jeon et al. | A recovery method of deleted record for SQLite database | |
US8073926B2 (en) | Virtual machine image server | |
US7376947B2 (en) | Computer system and method for secure installation and operation of software | |
US20190087431A1 (en) | Systems, methods, and apparatuses for simplifying filesystem operations utilizing a key-value storage system | |
US20050125513A1 (en) | Cache-based system management architecture with virtual appliances, network repositories, and virtual appliance transceivers | |
US10191917B2 (en) | Virtual disk utility | |
CN101178726B (zh) | 数据文件解归档的方法和系统 | |
KR20060094458A (ko) | 파일 시스템 항목(들) 및 연관된 엔티티(들)를 직렬화하는시스템 및 방법 | |
EP3814930B1 (en) | System and method for bulk removal of records in a database | |
CN108369487A (zh) | 用于在去重虚拟文件系统中拍摄快照的系统和方法 | |
CN109614203B (zh) | 一种基于应用数据仿真的安卓应用云数据取证分析系统及方法 | |
CN102779244A (zh) | 一种文件操作的执行方法及装置 | |
CN106372080A (zh) | 一种文件清除方法、装置和系统 | |
CN111359219B (zh) | 虚幻引擎的文件处理方法、装置、设备及存储介质 | |
CN102043652A (zh) | 嵌入式设备根文件系统的处理系统和处理方法 | |
CN113220953B (zh) | 一种数据过滤方法及装置 | |
US9613207B2 (en) | Method and apparatus for preventing autorun of portable USB storage | |
US9367330B1 (en) | Method of accessing files in electronic devices | |
US9465937B1 (en) | Methods and systems for securely managing file-attribute information for files in a file system | |
CN106383703A (zh) | 一种linux操作系统的硬盘驱动加载方法及装置 | |
Jarrett et al. | Purple dawn: Dead disk forensics on Google's Fuchsia operating system | |
CN115658275A (zh) | 一种可执行程序迁移方法、装置与计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |