CN116451229B - 一种恶意软件检测方法及装置 - Google Patents

一种恶意软件检测方法及装置 Download PDF

Info

Publication number
CN116451229B
CN116451229B CN202310699081.8A CN202310699081A CN116451229B CN 116451229 B CN116451229 B CN 116451229B CN 202310699081 A CN202310699081 A CN 202310699081A CN 116451229 B CN116451229 B CN 116451229B
Authority
CN
China
Prior art keywords
software
parameter
calling function
analysis
instruction
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
Application number
CN202310699081.8A
Other languages
English (en)
Other versions
CN116451229A (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 Chaitin Tech Co ltd
Original Assignee
Beijing Chaitin Tech 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 Chaitin Tech Co ltd filed Critical Beijing Chaitin Tech Co ltd
Priority to CN202310699081.8A priority Critical patent/CN116451229B/zh
Publication of CN116451229A publication Critical patent/CN116451229A/zh
Application granted granted Critical
Publication of CN116451229B publication Critical patent/CN116451229B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/552Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting

Landscapes

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

Abstract

本申请实施例提供了一种恶意软件检测方法及装置,通过建立分析规则库,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及调用函数内的操作参数;若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对操作参数进行逆向常量分析,以得到所述操作参数的常量结果;若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件,能够解决目前静态分析方法及动态分析方法中存在的无法准确检测恶意软件的问题,能够准确的提取、识别程序中的恶意操作,进而准确的判断软件是否为恶意软件。

Description

一种恶意软件检测方法及装置
技术领域
本申请各实施例属计算机技术领域,尤其涉及一种恶意软件检测方法及装置。
背景技术
恶意软件是任何旨在损害计算机,服务器或计算机网络的软件。恶意软件在植入或以某种方式引入目标计算机后会对目标计算机造成损害。
在传统的恶意软件检测方法中,通常分为静态分析方法与动态分析方法,静态分析方法通常是通过提取未知二进制文件的特征,将其与已知恶意文件提取出的特征进行比对,来判定未知二进制文件是否存在恶意代码的一种分析方法,其存在着无法提取出准确的二进制文件特征,导致无法准确检测的问题;动态分析方法通常是指将可执行二进制文件放入沙箱系统,通过实际运行中的行为等特征来判定是否存在恶意代码的一种分析方法,其存在着易出现无法运行至恶意代码或文件缺失依赖库无法运行,导致无法检测的情况。
发明内容
本实施例提供了一种恶意软件检测方法及装置,能够解决目前静态分析方法中的无法提取准确的二进制文件特征、动态分析方法中易出现程序无法运行至恶意代码或缺失依赖库无法运行,导致无法检测的问题。
第一方面,本实施例提供了一种恶意软件检测方法,包括:
建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;
正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;
若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;
若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件。
在一些实施例中,所述正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,包括:解析待测试软件文件,得到载入内存中的软件程序段;对所述软件程序段进行反汇编,得到汇编程序段;将所述汇编程序段转换成使用中间语言表示的语言程序段;解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述语言程序段包括操作指令、操作数及操作语义。
在一些实施例中,所述解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,具体为:获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块;基于至少一个所述基本块得到所述软件的至少一条可执行路径,基于至少一条所述可执行路径创建所述可执行路径集;解析所述语言程序段内的操作指令,得到所述调用函数及所述调用函数内的操作参数。
在一些实施例中,所述获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块,包括:标记起始指令;逐条获取所述操作指令,并将所述操作指令添加到所述基本块中;若获取的当前操作指令不存在、所述当前操作指令是函数返回指令或函数跳转指令,则标记所述当前操作指令为结束指令,得到所述基本块。
在一些实施例中,所述恶意软件检测方法,还包括:查询所述待测试软件文件的调用约定,得到调用所述调用函数时所述操作参数的存储地址,其中,所述存储地址包括寄存器和内存地址。
在一些实施例中,所述若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果,包括:对所述操作参数及所述存储地址进行抽象建模,得到逆向分析模型,其中,所述操作参数是所述逆向分析模型上的参数节点,所述存储地址是所述逆向分析模型上的地址节点;基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果。
在一些实施例中,所述基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果,包括:以所述参数节点为起点沿所述可执行路径的逆向逐条获取所述可执行路径内的操作指令;查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果。
在一些实施例中,所述查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果,还包括:基于所述地址节点的值对所述逆向分析模型进行化简处理。
第二方面,本实施例提供了一种恶意软件检测装置,包括:
规则建立模块,用于建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;
正向分析模块,用于正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;
逆向分析模块,用于若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;以及
规则匹配模块,用于若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件。
第三方面,本实施例提供了一种电子设备,包括处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如第一方面中任一实施例所述方法的步骤。
本申请提供了一种恶意软件检测方法及装置,通过建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件,能够解决目前静态分析方法中的无法提取准确的二进制文件特征、动态分析方法中易出现程序无法运行至恶意代码或缺失依赖库无法运行,导致无法检测的问题,能够准确的提取、识别程序中的恶意操作,进而准确的判断软件是否为恶意软件。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。后文将参照附图以示例性而非限制性的方式详细描述本申请的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分,本领域技术人员应该理解的是,这些附图未必是按比例绘制的,在附图中:
图1为本说明书实施例提供的一种恶意软件检测方法的流程图;
图2为本说明书实施例提供的中间语言表示的x86 指令集下的部分指令;
图3为本说明书实施例提供的创建基本块的流程图;
图4为本说明书实施例提供的逆向分析模型的可视化图;
图5为本说明书实施例提供的逆向常量分析的流程图;
图6为本说明书实施例提供的逆向常量分析项目图;
图7为本说明书实施例提供的攻击者插入的恶意代码示意图;
图8为本说明书实施例提供的逆向常量分析结果的示意图;
图9为本说明书实施例提供的逆向常量分析结果的可视化图;
图10为本说明书实施例提供的一种恶意软件检测装置的示意图;
图11为本说明书实施例提供的一种电子设备的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
恶意软件是指人为设计的恶意程序,可通过创建后门入口来获得对计算设备的访问权,从而窃取个人信息、机密数据,实施对计算机系统的破坏。为了更好地防护恶意软件,避免由恶意软件造成的危害,必须对恶意软件进行分析,以了解恶意软件的类型、性质和攻击方法。
在传统的恶意软件检测方法中,通常分为静态分析方法与动态分析方法,静态分析方法通常是通过提取未知二进制文件的特征,将其与已知恶意文件提取出的特征进行比对,来判定未知二进制文件是否存在恶意代码的一种分析方法,其存在着无法提取出准确的二进制文件特征,导致无法准确检测的问题;动态分析方法通常是指将可执行二进制文件放入沙箱系统,通过实际运行中的行为等特征来判定是否存在恶意代码的一种分析方法,其存在着易出现无法运行至恶意代码或文件缺失依赖库无法运行,导致无法检测的情况。
在对Linux平台应急响应及安全分析的过程中,由于Linux的开源生态导致了其基础软件版本分化,使碎片化的基础软件难以通过哈希值校验等白名单方式来进行安全软件与恶意软件的区分、归类。其中包括操作系统基础程序,如ps、kill、netstat 等;以及服务类基础应用软件,如 Apache httpd、Nginx、OpenSSH等。
攻击者在入侵 Linux 平台系统成功后,将恶意代码嵌入基础软件,重新编译、并替换原始文件,是一种攻击痕迹少、隐蔽性好的持久化控制受害者系统权限的攻击手法,称为Linux 基础软件污染。以OpenSSH sshd后门为例,sshd(在linux中,sshd是一个客户端软件,是可以通过网络在主机中开启shell的服务;sshd服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件,sshd使用加密传输,比使用明文传输的telnet传输文件要安全很多。)作为登录入口,很容易被用来当做靶标。如果sshd程序被替换,一方面可以给入侵者留下权限,维持的稳定后门;另一方面作为常驻系统的 daemon守护进程,sshd中的代码也拥有反复后台执行的机会。对于sshd后门入侵来说,一般拥有两个攻击者嵌入的基础功能:1)、针对登录请求中的用户校验过程,植入硬编码的账户密码以绕过校验,实现特权免密登录,也就是通俗意义下的万能密码;2)、将合法登录请求的账号密码进行记录或直接回传,实现对系统管理员密码的隐蔽盗窃,方便后续攻击中的横向及纵向移动。
面对此类攻击方式,对于传统的静态分析方法,由于此类攻击二次分发的恶意文件绝大部分代码逻辑均为正常功能,只在部分功能下进行了替换或添加,如sshd后门攻击中的万能密码添加,导致使用静态分析法无法提取出精准的特征进行规则匹配;对于基于沙箱类的动态分析方法,很容易出现无法运行至恶意代码逻辑或文件缺失依赖库无法运行,导致无法检测的情况;对于模拟执行类的动态分析方法,虽然能够有效解决文件无法正常运行的问题,但由于二进制文件中存在大量的未知变量及参数,所以仍然难以触发恶意逻辑。基于上述原因,目前云上主机存在海量的安全性未知的 Linux 基础软件,亟待发现、解决基础软件污染的安全威胁。
针对上述技术问题,第一方面,如图1所示,本实施例提供了一种恶意软件检测方法,包括:
S101:建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;
需要说明的是,若要对软件是否是恶意软件进行判断,首先需设置判断的依据或攻击者可能调用的函数及传入所述调用函数内的参数,如定义规则suspiciousCommand,其中包含两条子规则:1)、system(/.*curl.*/)匹配system 函数调用,且第一个参数为匹配curl正则表达式的常量字符串;2)、system(/.*mail.*/)匹配system函数调用,且第一个参数为匹配mail正则表达式的常量字符串;定义规则 rules,包含规则:system(/(.*\/)?sudoedit.*-s/)匹配system函数调用,且第一个参数为满足 (.*\/)?sudoedit.*-s正则表达式的常量字符串。
需要说明的是,所述调用函数内的待分析参数可以是指所述调用函数内的第一个或第二个参数,可根据实际需要进行设置。
需要说明的是,由于通常攻击者在写入恶意代码时,传入所述调用函数内的参数是变量,所以无法直接获得传入所述调用函数内的参数的常量结果,故需对其进行分析。
S102:正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;
需要说明的是,要判断所述待测试软件文件是否是恶意软件,首先需了解所述待测试软件文件的执行路径、调用函数及传入了哪些操作参数至所述调用函数内,故需先通过正向分析,得到上述可执行路径集、所述调用函数及所述操作参数。
在一些实施例中,所述正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,包括:解析待测试软件文件,得到载入内存中的软件程序段;对所述软件程序段进行反汇编,得到汇编程序段;将所述汇编程序段转换成使用中间语言表示的语言程序段;解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述语言程序段包括操作指令、操作数及操作语义。
需要说明的是,因Linux 软件为ELF文件结构,故可解析所述待测试软件文件的结构,提取出文件头、程序段、节等信息。ELF文件结构中的程序段代表实际载入内存的部分,即对软件进行修改的恶意内容,可建立程序段待分析队列,将所有具有可执行权限的程序段加入所述待分析队列。
需要说明的是,因为载入内存中的程序段是二进制文件,其由机器码表示,为了后续分析及查看的便利,可将所述程序段逐条使用反汇编器将机器码转换成汇编码表示的汇编程序段,再将汇编程序段转换为使用中间语言表示的语言程序段,(中间语言(中间代码)是一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码。其易于生成目标代码的程序介于源语言和目标语言之间。)使用中间语言可方便进行后续的分析及查看,中间语言由指令名称、操作数、操作语义组成,其中操作语义被抽象为一个字符串,表述了该条指令对内存或CPU寄存器的改变。如x86架构下的MOV指令,原本表示将一个寄存器或内存或立即数的值,赋值到另一个寄存器或内存中。MOV 指令在中间语言中的语义字符串就是{2} ->{1},表示在 Intel 语法的汇编中,将第二个操作数赋值到第一个操作数。其它指令的转换与上述指令的转换类似,如此可完成了单条指令从二进制表示的机器码到抽象表示的中间语言的转换。如图2所示,其为中间语言表示的x86 指令集下的部分指令。
在一些实施例中,所述解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,具体为:获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块;基于至少一个所述基本块得到所述软件的至少一条可执行路径,基于至少一条所述可执行路径创建所述可执行路径集;解析所述语言程序段内的操作指令,得到所述调用函数及所述调用函数内的操作参数。
需要说明的是,一个软件通常包括多个函数,一个函数通常包括多个基本块,一个基本块通常包括多条指令,软件在执行时,会有多条路径可以执行到所述调用函数处,为了确保分析结果的准确、全面,在正向分析时,通过创建至少一个基本块,而基本块之间构成的网络结构即可形成软件的多条可执行路径,多条可执行路径表构成了所述可执行路径集。
需要说明的是,可针对所述可执行路径集内的每一条可执行路径建立相对应的指令队列,以便逆向常量分析时可直接查找到所述指令队列进行操作。
在一些实施例中,所述获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块,包括:标记起始指令;逐条获取所述操作指令,并将所述操作指令添加到所述基本块中;若获取的当前操作指令不存在、所述当前操作指令是函数返回指令或函数跳转指令,则标记所述当前操作指令为结束指令,得到所述基本块。
需要说明的是,基本块中通常不能包含函数返回指令和函数跳转指令,故在创建基本块时遇到函数跳转指令或函数返回指令时,即结束当前创建的基本块,所述起始指令可以是函数入口处。
如图3所示,创建基本块包括:
S301:标记函数开始;
需要说明的是,基本块通常包含在函数内,故在初次创建基本块时,需先标记函数,以表示起始位置。
S302:创建基本块;
S303:获取下一条指令;
需要说明的是,通常是按照待测试软件文件的顺序逐条获取操作指令。
S304:将指令添加到当前的基本块中;
S305:判断下一条指令是否存在;
S306:判断下一条指令是否为函数返回指令;
S307:标记当前指令为函数结束;
需要说明的是,在下一条指令不存在或为函数返回指令时,即可标记当前指令为函数结束。
S308:判断下一条指令是否为函数跳转指令;
S309:标记结束当前基本块;
需要说明的是,在创建完当前基本块后,即可开始下一基本块的创建,直至所述语言程序段内的所有指令均被添加到各个基本块中。
在一些实施例中,所述恶意软件检测方法,还包括:查询所述待测试软件文件的调用约定,得到调用所述调用函数时所述操作参数的存储地址,其中,所述存储地址包括寄存器和内存地址。
需要说明的是,通过查询所述待测试软件文件并对其进行特征提取,可识别出所述待测试软件文件的编写语言,可通过查询所述待测试软件文件的编写语言及系统架构,可得到所述调用约定,其中,通常所述操作参数存储在寄存器或内存中。
S103:若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;
在一些实施例中,所述若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果,包括:对所述操作参数及所述存储地址进行抽象建模,得到逆向分析模型,其中,所述操作参数是所述逆向分析模型上的参数节点,所述存储地址是所述逆向分析模型上的地址节点;基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果。
需要说明的是,对所述操作参数进行逆向常量分析时,可获取到一个操作参数后就对其建立模型、进行分析,也可获取到多个操作参数后对其建立模型、进行分析,所述地址节点可包括与寄存器相对应的寄存器节点和与内存地址相对应的内存节点。
需要说明的是,可使用抽象语法树(Abstract Syntax Tree,AST)作为抽象建模的表示,对所述逆向分析模型进行建模,AST的节点包括了运算符、寄存器、立即数等。因此支持了常见的数学运算,如加、减、乘、除、与、或等。
需要说明的是,建立逆向分析模型可包括:
1)、定义具体域 D:通过查询文件使用的调用约定,得到发生调用时所述操作参数所对应的寄存器或内存地址,再将此寄存器或内存地址引用、转换为AST上的节点,构成了变量具体域中的一个元素。
2)、定义偏序集 P(偏序关系为集合包含):偏序集P包含具体域D中的所有元素及可执行路径集内的所有可执行路径。
3)、定义抽象域为虚:抽象域中的元素表达了该元素是否可以求解。如抽象语法树中存在内存引用子树、寄存器节点,则为不可求解节点;反之,抽象语法树中不存在寄存器节点或内存引用子树则代表可以进行数学求解化简为常量,称为可求解节点。
4)、定义转换函数对 (F, G),构成具体域 D 与抽象域 虚 的一个伽罗瓦连接:F为具体域 D 转化为抽象域“虚”的转换函数:遍历AST节点,发现不可求解节点时抽象为不可求解元素。相应的如果不存在该类节点,定义为可求解元素。转换函数 G 代表了抽象域“虚”至具体域 D 的映射。
例如:A参数在函数调用发生时映射了变量:RAX + 8 所对应的值,则完成AST转换后,可视化的域中元素,如附图4所示。
在一些实施例中,所述基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果,包括:以所述参数节点为起点沿所述可执行路径的逆向逐条获取所述可执行路径内的操作指令;查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果。
需要说明的是,在进行逆向常量分析时,实际上是对操作参数的常量推导,故在逆向常量分析时,是对在正向分析时获得的操作指令进行取反、再进行计算,如:正向分析时获取的操作指令为ADD。那么逆向常量分析时,就将ADD进行取反,按SUB指令进行计算,按此方式进行逐步计算,即可求得所述逆向分析模型上的地址节点的值,所述地址节点上的值通常是所述操作参数的实际值,即可求得所述操作参数的常量结果。
需要说明的是,在进行逆向分析时,可指定分析策略,以便快速、准确的得到所述常量结果,如,最长可执行路径优先,即在进行逆向分析时,按可执行路径的路径长度进行依次分析。可设置进行逆向分析时分析可执行路径的数量,如100条、150条等。
在一些实施例中,所述查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果,还包括:基于所述地址节点的值对所述逆向分析模型进行化简。
需要说明的是,在得到所述地址节点的值后,可查找所述逆向分析模型内是否存在可替换的节点,若存在,则进行替换,并对所述逆向分析模型进行化简,通过化简可降低所述逆向分析模型的层级、所述逆向分析模型的大小,提高运算速度。
需要说明的是,可根据需要设置逆向分析时的中止或终止条件,如抽象域中不存在可求解元素、或所述指令队列内的操作指令已执行完毕。
如图5所示,逆向常量分析可包括:
S501:对操作参数进行抽象建模;
需要说明的是,可对每一个操作参数进行单独建模进行逆向常量分析。
S502:获取上一条指令;
S503:判断上一条指令是否存在;
S504:标记为未知变量,逆向分析结束;
需要说明的是,上一条指令可以使存储在指令队列内的操作指令,也可以是获取可执行路径上的操作指令,若上一条指令存在,则继续进行分析。
S505:查找指令对应的操作;
S506:对操作取反并进行计算;
S507:逆向分析模型中是否存在可替换的节点;
S508:替换相应节点;
S509:对逆向分析模型进行再平衡、化简;
需要说明的是,通过再平衡和化简可以减小逆向分析模型的大小,提高运算速度。
S510:是否可以化简为常量;
S511:得到常量结果
需要说明的是,通常在逆向常量分析时,需要以得到所述操作参数的常量结果,故可检测每一步的逆向分析后,是否可以得到常量结果,以判断是否继续分析或终止分析。
需要说明的是,上述逆向常量分析可在数据流分析器内进行。
S104:若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件。
需要说明的是,在得到所述常量结果后,可在正向分析阶段获得调用函数、调用函数所在的地址、被调用函数、被调用函数的地址,综合所述常量结果,得到逆向分析结果,如图6所示。
需要说明的是,在攻击者写入如图7所示的恶意代码时,通过使用本实施例所述的恶意软件检测方法,可得到如图8所示逆向常量分析结果。
需要说明的是,在获取到所述逆向常量分析结果后,可对其进行可视化展示,如图9所示,以便工作人员查看。
需要说明的是,可编写程序地址抽样分析引擎(Program Address SamplingEngine,简称 PAS 引擎),通过所述程序地址抽样分析引擎进行上述任一实施例中的方法/步骤。
示例性地,在分析规则库内设置了规则suspiciousCommand,其中包含两条子规则:1)、system(/.*curl.*/) 匹配system 函数调用,且第一个参数为匹配 curl 正则表达式的常量字符串;2)、system(/.*mail.*/) 匹配 system 函数调用,且第一个参数为匹配mail 正则表达式的常量字符串;定义规则 rules,包含规则:system(/(.*\/)?sudoedit.*-s/) 匹配 system 函数调用,且第一个参数为满足 (.*\/)?sudoedit.*-s 正则表达式的常量字符串。在进行恶意软件检测时,先通过NewPASEngine创建一个 PAS 引擎,然后通过SamplingAllFunctionCalls方法运行引擎。循环过滤出引擎分析结果中的位于auth_password或mm_answer_authpassword函数中的所有函数调用信息,只要其中有一条函数调用信息命中了设置的suspiciousCommand子规则的任意一个,即判断此软件为恶意软件,返回检测结果:该软件为使用网络连接发送密码的 SSHD 后门。其中回传命令为:curl xxx,位于程序的auth_password函数内。若其中有一条函数调用信息满足了rules规则中的子规则,则判断该软件为CVE-2021-3156 漏洞利用程序。
综上所述,本实施例提供了一种恶意软件检测方法及装置,通过建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件,能够解决目前静态分析方法中的无法提取准确的二进制文件特征、动态分析方法中易出现程序无法运行至恶意代码或缺失依赖库无法运行,导致无法检测的问题,能够准确的提取、识别程序中的恶意操作,进而准确的判断软件是否为恶意软件。
第二方面,如图10所示,本实施例提供了一种恶意软件检测装置,其特征在于,包括:
规则建立模块110,用于建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;
正向分析模块120,用于正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;
逆向分析模块130,用于若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;以及
规则匹配模块140,用于若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件。
在一些实施例中,所述正向分析待测试软件文件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,包括:解析待测试软件文件,得到载入内存中的软件程序段;对所述软件程序段进行反汇编,得到汇编程序段;将所述汇编程序段转换成使用中间语言表示的语言程序段;解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述语言程序段包括操作指令、操作数及操作语义。
在一些实施例中,所述解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,具体为:获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块;基于至少一个所述基本块得到所述软件的至少一条可执行路径,基于至少一条所述可执行路径创建所述可执行路径集;解析所述语言程序段内的操作指令,得到所述调用函数及所述调用函数内的操作参数。
在一些实施例中,所述获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块,包括:创建基本块,并标记起始指令;逐条获取所述操作指令,并将所述操作指令添加到所述基本块中;若获取的当前操作指令不存在、所述当前操作指令是函数返回指令或函数跳转指令,则标记所述当前操作指令为结束指令,得到所述基本块。
在一些实施例中,所述正向分析模块还用于:查询所述待测试软件文件的调用约定,得到调用所述调用函数时所述操作参数的存储地址,其中,所述存储地址包括寄存器和内存地址。
在一些实施例中,所述若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果,包括:对所述操作参数及所述存储地址进行抽象建模,得到逆向分析模型,其中,所述操作参数是所述逆向分析模型上的参数节点,所述存储地址是所述逆向分析模型上的地址节点;基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果。
在一些实施例中,所述基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果,包括:以所述参数节点为起点沿所述可执行路径的逆向逐条获取所述可执行路径内的操作指令;查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果。
在一些实施例中,所述查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果,还包括:基于所述地址节点的值对所述逆向分析模型进行化简。
第三方面,如图11所示,本实施例提供了一种电子设备300,包括处理器320和存储器310;
所述处理器320通过调用所述存储器310存储的程序或指令,用于执行如第一方面中任一实施例所述方法的步骤。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (8)

