CN104778413A - 一种基于模拟攻击的软件漏洞检测方法 - Google Patents
一种基于模拟攻击的软件漏洞检测方法 Download PDFInfo
- Publication number
- CN104778413A CN104778413A CN201510179362.6A CN201510179362A CN104778413A CN 104778413 A CN104778413 A CN 104778413A CN 201510179362 A CN201510179362 A CN 201510179362A CN 104778413 A CN104778413 A CN 104778413A
- Authority
- CN
- China
- Prior art keywords
- function
- information
- file
- goes
- attack
- 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
Links
Abstract
基于模拟攻击的软件漏洞检测方法,通过静态反汇编工具获取敏感操作所涉及的函数信息,利用动态插桩平台实现监控、模拟攻击和攻击影响分析等过程;主要操作步骤如下:1)执行静态分析获取程序信息;2)动态执行程序,检测敏感函数调用;3)分析攻击实施条件;4)执行模拟攻击;5)分析攻击影响,依据攻击影响结果进行漏洞判定;在具体实施时,采用符号链接攻击对程序进行模拟攻击,对应的漏洞类型为一类文件访问漏洞,通过利用这类漏洞,本地攻击者通过符号链接更改程序预期访问文件,从而实现访问攻击者权限之外的文件资源。
Description
技术领域
本发明涉及软件漏洞的检测,特别涉及一种结合程序静态分析、对待检测软件进行模拟攻击实施软件漏洞动态监控和检测的方法。
背景技术
随着信息技术的不断发展,软件漏洞作为软件系统安全性的主要威胁之一,其危害程度越来越严重。攻击者利用软件漏洞可在未授权的情况下访问或破坏系统,甚至是取得系统的最高权限。针对软件漏洞的检测工作,大多集中在程序分析上,通过静态或动态分析提取漏洞特征,从而完成漏洞识别过程。然而,利用程序分析进行漏洞检测缺乏对攻击因素的考虑,使得检测出的漏洞可能是无法被利用的,因而会产生误报。因此,为实现软件漏洞的准确检测,需要将攻击因素融入到程序分析中,充分考虑漏洞利用条件以减少误报的产生。
本发明提出一种基于模拟攻击的软件漏洞检测方法。利用预先收集的程序信息,结合程序和系统级的监控方法,对程序的敏感操作和攻击的实施条件进行检测,在满足条件的情况下对程序实施模拟攻击,将攻击影响作为漏洞识别的主要依据,从而完成漏洞的准确识别。本方法的实施可有效检测软件漏洞,并减少现有检测方法所存在的误报,对提高软件系统安全性具有重要意义。同时,检测中涉及程序分析、攻击利用等方面的信息可作为漏洞定位修复、级别判定的准确依据,降低人工分析的工作量。
发明内容
本发明的目的是,为实现准确检测软件漏洞,提供一种基于模拟攻击的检测方法。通过预先获取的程序信息,结合程序和系统级的监控实现敏感操作检测,利用敏感操作触发检测机制,并在符合攻击实施条件时对程序进行模拟攻击,进行漏洞判定。
本发明的技术方案是:基于模拟攻击的软件漏洞检测方法,通过静态反汇编工具获取敏感操作所涉及的函数信息,利用动态插桩平台实现监控、模拟攻击和攻击影响分析等过程;主要操作如下:
1)执行静态分析获取程序信息;
2)动态执行程序,检测敏感函数调用;
3)分析攻击实施条件;
4)执行模拟攻击;
5)分析攻击影响,依据攻击影响结果进行漏洞判定;
在具体实施时,采用符号链接攻击对程序进行模拟攻击,对应的漏洞类型为一类文件访问漏洞,通过利用这类漏洞,本地攻击者通过符号链接更改程序预期访问文件,从而实现访问攻击者权限之外的文件资源;
操作1):在静态分析阶段,利用静态反汇编工具IDA Pro对待检测elf文件进行反汇编获得反汇编代码,通过对反汇编代码的分析获取程序信息,包括函数信息和常量信息;静态分析阶段的输入为待检测的elf文件,输出为程序信息,静态分析所提取的程序信息存储在elf_data文件中,以供动态检测阶段使用;
程序信息包括函数信息和常量信息;其中函数信息包括敏感函数、影响函数和信息流传播函数的信息;常量信息为常量地址;静态分析过程利用反汇编工具对待检测程序进行反汇编得到反汇编代码,并分析反汇编代码获取函数信息和常量信息。
函数信息具体体现为函数名、函数调用地址,敏感函数信息还需要获取含有敏感函数的函数体的开始和结束地址;函数名来自动态符号表中的函数名与敏感函数集的匹配结果;函数调用地址为敏感函数被调用的地址;含有敏感函数的函数体为敏感函数调用地址所在的函数体;函数名来自动态符号表中的函数名与敏感函数集的匹配结果;函数调用地址为敏感函数被调用的地址;含有敏感函数的函数体为敏感函数调用地址所在的函数体;静态提取程序信息流程,利用静态反汇编工具实现程序信息的提取;通过预先定义的函数集匹配完成函数信息的获取;常量信息为常量地址;静态分析过程利用反汇编工具对待检测程序进行反汇编得到反汇编代码,并分析反汇编代码获取函数信息和常量信息;
步骤20是初始动作;步骤21获取待检测elf文件,等待分析;步骤22利用IDA Pro对待检测程序进行反汇编;步骤23获取程序汇编代码;步骤24根据反汇编代码获取rodata节数据;步骤25分析rodata节数据,提取只读数据的地址作为常量信息;步骤26获取程序的动态符号表,用于获取程序所调用的库函数信息;步骤27提取一个符号表项;步骤28判断是否提取到,是则转步骤29,否则转步骤2b;步骤29判断符号表项中的函数名与函数集中的函数名是否匹配,是则转步骤2a,否则转步骤27;步骤2a借助动态符号表、全局偏移表和过程链接表获取函数的跳转地址;步骤2b利用IDA中的get_func_qty函数获取反汇编代码中的函数体;步骤2c判断是否获取到,是则转步骤2d,否则转步骤2i;步骤2d提取函数体中的一条指令;步骤2e对判断指令地址是否是函数体结束地址,是则转步骤2b,否则转步骤2f;步骤2f判断指令操作码是否为call或jmp,是则转步骤2g,否则转步骤2d;步骤2g判断目标地址与敏感函数跳转地址是否匹配,是则转步骤2h,否则转步骤2d;步骤2h记录敏感函数调用地址,并利用IDA中的curFunc->startEA和curFunc->endEA获取函数体开始结束地址;步骤2i将步骤25、2a、2h中提取到的函数信息输出至文件elf_data中;步骤2j是结束状态;
操作2):在动态检测阶段,利用动态插桩平台PIN运行待检测程序,读取elf_data文件中的程序信息用于敏感函数调用及实施条件的检测;程序信息中的敏感函数信息包含敏感函数调用地址,敏感函数调用检测主要检测指令地址与敏感函数调用地址的匹配情况;当检测到敏感函数调用时,进入实施条件分析;获取程序所访问的路径名和路径名可猜测分析结果,并进一步检测目录写权限,当满足实施条件时则实施攻击;通过攻击影响分析,给出漏洞检测结果;最后通过恢复操作消除攻击对文件造成的影响,并重新返回程序运行状态以供执行下一次漏洞检测;
敏感函数调用检测流程;通过PIN动态执行待分析程序,完成敏感函数调用的动态检测;步骤30为初始动作;步骤31获取待检测elf文件;步骤32读取elf_data文件,获取静态分析得到的程序信息;步骤33利用PIN平台动态执行程序;步骤34利用PIN平台获取指令执行序列;步骤35提取执行序列中一条指令;步骤36判断是否提取到,是则转步骤37,否则转步骤3a;步骤37判断指令地址是否为敏感函数调用地址,是则转步骤38,否则转步骤35;步骤38获取敏感函数调用中参数的路径名,利用PIN中的PIN_AddSyscallEntryFunction函数对敏感函数调用中涉及的系统调用进行插桩,并利用PIN_GetSyscallArgument函数获取系统调用参数中的路径名参数;步骤39触发实施条件分析;步骤3a是结束状态;
操作3):在检测到敏感函数调用后,执行分析攻击实施条件,判断对于攻击者而言是否具备实施条件;实施条件包括路径名可猜测和目录写权限两个部分,其中路径名可猜测表示攻击者是否能够猜测到访问的文件路径名,可通过路径名的来源判定;将来源分为可猜测和不可猜测两类;通过取路径名来源到路径名的信息流分析,可以得出路径名是否可以猜测;目录写权限体现为攻击者对于文件所在目录是否具备写权限,通过系统中的访问策略进行判定;
步骤40为起始动作;步骤41获取文件访问涉及的路径名,来自于敏感函数调用检测中的步骤35;步骤42获取路径名可猜测分析结果,图5给出了获取的主要流程;步骤43判断路径名是否为可猜测的,是则转步骤44,否则转步骤46;步骤44判断当前的访问操作对于攻击者而言是否具备实施条件;分析的主要流程,是则转步骤45,否则转步骤46;步骤45为等待攻击实施的状态;步骤46是结束状态;
操作4):执行模拟攻击;在确定攻击者具备实施条件后,对当前访问的文件实施符号链接攻击;步骤70为起始动作;步骤71获取路径名,由步骤41获取;步骤72获取目录写权限信息,由图6的步骤65获得;步骤73利用系统调用access检测当前文件是否存在,是转步骤74,否则转步骤75;步骤74将文件重命名,确保文件在检测结束后可恢复;步骤75实施符号链接攻击,利用系统调用link创建一个符号链接指向预先设定的目标文件,攻击者对目标文件不具备任何权限,这里将目标文件设定为/etc/root文件该文件对于同组和其他用户不具备任何权限;步骤76依据link返回值判断攻击是否成功,是则转步骤77,否则转步骤78;步骤77等待程序执行攻击影响分析,图8为其主要流程;步骤78为结束状态;
操作5):分析攻击影响,依据攻击影响结果进行漏洞判定;攻击影响分析流程用于判断攻击是否对程序或系统产生影响;通过影响函数对攻击影响进行判定;影响函数与敏感函数相对应,打开类敏感函数(包括open、open64、fopen、fopen64、freopen和freopen64)对应影响函数为相应的读写函数,其他敏感函数的影响函数为其本身;影响函数根据功能分为read、write和execution三类;read影响函数的影响主要表现为读取的文件数据对程序执行路径产生影响,或者用于系统调用参数,具体体现为由影响函数获取的文件数据是否通过信息流传播路径传播至条件跳转的判断条件或系统调用参数;Write和execution影响函数执行成功则表明存在影响;利用敏感函数所对应的影响函数判断攻击是否有效,结合攻击对程序或系统产生影响可完成攻击影响分析,判定是否存在漏洞;
步骤80为起始动作;步骤81通过PIN平台获取指令执行序列;步骤82取一条指令;步骤83判断指令是否为影响函数调用,是则转步骤84,否则转步骤82;步骤84通过影响函数返回值判断影响函数是否调用成功,是则转步骤85,否则转步骤8g;步骤85判断影响函数是否为read类,是则转步骤86,否则转步骤8f;步骤86取一条指令;步骤87判断当前指令是否满足信息流传播规则,具体规则与图5中的信息流传播规则一致,是则转步骤88,否则转步骤8a;步骤88判断传播源是否来自于影响函数,是则转步骤89,否则转步骤86;步骤89记录信息流传播路径;步骤8a检测当前指令是否包含有系统调用,是则转步骤8b,否则转步骤8c;步骤8b检测系统调用参数是否来自于影响函数,是则转步骤8f,否则转步骤86;步骤8c检测当前指令是否为条件跳转,是则转步骤8d,否则转步骤8e;步骤8d用于检测已检测指令数目是否超过指令读取阈值,或者影响函数传播数据被清除,是则转步骤8j,否则转步骤86;步骤8j给出未检测出漏洞提示;步骤8k执行文件恢复操作,删除符号链接攻击所产生的符号链接,并将图7中步骤74重命名的文件进行恢复;8m为结束状态;步骤8e识别跳转条件是否来自于影响函数,即该条件是否位于影响函数数据的传播路径上,是则转步骤8f,否则转步骤86;步骤8f输出漏洞报告,包括敏感函数名及调用地址、文件路径名、路径名来源、目录写权限信息等信息;步骤8h执行文件恢复操作,同步骤8k;步骤8i为结束状态。
本发明使用的反汇编工具为IDA Pro,函数信息具体体现为函数名、函数调用地址,敏感函数信息还需要获取含有敏感函数的函数体的开始和结束地址;函数名来自动态符号表中的函数名与敏感函数集的匹配结果;函数调用地址为敏感函数被调用的地址;含有敏感函数的函数体为敏感函数调用地址所在的函数体;最终所提取的程序信息存放在elf_data文件中,以供动态检测阶段使用。
动态检测阶段的输入为待检测的elf文件和程序信息文件elf_data,输出为漏洞检测结果。利用动态插桩平台PIN动态运行可执行程序,通过读取elf_data文件获取程序信息。利用PIN平台获取指令序列执行,将指令地址与敏感函数调用地址对比进行敏感函数调用检测。当程序执行至敏感函数调用地址时,进行实施条件分析。
实施条件包括路径名可猜测和目录写权限两个条件。路径名可猜测体现为攻击者是否具备猜测程序访问文件路径名的可能性,本发明利用信息流传播分析,获取路径名来源,将来源分为可猜测和不可猜测两类。通过取路径名来源到路径名的信息流分析,可以得出路径名是否可以猜测。目录写权限体现为攻击者对于程序所访问文件的所在目录是否具备写权限,其检测依据为系统中的访问策略。当满足路径名可猜测和目录写权限两个条件时,则认为攻击者具备了实施条件,即可实施模拟攻击。执行模拟攻击针对程序访问文件路径,创建一个与该文件同名的符号链接指向预先设定的/etc/root文件,破坏程序的预期访问。
攻击影响表现为符号链接攻击对程序或系统产生的影响,具体为攻击数据对程序执行路径产生影响,或者用于系统调用参数。本发明利用敏感函数所对应的影响函数判断攻击是否有效,进一步检测攻击对程序或系统产生的影响。当检测出攻击影响时,则判定存在漏洞,输出漏洞检测结果,包括敏感函数名及调用地址、文件路径名、路径名来源、目录写权限信息等信息。在执行完漏洞检测后实施文件恢复操作,删除模拟攻击创建的符号链接。
本发明的有益效果是,结合程序分析和攻击因素检测软件漏洞,且为静态分析和动态检测两个阶段结合的方法,提供了有效且准确的检测方案。本方法的实施可有效检测软件漏洞,并减少现有检测方法所存在的误报,对提高程序安全性具有重要意义。同时,检测中涉及程序分析、攻击利用等方面的信息可作为漏洞定位修复、级别判定的准确依据,降低人工分析的工作量。
附图说明
图1基于模拟攻击的软件漏洞检测流程示意图;
图2静态提取程序信息流程图;
图3敏感函数调用检测流程图;
图4实施条件分析流程图;
图5路径名可猜测分析流程图;
图6目录写权限分析流程图;
图7攻击实施流程图;
图8攻击影响分析流程图。
具体实施方式
图1所示为本方法实施的整体结构和工作流程,共分为静态分析和动态检测两个阶段。在静态分析阶段,利用静态反汇编工具IDA Pro对待检测elf文件进行反汇编获得反汇编代码,通过对反汇编代码的分析获取程序信息,包括函数信息和常量信息。静态分析所提取的程序信息存储在elf_data文件中,以供动态检测阶段使用。在动态检测阶段,利用动态插桩平台PIN运行待检测程序,读取elf_data文件中的程序信息用于敏感函数调用及实施条件的检测。程序信息中的敏感函数信息包含敏感函数调用地址,敏感函数调用检测主要检测指令地址与敏感函数调用地址的匹配情况。当检测到敏感函数调用时,进入实施条件分析。获取程序所访问的路径名和路径名可猜测分析结果,并进一步检测目录写权限,当满足实施条件时则实施攻击。通过攻击影响分析,给出漏洞检测结果。最后通过恢复操作消除攻击对文件造成的影响,并重新返回程序运行状态以供执行下一次漏洞检测。
图2为静态提取程序信息流程图。利用静态反汇编工具实现程序信息的提取工作。程序信息包括函数信息和常量信息,其中函数信息包括敏感函数、影响函数和信息流传播函数的函数信息,通过预先定义的函数集匹配完成函数信息的获取;常量信息为常量地址。函数信息包括:函数名、函数调用地址,敏感函数信息还需要获取含有敏感函数的函数体的开始和结束地址。其中,函数名来自动态符号表中的函数名与敏感函数集的匹配结果;函数调用地址为敏感函数被调用的地址;含有敏感函数的函数体为敏感函数调用地址所在的函数体。敏感函数集为{open,open64,fopen,fopen64,freopen,freopen64,link,symlink,readlink,execl,execle,execv,execve,execvp,execlp},这些函数调用含有文件访问过程且可被攻击的库函数或系统调用。影响函数集为{read,write,fread,fwrite,scanf,printf,link,symlink,readlink,execl,execle,execv,execve,execvp,execlp}。信息流传播函数集为{strcpy,strcat,strdup,strncpy,strnset,strset,memcpy,calloc,free}。
步骤20是初始动作。步骤21获取待检测elf文件,等待分析。步骤22利用IDA Pro对待检测程序进行反汇编。步骤23获取程序汇编代码。步骤24根据反汇编代码获取rodata节数据。步骤25分析rodata节数据,提取只读数据的地址作为常量信息。步骤26获取程序的动态符号表,用于获取程序所调用的库函数信息。步骤27提取一个符号表项。步骤28判断是否提取到,是则转步骤29,否则转步骤2b。步骤29判断符号表项中的函数名与函数集中的函数名是否匹配,是则转步骤2a,否则转步骤27。步骤2a借助动态符号表、全局偏移表和过程链接表获取函数的跳转地址。步骤2b利用IDA中的get_func_qty函数获取反汇编代码中的函数体。步骤2c判断是否获取到,是则转步骤2d,否则转步骤2i。步骤2d提取函数体中的一条指令。步骤2e对判断指令地址是否是函数体结束地址,是则转步骤2b,否则转步骤2f。步骤2f判断指令操作码是否为call或jmp,是则转步骤2g,否则转步骤2d。步骤2g判断目标地址与敏感函数跳转地址是否匹配,是则转步骤2h,否则转步骤2d。步骤2h记录敏感函数调用地址,并利用IDA中的curFunc->startEA和curFunc->endEA获取函数体开始结束地址。步骤2i将步骤25、2a、2h中提取到的函数信息输出至文件elf_data中。步骤2j是结束状态。
图3为敏感函数调用检测流程图。通过PIN动态执行待分析程序,完成敏感函数调用的动态检测。步骤30为初始动作。步骤31获取待检测elf文件。步骤32读取elf_data文件,获取静态分析得到的程序信息。步骤33利用PIN平台动态执行程序。步骤34利用PIN平台获取指令执行序列。步骤35提取执行序列中一条指令。步骤36判断是否提取到,是则转步骤37,否则转步骤3a。步骤37判断指令地址是否为敏感函数调用地址,是则转步骤38,否则转步骤35。步骤38获取敏感函数调用中参数的路径名,利用PIN中的PIN_AddSyscallEntryFunction函数对敏感函数调用中涉及的系统调用进行插桩,并利用PIN_GetSyscallArgument函数获取系统调用参数中的路径名参数。步骤39触发实施条件分析。步骤3a是结束状态。
图4为实施条件分析流程图。在检测到敏感函数调用后,执行实施条件分析,判断对于攻击者而言是否具备实施条件。实施条件包括路径名可猜测和目录写权限两个部分,其中路径名可猜测表示攻击者是否能够猜测到访问的文件路径名,可通过路径名的来源判定。将来源分为可猜测和不可猜测两类。通过取路径名来源到路径名的信息流分析,可以得出路径名是否可以猜测。目录写权限体现为攻击者对于文件所在目录是否具备写权限,通过系统中的访问策略进行判定。
步骤40为起始动作。步骤41获取文件访问涉及的路径名,来自于敏感函数调用检测中的步骤35。步骤42获取路径名可猜测分析结果,图5给出了获取的主要流程。步骤43判断路径名是否为可猜测的,是则转步骤44,否则转步骤46。步骤44判断当前的访问操作对于攻击者而言是否具备实施条件,图6给出了分析的主要流程,是则转步骤45,否则转步骤46。步骤45为等待攻击实施的状态。步骤46是结束状态。
图5为路径名可猜测分析流程图。其分析工作开始于程序执行至有敏感函数调用的函数体,主要分析数据对于攻击者而言是否可猜测。该分析过程首先获取路径名的可能来源,并通过信息流传播至路径名,从而确定路径名是否可被猜测。因此这部分主要涉及路径名来源分析、信息流传播两个主要步骤。
路径名来源分为可猜测和不可猜测两种。其中可猜测来源来自常量和一些可猜测的函数调用,包括mktemp、tempnam、random、getpid和gettimeofday等可被攻击者猜测的随机函数。不可猜测来源来自完全随机函数及随机输入,包括/dev/random产生的随机数和用户输入。数据的可猜测和不可猜测属性随信息流传播至路径名,即可得到路径名是否可被猜测。
信息流传播分为指令级和函数级信息流传播。在指令级别,根据功能将指令分为直接指令、运算指令、常量指令和无传递指令。直接指令,包括mov、movs、movxz等,可由PIN的INS_IsMov函数进行判断,其传播方式由源操作数传播至目的操作数;运算指令,包括add、sub、and、or、shr等,其传播方式由源操作数、目的操作数传播至目的操作数;常数指令,其传播方式由常数传播至目的操作数;无传递指令,包括not、nop等该类指令无信息流传播。在函数级别,采用函数摘要实现函数级的信息流传播,表现为信息流传播函数的参数及返回值间的信息流传播。
程序执行时,每执行至一个函数体,都执行一次路径名可猜测分析。步骤50为起始动作。步骤51获取所在函数体开始地址。步骤52判断函数体开始地址是否为含有敏感函数调用函数体开始地址,是则转步骤53,否则转步骤5f。步骤53取函数体中的一条指令。步骤54判断指令是否为源指令,是则转步骤55,否则转步骤56。步骤55将源指令地址加入路径名来源地址列表,并标记是否可猜测。步骤56判断指令是否为运算指令,是则转步骤57,否则转步骤58。步骤57执行运算指令信息流传播,由源操作数、目的操作数传播至目的操作数。步骤58判断指令是否为直接指令,是则转步骤59,否则转步骤5a。步骤59执行直接指令信息流传播,由源操作数传播至目的操作数。步骤5a判断指令是否为敏感函数调用,是则转步骤5b,否则转步骤5c。步骤5b根据敏感调用检测中的路径名地址,匹配当前传播路径中的地址信息,输出路径名是否可被猜测,若不在当前传播路径地址中,则输出等级未知。步骤5c通过对比函数信息中的信息流传播函数跳转地址与当前指令的目标地址,判断指令是否为信息流传播函数调用,是则转步骤5d,否则转步骤e。步骤5d根据函数级信息流传播规则执行信息流传播。步骤5e判断当前指令操作码为否为ret,是则转步骤5f,否则转步骤53。步骤5f为结束状态。
图6为目录写权限分析流程图,用于分析在自主访问策略下,攻击者对于当前的文件目录是否具备写权限。步骤60为起始动作。步骤61获取当前路径名,路径名来自于图4中的步骤41。步骤62根据步骤61利用系统调用lstat获取的路径名获取文件所在目录的属性信息,包括属主、所属用户组、用户组写权限和其他用户写权限。步骤63判断其他用户是否具有写权限,是则转步骤65,否则转步骤64。步骤64判断同组用户是否具有写权限,是则转步骤65,否则转步骤66。步骤65将具备目录写权限信息返回,并输出权限信息。步骤66将不具备写权限信息返回。步骤67为结束状态。
图7为攻击实施流程图。在确定攻击者具备实施条件后,对当前访问的文件实施符号链接攻击。步骤70为起始动作。步骤71获取路径名,由图4中的步骤41获取。步骤72获取目录写权限信息,由图6的步骤65获得。步骤73利用系统调用access检测当前文件是否存在,是转步骤74,否则转步骤75。步骤74将文件重命名,确保文件在检测结束后可恢复。步骤75实施符号链接攻击,利用系统调用link创建一个符号链接指向预先设定的目标文件,攻击者对目标文件不具备任何权限,这里将目标文件设定为/etc/root文件该文件对于同组和其他用户不具备任何权限。步骤76依据link返回值判断攻击是否成功,是则转步骤77,否则转步骤78。步骤77等待程序执行攻击影响分析,图8为其主要流程。步骤78为结束状态。
图8为攻击影响分析流程图,用于判断攻击是否对程序或系统产生影响。本方法通过影响函数对攻击影响进行判定。影响函数与敏感函数相对应,打开类敏感函数(包括open、open64、fopen、fopen64、freopen和freopen64)对应影响函数为相应的读写函数,其他敏感函数的影响函数为其本身。影响函数根据功能分为read、write和execution三类。read影响函数的影响主要表现为读取的文件数据对程序执行路径产生影响,或者用于系统调用参数,具体体现为由影响函数获取的文件数据是否通过信息流传播路径传播至条件跳转的判断条件或系统调用参数。Write和execution影响函数执行成功则表明存在影响。利用敏感函数所对应的影响函数判断攻击是否有效,结合攻击对程序或系统产生影响可完成攻击影响分析,判定是否存在漏洞。
步骤80为起始动作。步骤81通过PIN平台获取指令执行序列。步骤82取一条指令。步骤83判断指令是否为影响函数调用,是则转步骤84,否则转步骤82。步骤84通过影响函数返回值判断影响函数是否调用成功,是则转步骤85,否则转步骤8g。步骤85判断影响函数是否为read类,是则转步骤86,否则转步骤8f。步骤86取一条指令。步骤87判断当前指令是否满足信息流传播规则,具体规则与图5中的信息流传播规则一致,是则转步骤88,否则转步骤8a。步骤88判断传播源是否来自于影响函数,是则转步骤89,否则转步骤86。步骤89记录信息流传播路径。步骤8a检测当前指令是否包含有系统调用,是则转步骤8b,否则转步骤8c。步骤8b检测系统调用参数是否来自于影响函数,是则转步骤8f,否则转步骤86。步骤8c检测当前指令是否为条件跳转,是则转步骤8d,否则转步骤8e。步骤8d用于检测已检测指令数目是否超过指令读取阈值,或者影响函数传播数据被清除,是则转步骤8j,否则转步骤86。步骤8j给出未检测出漏洞提示。步骤8k执行文件恢复操作,删除符号链接攻击所产生的符号链接,并将图7中步骤74重命名的文件进行恢复。8m为结束状态。步骤8e识别跳转条件是否来自于影响函数,即该条件是否位于影响函数数据的传播路径上,是则转步骤8f,否则转步骤86。步骤8f输出漏洞报告,包括敏感函数名及调用地址、文件路径名、路径名来源、目录写权限信息等信息。步骤8h执行文件恢复操作,同步骤8k。步骤8i为结束状态。
Claims (1)
1.基于模拟攻击的软件漏洞检测方法,其特征是通过静态反汇编工具获取敏感操作所涉及的函数信息,利用动态插桩平台实现监控、模拟攻击和攻击影响分析等过程;主要操作步骤如下:
1)执行静态分析获取程序信息;
2)动态执行程序,检测敏感函数调用;
3)分析攻击实施条件;
4)执行模拟攻击;
5)分析攻击影响,依据攻击影响结果进行漏洞判定;
在具体实施时,采用符号链接攻击对程序进行模拟攻击,对应的漏洞类型为一类文件访问漏洞,通过利用这类漏洞,本地攻击者通过符号链接更改程序预期访问文件,从而实现访问攻击者权限之外的文件资源;
操作1):在静态分析阶段,利用静态反汇编工具IDA Pro对待检测elf文件进行反汇编获得反汇编代码,通过对反汇编代码的分析获取程序信息,包括函数信息和常量信息;静态分析阶段的输入为待检测的elf文件,输出为程序信息,静态分析所提取的程序信息存储在elf_data文件中,以供动态检测阶段使用;
程序信息包括函数信息和常量信息;其中函数信息包括敏感函数、影响函数和信息流传播函数的信息;常量信息为常量地址;静态分析过程利用反汇编工具对待检测程序进行反汇编得到反汇编代码,并分析反汇编代码获取函数信息和常量信息。
函数信息具体体现为函数名、函数调用地址,敏感函数信息还需要获取含有敏感函数的函数体的开始和结束地址;函数名来自动态符号表中的函数名与敏感函数集的匹配结果;函数调用地址为敏感函数被调用的地址;含有敏感函数的函数体为敏感函数调用地址所在的函数体;函数名来自动态符号表中的函数名与敏感函数集的匹配结果;函数调用地址为敏感函数被调用的地址;含有敏感函数的函数体为敏感函数调用地址所在的函数体;静态提取程序信息流程,利用静态反汇编工具实现程序信息的提取;通过预先定义的函数集匹配完成函数信息的获取;常量信息为常量地址;静态分析过程利用反汇编工具对待检测程序进行反汇编得到反汇编代码,并分析反汇编代码获取函数信息和常量信息;
步骤20是初始动作;步骤21获取待检测elf文件,等待分析;步骤22利用IDA Pro对待检测程序进行反汇编;步骤23获取程序汇编代码;步骤24根据反汇编代码获取rodata节数据;步骤25分析rodata节数据,提取只读数据的地址作为常量信息;步骤26获取程序的动态符号表,用于获取程序所调用的库函数信息;步骤27提取一个符号表项;步骤28判断是否提取到,是则转步骤29,否则转步骤2b;步骤29判断符号表项中的函数名与函数集中的函数名是否匹配,是则转步骤2a,否则转步骤27;步骤2a借助动态符号表、全局偏移表和过程链接表获取函数的跳转地址;步骤2b利用IDA中的get_func_qty函数获取反汇编代码中的函数体;步骤2c判断是否获取到,是则转步骤2d,否则转步骤2i;步骤2d提取函数体中的一条指令;步骤2e对判断指令地址是否是函数体结束地址,是则转步骤2b,否则转步骤2f;步骤2f判断指令操作码是否为call或jmp,是则转步骤2g,否则转步骤2d;步骤2g判断目标地址与敏感函数跳转地址是否匹配,是则转步骤2h,否则转步骤2d;步骤2h记录敏感函数调用地址,并利用IDA中的curFunc->startEA和curFunc->endEA获取函数体开始结束地址;步骤2i将步骤25、2a、2h中提取到的函数信息输出至文件elf_data中;步骤2j是结束状态;
操作2):在动态检测阶段,利用动态插桩平台PIN运行待检测程序,读取elf_data文件中的程序信息用于敏感函数调用及实施条件的检测;程序信息中的敏感函数信息包含敏感函数调用地址,敏感函数调用检测主要检测指令地址与敏感函数调用地址的匹配情况;当检测到敏感函数调用时,进入实施条件分析;获取程序所访问的路径名和路径名可猜测分析结果,并进一步检测目录写权限,当满足实施条件时则实施攻击;通过攻击影响分析,给出漏洞检测结果;最后通过恢复操作消除攻击对文件造成的影响,并重新返回程序运行状态以供执行下一次漏洞检测;
敏感函数调用检测流程;通过PIN动态执行待分析程序,完成敏感函数调用的动态检测;步骤30为初始动作;步骤31获取待检测elf文件;步骤32读取elf_data文件,获取静态分析得到的程序信息;步骤33利用PIN平台动态执行程序;步骤34利用PIN平台获取指令执行序列;步骤35提取执行序列中一条指令;步骤36判断是否提取到,是则转步骤37,否则转步骤3a;步骤37判断指令地址是否为敏感函数调用地址,是则转步骤38,否则转步骤35;步骤38获取敏感函数调用中参数的路径名,利用PIN中的PIN_AddSyscallEntryFunction函数对敏感函数调用中涉及的系统调用进行插桩,并利用PIN_GetSyscallArgument函数获取系统调用参数中的路径名参数;步骤39触发实施条件分析;步骤3a是结束状态;
操作3):在检测到敏感函数调用后,执行分析攻击实施条件,判断对于攻击者而言是否具备实施条件;实施条件包括路径名可猜测和目录写权限两个部分,其中路径名可猜测表示攻击者是否能够猜测到访问的文件路径名,可通过路径名的来源判定;将来源分为可猜测和不可猜测两类;通过取路径名来源到路径名的信息流分析,可以得出路径名是否可以猜测;目录写权限体现为攻击者对于文件所在目录是否具备写权限,通过系统中的访问策略进行判定;
步骤40为起始动作;步骤41获取文件访问涉及的路径名,来自于敏感函数调用检测中的步骤35;步骤42获取路径名可猜测分析结果,图5给出了获取的主要流程;步骤43判断路径名是否为可猜测的,是则转步骤44,否则转步骤46;步骤44判断当前的访问操作对于攻击者而言是否具备实施条件;分析的主要流程,是则转步骤45,否则转步骤46;步骤45为等待攻击实施的状态;步骤46是结束状态;
操作4):执行模拟攻击;在确定攻击者具备实施条件后,对当前访问的文件实施符号链接攻击;步骤70为起始动作;步骤71获取路径名,由步骤41获取;步骤72获取目录写权限信息,由图6的步骤65获得;步骤73利用系统调用access检测当前文件是否存在,是转步骤74,否则转步骤75;步骤74将文件重命名,确保文件在检测结束后可恢复;步骤75实施符号链接攻击,利用系统调用link创建一个符号链接指向预先设定的目标文件,攻击者对目标文件不具备任何权限,这里将目标文件设定为/etc/root文件该文件对于同组和其他用户不具备任何权限;步骤76依据link返回值判断攻击是否成功,是则转步骤77,否则转步骤78;步骤77等待程序执行攻击影响分析,图8为其主要流程;步骤78为结束状态;
操作5):分析攻击影响,依据攻击影响结果进行漏洞判定;攻击影响分析流程用于判断攻击是否对程序或系统产生影响;通过影响函数对攻击影响进行判定;影响函数与敏感函数相对应,打开类包括open、open64、fopen、fopen64、freopen和freopen64敏感函数、对应影响函数为相应的读写函数,其他敏感函数的影响函数为其本身;影响函数根据功能分为read、write和execution三类;read影响函数的影响主要表现为读取的文件数据对程序执行路径产生影响,或者用于系统调用参数,具体体现为由影响函数获取的文件数据是否通过信息流传播路径传播至条件跳转的判断条件或系统调用参数;Write和execution影响函数执行成功则表明存在影响;利用敏感函数所对应的影响函数判断攻击是否有效,结合攻击对程序或系统产生影响可完成攻击影响分析,判定是否存在漏洞;
步骤80为起始动作;步骤81通过PIN平台获取指令执行序列;步骤82取一条指令;步骤83判断指令是否为影响函数调用,是则转步骤84,否则转步骤82;步骤84通过影响函数返回值判断影响函数是否调用成功,是则转步骤85,否则转步骤8g;步骤85判断影响函数是否为read类,是则转步骤86,否则转步骤8f;步骤86取一条指令;步骤87判断当前指令是否满足信息流传播规则,具体规则与图5中的信息流传播规则一致,是则转步骤88,否则转步骤8a;步骤88判断传播源是否来自于影响函数,是则转步骤89,否则转步骤86;步骤89记录信息流传播路径;步骤8a检测当前指令是否包含有系统调用,是则转步骤8b,否则转步骤8c;步骤8b检测系统调用参数是否来自于影响函数,是则转步骤8f,否则转步骤86;步骤8c检测当前指令是否为条件跳转,是则转步骤8d,否则转步骤8e;步骤8d用于检测已检测指令数目是否超过指令读取阈值,或者影响函数传播数据被清除,是则转步骤8j,否则转步骤86;步骤8j给出未检测出漏洞提示;步骤8k执行文件恢复操作,删除符号链接攻击所产生的符号链接,并将图7中步骤74重命名的文件进行恢复;8m为结束状态;步骤8e识别跳转条件是否来自于影响函数,即该条件是否位于影响函数数据的传播路径上,是则转步骤8f,否则转步骤86;步骤8f输出漏洞报告,包括敏感函数名及调用地址、文件路径名、路径名来源、目录写权限信息等信息;步骤8h执行文件恢复操作,同步骤8k;步骤8i为结束状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510179362.6A CN104778413B (zh) | 2015-04-15 | 2015-04-15 | 一种基于模拟攻击的软件漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510179362.6A CN104778413B (zh) | 2015-04-15 | 2015-04-15 | 一种基于模拟攻击的软件漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104778413A true CN104778413A (zh) | 2015-07-15 |
CN104778413B CN104778413B (zh) | 2018-04-03 |
Family
ID=53619868
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510179362.6A Active CN104778413B (zh) | 2015-04-15 | 2015-04-15 | 一种基于模拟攻击的软件漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104778413B (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105975862A (zh) * | 2015-11-25 | 2016-09-28 | 武汉安天信息技术有限责任公司 | 一种基于漏洞触发方式的漏洞检测方法及系统 |
CN106203126A (zh) * | 2016-07-15 | 2016-12-07 | 国家计算机网络与信息安全管理中心 | 一种基于模拟环境的漏洞验证方法及系统 |
CN106874767A (zh) * | 2015-12-14 | 2017-06-20 | 阿里巴巴集团控股有限公司 | 一种程序漏洞的检测方法、终端及服务器 |
CN107766728A (zh) * | 2017-08-28 | 2018-03-06 | 国家电网公司 | 移动应用安全管理装置、方法及移动作业安全防护系统 |
WO2018084808A1 (en) * | 2016-11-04 | 2018-05-11 | Singapore University Of Technology And Design | Computer-implemented method and data processing system for testing device security |
CN108776757A (zh) * | 2018-06-22 | 2018-11-09 | 中国电子产品可靠性与环境试验研究所((工业和信息化部电子第五研究所)(中国赛宝实验室)) | 微处理器权限提升攻击模拟方法 |
CN109800574A (zh) * | 2018-12-12 | 2019-05-24 | 中国人民公安大学 | 基于密码算法分析的计算机病毒检测方法及系统 |
CN109857669A (zh) * | 2019-02-13 | 2019-06-07 | 杭州孝道科技有限公司 | 一种基于JavaAgent的JavaWEB应用程序漏洞检测方法 |
TWI663523B (zh) * | 2018-02-06 | 2019-06-21 | 可立可資安股份有限公司 | 資安攻防規劃之管理系統 |
CN110413525A (zh) * | 2019-07-29 | 2019-11-05 | 国网新疆电力有限公司电力科学研究院 | 安全测试方法及装置 |
CN110647457A (zh) * | 2018-06-26 | 2020-01-03 | 阿里巴巴集团控股有限公司 | 数据挖掘方法、数据处理方法和系统 |
CN111385302A (zh) * | 2020-03-06 | 2020-07-07 | 北京计算机技术及应用研究所 | 一种载荷自动化生成系统 |
CN112166427A (zh) * | 2018-05-30 | 2021-01-01 | 日本电信电话株式会社 | 保护装置及保护方法 |
US11108800B1 (en) | 2020-02-18 | 2021-08-31 | Klickklack Information Security Co., Ltd. | Penetration test monitoring server and system |
CN113515750A (zh) * | 2021-07-22 | 2021-10-19 | 苏州知微安全科技有限公司 | 一种高速流量下的攻击检测方法及装置 |
CN113688395A (zh) * | 2021-07-29 | 2021-11-23 | 深圳开源互联网安全技术有限公司 | web应用程序的漏洞检测方法、设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929774A (zh) * | 2012-10-16 | 2013-02-13 | 南京大学 | 一种基于可调对象分析的程序漏洞检测方法 |
CN103780614A (zh) * | 2014-01-21 | 2014-05-07 | 金华比奇网络技术有限公司 | 一种基于模拟攻击扩展的sql注入漏洞挖掘方法 |
US20140130172A1 (en) * | 2007-02-01 | 2014-05-08 | Brett Oliphant | Systems and methods for automating blind detection of computational vulnerabilities |
US20150020205A1 (en) * | 2013-07-15 | 2015-01-15 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for detecting security vulnerability for animation source file |
-
2015
- 2015-04-15 CN CN201510179362.6A patent/CN104778413B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140130172A1 (en) * | 2007-02-01 | 2014-05-08 | Brett Oliphant | Systems and methods for automating blind detection of computational vulnerabilities |
CN102929774A (zh) * | 2012-10-16 | 2013-02-13 | 南京大学 | 一种基于可调对象分析的程序漏洞检测方法 |
US20150020205A1 (en) * | 2013-07-15 | 2015-01-15 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for detecting security vulnerability for animation source file |
CN103780614A (zh) * | 2014-01-21 | 2014-05-07 | 金华比奇网络技术有限公司 | 一种基于模拟攻击扩展的sql注入漏洞挖掘方法 |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105975862A (zh) * | 2015-11-25 | 2016-09-28 | 武汉安天信息技术有限责任公司 | 一种基于漏洞触发方式的漏洞检测方法及系统 |
CN106874767A (zh) * | 2015-12-14 | 2017-06-20 | 阿里巴巴集团控股有限公司 | 一种程序漏洞的检测方法、终端及服务器 |
CN106874767B (zh) * | 2015-12-14 | 2019-10-01 | 阿里巴巴集团控股有限公司 | 一种程序漏洞的检测方法、终端及服务器 |
CN106203126A (zh) * | 2016-07-15 | 2016-12-07 | 国家计算机网络与信息安全管理中心 | 一种基于模拟环境的漏洞验证方法及系统 |
CN106203126B (zh) * | 2016-07-15 | 2019-07-09 | 国家计算机网络与信息安全管理中心 | 一种基于模拟环境的漏洞验证方法及系统 |
WO2018084808A1 (en) * | 2016-11-04 | 2018-05-11 | Singapore University Of Technology And Design | Computer-implemented method and data processing system for testing device security |
CN107766728A (zh) * | 2017-08-28 | 2018-03-06 | 国家电网公司 | 移动应用安全管理装置、方法及移动作业安全防护系统 |
TWI663523B (zh) * | 2018-02-06 | 2019-06-21 | 可立可資安股份有限公司 | 資安攻防規劃之管理系統 |
CN112166427A (zh) * | 2018-05-30 | 2021-01-01 | 日本电信电话株式会社 | 保护装置及保护方法 |
CN108776757B (zh) * | 2018-06-22 | 2020-05-22 | 中国电子产品可靠性与环境试验研究所((工业和信息化部电子第五研究所)(中国赛宝实验室)) | 微处理器权限提升攻击模拟方法 |
CN108776757A (zh) * | 2018-06-22 | 2018-11-09 | 中国电子产品可靠性与环境试验研究所((工业和信息化部电子第五研究所)(中国赛宝实验室)) | 微处理器权限提升攻击模拟方法 |
CN110647457A (zh) * | 2018-06-26 | 2020-01-03 | 阿里巴巴集团控股有限公司 | 数据挖掘方法、数据处理方法和系统 |
CN110647457B (zh) * | 2018-06-26 | 2023-03-28 | 阿里巴巴集团控股有限公司 | 数据挖掘方法、数据处理方法和系统 |
CN109800574A (zh) * | 2018-12-12 | 2019-05-24 | 中国人民公安大学 | 基于密码算法分析的计算机病毒检测方法及系统 |
CN109857669A (zh) * | 2019-02-13 | 2019-06-07 | 杭州孝道科技有限公司 | 一种基于JavaAgent的JavaWEB应用程序漏洞检测方法 |
CN110413525A (zh) * | 2019-07-29 | 2019-11-05 | 国网新疆电力有限公司电力科学研究院 | 安全测试方法及装置 |
CN110413525B (zh) * | 2019-07-29 | 2023-05-23 | 国网新疆电力有限公司电力科学研究院 | 安全测试方法及装置 |
US11108800B1 (en) | 2020-02-18 | 2021-08-31 | Klickklack Information Security Co., Ltd. | Penetration test monitoring server and system |
CN111385302A (zh) * | 2020-03-06 | 2020-07-07 | 北京计算机技术及应用研究所 | 一种载荷自动化生成系统 |
CN113515750A (zh) * | 2021-07-22 | 2021-10-19 | 苏州知微安全科技有限公司 | 一种高速流量下的攻击检测方法及装置 |
CN113688395A (zh) * | 2021-07-29 | 2021-11-23 | 深圳开源互联网安全技术有限公司 | web应用程序的漏洞检测方法、设备及计算机可读存储介质 |
CN113688395B (zh) * | 2021-07-29 | 2023-08-11 | 深圳开源互联网安全技术有限公司 | web应用程序的漏洞检测方法、设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104778413B (zh) | 2018-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104778413A (zh) | 一种基于模拟攻击的软件漏洞检测方法 | |
CN104834859B (zh) | 一种Android应用中恶意行为的动态检测方法 | |
Zhang et al. | Ethploit: From fuzzing to efficient exploit generation against smart contracts | |
CN101356535B (zh) | 一种检测和防止java脚本程序中不安全行为的方法和装置 | |
JP5507699B2 (ja) | 悪性サイト検出装置及び方法 | |
CN106462703B (zh) | 补丁文件分析系统与分析方法 | |
Li et al. | Detecting node. js prototype pollution vulnerabilities via object lookup analysis | |
CN102413142A (zh) | 基于云平台的主动防御方法 | |
CN108183900B (zh) | 一种挖矿脚本检测的方法、服务器、系统、终端设备及存储介质 | |
Liang et al. | Deepfuzzer: Accelerated deep greybox fuzzing | |
Ji et al. | The coming era of alphahacking?: A survey of automatic software vulnerability detection, exploitation and patching techniques | |
CN102622536A (zh) | 一种恶意代码捕获方法 | |
CN107103240B (zh) | 一种基于上下文信息的Android组件间隐私泄露行为识别方法及系统 | |
US20110219454A1 (en) | Methods of identifying activex control distribution site, detecting security vulnerability in activex control and immunizing the same | |
KR102120200B1 (ko) | 악성 코드 수집 방법 및 시스템 | |
CN108989294A (zh) | 一种准确识别网站访问的恶意用户的方法及系统 | |
Wang et al. | {MetaSymploit}:{Day-One} Defense against Script-based Attacks with {Security-Enhanced} Symbolic Analysis | |
Tang et al. | Towards dynamically monitoring android applications on non-rooted devices in the wild | |
CN101286979B (zh) | 一种网络攻击检测方法 | |
Shi et al. | Backporting security patches of web applications: A prototype design and implementation on injection vulnerability patches | |
CN101594234B (zh) | 互联网加密安全通讯控制方法 | |
Hang et al. | Malware detection method of android application based on simplification instructions | |
KR20120055790A (ko) | 힙 스프레이 공격의 실시간 탐지 및 차단 방법 및 시스템 | |
CN117130906A (zh) | 嵌入式设备中网络服务器的模糊测试方法及装置 | |
CN102789417B (zh) | 一种移动智能终端上的定向符号执行程序检测系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |