1、(4) 检测报告2 基于沙盒技术的恶意行为分析平台(作品)设计(1)需求分析(简单说明要做的事情)(2)功能分析:功能图具体流程图针对图中的每个功能模块或每个流程都有一段说明 3 作品实现 流程图4 作品测试5 创新性6 总结参考文献(请简要说明创作本作品之动机、功能、特性、创新处、实用性)随着时代的发展,计算机已成为人们生活中不可缺失的工具,尤其是网络,与人们的生活密切相关,且由于网络的普及,人们在网络上的交流愈来愈方便,但恶意代码和网络攻击也日益频繁,造成的危害也越来越大,所以恶意代码的研究和分析工作也就变的不可忽视了。由于恶意代码愈来愈复杂多样性,因此传统的基于特征码检测的静态方法便更难
2、以检测出未知的恶意代码了,而沙盒技术可以对可执行程序进行动态分析与检测,其在一定程度上可以弥补静态分析方法的不足之处。預頌圣鉉儐歲龈讶骅籴。在对基于传统沙盒的分析方法深入研究的基础上,本文提出了一种基于沙盒的恶意代码根据API函数调用行为统计并匹配的统一方案,该方案根据恶意代码的动态行为及其对计算机系统的影响,对其恶意性进行了分级,并能够通过动态分析自动报告恶意代码的恶意等级,使得用户可以一目了然地看出被测程序的恶意程度。基于该方案,本文设计并实现了一款针对可执行程序的恶意代码检测工具Blackbirdbox。渗釤呛俨匀谔鱉调硯錦。与以前的工具相比,本文实现的工具在检测方面有以下四个优点:第一
3、、使用沙盒技术,整套工具都在沙盒环境中运行,使得保证了检测的完整性和系统的无破坏性;第二、实现了一个有针对性的API监视器,在一定程度上缩小了监测范围,提高了检测效率;第三、能够对未知的恶意代码进行检测;第四、能够自动分析并报告被测程序的恶意等级,使得用户更直接的知道其恶意程度。第五、专门针对具有反沙箱技术的恶意代码来研发了一套专门防止反沙盒技术的恶意代码在沙盒中不展露恶意行为的方案。在系统的设计上采用了面向组件的设计思想,使得各个组件之间分工较为清晰,能够区分其功能和达到的结果。铙誅卧泻噦圣骋贶頂廡。最后,本团队利用该检测工具对“熊猫烧香”“某某某”“不知名”等典型恶意代码程序进行了检测,实
4、验结果证明本文提出的检测方法是具有可行性的,且工具有效的实现了功能。擁締凤袜备訊顎轮烂蔷。声明:测试的所有恶意代码样本都进行过脱壳处理,因此暂不考虑加壳情况。第一章 作品概述(建议包括:背景分析、相关工作、特色描述及应用前景分析等) 1.1 背景分析 在当今的信息时代,互联网的发展与广泛应用深刻改变 了人们的生活方式,大大加快了人类的工作进程、信息获取,使其自由交流沟通越来越简单。然而,针对这些的攻击和犯罪层出不穷在现有的系统中,大多数用来维持安全性的技术通常作 为独立的程序来实现,但是在实现时把用来加强安全性和监视系统活动的技术与系统被攻击部分隔离开也很重要,这就是沙盒技术的来源。贓熱俣阃歲
5、匱阊邺镓騷。现在,传统的恶意程序分析方法已经得到了最大化的研究 ,基于检测的攻防方法能够快速准确地对已经出现的恶意程序进行检测。但其缺乏一定的灵活性,而且对于未知的恶意程序无能为力。而近些年来,黑客的地下发展、团队协作、 智能化等让这种检测越来越无能为力。因此,提出了新的终端防护技术要求,而沙盒技术正是符合此要求的可以解决这些问题的技术 。 坛摶乡囂忏蒌鍥铃氈淚。1.2 相关工作首先在前期工作中,对沙盒技术的定义以及含义做了深刻,随后对于目前国内外恶意程序主流的检测方法做了分类以及说明,详情如下:蜡變黲癟報伥铉锚鈰赘。1.21 沙盒技术沙盒在计算机领域主要是指一个严格受控的环境,程序在其中运行
6、时的状态、所使用或访问的资源都受到严格的记录和控制。沙盒根据指令对全系统进行模拟,对一个程序的访问资源、执行环境按照规则赋予一定的访问权限。这样程序只能在建立的沙盒里面进行相关操作,限制了恶意程序的危害。每个程序在自己的受保护的沙盒之中运行,不会影响到其他程序的运行,同样,这些程序的运行也不会影响操作系统的正常运行。 買鲷鴯譖昙膚遙闫撷凄。12.2 特征码法 特征码识别技术借助反汇编引擎对二进制程序进行静态反汇编,对得到的静态代码进行一些关键性的代码判断比较,包含此代码就被识别为恶意程序。特征码法早期应用于 SCAN、CPAV等著名病毒检测工具中。国外专家认为特征码法是检测已知病毒的最简单、开
7、销最小的方法。 綾镝鯛駕櫬鹕踪韦辚糴。12.3 基于行为的检测法 它是利用病毒的特有行为特征来监测病毒的一种方法 。 当程序运行时,监视其行为,如果发现了病毒行为,立即报警,另外行为特征识别通常需要使用类神经网络一类方法来训练分析器,并能够准确地用形式化的方法来定义恶意代码的特征。 驅踬髏彦浃绥譎饴憂锦。12.4 基于特征函数的检测方法恶意代码要实现特定功能,必要使用系统的API函数 (包括内核级和用户级的),因此如果某个程序调用了危险的 特定函数集合,我们有理由怀疑其可能是恶意代码。在程序加载之前,对于引入的任何程序文件,我们扫描其代码获得其 系统函数集合(这个过程可能需要代码逆向技术和虚拟
8、机配 合),并将其与我们对多个恶意代码分析后设置好的一系列特 征函数集合做交集运算,这样就可以知道该程序文件使用了哪些危险的函数,并大致可以估计其功能和属于哪种类型。猫虿驢绘燈鮒诛髅貺庑。1.3 特色描述本系统采用了虚拟环境+恶意代码分析的思想结合,在创建一个安全的虚拟环境的前提下对恶意代码进行分析。现在市场上大部分的恶意代码检测技术大多为特征库的比配技术,这种技术的优点是能快速匹配效率高,但是对于未知的恶意代码却无能为力,而现在市场上的恶意代码分析技术却没有一个安全的环境,因此本作品是在虚拟仿真层的实现与检测。锹籁饗迳琐筆襖鸥娅薔。本系统采用了采用了APIhook技术,虚拟沙箱技术,静态分析
9、技术,动态分析技术,来实现在本机系统下对未知恶意代码的检测与分析。構氽頑黉碩饨荠龈话骛。本系统特色如下:(1):采用沙盒技术来实现虚拟仿真环境的实现,并运用回滚机制使得运行程序不会对本机真实系统产生影响。(2):对恶意代码进行全方面的监控(3):对监控结果进行针对性的分析,并生成分析报告(4):针对分析结果按照行为危害性生成处理意见(5):采用APIhook技术,生成DLL文件并注入到运行文件中进行监控,返回其调用API函数的地址值,从而实现了精准API监控的技术輒峄陽檉簖疖網儂號泶。(6):针对市面上的某些恶意代码有反沙盒技术,使得其能逃脱沙盒下恶意代码的检测,因此本系统中采用了反沙盒技术的
10、分析,对在构架的仿真虚拟环境中运行的恶意代码进行反沙盒技术的分析,保证在构架的虚拟仿真环境中的漏报率降低。尧侧閆繭絳闕绚勵蜆贅。1.4 应用前景分析本系统能够使恶意代码进行在沙盒中运行,对其恶意行为进行监控分析并生成分析报告。并且保护主机的安全不被恶意代码入侵,在如今恶意代码安全事件越来越多的情况下,具有很广阔的应用前景。 识饒鎂錕缢灩筧嚌俨淒。1、 保护我们的个人隐私资料,当有黑客利用恶意软件来监控我们的电脑,以窃取我们的个人隐私时,便可以通过本系统来保护。凍鈹鋨劳臘锴痫婦胫籴。2、 恶意代码是黑客用来控制系统,进行网络攻击的主要形式。本系统便可以通过检测恶意代码来保护我们的系统,维护我们的
11、网络。恥諤銪灭萦欢煬鞏鹜錦。3、 本系统还可以应用于网络应急响应和恶意代码取证等方面。4、 为企业保护内部关键资料、公司机密文件、客户资料提供服务,提高企业竞争力;5、 防止黑客利用恶意代码来入侵政府、军队的网络,保护政府、军队机要秘密文件不被窃取。6、 为银行业务、电子商务提供服务,保护银行客户的个人资料不被泄露,保护电子商务的信息不被窃取。7、 应用沙盒技术,降低未知程序的安全风险、打造可信的安全环境和提升应用的可靠性。由于在沙盒中进行的操作是相对安全的,即不会对用户计算机本身造成巨大伤害,因此为了保证系统的内核和关键组件不会被病毒、恶意程序、或者程序开发过程中发生的失误或者意外所破坏,让
12、机器能够始终在稳定的情况下运行,引入沙盒技术也是必要的,这样可以极大地降低系统所面临的风险。沙盒技术在信息安全尤其是网络安全领域的崭露头角,给这个行业带来了一种新的思维,也带来了一股清新的空气,我们有理由相信,在信息安全领域,沙盒技术能够得到进一步的发展和完善,同时,也将有更大的施展拳脚的空间。鯊腎鑰诎褳鉀沩懼統庫。第二章 作品设计与实现(建议包括系统方案、实现原理、硬件框图、软件流程、功能、指标等) 2.1 系统方案对于以上理论基础以及拓展,本团队提出了一下基于沙盒技术的恶意行为分析平台的设计与实现方法,以此建立一个仿真的沙盒环境来运行程序并利用API监视器对此进行判断,以此来根据输出的返回
13、值来判断是否为恶意代码并为其打印出一份行为分析报告。硕癘鄴颃诌攆檸攜驤蔹。2.2 实现原理下面是对于系统方案的拓展以及原理实现2.2.1沙盒环境的搭建 沙盒环境是在本地操作系统基础上,采用底层技术手段实现访问资源以及进程的限制和隔离,构造出与本地系统共存但相互间完全隔离的虚拟计算环境。其中隔离的内容包括:进程对象、内存、注册表、文件、窗口消息等,也就是说,沙盒内外的应用是相互不知道对方的存在,也不能进行交互的。因此,即使本地系统上存在病毒、木马,也无法感染或探测到沙盒中的重要应用或文件。相应的,当在沙盒中完成业务操作,退出沙盒后,系统会恢复到初始状态,过程中敏感的业务数据不会落在终端本地。阌擻
14、輳嬪諫迁择楨秘騖。 下面介绍一下沙箱环境的搭建。我们的blackbirdbox中的sandbox环境主要是由安装sandbox部分、初始化sandbox部分、开始sandbox部分、停止sandbox部分、回滚以及重定向部分等组成。氬嚕躑竄贸恳彈瀘颔澩。 首先来介绍一下安装sandbox部分。此部分中调用我们自己定义两个的函数。分别为:检查安装函数(CheckIsInstalled)和sandbox的安装函数(InstallSandBox)。在这部分中我们通过检查安装函数来检查是否已经安装过沙盒,如果安装过则会跳出这部分。如果没有则会运行下一个函数即安装函数来安装沙盒,安装完毕后也一样跳出这一
15、部分。在检查安装函数中通过判断指定打开的注册表是否为空,来判断sandbox是否安装过。下面只是源代码中的部分代码,具体请看源代码。釷鹆資贏車贖孙滅獅赘。代码示例:RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegProgramPath,0,KEY_ALL_ACCESS,&hkProgram);怂阐譜鯪迳導嘯畫長凉。if( hkProgram = NULL ) /Not installed iInstalled = 0; Else/Installed iInstalled = 1; 而在sandbox安装函数中我们有调用了自己定义的几个函数一起安装sandbox。这些函
16、数分别为创建软件注册CreateSoftwareRegistry()、安装软件注册表函数SetupSoftwareRegistry()、安装注册注册表函数SetupRegRegistry()、 创建cloneapi目录函数CreateCloneAPIDirectory()和 安装注册sandbox函数SetupRegSandBox();我们通过调用这些函数最终使得指定的注册表键不为空,从而创建成功沙盒。谚辞調担鈧谄动禪泻類。int SetupRegSandBox(IN const WCHAR * lpSandBoxName)嘰觐詿缧铴嗫偽純铪锩。/Create RestorePath / ls
17、trcat(szRestorePath,L); lstrcat(szRestorePath,lpSandBoxName); CreateDirectory(szRestorePath,NULL); /Create RestorePathDrive WCHAR szRestoreDrivePathMAX_PATH = NULL; lstrcpy(szRestoreDrivePath,szRestorePath); lstrcat(szRestoreDrivePath,L lstrcat(szRestoreDrivePath,CONF_SandBox_Drive_Name);熒绐譏钲鏌觶鷹緇機库。
18、 CreateDirectory(szRestoreDrivePath,NULL); /Create subkey SandBoxXXX HKEY hkSandBox = NULL; WCHAR szRegSandBoxPath256 = NULL; WCHAR szSubKeyPath256 = NULL; lstrcpy(szRegSandBoxPath,LSOFTWARE lstrcat(szRegSandBoxPath,CONF_SoftwareRegName); lstrcat(szRegSandBoxPath,L lstrcat(szRegSandBoxPath,CONF_Soft
19、wareReg_SandBox);鶼渍螻偉阅劍鲰腎邏蘞。 lstrcat(szRegSandBoxPath,lpSandBoxName);RegCreateKey(HKEY_LOCAL_MACHINE,szRegSandBoxPath,&hkSandBo);纣忧蔣氳頑莶驅藥悯骛。RegCloseKey(hkSandBox); /Create subkey SandBoxXXXSoftware lstrcpy(szSubKeyPath,szRegSandBoxPath); lstrcat(szSubKeyPath,L lstrcat(szSubKeyPath,CONF_SoftwareReg_S
20、andBox_Software);颖刍莖蛺饽亿顿裊赔泷。 RegCreateKey(HKEY_LOCAL_MACHINE,szSubKeyPath,&hkSandBox); RegCloseKey(hkSandBox);濫驂膽閉驟羥闈詔寢賻。 return 0;int CreateCloneAPIDirectory(void)/Create directory WCHAR szCloneAPIDirectoryMAX_PATH = NULL; GetModuleFileName(NULL,szCloneAPIDirectory,MAX_PATH);/ PathRemoveFileSpec(sz
21、CloneAPIDirectory);銚銻縵哜鳗鸿锓謎諏涼。 lstrcat(szCloneAPIDirectory,Llstrcat(szCloneAPIDirectory,CONF_CloneAPI_DirectoryName);CreateDirectory(szCloneAPIDirectory,NULL);挤貼綬电麥结鈺贖哓类。/kernel32.dll wsprintf(szOriginalPath,L%s%s,szSystemDirectory,Lkernel32.dll赔荊紳谘侖驟辽輩袜錈。 wsprintf(szCloneAPIPath,L,szCloneAPIDirecto
22、ry,CONF_CloneAPI_CloneKERNEL32);塤礙籟馐决穩賽釙冊庫。 DeleteFile(szCloneAPIPath); CopyFile(szOriginalPath,szCloneAPIPath,TRUE);/advapi32.dlladvapi32.dll裊樣祕廬廂颤谚鍘羋蔺。,szCloneAPIDirectory,CONF_CloneAPI_CloneADVAPI32);仓嫗盤紲嘱珑詁鍬齊驁。return 0;绽萬璉轆娛閬蛏鬮绾瀧。(1) 初始化sandbox(2) 。在此部分中我们调用了一个函数:sandbox初始化函数(SandBoxInitalizatio
23、n),在这个函数中我们通过对系统信息的检查、对权值的调整、对sandbox的检查和对环境的检查来完成对sandbox的初始化。在对系统信息的检查中我们主要是对操作系统版本、cup、系统信息、内存、驱动以及网络进行检查。在对环境的检查时我们主要是对组件的检查。骁顾燁鶚巯瀆蕪領鲡赙。wprintf(L检查操作系统版本中.rnOSVERSIONINFOEX OsVerInfoEx;OsVerInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);瑣钋濺暧惲锟缟馭篩凉。if( !GetVersionEx(OSVERSIONINFO *)&OsVerIn
24、foEx) )return -1;WCHAR szOsVerInfo256 = NULL;WCHAR szOsName32 = NULL;if( OsVerInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT )鎦诗涇艳损楼紲鯗餳類。lstrcpy(szOsName,LUnknownif( OsVerInfoEx.dwMajorVersion=4 )NT.检查 CPU 信息中.rnSYSTEM_INFO systeminfo;GetSystemInfo(&systeminfo);WCHAR szNumberOfProcessors256 = NULL;swpr
25、intf(szNumberOfProcessors,LCPU: t%d CPU installed.rn,systeminfo.dwNumberOfProcessors);栉缏歐锄棗鈕种鵑瑶锬。wprintfex( szNumberOfProcessors,FOREGROUND_INTENSITY | FOREGROUND_BLUE);HKEY hCPUKey = NULL;./*调整权值函数*/int AdjustPrivileges(void)if( EnableSpecificPrivilege(TRUE,SE_BACKUP_NAME) = FALSE )辔烨棟剛殓攬瑤丽阄应。wprin
26、tfex(LEnable SE_BACKUP_NAME privilege failed!rn,FOREGROUND_INTENSITY | FOREGROUND_RED);峴扬斕滾澗辐滠兴渙藺。 iRet = -1;if( EnableSpecificPrivilege(TRUE,SE_CHANGE_NOTIFY_NAME) = FALSE )詩叁撻訥烬忧毀厉鋨骜。 wprintfex(LEnable SE_CHANGE_NOTIFY_NAME privilege failed!则鯤愜韋瘓賈晖园栋泷。. return iRet;/*检查环境*/int CheckEnvironment(voi
27、d)/检查环境int iOpenProcError = 0; HANDLE hSnapshot = NULL; PROCESSENTRY32 pe32; hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );胀鏝彈奥秘孫戶孪钇賻。if( hSnapshot = NULL ) return -1; pe32.dwSize = sizeof( PROCESSENTRY32 );Process32First( hSnapshot, &pe32 );.return iRet;int SelfCheck(void) L自我检查中.请稍等一会.rnrn, FOREGROUND_INTENSITY | FOREGROUND_GREEN|FOREGROUND_BLUE);鳃躋峽祷紉诵帮废掃減。return 1;(3) 开始sandbox(4) ;在这部分中我们调用了BeginSandBoxRoutine函数来进行开始运行sandbox。在这个函数中我们先把要打开的sandbox找到。并将它打开。然后查询这个sandbox的状态,即是否已经在此电脑中安装。如果安装就可以运行。在查询以后我们就可以让可执行文件在这个sandbox中运行
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1