渗透技巧——利用虚拟磁盘实现的 无文件

发布于 2024-09-02 20:07:12 字数 6754 浏览 7 评论 0

0x00 前言

在渗透测试中,常常会使用代码注入、内存执行、注册表、powershell 或是 wmi 等无文件的技术,增加被检测和分析的难度。

站在渗透的角度,某些条件下并不能做到整个过程的“无文件”,需要向硬盘写入文件,这就很有可能被取证和分析。

最近我看到了一篇文章介绍了利用虚拟磁盘的方法,正好能解决这个问题。

而站在防御的角度,针对这种方法该如何检测和拦截呢?

参考的文章地址: https://diablohorn.com/2018/08/06/creating-a-ram-disk-through-meterpreter/

本文将要对其进行测试,介绍实现细节,解决原文中未解决的问题,结合利用思路,分析检测和拦截的方法。

0x01 简介

本文将要介绍以下内容:

  • 实现原理
  • 方法复现
  • 删除残留的硬盘图标
  • 支持对文件夹的操作
  • 取证分析
  • 检测拦截

0x02 实现原理

Windows 系统硬盘上对文件的删除操作,只修改了文件的 MFT,如果文件内容尚未被覆盖,就能恢复文件

详细的删除和恢复介绍可参考之前的文章 《渗透技巧——Windows 系统的文件恢复与删除》

如果使用虚拟磁盘,将内存映射到本地,创建内存磁盘,使用上同真正的硬盘没有区别,并且有如下两个优点:

  1. 不会对硬盘进行写操作,也就不存在硬盘文件的恢复
  2. 系统重启后,内存磁盘中的文件自动删除

0x03 方法复现

对文章的实现方法进行复现,地址: https://diablohorn.com/2018/08/06/creating-a-ram-disk-through-meterpreter/

ImDisk

开源工具,能够创建虚拟磁盘,介绍和下载地址: http://www.ltr-data.se/opencode.html/

安装时会弹框提示用户,如下图

Alt text

安装成功后在 C:\Windows\System32\drivers\ 下释放驱动文件 imdisk.sys,在 C:\Windows\System32\ 释放启动程序 imdisk.exe 及其支持文件

安装成功后,命令行输入 imdisk 启动 ImDisk,回显命令说明

二次利用

作者 DiabloHorn 借助开源工具 ImDisk,对其进行二次利用,实现命令行下的安装、加载和虚拟磁盘的创建删除

准备工作:

1、编写代码实现驱动的安装、加载和虚拟磁盘的创建删除

代码地址: https://github.com/DiabloHorn/cliramdisk

我的测试编译环境是 VS2015,将工程中头文件 stdafx.h 中包含的内容保存到 cliramdisk.cpp 中,直接编译通过,生成文件 cliramdisk.exe

2、测试系统安装 ImDisk 获得驱动文件 imdisk.sys

