12

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

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-%E5%88%A9%E7%94%A8%E8%99%9A%E6%8B%9F%E7%A3%81%E7%9B%98%E5%AE%9E%E7%8E%B0%E7%9A%84-%E6%97%A0%E6%96%87%E4%BB%B6/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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 小结


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

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


LEAVE A REPLY

Written on September 16, 2018

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK