软件沙箱技术 – 安全分析沙箱Cuckoo Sandbox

1.Cockoo的功能

Cockoo Sandbox是开源安全沙箱,基于GPLv3。目的是恶意软件(malware analysis)分析。使用的时候将待分析文件丢到沙箱内,分析结束后输出报告。很多安全设备提供商所谓云沙箱是同类技术,一些所谓Anti-APT产品也是这个概念。和传统AV软件的静态分析相比,Cuckoo动态检测。扔到沙箱的可执行文件会被执行,文档会被打开,运行中检测。和不少开源软件学而优则仕一样,Cookoo搞了一个产品,Red Dragon。这种方式也是挺好的一种做开源软件的运营方式,Snort的SourceFire不就是被思科十几亿收购了吗。

 

Cuckoo它可以分析的内容有:

1.Windows可执行文件,DLL文件

2.PDF,MSOffice文档

3.URL和HTML文档

4.PHP脚本,VB脚本

5.CPL文件

6.ZIP文件,Jar文件

7.Python文件

可以看出,只是Windows平台,外加一些脚本和文件。

 

Cuckoo的分析结果包含如下内容:

1.函数以及API调用的Call Trace

2.应用拷贝和删除的文件

3.选定进程的内存镜像

4.分析机的full memory dump

5.恶意软件执行时的截屏

6.分析机产生的网络流量

 

2.部署和使用

 

下图是Cuckoo的部署,其实很简单,分为host和guests。

 

软件沙箱技术 – 安全分析沙箱Cuckoo Sandbox

 

Host(管理机)

负责

管理guests

启动分析工作

网络流量收集等。

 

host依赖一些开源软件,例如

tcpdump用于Guest网络拦截

Volatility用于内存的dump

 

Guest(虚拟机)

Guest是通用的虚拟机,Xen、VirtualBox等。它运行Cuckoo的Agent,接收Host发过来的任务(文件)运行后获取信息。

Agent是跨平台的(就是Python脚本)可以运行在Windows、Linux和MAC OS上。它实际是是一个XMLRPC server,等待连接。

 

Cuckoo使用

Cuckoo提供了python命令行工具。

1.使用cuckoo.py启动引擎。

2.使用submit.py像cuckoo提交待分析应用。

3.引擎会和虚拟机中的Agent通信,运行应用。

4.分析结束后,结果输出到特定目录。

 

3.Hook引擎

 

cuckoo使用了通用虚拟机做Guest,本身也没有隔离机制和访问控制机制。它特殊的地方就是Hook机制。核心模块cuckoomon(Cuckoo Sandbox Monitor)的源码在这里。它的作用是Hook在可执行程序上,拦截执行流程。 形式上它是一个DLL,会被inject到待分析的恶意软件和它创建的所有进程中。所谓动态分析,就是Hook后的API,在线收集的运行时信息。主要有两个步骤:

 

3.1 DLL注入

注入是使用Python实现的,流程如下:

1.使用CreateProcess(CREATE SUSPENDED)启动应用

2.使用CreateRemoteThread和QueueUserAPC API调用LoadLibrary注入cuckoomon.dll。

3.Resume进程的主线程

 

参照下面代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 class Process :     “” “Windows process.” “”       def  inject ( self , dll = os . path . join ( “dll” , “cuckoomon.dll” ) , apc = False ) :         “” “Cuckoo DLL injection.        @param dll: Cuckoo DLL path.        @param apc: APC use.        “ “”         if self . pid == 0 :             log . warning ( “No valid pid specified, injection aborted” )             return False           if not self . is_alive ( ) :             log . warning ( “The process with pid %d is not alive, injection “                         “aborted” % self . pid )             return False           dll = randomize_dll ( dll )           if not dll  or not os . path . exists ( dll ) :             log . warning ( “No valid DLL specified to be injected in process “                         “with pid %d, injection aborted” % self . pid )             return False          来源:爱翻身的小鱼干儿

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年1月12日
下一篇 2016年1月12日

相关推荐