扫码领资料
获网安教程
文章来源: https://forum.butian.net/share/2585
文章作者:Johnson666
如有侵权请您联系我们,我们会进行删除并致歉
前言
基础信息
Process Explorer
https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
Process – 进程及其图标的文件名
CPU – 进程的CPU资源百分比
Private Bytes – 分配给进程的内存量
Working Set – 分配给该进程的RAM量
PID – 进程标识符
Description – 进程的描述
Company Name – 进程的公司名称
Image – 有关进程的信息,包括其版本、构建时间、路径和更多
Performance – 有关进程绩效的信息
Performance Graph – 基于图形的有关设备性能的信息过程
Disk and Network – 磁盘和网络输入/输出(I/O)的计数
CPU Graph – 基于图形的CPU使用数据、专用GPU内存、,系统GPU内存等
Threads – 进程的线程
TCP/IP – 输入和输出网络连接
Security – 进程的权限
Environment – 环境变量
Job – 分配给作业对象的进程列表
Strings – 作为进程一部分的字符串(图像级和内存级)
Processor Monitor
https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
Event – 有关事件的信息,如事件的日期、创建事件的操作结果、可执行的路径等
Process – 事件中有关流程的信息
Stack – 进程的堆栈
AVGUI.exe
和AVGSvc.exe
AVGSvc.exe
进程是AVG服务,也参与扫描文件中的病毒AVGUI.exe
进程,即AVG的GUI流程,开始执行.exe
的进程Autoruns
1、HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun
2、HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce
3、HKLMSystemCurrentControlSetServices
4、HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerRun
5、%AppData%MicrosoftWindowsStart MenuProgramsStartup
Autoruns:https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns
Regshot
https://nchc.dl.sourceforge.net/project/regshot/regshot/1.9.0/Regshot-1.9.0.7z
Third-party engines
绕过防病毒软件
在防病毒软件中查找漏洞
使用检测旁路方法
Windows操作系统
执行的安全机制
ASLR–地址空间布局随机化
DEP–数据执行预防
SEHOP – 结构化异常处理覆盖保护
protection rings
Windows访问控制列表
防病毒软件中的权限问题
静态签名文件的权限不足
不当特权
未引用的服务路径
DLL劫持
LoadLibrary()
功能,因为有可能将原始 DLL 替换为另一个同名 DLL,并以此 导致程序运行我们的 DLL 而不是最初预期的 DLL。缓冲区溢出
两种类型的缓冲溢出漏洞可以被利用:
定位缓冲溢出漏洞
手动方法:手动搜索基于用户的输入(如程序参数)和确定用户输入背后的机制及其使用的功能
可以使用拆解器、分解器和调试器等工具
自动化方法涉及使用称为"模糊器"的工具,这些工具可自动完成查找用户输入的任务,并有可能在代码背后的机制和功能中发现漏洞。此活动称为"模糊"或"模糊测试"
基于堆栈的缓冲区溢出
IDA Pro
和x64dbg
进行测试1. 使程序崩溃以了解漏洞发生的位置。
2. 在我们到达 EIP/RIP(指示指头)寄存器的开头地址之前,请查找溢出的确切字节数。
3. 覆盖 EIP/RIP 寄存器,以指向注入壳码的预期地址。
4. 将外壳代码注入可控的预期 地址。
5.可选地,注射NOP(无操作)雪橇,如果ned。
6.跳转到注入的有效载荷的地址执行它。
缓冲器溢出–防病毒旁路方法
恶意软件检测在线网站
要求
使用最新版本的防病毒软件。
将签名数据库更新到最新的版本,以确保您拥有最新的静态签名。
在进行研究时关闭互联网连接,因为我们不希望防病毒软件与外部服务器进行接触,并签署我们已发现的旁路技术。
使用最新版本的操作系统
进程注入
进程注入(Process injection)
可以将恶意代码注入操作系统内的内存地址空间中,从而绕过动态防病毒引擎检测进程地址空间
前言
本质
shellcode
,一个DLL,甚至一个完整的可执行文件(EXE)实操
1.选择要注入的进程
2.接收目标进程的句柄以访问其进程地址空间。
3.分配一个虚拟内存地址空间,其中将注入和执行代码,并在需要时分配执行标志。
4.将代码注入目标过程的分配内存地址空间。
5.最后, 执行注入的代码。
Windows API
前言
简单代码
#include<stdio.h>
int main(){
printf("HelloWorld");
}
stdio.h
#include
指令完成printf
的功能,进行打印输出和本机API的区别
DLL注入
调用如下
• OpenProcess:使用该函数并提供目标进程ID作为其参数之一,注入器进程 接收到远程进程的句柄。
• VirtualAllocex:使用这个函数,注入器进程将分配一个内存缓冲区,该缓 冲区最终将包含目标进程中加载的DLL的路径。
• WriteProcessMemory:该函数执行实际的注入,将恶意负载插入到目标进程 中。
• createremotethread:这个函数在远程进程中创建一个线程,最后执行将加载 DLL的LoadLibrary()函数。
• loadLibrary/getProcAddress:这些函数返回加载到进程中的DLL的地址。考 虑到Kernel32.dll映射到所有Windows进程的相同地址,可以使用这些函数 获取要在远程进程中加载的API的地址。
简单了解
PE文件
ncpa.cpl
就是一个例子,它是Windows上可用的网络接口的配置文件。PE文件格式结构
PE头
• 代码部分
这部分将包括中央处理器(CPU)最终将执行的程序(编译代码)的机器代码
• 导入部分
本部分将包括从诸如kernel32.dll和ntdll.dll等DLL导入的所需函数
• 数据部分-此部分将包括程序将使用的变量和函数参数
执行
RUNDLL32.EXE <dllname>,<entrypoint> <argument>
LoadLibrary()/LoadLibraryEx()
函数DLL注入的优势
DLL文件通常对普通用户隐藏。
• 当一个DLL加载到另一个进程中时,该DLL有权访问加载该DLL的进 程的进程内存空间。
• 在DLL上执行自动动态分析比在EXE文件上执行要困难得多。
• 当将DLL加载到进程中时,在系统进程中查找DLL将变得更加困难,从而使防病毒检测和事件响应变得更加困难。
Process hollowing
• createProcess:该函数使用dwCreationFlags参数创建处于挂起状态的合 法操作系统进程(如Notepad.exe)。抗病毒 旁路 使用 过程 注射 73
• ZWUNMAPViewOfSection/NTUNMAPViewOfSection:这些本机API函数对 进程特定节的整个内存空间执行取消映射。在此阶段,合法系统进程有一个 中空部分,允许恶意进程将其恶意内容写入此中空部分。
• VirtualAllocex:在编写恶意内容之前,该函数允许我们分配新的内存空间 。
• WriteProcessMemory:正如我们之前在经典DLL注入中看到的,这个 函数实际上将恶意内容写入进程内存。
• SetThreadContext和resUmethRead:这些函数将上下文返回给线程,并将进程 返回到其运行状态,这意味着进程将开始执行。
Process doppelgänging
• createFileTransacted:此函数基于Microsoft的NTFS-TxF特性创建或打开文件、文件流或目录
这用于打开合法进程,如Notepad.exe。
• WriteFile:此函数将数据写入指定的注入文件
• ntCreateSection:此函数创建一个新节,并将恶意文件加载到新创建的目标 进程中
• RollBackTransaction:该函数最终防止修改后的可执行文件(如Notepad.exe )保存在磁盘上
• NtCreateProcessEXEX、RtlCreateProcessParametersEx、VirtualAllocEx、Wr iteProcessMemory、NtCreateThreadEx、NtresUmethRead:所有这些函数都用于启动和运行更改后的进程,使其能够执行预期的恶意活动
对抗注入:
1. 在静态代码级别检测注入-- 甚至在执行文件之前,就在编译的代码中搜索特定的函数组合。
2. 在运行时检测注入-- 监视操作系统中的进程,以识别某个特定进程何时试图注入到另一个进程中 (这种检测将在目标受害进程的初始句柄操作时发出警报)。
Memory bombing
malloc()
malloc()
是C语言的一个函数,在某种程度上,它在大多数主流操作系统 中使用,比如Linux、macOS、Windowsvoid *malloc(size)
free()
函数从进程堆中释放分配的内存free(*ptr);
free()
函数的*ptr
参数是指向以前用malloc()分配的内 存的指针。calloc()
calloc()
是另一个可用于在进程堆中分配内存的函数calloc()
初始化并用零位填充所有请求的已分配内存POC
int main()
{
char *memory_bombing = NULL;
memory_bombing = (char *) calloc(200000000, sizeof(char));
if(memory_bombing != NULL)
{
free(memory_bombing);
payload();
}
return 0;
}
简单分析
1.定义一个main()函数
2. 声明一个名为memory_bombing的指针变量,类型为char
3. 用分配的calloc()内存的返回值的指针初始化memory_bombing变量
(此时,反病毒正在努力扫描文件,并没收)
4. 检查memory_bombing的返回值是否是分配内存的有效指针
5. 最后,使用free()函数释放已分配的内存,并通过调用自定义的payload()函数执行预期的恶意shellcode
原理
总结
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):免杀初探(一)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论