Windows 取证之BMChache

惰性盆景
• 阅读 1278

0x0、概述

BMChache全称RDP Bitmap Chache,即RDP(远程桌面协议)位图缓存。是Windows为了加速RDP连接时的显示,减少数据量的传输,改善RDP连接体验的一种缓存机制。

0x1、什么是RDP Bitmap Chache

Remote Desktop Protocol(RDP)是微软从Windows NT 4.0开始为了用户能使用图形界面通过网络远程方式连接到另外一台计算机而开发的专有协议。

当年因为是拨号上网,网络带宽很低,便开发了Bitmap Chache这种技术,为了增强用户体验,降低带宽延迟,RDP连接后,会将显示的图像在客户端以位图的形式缓存下来,RDP会话会重用这些图像进行显示,而不是时刻都使用网络进行完整图像传输,而是只传输改变的部分,从而减少了延迟。虽然现在网络带宽已经得到很大的提升,但这一技术特性依然还是被保留了下来。

BMChache分为两种类型,一种是Bitmap Chaces(位图缓存),一种是Persisten Bitmap Chaches(持久位图缓存)。Persistent Bitmap Chaches是从Windows 2000的RDP 5.0版本开始引入的技术。区别在于,前一种是临时缓存,与RDP会话生命周期绑定,后一种是持久化的缓存,不受到RDP会话生命周期的限制,即使会话结束后,内容依然会持久化的存在于文件中。

位图缓存选项可以由用户配置是否开启,可以打开远程桌面连接程序查看:

Windows 取证之BMChache

需要注意的是,位图缓存只存在与远程连接的客户端系统中,而不是服务端系统中。

在Windows xp中的存储位置位于:%USERPROFILE%\Local Settings\Application Data\Microsoft\Terminal Server Client\Cache\路径中:

Windows 取证之BMChache

其文件名组成是“bchache + 图像位深度 + .bmc后缀”,其中的数字表示位图的质量,如果是bchache2.bmc表示是图像的位深度是8bit,bcache22.bmc表示图像的位深度是16bit,bcache24.bmc表示存储的图像位深度是32bit,单位是bpp(bits per pixel)。在Windows XP等老系统中,bchache**.bmc文件的最大大小是20MB。

在Windows 7及更高版本系统中,其文件存储在 :%USERPROFILE%\AppData\Local\Microsoft\Terminal Server Client\Cache\路径中:

Windows 取证之BMChache

包括两种类型,一种是bcache.bmc,一种是Cache.bin。bchache.bmc用于老旧的系统,而Cache.bin文件用于Windows 7及更高版本的系统。Cache**.bin文件大小最高可以达到100MB,当超过100MB,会新增一个文件,文件名中的数值从0000开始递增。(如:Cache0001.bin、Cache0002.bin),与.bmc文件支持8bpp到32bpp位深度图像不同,.bin文件的图像位深度是固定的32bpp。

0x2、Bitmap Chache文件结构

.bmc文件结构:

.bmc文件并没有固定的头部标识,但它是由一张张BMP图像组成的文件,每个单独的区块文件头信息组成如下:

Windows 取证之BMChache

前八个字节(83 8F 42 86 6E C8 EF B3)是图像的哈希值,接下来的两个字节(40 00)是图像的宽度,然后两个字节(40 00)是图像的高度,然后四个字节(00 20 00 00)表示图像的大小(单位是字节),接下来的四个字节(11 00 00 00)表示图像的特定参数(是否压缩)。总共占用20个字节。

以这里的bchache22.bmc为例,每个区块的图像宽高都是0x40,也就是64x64大小的图像,其图像的位深度是16 bit,说明每个像素需要2个字节来存储。那一个区块的图像总大小为 :64x64x2=8192 bytes,如果是24bpp则占用12288 bytes,32bpp占用16384 bytes。

.bin文件结构:

.bin文件有固定的文件头标识,以字符串RDP8bmp开头,占用8个字节,后面四个字节为版本号,共十二个字节。

Windows 取证之BMChache

然后是每个区块图像的文件头:

Windows 取证之BMChache

其中前八个字节(35 CE 5E 97 15 DA 7E E9)是区块图像的哈希值,然后两个字节(40 00)是图像的宽度,然后两个字节是图像的高度(40 00)。与之前的.bmc存储不同,.bin中的每个区块图像的位深度都是32bpp,每个区块图像占用16384 bytes。

我们可以参考bmp的文件结构组成,添加其文件头信息,手动构建bmp文件,把文件导出来:

Windows 取证之BMChache

Windows 取证之BMChache

Windows 取证之BMChache

关于bmp文件的格式可以参考 https://en.wikipedia.org/wiki...

0x3、RDP BitMap Chache在取证中的意义

在前面,我们已经说明了,RDP BMChache只存在于客户端,如果攻击者在横行移动攻击中,使用了跳板机RDP远程连接了目标机器进行了某些操作,取证人员就可以在跳板机上分析BMChache文件进行取证。

我们做一个简单的演示,这里使用远程桌面连接一台远程机器,执行一些操作:

Windows 取证之BMChache

然后我们使用工具BMC Viewer查看一下BMC文件的内容:

Windows 取证之BMChache

可以看到缓存的位图图像中,有我们执行操作的部分内容的图像。点击每个区块的内容,会显示区块的文件头内容,可以根据这个导出图像.

Windows 取证之BMChache

0x4、取证实践