1.一种恶意软件检测方法,其特征在于,包括:
建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;
正向分析待检测软件文件,得到所述待检测软件文件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;
若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;
若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件;
所述方法还包括,查询所述待检测软件文件的调用约定,得到调用所述调用函数时所述操作参数的存储地址,其中,所述存储地址包括寄存器和内存地址;
所述若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果,包括:
对所述操作参数及所述存储地址进行抽象建模,得到逆向分析模型,其中,所述操作参数是所述逆向分析模型上的参数节点,所述存储地址是所述逆向分析模型上的地址节点;
基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果。
2.根据权利要求1所述的恶意软件检测方法,其特征在于,所述正向分析待检测软件,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,包括:
解析软件,得到载入内存中的软件程序段;
对所述软件程序段进行反汇编,得到汇编程序段;
将所述汇编程序段转换成使用中间语言表示的语言程序段;
解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述语言程序段包括操作指令、操作数及操作语义。
3.根据权利要求2所述的恶意软件检测方法,其特征在于,所述解析所述语言程序段,得到所述待检测软件的可执行路径集、调用函数及所述调用函数内的操作参数,具体为:
获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块;
基于至少一个所述基本块得到所述软件的至少一条可执行路径,基于至少一条所述可执行路径创建所述可执行路径集;
解析所述语言程序段内的操作指令,得到所述调用函数及所述调用函数内的操作参数。
4.根据权利要求3所述的恶意软件检测方法,其特征在于,所述获取所述语言程序段内的操作指令,并基于获取的所述操作指令创建至少一个基本块,包括:
标记起始指令;
逐条获取所述操作指令,并将所述操作指令添加到所述基本块中;
若获取的当前操作指令不存在、所述当前操作指令是函数返回指令或函数跳转指令,则标记所述当前操作指令为结束指令,得到所述基本块。
5.根据权利要求1所述的恶意软件检测方法,其特征在于,所述基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果,包括:
以所述参数节点为起点沿所述可执行路径的逆向逐条获取所述可执行路径内的操作指令;
查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果。
6.根据权利要求5所述的恶意软件检测方法,其特征在于,所述查询所述操作指令对应的操作,对所述操作取反并进行计算,求得所述地址节点的值,以得到所述操作参数的常量结果,还包括:
基于所述地址节点的值对所述逆向分析模型进行化简处理。
7.一种恶意软件检测装置,其特征在于,包括:
规则建立模块,用于建立分析规则库,其中,所述分析规则库用于设置待分析判定的调用函数、所述调用函数内的待分析参数及参数匹配规则;
正向分析模块,用于正向分析待检测软件文件,得到所述待检测软件文件的可执行路径集、调用函数及所述调用函数内的操作参数,其中,所述操作参数是变量;
逆向分析模块,用于若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果;以及
规则匹配模块,用于若所述常量结果满足所述参数匹配规则,则判定所述软件是恶意软件;
所述装置还包括,查询所述待检测软件文件的调用约定,得到调用所述调用函数时所述操作参数的存储地址,其中,所述存储地址包括寄存器和内存地址;
所述若所述调用函数及所述操作参数包含在所述分析规则库内,则基于所述操作参数及所述可执行路径集对所述操作参数进行逆向常量分析,以得到所述操作参数的常量结果,包括:
对所述操作参数及所述存储地址进行抽象建模,得到逆向分析模型,其中,所述操作参数是所述逆向分析模型上的参数节点,所述存储地址是所述逆向分析模型上的地址节点;
基于所述参数节点及所述可执行路径集内的可执行路径进行逆向求解所述地址节点的值,以得到所述操作参数的常量结果。
8.一种电子设备,其特征在于,包括:
处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1至6中任一项所述方法的步骤。
CN202310699081.8A 2023-06-14 2023-06-14 一种恶意软件检测方法及装置 Active CN116451229B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310699081.8A CN116451229B (zh) 2023-06-14 2023-06-14 一种恶意软件检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310699081.8A CN116451229B (zh) 2023-06-14 2023-06-14 一种恶意软件检测方法及装置