安装后,在位置 `C:\Windows\System32\drivers\ 复制驱动文件 imdisk.sys

值得注意的是驱动文件 imdisk.sys 包含数字签名

3、编写注册表文件,添加驱动文件信息

内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ImDisk]
"DisplayName"="ImDisk Virtual Disk Driver"
"Description"="Disk emulation driver"
"Type"=dword:00000001
"Start"=dword:00000004
"ErrorControl"=dword:00000000
"ImagePath"=hex(2):5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,52,\
  00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6d,00,64,00,69,00,73,00,6b,00,\
  2e,00,73,00,79,00,73,00,00,00
"DeleteFlag"=dword:00000001

保存为 imdiskdriver.reg

实际测试

1、导入注册表,添加驱动文件信息

reg import imdiskdriver.reg

2、上传驱动文件

copy imdisk.sys C:\Windows\System32\drivers\

3、加载驱动文件

cliramdisk.exe i

4、创建虚拟磁盘(大小 200MB)

cliramdisk.exe c 209715200 R: 0

5、格式化为 NTFS

format R: /FS:NTFS /Q /y

之后就可以向 R 盘上传文件,在系统重启后会自动删除

6、查看虚拟磁盘

cliramdisk.exe l

7、删除虚拟磁盘

cliramdisk.exe d 0

删除不彻底,仍会显示磁盘图标

如下图

Alt text

注: 使用 ImDisk 删除虚拟磁盘时不存在这个 bug

不足

  1. 删除不彻底,仍会显示磁盘图标
  2. 不支持对文件夹创建虚拟磁盘

0x04 优化

为了解决上节提到的两个不足,可以考虑直接使用 ImDisk,只是需要实现命令行下 ImDisk 的安装和使用

这是给出一种解决方法

准备工作

1、测试系统安装 ImDisk 获得支持文件

  • C:\Windows\System32\drivers\imdisk.sys
  • C:\Windows\System32\imdisk.exe
  • C:\Windows\System32\imdisk.cpl

2、编写代码实现驱动的安装

代码地址: https://github.com/DiabloHorn/cliramdisk

这里可以直接使用代码中的驱动加载功能

注: 测试需要的所有文件已上传至 github,下载地址: https://github.com/3gstudent/test/raw/master/cliramdisk%26imdisk.rar

实际测试

1、添加注册表,添加驱动文件信息

reg add hklm\SYSTEM\CurrentControlSet\Services\ImDisk /v DisplayName /t REG_SZ /d "ImDisk Virtual Disk Driver"
reg add hklm\SYSTEM\CurrentControlSet\Services\ImDisk /v Description /t REG_SZ /d "Disk emulation driver"
reg add hklm\SYSTEM\CurrentControlSet\Services\ImDisk /v Type /t REG_DWORD /d 1
reg add hklm\SYSTEM\CurrentControlSet\Services\ImDisk /v Start /t REG_DWORD /d 4
reg add hklm\SYSTEM\CurrentControlSet\Services\ImDisk /v ErrorControl /t REG_DWORD /d 0
reg add hklm\SYSTEM\CurrentControlSet\Services\ImDisk /v ImagePath /t REG_EXPAND_SZ /d "\SystemRoot\system32\DRIVERS\imdisk.sys"

2、上传驱动文件

copy imdisk.sys C:\Windows\System32\drivers\

3、加载驱动文件

cliramdisk.exe i

4、创建虚拟磁盘 Z: ,大小 10Mb,自动格式化为 NTFS

imdisk -a -s 10M -m Z: -p "/FS:NTFS /Y /Q"

5、删除虚拟磁盘 Z:

imdisk -d -m Z:

注: 不会存在硬盘图标存留的 bug

6、文件夹操作

(1) 创建

md C:\Windows\Temp\test
imdisk -a -s 10M -m C:\Windows\Temp\test -p "/FS:NTFS /Y /Q"

注: 需要空文件夹,否则创建失败

(2) 删除

卸载虚拟盘:

imdisk -d -m C:\Windows\Temp\test

或者直接删除文件夹:

rd C:\Windows\Temp\test

7、卸载驱动文件

cliramdisk.exe u

0x05 取证分析

1、对文件夹创建虚拟磁盘

md C:\Windows\Temp\test
imdisk -a -s 10M -m C:\Windows\Temp\test -p "/FS:NTFS /Y /Q"

2、写入测试文件

echo AAAAAAAAAAAAAAAAA>C:\Windows\Temp\test\1.txt

3、使用 WInHex 查看文件内容

下载地址: http://www.x-ways.net/winhex/

选择 Tools -> Open Disk ,选择盘符 c:

找到文件夹 C:\Windows\Temp\test

无法找到测试文件 1.txt

证明文件没有被写到硬盘

0x06 检测拦截

无法通过恢复硬盘文件获得攻击者上传的文件

结合利用思路,可以考虑监控驱动文件,拦截驱动文件 imdisk.sys 的加载

0x07 小结

本文测试了利用虚拟硬盘实现“无文件”的方法,解决两个问题(删除不彻底,不支持文件夹),验证结论:无法通过恢复硬盘文件获得虚拟硬盘中的文件

最后结合利用思路,分析检测和拦截的方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

且行且努力

暂无简介

0 文章
0 评论
21 人气
更多

推荐作者

风暴

文章 0 评论 0

乐玩

文章 0 评论 0

英雄似剑

文章 0 评论 0

秋风の叶未落

文章 0 评论 0

luoshaoja

文章 0 评论 0

吴彦文

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文