Dump Lsass内存转储新旧方法

摘要:
同样,右键单击目标进程并创建转储文件。您可以使用Rundll32执行其导出函数MiniDump,以实现进程的完整转储。2.Out MiniDumpProcessHackerAvDump.exe(Avast防病毒产品组件)是PowerSploit的模块之一,也是其他工具/方法之一。3.全内存转储(指整个RAM内存空间的转储。

  之前看到一篇关于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文件。

  要对一个进程设置”静默退出“监控,需要对几个注册表项进行预置:

  1. HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options<被监控进程名> 注册表项下的GlobalFlag值:0x200(FLG_MONITOR_SILENT_PROCESS_EXIT);

  2. HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSilentProcessExit<被监控进程名> 注册表项下的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,注入其他进程动作太多了(懒)。
Dump Lsass内存转储新旧方法第1张

  通过Procmon观察一下,可知进程顺序是 lsassdump.exe->svchost.exe (WerSvcGroup)->WerFault.exe,由运行级别为high的Wefault.exe进行dump文件创建。
Dump Lsass内存转储新旧方法第2张
Dump Lsass内存转储新旧方法第3张

  CODE

  检测方法就看攻击过程分析一一识别。

  关于另一个使用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/

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/registry-entries-for-silent-process-exit

免责声明:文章转载自《Dump Lsass内存转储新旧方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇aspose授权亲测可用配套代码DPM(Deformable Parts Model)--原理(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubuntu 14.04 安装Visual studio Code

上一篇简单介绍了Ubuntu 14.04上如何创建、运行 hello world 程序。 这篇介绍Ubuntu 14.04如何安装Visual studio Code。 网上推荐的有通过Ubuntu Make来进行安装,但是我一直没有成功,所以这里通过下载Zip文件,解压方式安装。 1,下载地址:https://code.visualstudio.com/...

Sqli-labs 学前准备 搭建SQL注入平台

sqli-labs是一款学习sql注入的开源平台,共有75种不同类型的注入。 搭建步骤: 1.在Windows系统中安装WAMP 下载地址:https://pan.baidu.com/s/1HY0hFnj6ywKjwHhB1vlOfg 解压密码:ms08067.com 双击安装即可 2.从github上(https://github.com/Audi-...

git 和 repo 常用命令

一、git 1、回退到某个节点   git reset --hard f39043d1c0cd1cda45a4569556758d0c00bf329a    2、查看提交记录   git log   git log -p  查看更改内容   git show 节点号, 查看某个节点的更改内容,如git show f39043d1c0cd1cda45a456...

如何打开mo文件并修改 PoEdit

  mo文件是被编译了的文件,一般在汉化的时候会用到。 比如我想修改phpmyadmin 的界面信息,就需要修改phpmyadmin.mo的文件内容。 可是用编辑器editplus或者Sublime 2打开它,都是乱码。 原来,这个文件不能直接打开。 搜索了一下,网上的信息。 发现通过poedit软件,可以先将mo转化为po格式的文件,然后poedit就...

C# 之 FileSystemWatcher事件多次触发的解决方法

1、问题描述   程序里需要监视某个目录下的文件变化情况: 一旦目录中出现新文件或者旧的文件被覆盖,程序需要读取文件内容并进行处理。于是使用了下面的代码: public void Initial() { System.IO.FileSystemWatcher fsw = new System.IO.FileSystemWatcher();...

使用JCONSOLE远程监控JVM

 启动JMS服务 JConsole是从Java 5中开始引入的一个用于对JVM性能和资源消耗进行监控的图形化工具。JConsole可以连接本地的Java程序,也可以连接远程的Java程序。由于是GUI的方式使用,所以就不细说那些基本的使用方法了,这里只是记录一下试用过程中遇到的几个小问题及其解决方案。 1. 要实现让JConsole可以远程连接到某个Jav...