百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

十分钟学会恶意样本分析,一眼看透无所遁形

liebian365 2024-10-22 15:31 21 浏览 0 评论

一、关于恶意软件

恶意软件是尝试破坏计算机、搜集敏感信息或者非法访问其他计算机的软件, 它对个人隐私信息、商业机密甚至是国家安全都会造成很大的威胁。

2017年WannaCry勒索病毒的爆发,是迄今为止最严重的勒索病毒事件,至少150个国家、30万名用户中招,造成损失达80亿美元;Conficker蠕虫病毒感染数千万台电脑,史上袭击范围最广的Conficker蠕虫病毒曾感染了全球200多个国家的数千万台Windows个人电脑。

本期“安仔课堂”,ISEC实验室的老师跟大家一起针对恶意软件进行分析,了解其行为特征,十分钟学会恶意样本分析,一眼看透无所遁形。

Cuckoo sandbox是一个开源的恶意文件自动化分析系统,采用Python和C/C++开发,跨越Windows、Android、Linux和Darwin四种操作系统平台,支持二进制的PE文件(exe、dll、com)、PDF文档、Office文档、URL、HTML文件、各种脚本(PHP、VB、Python)、JAR包、Zip文件等等几乎所有的文件格式,能分析恶意文件的静态二进制数据和动态运行后的进程、网络、文件等行为,对于恶意文件的初步分析定性具有很大帮助。

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

(1)函数以及API调用的Call Trace;

(2)应用拷贝和删除的文件;

(3)选定进程的内存镜像;

(4)分析机的full memory dump;

(5)恶意软件执行时的截屏;

(6)分析机产生的网络流量。


二、Cuckoo的部署

下图是Cuckoo的部署,分为host和guests。

1.Host(管理机)

负责管理guests、启动分析工作、网络流量收集等。

host依赖一些开源软件,例如tcpdump用于Guest网络拦截、Volatility用于内存的dump。

2.Guest(虚拟机)

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

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

三、Host环境搭建

1.安装Cuckoo

$ sudo pip install -U pip setuptools

$ sudo pip install -U cuckoo

2.数据库依赖库

(1)如要使用Cuckoo sandbox自带web程序,需安装mongodb;

(2)Cuckoo sandbox默认使用sqlite数据库,如要使用mysql,需安装mysql和MySQL-python。

3.网络数据包捕获

Host使用tcpdump捕获网络数据包

(1)安装tcpdump

$ sudo apt-get install tcpdump

(2)启用root账户

$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

(3)验证启用是否成功

$ getcap /usr/sbin/tcpdump /usr/sbin/tcpdump=cap_net_admin,cap_net_raw+eip

4.虚拟机软件

Cuckoo sandbox支持多种虚拟机,包括vmware、virtualbox、esx、kvm、vsphere、xenserver,选择一种你最熟悉的。

此处简单介绍virtualbox的安装:

Virtualbox是开源软件,功能可满足Cuckoo sandbox的使用。

安装命令:

$ sudo apt-get install virtualbox


四、Guest环境搭建

本文主要讲Windows恶意文件分析环境,所以Guest为Windows操作系统。

Guest支持winxp和win7,使用win7时,需关闭User Access(用户账户控制)。

下面以win7为例,讲述安装过程:

1.win7虚拟机安装

使用Host中已安装的虚拟机软件,安装win7虚拟机。

注:win7虚拟机无需打补丁,无需安装杀毒软件、安全卫士

2.Python运行环境

(1)2.7.6以上任何一个稳定的2.7版本都可以,

(2)PIL(Python Image Library)用于恶意文件运行过程中对桌面进行截屏,安装版本需与Python库版本一致。

3.win7环境配置

(1)关闭Windows自动更新;

(2)关闭Windwos防火墙;

(3)关闭用户账户控制。

4.网络环境配置

(1)使用Host-Only(仅主机模式)上网方式;

注: virtualbox需手动新建Host-Only模式,如下图:

(2)将win7网络地址配置到Host-Only模式网段;

(3)保证Host和Guest能正常通信,可使用ping命令测试 ;

(4)现在许多恶意文件都需要网络环境才能运行,所以还需将win7配置到能访问外部网络环境。Cuckoo sandbox使用iptables配置转发规则,假如:eth0为ubuntu连接外部网络的网卡,vboxnet0虚拟机选择Host-Only的虚拟网卡(virtualbox为vboxnet0)。

