01
阅读须知
此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。
02
基本介绍
本文内容部分节选自小报童《.NET 通过隐藏任务计划实现权限持久化》,完整的文章内容请加入小报童后订阅查看。现在限时只需59元,永久买断!目前已有240+位朋友抢先预定,我们会长期更新,对.NET内网安全的朋友们请尽快订阅该报刊!
03
原理分析
在内网渗透攻击中,攻击者的目标不仅是获取目标主机的控制权,还包括绕过或禁用主机上的安全防护措施。因此,了解并收集目标主机的安全防护情况至关重要。攻击者通常会采用多种方法来识别系统中部署的安全软件,如防病毒程序、EDR工具、反病毒驱动等。
可以使用 WMI 查询类 ManagementObjectSearcher 获取所有运行的进程,从每个进程中提取进程名称、可执行文件的绝对路径、文件执行的命令行参数、进程的ID和父进程的ID等元数据,便于后续与关键字列表进行匹配,具体代码如下所示
ManagementObjectCollection processList = new ManagementObjectSearcher("Select * From Win32_Process").Get();
foreach (ManagementBaseObject process in processList)
{
summary += ProcessChecker.CheckProcess(process);
}
object processName = process["Name"];
object processPath = process["ExecutablePath"];
object processDescription = process["Description"];
object processCaption = process["Caption"];
object processCmdLine = process["CommandLine"];
object processPID = process["ProcessId"];
object processParent = process["ParentProcessId"];
string metadata = "";
string allattribs = string.Concat(new string[]
{
string.Format("{0} - ", processName),
string.Format("{0} - ", processPath),
string.Format("{0} - ", processDescription),
string.Format("{0} - ", processCaption),
string.Format("{0}", processCmdLine)
});
我们声明一个edrlist的字符串数组 变量,存储了大量常见杀毒软件和 EDR 工具的名称,该列表包含市面上主流安全防护软件的名称,涵盖杀毒软件和 EDR 工具名,当匹配上到杀软进程时,便会记录下来。比如检测到 MsMpEng.exe 进程,该进程是 Windows 系统中重要的防护进程,表明目标系统运行了 Windows Defender 如下图所示。
可以通过扫描当前进程加载的所有模块,判断当前进程是否加载了与安全防护相关的模块(如 EDR 工具的 DLL 文件),从而推断目标系统可能部署了哪些防护软件,具体代码如下所示。
上述代码中,CheckModule 方法负责对每个模块进行详细分析,其功能包括提取模块信息、进行关键字匹配以及生成结果。比如,检测到 amsi.dll 的加载,表明目标系统启用了反恶意软件扫描接口,如下图所示。Process myproc = Process.GetCurrentProcess();
string summary = "";
foreach (object obj in myproc.Modules)
{
ProcessModule module = (ProcessModule)obj;
summary += ProcessChecker.CheckModule(module);
}
大致的思路是通过枚举系统中加载的所有设备驱动程序,提取每个驱动程序的文件名及相关元数据,并与EDR名称的列表进行匹配,从而识别潜在的安全软件或特定目标驱动程序,具体代码如下所示。
比如,检测到一个与 Microsoft Malware Protection相关的驱动程序 MpKslDrv.sys,如下图所示。private static string IterateOverDrivers(uint arraySize, UIntPtr[] ddAddresses)
{
string summary = "";
int i = 0;
while ((long)i < (long)((ulong)arraySize))
{
string driverFileName = DriverChecker.GetDriverFileName(ddAddresses[i]);
string driverBaseName = DriverChecker.GetDriverBaseName(ddAddresses[i]);
summary += DriverChecker.CheckDriver(driverFileName, driverBaseName);
i++;
}
return summary;
}
综上,通过三种方法检测系统中的可疑进程和驱动程序。想要了解完整或者更多的内网安全方向的文章,可以移步订阅小报童《.NET 内网实战攻防》电子报刊。
04
欢迎加入.NET 电子报刊
我们的小报童电子报刊【.NET内网安全攻防】也开始运营,引入小报童也是为了弥补知识星球对于轻量级阅读支持的不足,为用户读者提供更佳的阅读体验。如果您对阅读体验的需求比较高,那么可以订阅这个专栏。
本次电子报刊《.NET 内网安全攻防》专栏,内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。
1) .NET 安全防御绕过
2) .NET 本地权限提升
3) .NET 内网信息收集
4) .NET 内网代理通道
5) .NET 内网横向移动
6) .NET 目标权限维持
7) .NET 数据传输外发
8) .NET 目标痕迹清理
原价899,现在限时只需59元,永久买断!目前已有240+位朋友抢先预定,我们会长期更新,初步计划保持每周更新1-2篇新内容,对.NET内网安全的朋友们请尽快订阅该报刊!
每增加五十人涨价10元,抓紧订阅,超值!订阅后请关注公众号:dotNet安全矩阵,发送订单截图和您的微信号,邀请您加入专属交流群。感兴趣的朋友,可以点击链接:https://xiaobot.net/p/dotNetAttack,或者扫描下方海报微信二维码加入即可,订阅后小报童定时会将最新内容通过微信推送给您。