一种基于事件监控机制的文件系统操作拦截方法

文档序号:6575748阅读:269来源:国知局

专利名称::一种基于事件监控机制的文件系统操作拦截方法
技术领域
:本发明涉及系统监视、系统安全技术,特别是一种基于事件监控机制的文件系统操作拦截方法。
背景技术
:文件系统操作拦截是指在用户的应用程序试图对文件系统进行访问时,系统管理程序首先截取该访问行为,检査访问的合法性,并以此为据作出允许或禁止访问的决定。文件系统安全是系统安全中重要的一环,绝大多数危害系统安全的应用程序(恶意软件、木马、病毒等)都是通过在文件系统中写入非法数据来达到破坏系统的目的。因此跟踪拦截应用程序对文件系统的操作,对系统安全有非常重大的意义。在Linux的2.6内核版本中,已经存在名为inotify与dnotify的文件系统监视机制,但此类机制仅提供有限的功能。当恶意程序进行文件系统读写时,监视程序能够获知读写的内容,但无法及时阻止这一行为。在大多数情况下,当监视程序或者非法的文件读写行为时,该行为已经完成,因此为时已晚。此外,inotify与dnotify能够获取到的文件读写信息非常有限,一般无法有效的判断一个文件系统操作是否合法,容易产生误判。在目前的Linux内核中,还并不存在可以阻止应用程序进行文件操作的机制,唯一可以起作用的方法是不提供程序访问某个文件的权限。但这样的防护手段粒度太大,一个文件要么完全可以访问,要么完全不能访问,没有更为精细的控制。而且,一旦应用程序获得了系统管理员的权限,就可以对任何文件为所欲为。
发明内容本发明的目的在于克服上述技术的缺陷,而提供一种基于事件监控机制的文件系统操作拦截方法。本发明的实现目的所采用的技术方案。这种基于事件监控机制的文件系统操作拦截方法,该方法包括如下步骤1)一个用户信任的管理程序调用函数iauth一init来启动一个拦截服务,此函数将返回一个文件描述符;2)管理程序调用函数iauth—add—watch来对系统关键部分进行监视,在调用该函数时,管理程序必须指定一个回调函数,用来判断一个访问是否合法;3)当其他应用程序试图读写被监视的文件时,管理程序提供的回调函数会被调用并决定该次读写的合法性,予以通过或拒绝,此行为将导致试图读写的应用程序的文件操作成功或失败。本发明中调用函数iauth—hiit的进程必须有管理员权限,管理程序也可以调用函数iauth_remove_watch移除监视;管理程序还可以通过调用read函数读取函数iauthjnit返回的文件描述符来获得拦截的情况。本发明的有益效果在inotify的基础上通过修改内核,实现了一个基于内核模式下文件系统操作拦截管理接口的原型。本发明提供了用户友好的系统调用,使得系统管理者可以任意添加对本机文件系统操作的监视、拦截和阻止功能。该功能可以为系统安全方面的应用软件提供便利。图1是本发明的系统结构示意图;图2系统调用流程图3是调用函数iauth_add_watch的流程图4是调用函数auth_remove_watch的流程图5是调用内部函数的流程图6是拦截函数的流程图7是拦截操作的公用函数的流程图8是对单个inode节点进行校验的流程具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述本发明所述的这种基于事件监控机制的文件系统操作拦截方法,该方法包括如下步骤1)一个用户信任的管理程序调用iauthjnit来启动一个拦截服务。调用此函数的进程必须有管理员权限。此函数将返回一个文件描述符。2)管理程序调用iauth一add一watch来对系统关键部分进行监视,在调用该函数时,管理程序必须指定一个回调函数,用来判断一个访问是否合法。3)如有必要,管理程序可以调用iauth—remove一watch移除监视。4)当其他应用程序试图读写被监视的文件时,管理程序会提供的回调函数会被调用并决定该次读写的合法性,予以通过或拒绝,此行为将导致试图读写的应用程序的文件操作成功或失败。5)管理程序可以通过调用read函数读取iauth一init返回的文件描述符来获得拦截的情况。拦截技术定义iauth一device结构,此结构包含同步对象,iauth_feedback的队列(feedback—queue),引用技术以及其他的一些统计信息。在Linux内核里实现iauth一init等系统调用,iauth—init通过get_empty_filp函数(Linux内部函数)获得一个"虚假"的文件,并在文件对象的private—data部分挂上一个新建的iauth一device结构。此外,该函数的读文件操作函数指针还必须挂上一个特定的函数iauth—read,用于反馈拦截信息。在内核里定义拦截控制结构iauth一verify。此结构记录一个监视/拦截行为,包括监视的一些特性、对应的iauth—device结构以及用户提供的回调函数。在内核里和内核外定义拦截反馈结构iauth_feedback。在iauth—device中有该结构的队列,此结构用于反馈拦截信息,包含拦截的操作类型、文件名、检査后果(是否合法)以及用户自定义的信息。在inode结构中加入iauth—verify的队列。实现系统调用iauth一add一watch。此系统调用会根据用户传入的参数创建iauth—verify结构,并在被监视的文件的inode结构中的iauth_queue加入创建的iauth_verify结构。在Linux的内核代码中的文件操作函数里,在实际进行操作的语句前插入一个拦截函数。不同的文件操作对应的拦截函数不同,如文件被移动的文件操作函数为vfs—rename,而对应的拦截函数为iauth_m0Ve。全部的文件操作函数以及拦截函数的对应见下表:_事件操作函数拦截函数文件被移动vfs一renamciauth—move文件被删除d—deleteiauth—remove文件被创建vfscreatevfs—mknodiauth—create5<table>tableseeoriginaldocumentpage6</column></row><table>拦截函数首先递归的判断是否有用户监视当前文件或目录及其父目录,并逐个的调用此队列里对当前操作感兴趣的iauth—verify中记录的回调函数,如果有任何一个函数拒绝了该操作,那么这个操作就会失败,操作函数会直接返回并给出拒绝访问的错误码。若某个终拦截函数拒绝了操作,该拦截函数对应的iauth一device将得到拦截结果的回馈,iauth一device将结果存储在feedback—queue字段中。实现iauth一read函数,用户通过read函数读取iauth—init返回的文件描述符最终在内核里将调用这个函数,iauth_read函数首先从文件对象的private—data中得到iauth—device结构的指针,并从中的feedback—queue里取出所有的回馈信息(不超过用户提供缓存的最大尺寸),并写入用户提供的缓存。如果feedback—queue为空,那么iauth一read函数将持续等待直到feedback—queue内重新有元素。iauth系统结构图如图1所示用户接口(iauth.h):系统调用intiauth一init(void);用途创建一个用于拦截的伪文件描述符。返回值文件描述符,可用read函数读取反馈。流程图如图2所示intiauth—add—watch(intfd,constchar*path,verify_proc—tvp,u32flags);用途添加一个拦截参数fd:iauthjnit返回的文件描述符path:希望监视的文件或目录的路径VP:校验函数flags:参数返回值一个标明当前监视的整数。流程图如图3所示intiauth—remove—watch(intfd,intwd);用途删除一个拦截参数fd:iauth一init返回的文件描述符wd:由iauth一add一watch返回的整数返回值错误码。流程图如图4所示内部函数ssize一tiauth一read(structfile*filp,charuser*buf,size一tn,loff—t*off);用途:作为拦截文件描述符的读文件回调函数。当用户使用read函数读取由iauthjnit返回的文件描述符时,该函数会被调用。参数filp:用户传入的文件描述符buf:用于接收数据的内存区域mbuf的长度Off:偏移量返回值读取的总字节数流程图如图5所示intiauth—move(structinode*old—dir,structdentry*old—dentry,structinode承new一dir,structdentry*new—dentry)用途拦截文件移动操作。参数old—dir:原来的inode结构old—dentry:原来的dentry结构new—dir:新的inode结构7new—dentry:新的dentry结构返回值若允许执行操作则返回非0,否则返回O。流程图所有的拦截函数的流程图均为图6:intiauth—remove(structdentry*dentry);用途拦截文件删除操作。参数dentry:要删除的文件的dentry结构返回值若允许执行操作则返回非0,否则返回O。流程图见iauth一moveintiauth_create(structinode*dir,structnameidata*nd);用途拦截文件创建操作参数dir:目录的inode结构nd:文件名信息返回值若允许执行操作则返回非0,否则返回O。intiauth—mkdir(structinode*dir,structdentry*dentry);用途拦截目录创建操作参数-dir:父目录的inode信息dentry:目录的信息返回值若允许执行操作则返回非0,否则返回O。intiauth—read(structfile*file,size_tcount,loff一t*pos);用途拦截文件读取操作参数file:文件的file结构count:要读取的字节数pos:在文件中的偏移量返回值若允许执行操作则返回非0,否则返回O。8流程图见iauth一moveintiauth—write(structfile*file,size—tcount,loff_t*pos);用途拦截文件写入操作参数file:文件的file结构count:要写入的字节数POS:在文件中的偏移量返回值若允许执行操作则返回非0,否则返回O。流程图见iauth^jnovei加iauth—xattr(structdentry*dentry,void*value,size—tsize);用途拦截属性修改操作参数dentry:目标文件的dentry结构value:新的属性size:新的属性的尺寸返回值若允许执行操作则返回非0,否则返回O。流程图见iauth一moveintiauth—do—verify(structinode*target,inttype,void*rawdata);用途拦截操作的公用函数参数target:被拦截的操作的目标的inode结构type:操作类型rawdata:操作对应的数据,参见"类型定义"部分。返回值若允许执行操作则返回非0,否则返回O。流程图如图7所示。intverify一queue(structinode*target,inttype,void*rawdata);用途对单个inode节点进行校验参数target:校验的目标type:操作的类型rawdata:操作对应的数据,参见"类型定义"部分。返回值若允许执行操作则返回非0,否则返回O。流程图如图8所示常量定义监视的操作类型#defmeIA—MOVE#defineIA—REMOVE#defineIA一CREATE#defineIA—MKDIR弁defineIA—READ她fineIA—WRITEdefineIA—XATTR0x00000001〃文件被移动0x00000002//文件被删除0x00000004//文件被创建0x00000008//目录被创建0x00000010//文件被读取0x00000020//文件被修改0x00000040//文件附加属性被改变监视的选项弁defineIA—ONLYDIR她fineIA—DONT一FOLLOW弁defineIA—MASK—ADD#defmeIA—ISDIR#defineIA一ONESHOT0x01000000〃仅针对当前目录0x02000000//不跟随链接0x04000000//修改已存在的监视0x08000000〃仅针对目录0x10000000〃仅触发一次结构structiauth一feedback{intwd^inttype;intlenjcharname;〃此结构记录反馈信息〃监视的标识//事件的类型〃文件名长度//文件名字符串structiauth一verifyverify_proc_tvproc;intflags;structiauth—device*device;spinlock—tlock;〃拦截函数指针〃拦截的参数〃拦截对应的设备〃自旋锁structiauth一deviceintfd;〃设备fdstructfile*filp;〃设备对应的文件结构structlist—headfeedback—queue;〃反馈队歹'Jspinlock—tlock;〃自旋锁类型定义typedefint(*verifyjproc_t)(intfd,intwd,constchar*path,inttype,char*rawdata);校验函数参数中的rawdata根据事件类型type的不同而不同。对于各种事件类型,rawdata包含的内容如下<table>tableseeoriginaldocumentpage11</column></row><table>校验函数返回非o表示通过,返回o表示拒绝。上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。权利要求1、一种基于事件监控机制的文件系统操作拦截方法,其特征在于该方法包括如下步骤1)一个用户信任的管理程序调用函数iauth_init来启动一个拦截服务,此函数将返回一个文件描述符;2)管理程序调用函数iauth_add_watch来对系统关键部分进行监视,在调用该函数时,管理程序必须指定一个回调函数,用来判断一个访问是否合法;3)当其他应用程序试图读写被监视的文件时,管理程序提供的回调函数会被调用并决定该次读写的合法性,予以通过或拒绝,此行为将导致试图读写的应用程序的文件操作成功或失败。2、根据权利要求1所述的基于事件监控机制的文件系统操作拦截方法,其特征在于调用函数iauth一init的进程必须有管理员权限。3、根据权利要求1所述的基于事件监控机制的文件系统操作拦截方法,其特征在于管理程序调用iauth—remove—watch移除监视。4、根据权利要求1所述的基于事件监控机制的文件系统操作拦截方法,其特征在于管理程序通过调用read函数读取函数iauthjnit返回的文件描述符来获得拦截的情况。全文摘要本发明涉及一种基于事件监控机制的文件系统操作拦截方法,步骤如下一个用户信任的管理程序调用函数iauth_init来启动一个拦截服务,此函数将返回一个文件描述符;管理程序调用函数iauth_add_watch来对系统关键部分进行监视,在调用该函数时,管理程序必须指定一个回调函数,用来判断一个访问是否合法;当其他应用程序试图读写被监视的文件时,管理程序提供的回调函数会被调用并决定该次读写的合法性,予以通过或拒绝,此行为将导致试图读写的应用程序的文件操作成功或失败。本发明的有益效果本发明提供了用户友好的系统调用,使得系统管理者可以任意添加对本机文件系统操作的监视、拦截和阻止功能。该功能可以为系统安全方面的应用软件提供便利。文档编号G06F21/02GK101556608SQ20091009623公开日2009年10月14日申请日期2009年2月27日优先权日2009年2月27日发明者卜佳俊,凡石,褚力行,涛金,华陈,纯陈申请人:浙大网新科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1