未加星标

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

字体大小 | |
[系统(windows) 所属分类 系统(windows) | 发布者 店小二05 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

0x00 前言

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

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

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

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

参考的文章地址:

https://diablohorn.com/2018/08/06/creating-a-ram-disk-through-meterpreter/

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

0x01 简介

本文将要介绍以下内容:

实现原理

方法复现

删除残留的硬盘图标

支持对文件夹的操作

取证分析

检测拦截

0x02 实现原理

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

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

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

不会对硬盘进行写操作,也就不存在硬盘文件的恢复

系统重启后,内存磁盘中的文件自动删除

0x03 方法复现

对文章的实现方法进行复现,地址:

https://diablohorn.com/2018/08/06/creating-a-ram-disk-through-meterpreter/

ImDisk

开源工具,能够创建虚拟磁盘,介绍和下载地址:

http://www.ltr-data.se/opencode.html/

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


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

安装成功后在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

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

如下图


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

注:

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

不足

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

不支持对文件夹创建虚拟磁盘

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

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

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

本文系统(windows)相关术语:三级网络技术 计算机三级网络技术 网络技术基础 计算机网络技术

tags: Windows,文件,ImDisk,imdisk,磁盘,cliramdisk,虚拟,删除,硬盘,驱动,System32,sys,exe,Temp
分页:12
转载请注明
本文标题:渗透技巧――利用虚拟磁盘实现的“无文件”
本站链接:https://www.codesec.net/view/604953.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(windows) | 评论(0) | 阅读(11)