一种针对大型网络设备隐匿技术的安全取证方法与流程

文档序号:15818855发布日期:2018-11-02 22:54阅读:184来源:国知局
本发明提供一种针对大型网络设备隐匿技术(即“rootkit”)的安全取证方法,它是一种针对大型网络设备rootkit的安全取证方法,它涉及漏洞利用,属于网络安全
技术领域
:。二.
背景技术
:据报导,著名黑客组织“tao”小组拥有一系列针对各国知名的网络设备定制的持久性后门控制程序和功能程序。为了获取某些路由设备的代码,专门对其内网进行了攻击,并基于所获取的代码研究了网络设备的漏洞,针对性的开展了攻击,并获取了大量的敏感数据。2016年8月,“影子经纪人”曝光了“方程式”黑客组织的部分网络攻击武器,其中就包含了针对网络设备的大量攻击代码。从代码的设计和实现复杂度分析,该代码显然不是一般黑客组织能实现的,应该属于国家行为组织的针对网络设备的大规模攻击技术研究。由于网络设备研究的特殊性,我国在网络攻防领域内对网络设备的入侵分析和取证技术研究和敌手比还有明显的差距。首先是研究网络设备入侵分析和取证的技术难度大,其一、网络设备种类繁多,各种设备之间的差异性很大,需要开展有针对性的研究,其工作量非常大。网络设备包括了路由器设备、交换机设备和防火墙utm等设备,同时又包括主流厂商和某些地区相关的品牌,每个厂商下会形成多个产品的系列和各种不同的版本,其产品的关联度比较低,因此开展研究的难度和工作量都很大。其二、网络设备的一般只提供用户设备的配置管理权限,在出厂时屏蔽了相关的调试接口和系统底层权限,这给入侵分析和取证设置了障碍。入侵分析和取证为了获取完整的取证信息,需要具备底层的权限,因此获取设备底层的权限也具有一定的技术难度。其三、网络设备研究是处在一个黑盒子的状态下进行研究,通常情况下仅可以获得有限的输出信息。入侵分析和取证需要获取设备相对全面的信息,包括文件系统,进程等信息,对设备状态进行分析和比对,这也是研究工作中的一大挑战。三.技术实现要素:1.发明目的鉴于上述问题,本发明提供了一种针对大型网络设备rootkit安全取证方法,目的在于解决了现有在网络设备信息取证方法的局限性,方便系统管理员审查攻击网络设备的方法及手段。2.技术方案本发明提供一种针对大型网络设备隐匿技术(即“rootkit”)的安全取证方法,其步骤如下:步骤1:获取网络设备底层系统的超级用户权限(即“root”权限);步骤2:在目标设备的底层系统创建一个进程(即“process”);步骤3:在该进程中注册异常处理函数,接管最终异常事件;步骤4:在该进程中通过注册信息取证函数,提供应用程序编程接口(即“api-applicationprogramminginterface”),包括:获取系统文件信息函数、获取进程隐藏检测信息函数、获取文件恢复信息函数、获取内存信息函数、获取磁盘信息函数和获取内核信息函数;步骤5:创建一个管道(即“pipe”);步骤6:根据用户输入,确认取证信息的类别;步骤7:执行相应的取证函数,通过管道回传到本地;通过以上步骤,达到了安全获取大型网络设备信息取证的效果,解决了在大型网络设备上信息取证方法的局限性,以及系统管理员审查攻击网络设备的便捷性、效率型等实际问题。其中,在步骤1中所述的“获取网络设备底层系统的超级用户权限”,是指受到本发明保护的是一种获取网络设备的底层权限(即root权限)的方法;通过利用设备已公开或未公开的远程代码执行漏洞、设备底层维护接口、设备特定系统引导模式或选项方式,在具备设备管理员权限、物理接触的情况下,远程或本地方式获取设备底层操作系统的完全控制权,访问设备底层操作系统的全部功能和资源;其具体作法是:1.搜集互联网公开的或自己挖掘的,与目标设备相关的漏洞信息,筛选并测试能够实现对目标设备特定系统版本造成漏洞攻击的利用程序;2.开发或移植漏洞利用程序,调整利用程序中的关键代码,包括:特定内存地址、特定函数地址、数据包长度、内存偏移等,使得漏洞利用程序能够成功在目标设备上执行程序中实现攻击者获取设备最高权限的代码部分(即“payload”);3.开发特定payload,该payload是一段计算机代码,能够实现对目标设备底层系统最高权限的获取,并提供一个操作接口,用于后续取证任务;4.利用开发的漏洞利用程序,向目标设备的具体服务发送特定数据,不同漏洞利用程序针对的设备服务可能不同。目标设备服务响应特定数据,并造成对服务程序原有逻辑的破坏,进而导致中央处理器(即“cpu”)执行精心构造的payload代码;5.设备cpu执行payload之后,会远程通过cpu协议上传取证服务程序,并执行取证服务程序,为后续取证过程做准备。其中,在步骤2中所述的“在目标设备的底层系统创建一个进程”,其创建的具体做法是通过调用系统接口创建进程函数(即“fork()”)函数,在目标设备的底层系统创建一个进程;其作法详述如下:进程调用fork()函数,操作系统给进程分配资源,创建进程控制块,内核把进程信息放在任务队列的双向链表中,分配独立的内核堆栈,内核通过进程号(即“pid”)来标识进程,这些创建好的进程将会为后面的注册函数,创建管道,提供支持。其中,在步骤3中所述的“注册异常处理函数”,是指用于处理进程中发生的异常事件,当异常发生时,会有相应的程序执行异常信息输出到日志里;其具体做法是通过异常初始化函数(即“initexception()”)函数,注册异常处理接口;其作法详述如下:当程序在运行期(即“run-time”)发生的非正常情况,如内存不足,打开文件失败,范围溢出等发生异常时,该函数会通过格式化字符串函数(即“snprintf”)函数记录异常发生的时间,通过系统获取时间函数(即“localtime()”),记录异常发生的位置,记录程序异常产生的原因,并保存到文件里面。其中,在步骤4中所述的“在该进程中通过注册信息取证函数,提供应用程序编程接口(即“api-applicationprogramminginterface”),包括:获取系统文件信息函数、获取进程隐藏检测信息函数、获取文件恢复信息函数、获取内存信息函数、获取磁盘信息函数和获取内核信息函数”;各获取信息的内容如下:获取系统文件信息:通过系统静态信息获取函数(即“depthstaticbasicdataforensic()”)函数,该信息取证方法是通过静态编译的程序读取网络设备底层系统重要的配置文件、日志文件、数据文件的内容;获取进程隐藏检测信息:通过系统隐藏进程检测函数(即“depthwatchhidecourseforensic()”)函数,该信息取证方法是通过多种不同的方式分别从:文件检查、信号的发送、进程调度策略、时间片、进程属性等特点来检测当前网络设备的系统中是否存在隐藏、可疑或恶意的获取设备的敏感信息、用户数据的进程;获取文件恢复信息:通过已删除文件检测函数恢复函数(即“depthrecovercoursedelfileforensic()”)函数,该信息取证方法是获取网络设备底层系统特定进程删除文件的恢复,通过读取进程相关的所有文件描述符即(“/proc/pid/fd”)目录相关文件,来恢复删除的文件信息;获取进程内存信息:通过进程内存获取函数(即“depthmemeroycourseforensic()”)函数,该信息取证方法是获取网络设备底层系统运行程序的虚拟内存信息;获取磁盘信息:通过磁盘信息获取函数(即“depthdiskdataforensic()”)函数,该信息取证方法是获取网络设备底层系统磁盘使用、分区信息;获取内核信息:通过内核信息获取函数(即“depthkerneldataforensic()”)函数,该信息取证方法是获取网络设备底层系统内核内存信息、符号表信息、内核挂载模块信息;各信息获取的作法如下:在通过系统静态信息获取函数(即“depthstaticbasicdataforensic()”)中,执行了获取系统日志的命令(即“./busyboxtar-cf-/var/log//mnt/disk0/log//mnt/disk0/syslog//mnt/disk0/coredumpfsysimage.bin|cat”),获取了系统普通日志,内核崩溃日志等;执行了内核挂载模块命令(即“./busyboxlsmod”)获取了内核挂载模块信息;执行了进程列表命令(即“./busyboxps–ef”)获取进程列表信息;通过获取系统文件列表及属性函数(即“looplsl”)函数获取系统文件列表及属性;通过系统调整进程调度算法函数(即“sched_get_priority_max(sched_fifo)”)函数调整取证进程调度算法和优先级之后,通过循环获取系统md5列表函数(即“loopmd5sum”)函数获取系统文件md5列表;在通过系统隐藏进程检测函数(即“depthwatchhidecourseforensic()”)中,通过循环遍历每个进程的进程号,通过进程信息函数(即“printinfo()”)函数,调用进程目录函数(即“procprocdir()”)函数,进程文件描述符函数(即“proprocfddir()”)函数,进程网络函数(即“proprocnetdir”)函数,来判断进程是否被隐藏;在通过已删除文件检测函数恢复函数(即“depthrecovercoursedelfileforensic()”)函数中,通过循环打开每个进程的文件描述符,通过文件删除字符信息函数(即“finddeletestr()”)函数,删除文件状态信息(即“printdeletefileinfo()”),来判断是否是已删除文件;通过已删除文件恢复函数(即“recoverfiledata()”)函数,来恢复已删除文件;在通过进程内存获取函数(即“depthmemeroycourseforensic()”)函数中,通过创建进程状态数据函数(即“newstatusdata()”)函数创建进程状态数据;通过获取进程状态数据(即“getcouresestatusdata”)函数获取进程状态数据;通过进程拦截函数(即“memeroycourseforensic”)函数对进程进行拦截;通过进程状态信息(即“memeroycourse”)函数获取拦截时的进程状态信息;在通过磁盘信息获取函数(即“depthdiskdataforensic()”)中,通过获取磁盘大小命令(即“df–h”);通过获取磁盘分区状态命令(即“fdisk-l”)来获取网络设备底层系统磁盘使用、分区信息;在通过内核信息获取函数(“即depthkerneldataforensic()”)中,通过系统获取内核挂载模块命令(即“lsmod”);通过获取linux系统版本文件(即“/proc/version”),查看内核版本;通过查看内核符号表文件(即“/proc/kallsyms”)获取内核符号表;通过系统内核日志接口(即“klogctl()”)函数等,获取环形缓冲区信息;通过elf32_ehdr结构体获取内核虚拟内存的镜像文件(即“/dev/kmem”)的可加载内存段(即“load”)段信息。其中,在步骤5中所述的“创建一个管道(即“pipe”)”,以方便获取到的信息回传到本地;其创建的具体作法如是通过调用系统接口pipe()函数,管道是一种把两个进程之间的标准输入和标准输出连接起来的机制,从而提供一种让多个进程间通信的方法,当进程创建管道时,每次都需要提供两个文件描述符来操作管道;其中一个对管道进行写操作,另一个对管道进行读操作;对管道的读写与一般的输入输出系统接口和输入输出软件/硬件接口的组合(即“io系统”)函数一致,使用c语言写数据函数(即“write()”)函数写入数据,使用c语言读数据函数(即“read()”)函数读出数据。其中,在步骤6中所述的“根据用户输入,确认取证信息的类别”,用户选择取证信息的索引,包括:系统文件信息、进程隐藏检测信息、文件恢复信息、内存信息、磁盘信息和内核信息;其具体作法是通过输入任务号交互函数(即“taskdepthforensic()”)函数实现,通过用户选择的子任务号(即“func_cid”),来执行相对应的取证功能。其中,在步骤7中所述的“执行相应的取证函数,通过管道回传到本地”,是讲实时的数据回传到本地;其具体作法是获取到的数据通过写数据函数(即“wirte()”)函数操作,把数据送到管道中;对管道通过读数据函数(即“read()”)函数操作,从管道中的读取数据出来,保存在本地的磁盘上。3.优点借由上述技术方案,本发明针对大型网络设备解决了现有信息取证方法的局限性,方便系统管理员审查攻击网络设备的方法及手段。四.附图说明图1是本发明所述方法流程示意图。图2是用户选择取证信息的索引流程示意图。图3是系统文件信息取证方法的流程示意图。图4是进程隐藏检测信息取证方法的流程示意图。图5是文件恢复信息取证方法的流程示意图。图6是获取内存信息取证方法的流程示意图。图7是获取磁盘信息取证方法的流程示意图。图8是获取内核信息取证方法的流程示意图。图9是获取网络设备底层权限的流程示意图。图中序号、符号、代号说明如下:图2,3,4,5中“输出功能id,功能子id是指”:运行取证程序后会输出“1603data_16_03_1522454825.dat”开始语句,相对应的功能id是16,功能子id是03。图3中“depth_1_1_log”是指:“./busyboxtar-cf-/var/log/|cat”是获取系统日志文件的命令。图4中“进程组id、会话id”是指:进程组id是指每个进程都有一个进程组领导进程即(“pgid”),多个进程组还可以构成一个会话,会话的领导进程成为识别会话的标志即(“sid”);“kill”是指系统中的kill命令,用于结束进程。图4,6中“进程proc目录”是指:设备底层系统中/proc目录,一般存放正在运行的程序的目录;“进程pid”是指:运行程序后系统会给进程一个独一无二的进程号标识每个进程的身份。图5中“fd”是指:“/proc/pid/fd”文件,其中包含了进程相关的所有文件描述符。图6中“maps”是指:/proc/pid/maps文件,文件中存有与进程相关的内存映射信息;“status”文件是指:/proc/pid/status文件,文件中保存有进程的状态信息。图7中“depth_10_1_fdisk”是指:命令“./busyboxfdisk-l”获取硬盘分区信息;“depth_10_1_df”是指:命令“"./busyboxdf-h",获取硬盘占用情况;“depth_10_1_mount”是指:命令“./busyboxmount-v”查看挂载的设备。图8中“depth_9_1_version”是指:命令“cat/proc/versio”查看系统版本;“depth_9_2_kallsyms”是指:命令“cat/proc/kallsyms”查看内核符号表;“depth_9_4_lsmod”是指:命令“lsmod|tail-n+2|cut-d”-f1”获取系统加载模块;“mmap”是指:c语言函数mmap();“sys_call_table”是指系统调用表的地址;“load1”,“load2”是指内核虚拟内存的镜像文件(即“/proc/kmem”)的可加载内核段地址。图9中“tcp”是指:面向连接的,可靠的,基于字节流的传输控制协议。四.具体实施方式为了使本发明方法的目的,技术方案更清楚明白,以下结合附图进行进一步的详细说明。本发明一种针对大型网络设备rootkit安全取证方法,参见图1,其具体流程步骤如下:步骤1.1:通过利用设备已公开或未公开的远程代码执行漏洞、设备底层维护接口、设备特定系统引导模式或选项方式,在具备设备管理员权限、物理接触的情况下,远程或本地方式获取设备底层操作系统的完全控制权。参见图9。步骤1.2:执行信息取证的2进制应用程序,运行信息取证程序。步骤1.3:注册异常处理函数,用于处理进程中发生的异常事件,当异常发生时,会有相应的程序执行异常信息输出到日志里。步骤1.4:注册信息取证函数api-applicationprogramminginterface,包括:获取系统文件信息函数、获取进程隐藏检测信息函数、获取文件恢复信息函数、获取网络信息函数、获取磁盘信息函数、获取内核信息函数。步骤1.5:创建一个管道,方便获取到的信息回传到本地。步骤1.6:用户选择取证信息的索引,包括:系统文件信息、进程隐藏检测信息、文件恢复信息、内存信息、磁盘信息、内核信息。如图2:步骤1.7:执行相应的取证函数,通过管道回传到本地。取证信息,具体流程步骤如下,参见图2:步骤2.1:输出功能id、功能子id和开始语句,例如“1602data_16_02_1522454825.dat”,相对应的功能id是16,功能子id是02,开始执行程序步骤2.2:操作系统给取证进程注册取证函数,包括获取系统文件信息函数,获取隐藏进程检测信息函数,已删除进程文件恢复函数,获取磁盘信息函数,内核信息取证信息函数,原始内存取证函数,给函数分配堆栈和内存。步骤2.3:用户通过输入任务编号来执行相应的取证函数。步骤2.4:取证函数包括系统文件,隐藏进程,文件恢复,进程内存,磁盘信息,内核等不同方向。步骤2.5:相应程序的执行结果会在屏幕上输出。步骤2.6:屏幕上显示结束语句,程序执行结束文件信息,具体流程步骤如下,参见图3:步骤3.1:输出功能id、功能子id和开始语句,例如“1603data_16_03_1522454825.dat”,相对应的功能id是16,功能子id是03,开始执行程序。步骤3.2:执行获取系统日志的程序,执行完成之后在屏幕上打印结束语句,代表程序执行结束。进程隐藏检测信息,具体流程步骤如下,参见图4:步骤4.1:输出功能id、功能子id和开始语句,例如“1603data_16_03_1522454825.dat”,相对应的功能id是16,功能子id是03,开始执行程序。步骤4.2:初始化检测隐藏进程的函数,获取进程组,会话,进程调度策略及信号等信息。步骤4.3:检测隐藏进程程序开始执行。步骤4.4:获取隐藏进程的proc目录、组id、会话id、进程权限、亲和性和优先级等信息。步骤4.5:输出隐藏进程的基本相关信息,网络信息及对应的二进制文件。步骤4.6:输出结束语句,程序执行结束。文件恢复信息。具体流程步骤如下,参见图5:步骤5.1:输出功能id、功能子id和开始语句,例如“1605data_16_05_1522454825.dat”,相对应的功能id是16,功能子id是05,开始执行程序。步骤5.2:遍历系统/proc/fd目录。步骤5.3:得到进程打开的所有文件名列表。步骤5.4:找到被删除的文件。步骤5.5:恢复被删除的文件,还原二进制程序步骤5.6:输出结束语句,程序执行结束。获取内存信息,具体流程步骤如下,参见图6:步骤6.1:输出功能id、功能子id和开始语句,例如“1606data_16_06_1522454825.tar”,相对应的功能id是16,功能子id是06,开始执行程序。步骤6.2:获取系统/proc/pid/status文件步骤6.3:通过status文件筛选进程步骤6.4:读取进程的maps文件及内存信息步骤6.5:输出读取到的进程信息,在屏幕上显示步骤6.6:输出结束语句,程序执行结束。获取磁盘信息,具体流程步骤如下,参见图7:步骤7.1:通过执行depth_10_1_fdisk,depth_10_1_df和depth_10_1_mount命令获取系统的磁盘使用情况,输出结束语句。获取内核信息,具体流程步骤如下,参见图8:步骤8.1:程序开始执行步骤8.2:输出功能id、功能子id和开始语句,例如“1606data_16_06_1522454825.tar”,相对应的功能id是16,功能子id是06,开始执行程序步骤8.3:执行depth_9_1_version命令获取内核版本步骤8.4:执行depth_9_1_kallsyms命令获取内核符号表步骤8.5:通过系统内核日志接口,获取内核环形缓冲区信息步骤8.6:执行depth_9_1_lsmod命令获取内核当前挂载模块步骤8.7:通过中断描述符表寄存器的地址,获取0x80中断处理程序的地址,再从0x80中断服务例程中获取sys_call_table的地址步骤8.8:读取linux运行时内核load1段信息步骤8.9:读取linux运行时内核load2段信息步骤8.10:通过mmap函数往标准输出打印内存数据步骤8.11:屏幕上显示结束语句,程序执行结束。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1