Dump Lsass内存转储新旧方法
之前看到一篇关于Lsass内存dump的文章,学习记录一下。
lsass.exe(Local Security Authority Subsystem Service)进程空间中,存有着机器的域、本地用户名和密码等重要信息。如果获取本地高权限,用户便可以访问 LSASS 进程内存,从而可以导出内部数据(password),用于横向移动和权限提升。
Windows环境中,一款知名的开源工具Mimikatz(开发者为Benjamin Delpy)可以从 LSASS 内存数据中提取用户名和密码。但是直接运行相应工具,可能会被本地AV产品检测到,因此 dump LSASS 进程内存后进行回传变得原来越常见。
Dump LSASS 的已知方法
1. 微软签名文件
ProcDump
ProcDump是微软签名的合法二进制文件,被提供用于转储进程内存。
任务管理器
打开任务管理器,选中目标进程,右键菜单中点击“创建转储文件”,文件保存为%temp%\<进程名>.dmp。
ProcExp
和ProcDump同属于Windows提供的合法工具,该程序可以认为是任务管理器的升级版,同样是右键选中目标进程后创建转储文件,包括 Minidump 和 Full Dump 两种。如果是要窃取 LSASS 中的用户登录凭据,应选择全部DUMP。
SQLDumper
SQLDumper.exe包含在Microsoft SQL和Office中,可生成完整转储文件。
Comsvcs.dll
每个Windows系统中都可以找到该文件,可以使用Rundll32执行其导出函数MiniDump实现进程的完全转储。
CreateDump.exe
.NET5中提供的工具。
2. 其他工具/方法
- PowerSploit的模块之一Out-MiniDump
- Process Hacker
- AvDump.exe(Avast反病毒产品组件)
3. 全内存转储(指的是整个RAM内存空间进行转储,耗时长且占磁盘空间大)
- WinPmem
- RowCopy(从 hiberfil.sys 导出凭据)
- 从 VMEM/VMSN 中获取凭据,这二者是虚拟机内存存储文件
4. 自定义转储
- MiniDumpWriteDump方法,导出自dbghelp.dll,该API调用 NtReadVirtualMemory 读取目标进程内存数据
- MiniDumpWriteDump + PssCaptureSnapshot,后者可用于获取目标进程的内存快照,之后调用MiniDumpWriteDump将从获取的快照内存中读取数据,而不是直接从目标进程中获取,更容易躲避AV/EDR检测。
一种DUMP LSASS的新方式
该技术和Werfault.exe进程有关,在某个运行中的进程崩溃时,werfault.exe将会Dump崩溃进程的内存,从这一点看,可以利用该行为进行目标进程内存的Dump。
这种方法依赖于Win7开始引入的一种被称为“静默进程退出”的机制,该机制提供了在两种情况下可以触发对被监控进行进行特殊动作的能力:
(1)被监控进程调用 ExitProcess() 终止自身;
(2)其他进程调用 TerminateProcess() 结束被监控进程。
经过配置,在触发"静默进程退出"机制时,可被支持的几个动作包括:
- 启动一个监控进程
- 显示一个弹窗
- 创建一个Dump文件
这里主要讨论第3种方式,即创建DUMP文件。
要对一个进程设置”静默退出“监控,需要对几个注册表项进行预置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<被监控进程名>\ 注册表项下的GlobalFlag值:0x200(FLG_MONITOR_SILENT_PROCESS_EXIT);
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\<被监控进程名>\ 注册表项下的3个键值:
1)ReportingMode(REG_DWORD),该值可设置为以下几个,具有不同功能:
a)LAUNCH_MONITORPROCESS (0x1) – 启动监控进程;
b)LOCAL_DUMP (0x2) – 为导致被监控进程终止的进程和被监控进程本身 二者 创建DUMP文件;
c)NOTIFICATION (0x4) – 显示弹窗。2)LocalDumpFolder (REG_SZ) – DUMP文件被存放的目录,默认为
%TEMP%\\Silent Process Exit;3)DumpType – 根据 MINIDUMP_TYPE 枚举值指定DUMP文件的类型 (Micro, Mini, Heap 或 Custom) ,完全转储目标进程内存的值为
MiniDumpWithFullMemory(0x2)。
那么现在只需要终止目标进程即可获得相应文件的DUMP文件,但是我们的目的是为了获取LSASS进程中的管理员登录凭据,而kill掉LSASS意味着系统将重启。不仅增大了被发现的风险,还可能导致程序无法再次运行。
那么是否具有可以触发”Silent Process Exit“机制但又不实际终止被监控进程的方法呢?还是有的。根据作者所述,它参考了博客 Hexacorn’s blog(该博客发布过大量Windows平台利用技术的研究文章) 。从中可知,当进程终止时,它将从ntdll.dll调用 RtlReportSilentProcessExit API,该API将与Windows错误报告服务(WerSvcGroup下的WerSvc )通信,以告知当前进程正在执行静默退出。然后,WER服务将启动WerFault.exe转储当前进程。值得注意的是,调用此API不会导致进程退出。这可以让我们在LSASS进程上执行DUMP动作而不导致LSASS的终止。
NTSTATUS(NTAPI* RtlReportSilentProcessExit) (
_In_ HANDLE ProcessHandle,
_In_ NTSTATUS ExitStatus
);
作者使用两种方式,一种是直接调用RtlReportSilentProcessExit,一种是远程在LSASS中创建线程执行RtlReportSilentProcessExit。这里我只尝试直接调用RtlReportSilentProcessExit,注入其他进程动作太多了(懒)。