Publications (2)

Publication Number Publication Date
CN116451229A CN116451229A (zh) 2023-07-18
CN116451229B true CN116451229B (zh) 2023-09-12

Family

ID=87132368

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310699081.8A Active CN116451229B (zh) 2023-06-14 2023-06-14 一种恶意软件检测方法及装置

Country Status (1)

Country Link
CN (1) CN116451229B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102938040A (zh) * 2012-09-29 2013-02-20 中兴通讯股份有限公司 Android恶意应用程序检测方法、系统及设备
CN102945347A (zh) * 2012-09-29 2013-02-27 中兴通讯股份有限公司 一种检测Android恶意软件的方法、系统及设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7644441B2 (en) * 2003-09-26 2010-01-05 Cigital, Inc. Methods for identifying malicious software
US20220366048A1 (en) * 2021-04-29 2022-11-17 Dipankar Dasgupta Ai-powered advanced malware detection system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102938040A (zh) * 2012-09-29 2013-02-20 中兴通讯股份有限公司 Android恶意应用程序检测方法、系统及设备
CN102945347A (zh) * 2012-09-29 2013-02-27 中兴通讯股份有限公司 一种检测Android恶意软件的方法、系统及设备

Also Published As

Publication number Publication date
CN116451229A (zh) 2023-07-18

