书签 分享 收藏 举报 版权申诉 / 20

一种基于模拟攻击的软件漏洞检测方法.pdf

  • 上传人:r7
  • 文档编号:19643
  • 上传时间:2018-01-12
  • 格式:PDF
  • 页数:20
  • 大小:1.19MB
  • 摘要
    申请专利号:

    CN201510179362.6

    申请日:

    2015.04.15

    公开号:

    CN104778413A

    公开日:

    2015.07.15

    当前法律状态:

    实审

    有效性:

    审中

    法律详情:

    实质审查的生效IPC(主分类):G06F 21/57申请日:20150415|||公开

    IPC分类号:

    G06F21/57(2013.01)I

    主分类号:

    G06F21/57

    申请人:

    南京大学

    发明人:

    曾庆凯; 杨继龙

    地址:

    210093江苏省南京市鼓楼区汉口路22号

    优先权:

    专利代理机构:

    南京瑞弘专利商标事务所(普通合伙)32249

    代理人:

    陈建和

    PDF完整版下载: PDF下载
    内容摘要

    基于模拟攻击的软件漏洞检测方法,通过静态反汇编工具获取敏感操作所涉及的函数信息,利用动态插桩平台实现监控、模拟攻击和攻击影响分析等过程;主要操作步骤如下:1)执行静态分析获取程序信息;2)动态执行程序,检测敏感函数调用;3)分析攻击实施条件;4)执行模拟攻击;5)分析攻击影响,依据攻击影响结果进行漏洞判定;在具体实施时,采用符号链接攻击对程序进行模拟攻击,对应的漏洞类型为一类文件访问漏洞,通过利用这类漏洞,本地攻击者通过符号链接更改程序预期访问文件,从而实现访问攻击者权限之外的文件资源。

    权利要求书

    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为结束状态。

    说明书

    一种基于模拟攻击的软件漏洞检测方法
    技术领域
    本发明涉及软件漏洞的检测,特别涉及一种结合程序静态分析、对待检测软件进行模拟攻击实 施软件漏洞动态监控和检测的方法。
    背景技术
    随着信息技术的不断发展,软件漏洞作为软件系统安全性的主要威胁之一,其危害程度越来越 严重。攻击者利用软件漏洞可在未授权的情况下访问或破坏系统,甚至是取得系统的最高权限。针 对软件漏洞的检测工作,大多集中在程序分析上,通过静态或动态分析提取漏洞特征,从而完成漏 洞识别过程。然而,利用程序分析进行漏洞检测缺乏对攻击因素的考虑,使得检测出的漏洞可能是 无法被利用的,因而会产生误报。因此,为实现软件漏洞的准确检测,需要将攻击因素融入到程序 分析中,充分考虑漏洞利用条件以减少误报的产生。
    本发明提出一种基于模拟攻击的软件漏洞检测方法。利用预先收集的程序信息,结合程序和系 统级的监控方法,对程序的敏感操作和攻击的实施条件进行检测,在满足条件的情况下对程序实施 模拟攻击,将攻击影响作为漏洞识别的主要依据,从而完成漏洞的准确识别。本方法的实施可有效 检测软件漏洞,并减少现有检测方法所存在的误报,对提高软件系统安全性具有重要意义。同时, 检测中涉及程序分析、攻击利用等方面的信息可作为漏洞定位修复、级别判定的准确依据,降低人 工分析的工作量。
    发明内容
    本发明的目的是,为实现准确检测软件漏洞,提供一种基于模拟攻击的检测方法。通过预先获 取的程序信息,结合程序和系统级的监控实现敏感操作检测,利用敏感操作触发检测机制,并在符 合攻击实施条件时对程序进行模拟攻击,进行漏洞判定。
    本发明的技术方案是:基于模拟攻击的软件漏洞检测方法,通过静态反汇编工具获取敏感操作 所涉及的函数信息,利用动态插桩平台实现监控、模拟攻击和攻击影响分析等过程;主要操作如下:
    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为结束状态。

    关 键  词:
    一种 基于 模拟 攻击 软件 漏洞 检测 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:一种基于模拟攻击的软件漏洞检测方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-19643.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1