通过Procmon观察一下,可知进程顺序是 lsassdump.exe->svchost.exe (WerSvcGroup)->WerFault.exe,由运行级别为high的Wefault.exe进行dump文件创建。


检测方法就看攻击过程分析一一识别。
关于另一个使用Silent Process Exit进行持久化驻留的手法,个人感觉纯粹为了持久化的话感觉没有那么实用,倒不如用于恶意进程被删除时进行保护,比如重启或是延迟重启、重命名移动重启等等,不过如果对于专业人员没啥用。
参考
https://www.deepinstinct.com/2021/01/24/lsass-memory-dumps-are-stealthier-than-ever-before/
https://www.deepinstinct.com/2021/02/16/lsass-memory-dumps-are-stealthier-than-ever-before-part-2/
Dump Lsass内存转储新旧方法的更多相关文章
- Java内存泄漏分析系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用
原文地址:http://www.javatang.com JVM Heap Dump(堆转储文件)的生成 正如Thread Dump文件记录了当时JVM中线程运行的情况一样,Heap Dump记录了J ...
- 新的方法 (New Approach)¶
第一章:简介 - ANSI Common Lisp 中文版 新的方法 (New Approach)¶ 本书的目标之一是不仅是教授 Lisp 语言,而是教授一种新的编程方法,这种方法因为有了 Lisp ...
- C++中内存泄漏的检测方法介绍
C++中内存泄漏的检测方法介绍 首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复. 最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck, ...
- 在x64计算机上捕获32位进程的内存转储
这是一个我经常遇到的问题,我们经常会遇到这样的情况:我们必须重新捕获内存转储,因为内存转储是以“错误”的方式捕获的.简而言之:如果在64位计算机上执行32位进程,则需要使用允许创建32位转储的工具捕获 ...
- Bypass Windows Defender Dump Lsass(手法拙劣)
0x00.前言 Windows Defender是一款内置在Windows操作系统的杀毒软件程序,本文旨在记录实战环境中,服务器存在Windows Defender情况下转储凭证的渗透手法,技术简单粗 ...
- UWP游戏防内存修改器的方法
最近我一直在编写适用于Windows 10商店的游戏.这款游戏比较怕玩家用修改器改金钱,因为这种修改会导致某些内购失效并且损害公平性.于是我把自己见过的三种反修改器的方法给网友们介绍一下. 首先说明一 ...
- javascript插入before(),after()新DOM方法
随着web的技术突飞猛进的发展.HTML5 ES6等新技术的发展,与此同时DOM等标准也在悄悄的进步,各大浏览器也在悄悄的发展适配新的属性和方法,今天我们来看看Javascript新的DOM的方法 二 ...
- 使用WinDBG调试查看C#内存转储文件
有时候我们想查看一个正在运行的程序内存中的数据,可以在任务管理器将内存状态保存为转储文件,并使用WinDBG验证,这里我们来试试: 0.安装WinDBG 1.首先写个代码用来测试 一个class pu ...
- 如何 dump jvm 内存及线程栈
1. dump jvm 内存 命令格式: jmap -dump:format=b,file=dump_file_name pid举例:dump pid 为 3239 的 java 进程的内存到 aa. ...
随机推荐
- POJ 2387 Til the Cows Come Home (最短路径 模版题 三种解法)
原题链接:Til the Cows Come Home 题目大意:有 个点,给出从 点到 点的距离并且 和 是互相可以抵达的,问从 到 的最短距离. 题目分析:这是一道典型的最短路径模版 ...
- 在asp.net webfrom 中完成用户自定义导出
asp.net原生控件实现自定义列导出功能 自定义列实现 最近负责开发公司内部使用的人事信息化系统时,有一个需求是这样的,需要在页面中可以用户每次导出Excel时自定义需要导出哪些列,经过半天的琢磨和 ...
- Pytorch之Spatial-Shift-Operation的5种实现策略
Pytorch之Spatial-Shift-Operation的5种实现策略 本文已授权极市平台, 并首发于极市平台公众号. 未经允许不得二次转载. 原始文档(可能会进一步更新): https://w ...
- leetcode 233. 数字 1 的个数
问题描述 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . 问 ...
- UML 有关用例图知识及用例关系
原文链接:https://blog.csdn.net/mj_ww/article/details/53020080 1. 如何识别用例 任何用例都不能在缺少参与者的情况下独立存在.同样,任何参与者也必 ...
- yum更新,docker安装
备份 cd /etc/yum.repos.d/ mkdir repo_bak mv *.repo repo_bak/ 安装wget(若已安装了wget,则跳过此步 wget -V yum instal ...
- Vue3源码分析之Diff算法
Diff 算法源码(结合源码写的简易版本) 备注:文章后面有详细解析,先简单浏览一遍整体代码,更容易阅读 // Vue3 中的 diff 算法 // 模拟节点 const { oldVirtualDo ...
- Hbase 项目
需求分析 1) 微博内容的浏览,数据库表设计 2) 用户社交体现:关注用户,取关用户 3) 拉取关注的人的微博内容 表结构 代码实现 1) 创建命名空间以及表名的定义 2) 创建微博内容表 3) 创 ...
- plsql 触发器介绍 语句级别触发器、行级别触发器。
/* 分类: 1.DDL触发器 执行create,alter,drop操作时,会激活的触发器 2.DML触发器 执行增.删除.修改时,激活的触发器 3.系统事件触发器 执行特定的系统事件时(启动.加载 ...
- 揭秘CPU制造全过程
转载请注明来源:https://www.cnblogs.com/hookjc/ PCPOP 众所周知,CPU是计算机的心脏,包括运算部件和控制部件,是完成各种运算和控制的核心,也是决定计算机性能的最重 ...