Similar Documents

Publication Publication Date Title
US20040181677A1 (en) Method for detecting malicious scripts using static analysis
KR102271545B1 (ko) 도메인 생성 알고리즘(dga) 멀웨어 탐지를 위한 시스템 및 방법들
CN102043915B (zh) 一种非可执行文件中包含恶意代码的检测方法及其装置
US10452421B2 (en) Identifying kernel data structures
KR101972825B1 (ko) 하이브리드 분석 기술을 이용한 임베디드 기기 취약점 자동 분석 방법, 장치 및 그 방법을 실행하는 컴퓨터 프로그램
CN109558207B (zh) 在虚拟机中形成用于进行文件的防病毒扫描的日志的系统和方法
KR102362516B1 (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체
KR102396237B1 (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체
JP6282217B2 (ja) 不正プログラム対策システムおよび不正プログラム対策方法
CN113391874A (zh) 一种虚拟机检测对抗方法、装置、电子设备及存储介质
KR101625129B1 (ko) 프로그램의 간접 분기 모니터링 방법 및 시스템
US20240054210A1 (en) Cyber threat information processing apparatus, cyber threat information processing method, and storage medium storing cyber threat information processing program
CN110851838A (zh) 一种基于互联网的云测试系统及安全测试方法
Osorio et al. Segmented sandboxing-a novel approach to malware polymorphism detection
CN116451229B (zh) 一种恶意软件检测方法及装置
KR102411383B1 (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체
KR102447279B1 (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체
JP6666475B2 (ja) 解析装置、解析方法及び解析プログラム
CN106911686B (zh) WebShell检测方法及装置
EP4386597A1 (en) Cyber threat information processing device, cyber threat information processing method, and storage medium storing cyber threat information processing program
CN118215917A (zh) 计算机驱动程序的漏洞分析
Wrench et al. Towards a Sandbox for the Deobfuscation and Dissection of PHP Malware
KR20190090436A (ko) 취약점 점검 장치, 방법 및 시스템
Takata et al. MineSpider: Extracting hidden URLs behind evasive drive-by download attacks
KR102396236B1 (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리 방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체

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