CN111695116A - 基于Linux系统内核层Rootkit的取证方法与装置 - Google Patents

基于Linux系统内核层Rootkit的取证方法与装置 Download PDF

Info

Publication number
CN111695116A
CN111695116A CN202010400215.8A CN202010400215A CN111695116A CN 111695116 A CN111695116 A CN 111695116A CN 202010400215 A CN202010400215 A CN 202010400215A CN 111695116 A CN111695116 A CN 111695116A
Authority
CN
China
Prior art keywords
kernel module
address value
hidden
memory
memory address
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.)
Granted
Application number
CN202010400215.8A
Other languages
English (en)
Other versions
CN111695116B (zh
Inventor
董事
徐翰隆
肖新光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Antiy Network Technology Co Ltd
Original Assignee
Beijing Antiy Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Antiy Network Technology Co Ltd filed Critical Beijing Antiy Network Technology Co Ltd
Priority to CN202010400215.8A priority Critical patent/CN111695116B/zh
Priority claimed from CN202010400215.8A external-priority patent/CN111695116B/zh
Publication of CN111695116A publication Critical patent/CN111695116A/zh
Application granted granted Critical
Publication of CN111695116B publication Critical patent/CN111695116B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Storage Device Security (AREA)

Abstract

本发明提供一种基于Linux系统内核层Rootkit的取证方法、装置、电子设备及存储介质,该方法包括:获取Rootkit的内核模块内存地址值,根据内核模块的内存地址值获取隐藏内核模块;根据隐藏内核模块,获取内核模块结构体;根据内核模块结构体和内核模块的内存数据,完成对Rootkit的取证。只针对Rootkit内核模块进行检测和分析,可以极大的避免实现的复杂性,实现简单,保证易于多系统移植适配;同时,检测手段在内核层实现,通过较高的权限操作内核内存等底层信息,可以保证检测的准确和可靠;最后,内核模块是内核Rootkit实现隐藏信息的根本,从内核模块检测和分析入手,有利于了解恶意软件通过何种手段实现Rootkit及获取到隐藏的信息数据,完成取证。

Description

基于Linux系统内核层Rootkit的取证方法与装置
技术领域
本发明涉及网络终端安全技术领域,尤其涉及一种基于Linux系统内核层Rootkit的取证方法、装置、电子设备及存储介质。
背景技术
Linux是一种开源的操作系统内核,目前大量的发行版系统使用Linux内核。而且伴随着越来越多国产操作系统的出现,Linux下的计算机安全面临更大的挑战,因此,针对基于Linux内核系统下的病毒木马检测技术越来越受到重视。
木马等恶意软件入侵系统后,一般会通过技术手段,隐藏自身的进程、文件、端口等信息,称之为Rootkit。Rootkit按照实现的技术途径一般分为两种,应用层Rootkit和内核层Rootkit。应用层Rootkit通过在系统用户空间编程实现,比较容易检测识别,目前技术研究比较成熟。内核层Rootkit是一种更高级的手段,通过在具有更高权限的内核层编程达成目的,隐蔽性更强、伪装性更好。
但是,目前针对Linux系统下的内核层Rootkit研究还相对较少,理论性居多,类似基于内核栈检测及内核挂钩检测的手段在实现上较为困难繁琐,涉及大量的内核实现细节,不易实现跨系统平台兼容;而一些相对容易实现的检测方案,则很容易被恶意诱导,导致检测结果不准确,例如基于内核kallsyms 符号表检测,该机制存在借助应用层System.map文件的情况,该文件很容易被恶意软件修改伪装,误导检测结果;与此同时,针对Linux内核Rootkit取证的技术手段和方法更是少之又少。
发明内容
有鉴于此,本发明提供了一种基于Linux系统内核层Rootkit的取证方法、装置、电子设备及存储介质,以解决或部分解决上述技术问题。
根据本发明的一个方面,提供了一种基于Linux系统内核层Rootkit的取证方法,所述方法包括:
获取所述Rootkit的内核模块内存地址值,根据所述内核模块的内存地址值获取隐藏内核模块;
根据所述隐藏内核模块,获取内核模块结构体;
根据所述内核模块结构体和所述内核模块的内存数据,完成对所述Rootkit 的取证。
可选地,所述获取所述Rootkit的内核模块内存地址值,所述根据所述内核模块的内存地址值获取隐藏内核模块包括:
外部循环遍历所述Rootkit的所有内核模块内存分配链表,逐个分析每个内核模块内存信息,获取内核模块的第一内存地址值;
内部循环遍历所述Rootkit的内核模块结构体链表,获取内核模块结构体,进而获取所述内核模块的第二内存地址值;
将第一内存地址值与第二内存地址值逐一比较判断,判断是否存在第一内存地址值与第二内存地址值相等的情况;如果是,则跳转至外部循环步骤,如果否,则判断所述内核模块结构体链表是否遍历结束;
如果否,跳转至内部循环步骤;如果是,则将与第二内存地址值不相等的第一内存地址值对应的内核模块记录为隐藏内核模块。
可选地,所述根据所述隐藏内核模块,获取内核模块结构体包括:
循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1;
假设内核模块结构体存于所述隐藏内核模块对应的第一内存地址值指向的内存,获取内存数据,将所述内存数据与假设的所述内核模块结构体进行特征比对;
判断特征比对是否成功,如果否,则跳转至所述循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1的步骤;如果是,则获得所述内核模块结构体。
可选地,所述判断特征比对是否成功包括:
判断运行假设的所述内核模块结构体地址域的值是否等于所述隐藏内核模块对应的第一内存地址值;
所述假设的内核模块结构体隐藏内核模块状态域的值是否小于3;
所述假设的内核模块结构体隐藏内核模块大小域的值是否大于0;
所述假设的内核模块结构体隐藏内核模块名称域中的值是否属于ASCII 可显示字符。
可选地,所述根据所述内核模块结构体和所述内核模块的内存数据,完成对所述Rootkit的取证包括:
获取所述内核模块的全部内存数据,恢复所述隐藏内核模块结构体链表,并对所述隐藏内核模块进行卸载操作;
分析所述内核模块的全部内存数据,获取恶意程序信息,完成对所述 Rootkit的取证。
根据本发明的另一个方面,提供了一种基于Linux系统内核层Rootkit的取证装置,所述装置包括:
隐藏内核模块获取单元,用于获取所述Rootkit的内核模块内存地址值,根据所述内核模块的内存地址值获取隐藏内核模块;
内核模块结构体获取单元,用于根据所述隐藏内核模块,获取内核模块结构体;
取证单元,用于根据所述内核模块结构体和所述内核模块的内存数据,完成对所述Rootkit的取证。
可选地,所述隐藏内核模块获取单元具体用于:
外部循环遍历所述Rootkit的所有内核模块内存分配链表,逐个分析每个内核模块内存信息,获取内核模块的第一内存地址值;
内部循环遍历所述Rootkit的内核模块结构体链表,获取内核模块结构体,进而获取所述内核模块结构体的第二内存地址值;
将第一内存地址值与第二内存地址值逐一比较判断,判断是否存在第一内存地址值与第二内存地址值相等的情况;如果是,则跳转至外部循环步骤,如果否,则判断所述内核模块结构体链表是否遍历结束;
如果否,跳转至内部循环步骤;如果是,则将与第二内存地址值不相等的第一内存地址值对应的内核模块记录为隐藏内核模块。
可选地,所述内核模块结构体获取单元具体用于:
循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1;
假设内核模块结构体存于所述隐藏内核模块对应的第一内存地址值指向的内存,获取内存数据,将所述内存数据与假设的所述内核模块结构体进行特征比对;
判断特征比对是否成功,如果否,则跳转至所述循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1的步骤;如果是,则获得所述内核结构模块体。
可选地,所述内核模块结构体获取单元具体用于:判断运行假设的所述内核模块结构体地址域的值是否等于所述隐藏内核模块对应的第一内存地址值;
所述假设的内核模块结构体隐藏内核模块状态域的值是否小于3;
所述假设的内核模块结构体隐藏内核模块大小域的值是否大于0;
所述假设的内核模块结构体隐藏内核模块名称域中的值是否属于ASCII 可显示字符。
可选地,所述取证单元具体用于:
获取所述内核模块的全部内存数据,恢复所述隐藏内核模块结构体链表,并对所述隐藏内核模块进行卸载操作;
分析所述内核模块的全部内存数据,获取恶意程序信息,完成对所述 Rootkit的取证。
根据本发明的又一个方面,提供了一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述的方法。
根据本发明的又一个方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述的方法。
本发明通过获取Rootkit的内核模块内存地址值,根据内核模块的内存地址值获取隐藏内核模块;根据隐藏内核模块,获取内核模块结构体;根据内核模块结构体和内核模块的内存数据,完成对Rootkit的取证。只针对Rootkit内核模块进行检测和分析,可以极大的避免实现的复杂性,实现简单,保证易于多系统移植适配;同时,检测手段在内核层实现,通过较高的权限操作内核内存等底层信息,可以保证检测的准确和可靠;最后,内核模块是内核Rootkit 实现隐藏信息的根本,从内核模块检测和分析入手,有利于了解恶意软件通过何种手段实现Rootkit及获取到隐藏的信息数据,完成取证。
附图说明
图1为本发明实施例提供的一种基于Linux系统内核层Rootkit的取证方法流程图;
图2为本发明实施例提供的另一种基于Linux系统内核层Rootkit的取证方法流程图;
图3为正常内核模块内存结构和断链法隐藏内核模块结构示意图;
图4为隐藏内核模块检测信息图;
图5为隐藏内核模块内存信息打印图;
图6为对Rootkit的取证结果图;
图7为本发明实施例提供的一种基于Linux系统内核层Rootkit的取证装置图;
图8为本发明电子设备一个实施例的结构示意图。
具体实施方式
下面结合说明书附图,对本发明实施例提供的一种基于Linux系统内核层Rootkit的取证方法、装置、电子设备及存储介质的具体实施方式进行说明。
图1为本发明实施例提供的一种基于Linux系统内核层Rootkit的取证方法流程图,该方法包括:
步骤S11:获取Rootkit的内核模块内存地址值,根据内核模块的内存地址值获取隐藏内核模块;具体为:
外部循环遍历Rootkit的所有内核模块内存分配链表,逐个分析每个内核模块内存信息,获取内核模块的第一内存地址值;
内部循环遍历Rootkit的内核模块结构体链表,获取内核模块结构体,进而获取内核模块的第二内存地址值;
将第一内存地址值与第二内存地址值逐一比较判断,判断是否存在第一内存地址值与第二内存地址值相等的情况;如果是,则跳转至外部循环步骤,如果否,则判断内核模块结构体链表是否遍历结束;
如果否,跳转至内部循环步骤;如果是,则将与第二内存地址值不相等的第一内存地址值对应的内核模块记录为隐藏内核模块。
步骤S12:根据隐藏内核模块,获取内核模块结构体;具体为:
循环遍历隐藏内核模块对应的第一内存地址值,每次加1;
假设内核模块结构体存于隐藏内核模块对应的第一内存地址值指向的内存,获取内存数据,将内存数据与假设的所述内核模块结构体进行特征比对;
判断特征比对是否成功,如果否,则跳转至循环遍历隐藏内核模块对应的第一内存地址值,每次加1的步骤;如果是,则获得内核模块结构体。
在本发明的一些具体实施例中,判断特征比对是否成功包括:
判断运行假设的所述内核模块结构体地址域的值是否等于所述隐藏内核模块对应的第一内存地址值;
假设的内核模块结构体隐藏内核模块状态域的值是否小于3;
假设的内核模块结构体隐藏内核模块大小域的值是否大于0;
假设的内核模块结构体隐藏内核模块名称域中的值是否属于ASCII可显示字符。
步骤S13:根据内核模块结构体和内核模块的内存数据,完成对Rootkit 的取证;具体为:
获取内核模块的全部内存数据,恢复隐藏内核模块结构体链表,并对隐藏内核模块进行卸载操作;
分析内核模块的全部内存数据,获取恶意程序信息,完成取证完成对 Rootkit的取证。
本发明只针对Rootkit内核模块进行检测和分析,可以极大的避免实现的复杂性,实现简单,保证易于多系统移植适配;同时,检测手段在内核层实现,通过较高的权限操作内核内存等底层信息,可以保证检测的准确和可靠;最后,内核模块是内核Rootkit实现隐藏信息的根本,从内核模块检测和分析入手,有利于了解恶意软件通过何种手段实现Rootkit及获取到隐藏的信息数据,完成取证。
内核Rootkit实现需要内核模块编程,而Rootkit针对自身内核模块的信息同样需要或伪装或隐藏,而内核模块的隐藏一般使用断链法实现,因此该方法从隐藏内核模块入手,首先通过内存搜索的方式获取内核模块的内存数据,然后与断链后的内核模块结构体链表中信息进行比对,找出隐藏内核模块。然后通过数据特征匹配的方式针对内核模块内存数据进行分析,获取内核模块结构体,然后通过重构链表和卸载隐藏的内核模块等手段使Rootkit失效,从而让木马程序和端口等暴露出来,最终分析完成取证。
其中,内核层Rootki,简称内核Rootkit,是一种系统内核层病毒木马,运行加载后能获取到操作系统高级别权限,从而使用各种底层技术隐藏和保护自身,绕开安全软件的检测和查杀。
断链法是最常用的Rootkit编程手段,简单且有效,一般用来隐藏恶意内核模块和恶意进程等信息。一般在系统内核中,为了方便查找,进程及内核模块等数据会通过链表结构串联在一起,通过去掉链表中的信息索引,可以实现隐藏信息的目的,但其实真正的信息数据还存在于内存中。
图2为本发明实施例提供的另一种基于Linux系统内核层Rootkit的取证方法流程图。该方法包括隐藏内核模块检测和Rootkit分析取证两部分。
隐藏内核模块检测:
图3为正常内核模块内存结构和断链法隐藏内核模块结构示意图,通过正常内核模块内存结构和断链后的内存结构对比发现,通过内存分配信息链表获取到内存地址可以得到所有内核模块内存地址值,而通过内核模块结构体链表获取的方法得到检测断链后的隐藏内核模块信息,因此可以通过对比找出隐藏内核模块。换言之,在Linux系统中内核模块通过结构体数据来描述,每个结构体包含所代表内核模块的名称、大小、内存地址值等描述信息,并且在内核中通过链表的形式将所有结构体索引串联在一起,方便查找和获取模块信息。隐藏的内核模块会通过断链法去掉链表中自己的结构体索引信息。因此,通过其他途径获取所有内核模块内存地址值,然后与内核模块结构体链表中的内存地址值逐一比较,由于隐藏内核模块在结构体链表中索引已经丢失,找不到对应关系,据此可以找到隐藏内核模块。
分析发现,所有内核模块的内存分配信息都会记录在一个内存链表,并属于一定的区间范围,因此可以通过搜索内存链表来获取每个内核模块的内存地址值。具体检测步骤如下:
步骤S21:在应用层使用insmod命令直接加载内核检测模块,获得Rootkit 的所有内核模块内存分配链表和内核模块结构体链表。
步骤S22:外部循环遍历Rootkit的所有内核模块内存分配链表,逐个分析每个内核模块内存信息,获取内核模块的第一内存地址值。此层循环属于外部循环。
步骤S23:内部循环遍历Rootkit的内核模块结构体链表,获取内核模块结构体,进而获取内核模块的第二内存地址值。其中,内核模块结构体中存有内核模块的第二内存地址值。
步骤S24:将第一内存地址值与第二内存地址值逐一比较判断,判断是否存在第一内存地址值与第二内存地址值相等的情况;如果是,说明找到了对应关系,则跳转至步骤S22,如果否,则执行步骤S25;
步骤S25:判断内核模块结构体链表是否遍历结束;如果否,则跳转至步骤S23;如果是,则执行步骤S26;
步骤S26:将与第二内存地址值不相等的第一内存地址值对应的内核模块记录为隐藏内核模块。如果存在第一内存地址值与第二内存地址值不相等的情况,说明存在没有找到对应关系的内存地址值,则说明该内核模块在内核模块结构体链表中的对应索引丢失,即为隐藏内核模块。
Rootkit分析取证:
经过上一步的内存搜索,我们已经知道隐藏内核模块的内存地址值,通过研究,在Linux内核中内核模块作为一个代码和数据的代码片段,同时包含了自身的结构体数据,通过结构体数据的某些特征找出其在内核模块内存中位置,然后针对结构体链表进行断链恢复、卸载内核模块等操作,使Rootkit失效,进而完成取证。
内核模块结构体中记录的内核模块数据信息需要满足一定的要求,例如内存地址值等于上述查找隐藏内核模块中获取到的内核模块内存地址值,名称一定是属于ASCII码可打印字符,内核模块大小值一定大于0等。此外为了更好的完成取证,还有必要查看内核模块中使用了哪些函数,包含哪些关键文件名等信息,这些信息可以通过将整个内核模块内存数据输出成ASCII码查看,然后进行专业分析。具体分析取证步骤如下:
步骤S27:循环遍历隐藏内核模块对应的第一内存地址值,每次加1;
步骤S28:假设内核模块结构体存于隐藏内核模块对应的第一内存地址值指向的内存,获取内存数据,将内存数据与假设的内核模块结构体进行特征比对;即,假设内核模块结构体从隐藏内核模块对应的第一内存地址值上开始存储,则将该地址作为起始地址,取出内核模块结构体大小的数据,判断是否包含内核模块结构体数据的通用特征特点;
步骤S29:判断特征比对是否成功,如果否,则跳转至步骤S27;如果是,则执行步骤S210;
步骤S210:获得内核模块结构体。
即判断运行假设的所述内核模块结构体地址域的值是否等于隐藏内核模块对应的第一内存地址值;假设的内核模块结构体隐藏内核模块状态域的值是否小于3;假设的内核模块结构体隐藏内核模块大小域的值是否大于0;假设的内核模块结构体隐藏内核模块名称域中的值是否属于ASCII可显示字符。
如果上述判断存在一项否,即存在一项特征不满足的情况,返回步骤S27,循环遍历该内存地址,每次加1,然后继续进行步骤28和步骤S29,直到内核模块内存结束。
如果所有数据特征满足,则找到了内核模块结构体。
步骤S211:获取内核模块的全部内存数据,恢复隐藏内核模块结构体链表,并对隐藏内核模块进行卸载操作;即找到内核模块结构体,已具备进一步取证的条件。首先,使用16进制打印内核模块全部内存数据,其中会包含隐藏内核模块使用的内核函数,需要隐藏的目录进程信息等,然后,通过编程手段恢复断链法破坏的内核模块结构体链表,并在应用层通过rmmod命令对隐藏内核模块进行卸载操作。至此,内核Rootkit功能失效。
步骤S212:分析内核模块的全部内存数据,获取恶意程序信息,完成取证完成对Rootkit的取证。即,打印内核模块内存数据的16进制码,查看其中的字符信息,了解其Hook的函数信息,隐藏的目录信息。分析获取的字符信息,根据字符信息获得在何处隐藏及隐藏了具有哪些特征的信息,进而找到恶意程序的实体目录、可执行程序等,结合信息找到隐藏进程、隐藏文件、及隐藏端口等信息对应的目录,完成取证。
在本发明的一些具体实施例中,例如在某次处理紧急事件中,目标机器为Centos7操作系统,属于Linux平台的发行版。系统出现运行速度变的很慢情况,同时存在异常端口开启,但在应用层排查进程端口等信息不存在可疑情况,因此怀疑存在内核层Rootkit恶意程序。使用本发明实施检测,加载检测模块,模块自动运行扫描检查,在日志中输出如图4所示,图4为隐藏内核模块检测信息图,从图4中可以看到存在隐藏的内核模块,内核模块名称为rt,并且打印出了该内核模块的大小及存的起始和结束地址区间,打印该区间的内核模块内存信息,如图5所示,图5为隐藏内核模块内存信息打印图。
通过对图5进行分析,可以看到主要针对内核xfs_file_readdir函数进行了 Hook来达成隐藏信息的目的,通过以下技术手段使Rootkit失效:恢复 xfs_file_readdir函数的正常调用流程或者恢复内核模块结构体断链和卸载该隐藏内核模块。然后全盘搜索上图中的关键字“__rt”,最终找到可执行文件 exec__rt及配置文件ss__rt,完成对Rootkit的取证,如图6所示,图6为对Rootkit 的取证结果图。
图7为本发明实施例提供的一种基于Linux系统内核层Rootkit的取证装置图,如图7所示,该装置包括:
隐藏内核模块获取单元701,用于获取Rootkit的内核模块内存地址值,根据内核模块的内存地址值获取隐藏内核模块;
内核模块结构体获取单元702,用于根据隐藏内核模块,获取内核模块结构体;
取证单元703,用于根据内核模块结构体和内核模块的内存数据,完成对Rootkit的取证。
在本发明的一些具体实施例中,隐藏内核模块获取单元701具体用于:
外部循环遍历Rootkit的所有内核模块内存分配链表,逐个分析每个内核模块内存信息,获取内核模块的第一内存地址值;
内部循环遍历Rootkit的内核模块结构体链表,获取内核模块结构体,进而获取内核模块结构体的第二内存地址值;
将第一内存地址值与第二内存地址值逐一比较判断,判断是否存在第一内存地址值与第二内存地址值相等的情况;如果是,则跳转至外部循环步骤,如果否,则判断内核模块结构体链表是否遍历结束;
如果否,则跳转至内部循环步骤;如果是,则将与第二内存地址值不相等的第一内存地址值对应的内核模块记录为隐藏内核模块。
在本发明的一些具体实施例中,内核模块结构体获取单元具体702用于:
循环遍历隐藏内核模块对应的第一内存地址值,每次加1;
假设内核模块结构体存于隐藏内核模块对应的第一内存地址值指向的内存,获取内存数据,将内存数据与假设的所述内核模块结构体进行特征比对;
判断特征比对是否成功,如果否,则跳转至循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1的步骤;如果是,则获得内核结构模块体。
在本发明的一些具体实施例中,内核模块结构体获取单元702具体用于:判断运行假设的所述内核模块结构体地址域的值是否等于隐藏内核模块对应的第一内存地址值;
假设的内核模块结构体隐藏内核模块状态域的值是否小于3;
假设的内核模块结构体隐藏内核模块大小域的值是否大于0;
假设的内核模块结构体隐藏内核模块名称域中的值是否属于ASCII可显示字符。
在本发明的一些具体实施例中,取证单元703具体用于:
获取内核模块的全部内存数据,恢复隐藏内核模块结构体链表,并对隐藏内核模块进行卸载操作;
分析内核模块的全部内存数据,获取恶意程序信息,完成取证完成对 Rootkit的取证。
本发明实施例还提供一种电子设备,图8为本发明电子设备一个实施例的结构示意图,可以实现本发明图1-2所示实施例的流程,如图8所示,上述电子设备可以包括:壳体81、处理器82、存储器83、电路板84和电源电路85,其中,电路板84安置在壳体81围成的空间内部,处理器82和存储器83设置在电路板84上;电源电路85,用于为上述电子设备的各个电路或器件供电;存储器83用于存储可执行程序代码;处理器82通过读取存储器83中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的方法。
处理器82对上述步骤的具体执行过程以及处理器82通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-2所示实施例的描述,在此不再赘述。
该电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC 设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子设备。
本发明的实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述的程序启动方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
本发明具有以下技术效果:
综上所述,本发明从隐藏内核模块入手,首先通过内存搜索的方式获取内核模块的内存数据,然后与断链后的内核模块结构体链表中信息进行比对,找出隐藏内核模块。然后通过数据特征匹配的方式针对内核模块内存数据进行分析,获取内核模块结构体,然后通过重构链表和卸载隐藏的内核模块等手段使 Rootkit失效,从而让木马程序和端口等暴露出来,最终分析完成取证。即本发明可以实现通过简单的方案检测大多数针对Linux系统的内核层Rootkit,尤其针对Rootkit隐藏自身内核模块的情况。同时能够对内核模块进行恢复,获取到隐藏内核模块数据,查看分析Rootkit使用的手段,并使Rootkit失效,从而获取隐藏的恶意木马进程和端口等信息,完成恶意代码的取证。只针对Rootkit 内核模块进行检测和分析,可以极大的避免实现的复杂性,实现简单,保证易于多系统移植适配;同时,检测手段在内核层实现,通过较高的权限操作内核内存等底层信息,可以保证检测的准确和可靠。最后,内核模块是内核Rootkit 实现隐藏信息的根本,从内核模块检测和分析入手,有利于了解恶意软件通过何种手段实现Rootkit及获取到隐藏的信息数据,完成取证。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (12)

1.一种基于Linux系统内核层Rootkit的取证方法,其特征在于,所述方法包括:
获取所述Rootkit的内核模块内存地址值,根据所述内核模块的内存地址值获取隐藏内核模块;
根据所述隐藏内核模块,获取内核模块结构体;
根据所述内核模块结构体和所述内核模块的内存数据,完成对所述Rootkit的取证。
2.如权利要求1所述的方法,其特征在于,所述获取所述Rootkit的内核模块内存地址值,根据所述内核模块的内存地址值获取隐藏内核模块包括:
外部循环遍历所述Rootkit的所有内核模块内存分配链表,逐个分析每个内核模块内存信息,获取内核模块的第一内存地址值;
内部循环遍历所述Rootkit的内核模块结构体链表,获取内核模块结构体,进而获取所述内核模块的第二内存地址值;
将第一内存地址值与第二内存地址值逐一比较判断,判断是否存在第一内存地址值与第二内存地址值相等的情况;如果是,则跳转至外部循环步骤,如果否,则判断所述内核模块结构体链表是否遍历结束;
如果否,则跳转至内部循环步骤;如果是,则将与第二内存地址值不相等的第一内存地址值对应的内核模块记录为隐藏内核模块。
3.如权利要求2所述的方法,其特征在于,所述根据所述隐藏内核模块,获取内核模块结构体包括:
循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1;
假设内核模块结构体存于所述隐藏内核模块对应的第一内存地址值指向的内存,获取内存数据,将所述内存数据与假设的所述内核模块结构体进行特征比对;
判断特征比对是否成功,如果否,则跳转至所述循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1的步骤;如果是,则获得所述内核模块结构体。
4.如权利要求3所述的方法,其特征在于,所述判断特征比对是否成功包括:
判断假设的所述内核模块结构体地址域的值是否等于所述隐藏内核模块对应的第一内存地址值;
所述假设的内核模块结构体状态域的值是否小于3;
所述假设的内核模块结构体大小域的值是否大于0;
所述假设的内核模块结构体名称域中的值是否属于ASCII可显示字符。
5.如权利要求1所述的方法,其特征在于,所述根据所述内核模块结构体和所述内核模块的内存数据,完成对所述Rootkit的取证包括:
获取所述内核模块的全部内存数据,恢复所述隐藏内核模块结构体链表,并对所述隐藏内核模块进行卸载操作;
分析所述内核模块的全部内存数据,获取恶意程序信息,完成对所述Rootkit的取证。
6.一种基于Linux系统内核层Rootkit的取证装置,其特征在于,所述装置包括:
隐藏内核模块获取单元,用于获取所述Rootkit的内核模块内存地址值,根据所述内核模块的内存地址值获取隐藏内核模块;
内核模块结构体获取单元,用于根据所述隐藏内核模块,获取内核模块结构体;
取证单元,用于根据所述内核模块结构体和所述内核模块的内存数据,完成对所述Rootkit的取证。
7.如权利要求6所述的装置,其特征在于,所述隐藏内核模块获取单元具体用于:
外部循环遍历所述Rootkit的所有内核模块内存分配链表,逐个分析每个内核模块内存信息,获取内核模块的第一内存地址值;
内部循环遍历所述Rootkit的内核模块结构体链表,获取内核模块结构体,进而获取所述内核模块的第二内存地址值;
将第一内存地址值与第二内存地址值逐一比较判断,判断是否存在第一内存地址值与第二内存地址值相等的情况;如果是,则跳转至外部循环步骤,如果否,则判断所述内核模块结构体链表是否遍历结束;
如果否,则跳转至内部循环步骤;如果是,则将与第二内存地址值不相等的第一内存地址值对应的内核模块记录为隐藏内核模块。
8.如权利要求7所述的装置,其特征在于,所述内核模块结构体获取单元具体用于:
循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1;
假设内核模块结构体存于所述隐藏内核模块对应的第一内存地址值指向的内存,获取内存数据,将所述内存数据与假设的所述内核模块结构体进行特征比对;
判断特征比对是否成功,如果否,则跳转至所述循环遍历所述隐藏内核模块对应的第一内存地址值,每次加1的步骤;如果是,则获得所述内核结构模块体。
9.如权利要求8所述的装置,其特征在于,所述内核模块结构体获取单元具体用于:判断假设的所述内核模块结构体地址域的值是否等于所述隐藏内核模块对应的第一内存地址值;
所述假设的内核模块结构体状态域的值是否小于3;
所述假设的内核模块结构体大小域的值是否大于0;
所述假设的内核模块结构体名称域中的值是否属于ASCII可显示字符。
10.如权利要求6所述的装置,其特征在于,所述取证单元具体用于:
获取所述内核模块的全部内存数据,恢复所述隐藏内核模块结构体链表,并对所述隐藏内核模块进行卸载操作;
分析所述内核模块的全部内存数据,获取恶意程序信息,完成对所述Rootkit的取证。
11.一种电子设备,其特征在于,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述权利要求1至5任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述权利要求1至5中任一项所述的方法。
CN202010400215.8A 2020-05-13 基于Linux系统内核层Rootkit的取证方法及装置 Active CN111695116B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010400215.8A CN111695116B (zh) 2020-05-13 基于Linux系统内核层Rootkit的取证方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010400215.8A CN111695116B (zh) 2020-05-13 基于Linux系统内核层Rootkit的取证方法及装置

Publications (2)

Publication Number Publication Date
CN111695116A true CN111695116A (zh) 2020-09-22
CN111695116B CN111695116B (zh) 2024-05-24

Family

ID=

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100666562B1 (ko) * 2005-08-11 2007-01-09 주식회사 웨어플러스 커널 드라이버 및 프로세스 보호 방법
CN106529299A (zh) * 2016-12-26 2017-03-22 郑州云海信息技术有限公司 一种在linux系统中对恶意软件Rootkit的检测和修复方法
CN106599683A (zh) * 2015-10-16 2017-04-26 华为技术有限公司 一种确定隐藏的内核模块的方法、装置及设备
KR20180065535A (ko) * 2016-12-08 2018-06-18 동국대학교 산학협력단 커널 루트킷 탐지 시스템 및 방법
WO2020000741A1 (zh) * 2018-06-30 2020-01-02 平安科技(深圳)有限公司 一种rookit检测方法、装置及服务器
CN111027072A (zh) * 2019-12-20 2020-04-17 北京安天网络安全技术有限公司 Linux下基于elf二进制标准解析的内核Rootkit检测方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100666562B1 (ko) * 2005-08-11 2007-01-09 주식회사 웨어플러스 커널 드라이버 및 프로세스 보호 방법
CN106599683A (zh) * 2015-10-16 2017-04-26 华为技术有限公司 一种确定隐藏的内核模块的方法、装置及设备
KR20180065535A (ko) * 2016-12-08 2018-06-18 동국대학교 산학협력단 커널 루트킷 탐지 시스템 및 방법
CN106529299A (zh) * 2016-12-26 2017-03-22 郑州云海信息技术有限公司 一种在linux系统中对恶意软件Rootkit的检测和修复方法
WO2020000741A1 (zh) * 2018-06-30 2020-01-02 平安科技(深圳)有限公司 一种rookit检测方法、装置及服务器
CN111027072A (zh) * 2019-12-20 2020-04-17 北京安天网络安全技术有限公司 Linux下基于elf二进制标准解析的内核Rootkit检测方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
崔超远;李勇钢;乌云;王励成;: "一种基于隐藏事件触发机制的内存取证方法", 计算机研究与发展, no. 10 *

Similar Documents

Publication Publication Date Title
US8079085B1 (en) Reducing false positives during behavior monitoring
CN108875364B (zh) 未知文件的威胁性判定方法、装置、电子设备及存储介质
US20090038011A1 (en) System and method of identifying and removing malware on a computer system
US9239922B1 (en) Document exploit detection using baseline comparison
US20120159628A1 (en) Malware detection apparatus, malware detection method and computer program product thereof
RU2634177C1 (ru) Система и способ обнаружения нежелательного программного обеспечения
CN110858247A (zh) 安卓恶意应用检测方法、系统、设备及存储介质
CN114282212A (zh) 流氓软件识别方法、装置、电子设备及存储介质
Almansoori et al. A global survey of android dual-use applications used in intimate partner surveillance
JP2011233081A (ja) アプリケーション判定システムおよびプログラム
CN110740117B (zh) 仿冒域名检测方法、装置、电子设备及存储介质
CN109145589B (zh) 应用程序获取方法及装置
CN110865774A (zh) 一种打印设备的信息安全检测方法及装置
KR101461051B1 (ko) 웹 기능 분석을 통한 악성 코드 탐지방법 및 그 기록매체
CN110737894B (zh) 复合文档安全检测方法、装置、电子设备及存储介质
CN111695116B (zh) 基于Linux系统内核层Rootkit的取证方法及装置
CN111695116A (zh) 基于Linux系统内核层Rootkit的取证方法与装置
CN111062035A (zh) 一种勒索软件检测方法、装置、电子设备及存储介质
CN114338102B (zh) 安全检测方法、装置、电子设备及存储介质
CN113779576A (zh) 一种可执行文件感染病毒的识别方法、装置及电子设备
CN115906081A (zh) 恶意样本文件检测方法、装置、服务器、电子设备及存储介质
KR102311355B1 (ko) 이미지 및 음성파일의 단어와 화이트리스트를 사용하는 공공기관 또는 금융권 피싱 멀웨어 탐지방법
CN110659490B (zh) 恶意样本的处理方法、装置、电子设备及存储介质
KR20130077184A (ko) 악성코드에 감염된 홈페이지 탐지 장치 및 방법
CN105787302A (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