5.win7伪装环境

(1)安装基础的运行库,如java、python、.net等;

(2)安装2005-2015的vc运行库;

(3)安装MS-Office套件(office 2007/office 2010)、PDF阅读器等文档软件 (Adobe Reader);

(4)安装生活常用的聊天(QQ/微信)、听歌(QQ音乐/酷狗/酷我)软件。

6.安装agent.py

(1)将agent目录下的agent.py拷贝至win7文件系统,位置无严格要求;

(2)将agent.py修改成agent.pyw,并添加至开机启动项,agent.pyw为无界面模式;

(3)运行agent.pyw。

7.保存win7快照

(1)在agent.pyw运行的状态下,保存win7快照,记录win7的ip地址和快照名称;

(2)确认agent.pyw:在进程列表查看进程名为pythonw的进程。

五、样本分析

1.启动Cuckoo服务

$cuckoo

2.开启web服务

另开一个指令窗口运行

$cuckoo web runserver

打开浏览器,输入网址127.0.0.1:8000进入web操作界面。

网页服务器运行起来后界面如下:

上传测试样本,操作如下图:

跳转到样本分析设置界面,左侧是分析参数设置,可以默认或修改参数;中间是要测试的样本,需要选中;然后点击右侧“Analyze”按钮,开始分析。

提交测试后,有pending、running、completed、reported等多种状态。运行完,会显示reported状态。

点击样本,进入测试报告。红框1,显示可测试后样本的行为,有数字的部分表示样本有对应的行为;红框2,展示样本的基本信息;红框3,样本运行的基本信息;红框4,样本运行时的屏幕截图。

左侧选择“Dropped Files”,显示如下图。右侧红框2,显示样本释放的文件。

左侧选择“Process Memory”,显示如下图。右侧红框2,显示样本中所包含的URL链接。

左侧选择“Behavioral Analysis”,显示如下图。红框2展示了具体的行为,可通过红框3中的搜索功能或红框4进行筛选。

恶意样本一般包含创建文件和修改注册表的行为。先试着查找创建文件的行为。在搜索框输入“NtCreateFile”,搜索,如下图。图中有两个明显的可疑行为,红框1中对自身样本进行复制,红框2中,释放了一个beep.sys的驱动。

尝试搜索修改注册表信息。在搜索框输入“RegSetValueExA”,搜索,如下图。红框中,可以看到服务的键值指向了刚才释放的exe程序路径。

六、Cuckoo行为监控工作原理

Cuckoo sandbox在样本启动的时候,注入了相关的监控代码。

在process.py文件中,通过Process调用,调用inject-x86.exe或inject-x64.exe完成注入。

这两个工具是inject.c编译的针对32位和64位系统的不同版本。

下面看一下inject.c的具体代码:

在main中给出了可配置参数,需要带参数运行。Pid是必须要包含的参数,其他参数视需要进行配置。

Inj_mode由以下三个参数决定,然后执行相应的函数。

加载完参数完成准备工作,开始DLL注入。

函数write_data,通过VirtualAllocEx和WriteProcessMemory在远程进程中申请空间的方式写入参数,并返回申请的地址。

APC注入,通过write_data向远程进程中写入DLL路径、Loadlibrary()执行函数指针、执行加载函数的指针,然后利用QueueUserAPC()在软中断时向线程的APC队列插入Loadlibrary()执行函数指针,达到注入DLL的目的。当线程再次被唤醒时,此线程会首先执行APC队列中被注册的函数。

注入成功。

另一种CRT注入:

同样通过write_data向远程进程中写入DLL路径、Loadlibrary()执行函数指针、执行加载函数的指针,之后在create_thread_and_wait中调用CreateRemoteThrea。当目标进程中执行load_library_woker(已事先写入进程空间)加载DLL,之后调用free_data清理现场,释放空间。

注入的DLL在加载时执行初始化和Hook动作。

在monitor_init中

在monitor_hook中,通过sig_hooks获取到需要hook的函数信息,调用hook函数进行hook。

Hook完之后,样本调用系统函数时,会先跳到事先准备好的API中,记录好API的相关信息后,再正常调用原API,保证样本正常运行。

相关推荐

[西门子PLC] S7-1200PLC中所支持的数据类型详解

数据类型呢,就是讲数据的长度和属性的,也就是指定数据元素的大小,还有怎么去解释数据。每个指令起码得支持一种数据类型,有的指令还能支持好多种数据类型。所以呀,指令上用的操作数的数据类型一定得跟指令支持的...

