发布于2022年11月8日3年前 0x00 前言 在渗透测试中,通常使用代码注入、内存执行、注册表、powershell或wmi等无文件技术来增加检测和分析的难度。 从渗透的角度来说,整个过程在一定条件下是无法做到“无文件”的,需要将文件写入硬盘,很有可能被获取和分析。 最近看了一篇关于虚拟磁盘使用方法的文章,可以解决这个问题。 从防御的角度,如何检测拦截这种方法? 参考文章的地址: https://Diablo horn . com/2018/08/06/creating-a-ram-disk through-meter preter/ 本文将对其进行测试,介绍实现细节,解决原文中未解决的问题,并以利用的思想分析检测和拦截的方法。 0x01 简介 本文将介绍以下内容: 实现原则 方法复制 删除剩余的硬盘图标。 支持文件夹操作。 法医检定法 探测拦截 0x02 实现原理 删除Windows系统硬盘上的文件只会修改文件的MFT。如果文件内容未被覆盖,则可以恢复文件。 删除和恢复的详细介绍请参考之前的文章《渗透技巧——Windows系统的文件恢复与删除》。 如果使用虚拟磁盘,将内存映射到本地,创建一个内存磁盘,它与使用中的真实硬盘没有区别,它有以下两个优点: 硬盘不会被写入,所以没有硬盘文件的恢复。 系统重启后,内存盘中的文件会自动删除。 0x03 方法复现 再现文章的实现方法,地址: https://Diablo horn . com/2018/08/06/creating-a-ram-disk through-meter preter/ ImDisk 开源工具,能够创建虚拟磁盘,引入和下载地址: http://www.ltr-data.se/opencode.html/ 安装时会弹出一个框提示用户,如下图所示 安装成功后,释放C:\Windows\System32\drivers\下的驱动文件imdisk.sys和C:\Windows\System32\下的启动程序imdisk.sys及其支持文件。 安装成功后,在命令行输入ImDisk启动imdisk,会回显命令描述。 二次利用 作者DiabloHorn借助开源工具ImDisk对其进行二次利用,在命令行下实现了虚拟磁盘的安装、加载和创建、删除。 准备工作: 1、编写代码实现驱动的安装、加载和虚拟磁盘的创建删除 代码地址: https://github.com/DiabloHorn/cliramdisk 我的测试编译环境是VS2015。我会将项目头文件stdafx.h中包含的内容保存到cliramdisk.cpp中,直接编译生成文件cliramdisk.cpp。 2、测试系统安装ImDisk获得驱动文件imdisk.sys 安装后,将驱动程序文件imdisk.sys复制到位置“c: \ windows \ system32 \ drivers”。 值得注意的是,驱动程序文件imdisk.sys包含数字签名。 3、编写注册表文件,添加驱动文件信息 内容如下: Windows注册表编辑器5.00版 [HKEY _ LOCAL _ MACHINE \ SYSTEM \ current control set \ Services \ im disk] DisplayName'='ImDisk虚拟磁盘驱动程序' 描述“=”磁盘仿真驱动程序 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 00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6d,00,64,00,69,00,73,00 2e,00,73,00,79,00,73,00,00,00 DeleteFlag'=dword:00000001 另存为imdiskdriver.reg # # #实际测试 1.导入注册表并添加驱动程序文件信息。 reg导入imdiskdriver.reg 2.上传驱动程序文件 复制imdisk . sys C:\ Windows \ System32 \ drivers \ 3.加载驱动程序文件。 cliramdisk.exe岛 4.创建一个虚拟磁盘(200MB大小) cliramdisk.exe c 209715200 R:0 5.格式为NTFS 格式R: /FS:NTFS /Q /y 之后可以上传文件到R盘,系统重启后会自动删除。 6.检查虚拟磁盘。 cliramdisk.exe湖 7.删除虚拟磁盘 cliramdisk.exe d0 如果删除未完成,磁盘图标仍会显示。 如下图 注: 使用ImDisk删除虚拟磁盘时不存在此错误。 不足 如果删除未完成,磁盘图标仍会显示。 不支持为文件夹创建虚拟磁盘。 0x04 优化 要解决前面提到的两个缺点,可以考虑直接使用ImDisk,但是只需要在命令行下安装使用ImDisk即可。 这是给出一个解决方案。 准备工作 1.测试系统并安装ImDisk以获取支持文件。 c:\ Windows \ System32 \ drivers \ im disk . sys C:\Windows\System32\imdisk.exe C:\Windows\System32\imdisk.cpl 2.编写安装驱动程序的代码。 代码地址: https://github.com/DiabloHorn/cliramdisk 您可以在这里的代码中直接使用驱动程序加载功能。 注: 测试所需的所有文件已经上传到github的下载地址: https://github . com/3g student/test/raw/master/cliram disk & im disk . rar 实际测试 1.添加注册表和驱动程序文件信息。 REG add hklm \ SYSTEM \ current control set \ Services \ im Disk/v display name/t REG _ SZ/d ' im Disk虚拟磁盘驱动程序' REG add hklm \ SYSTEM \ current control set \ Services \ im Disk/v Description/t REG _ SZ/d '磁盘仿真驱动程序' REG add hklm \ SYSTEM \ current control set \ Services \ im disk/v Type/t REG _ DWORD/d 1 REG add hklm \ SYSTEM \ current control set \ Services \ im disk/v Start/t REG _ DWORD/d 4 REG add hklm \ SYSTEM \ current control set \ Services \ im disk/v error control/t REG _ DWORD/d 0 ' REG add hklm \ SYSTEM \ current control set \ Services \ im disk/v image path/t REG _ EXPAND _ SZ/d ' \ SystemRoot \ system32 \ DRIVERS \ im disk . sys ' 2.上传驱动程序文件 复制imdisk . sys C:\ Windows \ System32 \ drivers \ 3.加载驱动程序文件。 cliramdisk.exe岛 4.创建一个虚拟磁盘Z:大小为10Mb,并自动将其格式化为NTFS。 im disk-a-s 10M-m Z:-p '/FS:NTFS/Y/Q ' 5.删除虚拟磁盘Z: imdisk -d -m Z: 注: 不会有硬盘图标残留的bug。 6.文件夹操作 (1)创建 md C:\Windows\Temp\test im disk-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大学 0x05 取证分析 1.为文件夹创建虚拟磁盘。 md C:\Windows\Temp\test im disk-a-s 10M-m C:\ Windows \ Temp \ test-p '/FS:NTFS/Y/Q ' 2.编写测试文件。 echo aaaaaaaaaaaaaaaaaaac:\ Windows \ Temp \ test \ 1 . txt 3.使用WInHex查看文件内容。 下载地址: http://www.x-ways.net/winhex/ 选择工具-打开磁盘和驱动器号c: 找到文件夹C:\Windows\Temp\test 找不到测试文件1.txt 证明文件没有被写入硬盘 0x06 检测拦截 攻击者上传的文件无法通过恢复硬盘文件获得。 结合思路,可以考虑监控驱动文件,拦截驱动文件imdisk.sys的加载 0x07 小结 本文测试了利用虚拟硬盘实现“无文件”的方法,解决了两个问题(删除不彻底,无文件夹支持)。验证结论是虚拟硬盘中的文件无法通过恢复硬盘文件获得。 最后,结合利用的思想,分析了检测和拦截的方法。 留下回复
创建帐户或登录后发表意见