攻击者通过某些手段已经入侵并拿到了GOT公司职员Little Finger的电脑控制权,攻击者在这台电脑上使用了GOT\varys-adm域管理员凭证连接到了域控服务器,攻击者利用这台电脑作为入口点对组织进行横向渗透。

提供给我们的取证资料包括Little Finger计算机的Windows日志和littlefinger用户配置文件。我们需要找出Varys-adm的密码。

Windows 取证之BMChache

通过获取的日志可以发现登录的记录:

Windows 取证之BMChache

在littlefinger用户的配置相关文件中找到了RDP Bitmap Chache文件:

Windows 取证之BMChache

我们使用工具对Cache0000.bin进行解析,这里使用bmc-tools.py工具(下载地址:https://github.com/ANSSI-FR/b...)。

Windows 取证之BMChache

image-20210712143928424.png

查看解析出来的图像:

Windows 取证之BMChache

通过查看这些图像,发现了保存GOT\varys-adm密码的信息:

Windows 取证之BMChache

从解析的缓存图像分析,域管理员可能是使用了Windows 10的便签功能把密码贴在桌面上了。

至此我们通过BMChache找出了密码信息,用户名:GOT\varys-adm,密码:Uncutedition1@#

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
布袋罗汉 布袋罗汉
2年前
远程连接Microsoft Remote Desktop 10.8.1汉化
MicrosoftRemoteDesktop是一款MacOS平台上的远程桌面控制软件来自微软,使用Microsoft远程桌面应用程序,你可以从几乎任何地方连接到远程PC和您的工作资源。在远程桌面客户端中使用RemoteFX体验Windows的强大功能,旨在
Stella981 Stella981
3年前
Jump DeskTop 使用具体教程,Jump DeskTop for Mac如何使用?
Mac平台上有很多的远程连接windows的软件,小编个人觉得最好用的还是JumpDeskTopforMac这款软件,JumpDeskTop兼容RDP和VNC,能够安全的连接到世界上的任何计算机,操作简单,只需输入您的IP地址或主机名即可连接,就能帮您安全的连接到另一台电脑。那么JumpDeskTopforMac如何使用呢?下面小编为大家带来J
Wesley13 Wesley13
3年前
ubuntu中使用guacamole访问远程桌面
是什么简单讲guacamole是一个支持多用协议(vnc,rdp,ssh等协议),可以用来进行远程桌面访问的客户端程序(个人理解),对于要想更深入理解的可以参见官方说明(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fguacamole.incubator.apache
Stella981 Stella981
3年前
C#socket编程之实现一个简单的TCP通信
TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。!(https://oscimg.oschina.net/oscnet/8c6341137d491d24e31
Wesley13 Wesley13
3年前
VirtualBox、CentOS 6.4、Hadoop、Hive玩起
1 安装VirtualBox:VirtualBox是一款开源免费的并且非常强大的虚拟机软件,同时支持X86和AMD64/Intel64,可以在多个操作系统平台上运行。与同性质的VMWare和VirtualPC比较,VirtualBox独到之处包括支持远程桌面协议RDP、iSCSI及USB的支持。在64为旗舰版Wind
Wesley13 Wesley13
3年前
VNC rdp 远程连接工具,VNC rdp远程连接工具下载!
IIS7服务器管理工具能够作为VNC的客户端,进行VNC的命令操作,可在客户端,下载,安装VNC软件!同时,它也可以作为FTP的客户端,进行FTP的命令操作!它能够批量连接Windows和Linux系统下的服务器和VPS,并能够实时监测他们的连接状态,便于日常维护和操作!操作步骤也是非常的简单,两分钟即可上手!下载地址:服务器管理工具(https
Stella981 Stella981
3年前
Linux下使用 SSHFS 挂载远程文件系统到本地
!(https://oscimg.oschina.net/oscnet/ca30e31352d7171584e1074275611bb2a0f.jpg)在Windows平台上进行RDP远程桌面时可以将本地驱动器挂载到远程服务器上,在远程桌面时进行文件共享传输!(https://oscimg.oschina.net/oscnet/87c19
Wesley13 Wesley13
3年前
Xrdp
 您多久访问一次Linux桌面?您使用什么工具来访问远程桌面?Xrdp是一个开源工具,允许用户通过WindowsRDP访问Linux远程桌面。除了WindowsRDP之外,xrdp工具还接受来自其他RDP客户端的连接,如FreeRDP,rdesktop和NeutrinoRDP。Xrdp现在支持TLS安全层。Xrdp要求
Stella981 Stella981
3年前
Linux应急响应(二):捕捉短连接
0x00前言​短连接(shortconnnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。在系统维护中,一般很难去察觉,需要借助网络安全设备或者抓包分析,才能够去发现。0x01应急场景​
燕青 燕青
1年前
macos 终端仿真工具:ZOC8 「Mac」 支持M1
是一款优秀的终端仿真软件,在Mac系统中运行稳定,且适用于Windows、macOS和Linux操作系统。它支持多种协议,如Telnet、SSH、SSH2、RDP等,可以连接到各种远程主机和设备。ZOC8的功能丰富,包括多窗口和多标签页、自定义键盘快捷键、
惰性盆景
惰性盆景
Lv1
汴水流,泗水流,流到瓜洲古渡头,吴山点点愁。思悠悠,恨悠悠,恨到归时方始休,月明人倚楼。
文章
7
粉丝
0
获赞
0