C语言wctomb函数详解:宽字符到多字节字符的「翻译官」

核心定位wctomb是C语言中用于将宽字符转换为多字节字符的「翻译官」,它能将单个宽字符(wchar_t)转换为多字节字符(如UTF-8编码的中文)。就像一位翻译官,它能将一种语言(宽字符)翻译成...

Python 中数组和列表之间的区别(python列表和c语言数组区别)

在这篇文章中,您将了解Python中数组和列表之间的区别。Python列表Python列表是一种内置数据结构,是包含在方括号[]的元素集合。它们具有许多独特的属性,使它们与其他数据结构不同。有...

Linux内核设计与实现—进程管理(linux内核原理与实现)

进程进程就是处于执行期的程序(目标码存放在某种存储介质上)。进并不仅仅局限于一段可执行程序代码(Unix称其为代码段,textsection)。通常进程还要包含其他资源,像打开的文件,挂起的信号,...

实际工程项目中西门子S7-1500如何批量读取和写入机器人信号

方法一:DPRD_DAT:读取DP标准从站的一致性数据该指令适用于中央模块以及DP标准从站和PROFINETIO设备。可以使用以下数据类型:BOOL,BYTE,CHAR,WCHAR,WO...

C语言mbstowcs函数详解:多字节字符串到宽字符的「翻译官」

核心定位mbstowcs是C语言中用于将多字节字符串转换为宽字符字符串的「翻译官」,它能将多字节字符(如UTF-8编码的中文)转换为宽字符(wchar_t)。就像一位翻译官,它能将一种语言(多字节...

C语言mbtowc函数详解:多字节字符到宽字符的「翻译官」

核心定位mbtowc是C语言中用于将多字节字符转换为宽字符的「翻译官」,它能将单个多字节字符(如UTF-8编码的中文)转换为宽字符(wchar_t)。就像一位翻译官,它能将一种语言(多字节字符)翻...

西门子PLC系列连载|No.5 初识西门子1200PLC数据类型

导语:在之前的文章中我们介绍了PLC的相关基础知识和一些小的程序段,也讲解过博途软件使用的一些基本方法。那么我们在本章内容将为大家讲解关于西门子1200系列PLC的常用数据类型,以及这些数据类型的区别...

计算机中常见的字符编码及存储方式

常见的字符编码ASCII、GBK、GB2312、Unicode等等常识用多个字节来代表的字符称之为宽字符,而Unicode码只是宽字符编码的一种实现,宽字符并不一定是Unicodechar窄字...

西门子SCL高级语言之数据转换介绍

(整数转浮点数INT_TO_REAL)我们在做项目中经常用到各种类型的数据,这就需要转换(CONVERT)指令来转换,由于博途数据转换指令只有它一个,那我们就只记住它就可以了,注意设置需要转换...

SCL编程语言学习(2)-启保停电路(起保停电路plc程序)

“启保停”电路是学习过程中最常见的一个案例,也是最简单易懂的控制程序。如果采用梯形图编程,如图1所示。在实际工程的电路中,很少有这么简单的起保停电路,一般都需要考虑急停、限位、过载保护等多项因素,启停...

GCC的常用编译选项(gcc编译工具)

GCC(GNUCompilerCollection,GNU编译器套件)是由GNU开发的编程语言译器。对于C语言源代码文件,使用GCC生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相...

「C语言」初始化数组,C语言中初始化特定列表和元素

如果没有显式地初始化数组变量,那么就会采用一般规则:如果数组具有动态存储周期,那么数组元素的值就是没有定义的。否则,所有的元素都会被默认地初始化为0(如果数组元素是指针,则会被初始化为NULL)。编...

C++11新特性(c++11新特性 lambda)

1、智能指针2、Lambda表达式3、线程库4、原子操作5、统一的列表初始化{}6、右值引用和移动构造7、引入nullptr指针8、类型推导auto和decltype智能指针:智能指针是一个...

西门子 S7-1200 PLC 数据类型详解

关注“PLC发烧友”,一起涨知识!回复:西门子全套,领西门子系列PLC电子资料包!数据类型用来描述数据的长度和属性,即用于指定数据元素的大小及如何解释数据,每个指令至少支持一个数据类型,而部分指令支持...

取消回复欢迎 发表评论: