安全矩阵

 找回密码
 立即注册
搜索
查看: 474|回复: 0

vCenter获取锁屏Hash之volatility

[复制链接]

252

主题

252

帖子

1307

积分

金牌会员

Rank: 6Rank: 6

积分
1307
发表于 2022-12-28 15:13:08 | 显示全部楼层 |阅读模式
原文链接:vCenter获取锁屏Hash之volatility


文章转载自先知社区:

https://xz.aliyun.com/t/11949

作者:Bamboo

前言
VMware vCenter ESXI中经常会装一些非常重要的业务虚拟服务器,Linux一般都是登录状态的,但是Windows机器锁屏较多,想要获取服务器权限,一般需要把vmem文件下载下来,用内存分析工具进行hashdump等,以突破其锁屏获取服务器权限。笔者在对volatility工具进行了解后,对分析vmem文件的手法进行了一定优化,可以提升解决锁屏问题的效率。
思路
在了解了volatility内存取证工具后,想到了几种办法:
python3版本
  •         VMware vCenter ESXI中自带了python3.6.8,可以尝试直接在esxi中部署volatility3项目;
  •         利用pyinstaller将volatility3进行打包,生成可执行文件拖到esxi中使用。根据打包环境不同,又有两种思路:

    •                 在esxi上部署volatility3项目后,打包出来的会更适用;
    •                 在其他Linux中部署volatility3项目(环境尽可能接近esxi),打包出来用。

           
python2版本:
最一开始对项目了解的不够深入,没注意到项目团队已经把volatility2制作成了可执行文件,导致前期一直在死磕打包volatility3,后来在小伙伴的提醒下,发现3gstudent师傅研究了利用volatility2进行Windows锁屏问题解决,在此先膜拜下师傅。
编辑
不过官方团队并没有打包volatility3的可执行程序,原因写的是打包出来的packages会被识别为恶意软件,解决了这个问题就会出可执行程序了。
编辑
过程思路一、直接在esxi中部署volatility3项目Linux环境下的esxi,这个思考很快就被证明不太可行了,volatility3需要多个系统库和pip库:
  1. <code>yum install zlib &&\</code><code>
  2. yum install zlib-devel &&\
  3. </code><code>yum install bzip2-devel &&\
  4. </code><code>yum install ncurses-devel &&\
  5. </code><code>yum install sqlite-devel &&\
  6. </code><code>yum install readline-devel &&\
  7. </code><code>yum install gcc &&\
  8. </code><code>yum install libffi &&\
  9. </code><code>yum install libffi-devel &&\
  10. </code><code>yum install gcc-c++\</code><code>yum install openssl-devel\</code><code>
  11. yum install tk-devel</code>
复制代码


需要pip3
  1. <code>yum install xz-devel</code><code>
  2. yum install epel-release
  3. </code><code>yum install python35-devel</code>
复制代码


需要n多个系统依赖以及n多个pip依赖
  1. <code>pip3 install pefile==2018.8.8  -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  2. </code><code>pip3 install backports.lzma -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  3. </code><code>pip3 install pycryptodome</code><code>pip install importlib-metadata==0.6</code>
复制代码


思路二、打包Vol进行后利用
1.选好合适的系统
CentOS 7.9跟exsi的GLIBC库版本一致,自带python3.6,比较合适。
安装编译后续可能会用到的依赖::
  1. <code>yum install zlib &&\
  2. </code><code>yum install zlib-devel &&\
  3. </code><code>yum install bzip2-devel &&\
  4. </code><code>yum install ncurses-devel &&\
  5. </code><code>yum install sqlite-devel &&\
  6. </code><code>yum install readline-devel &&\
  7. </code><code>yum install gcc &&\
  8. </code><code>yum install libffi &&\
  9. </code><code>yum install libffi-devel &&\
  10. </code><code>yum install gcc-c++ &&\
  11. </code><code>yum install openssl-devel &&\
  12. </code><code>yum install tk-devel</code>
复制代码


2.下载Volatility3项目
GitHub地址:https://github.com/volatilityfoundation/volatility3
3.安装pip依赖
正常安装到yara的时候应该会报错,需要安装python-dev库才行
  1. <code>CentOS系统:
  2. </code><code># 安装EPEL源</code><code>
  3. yum install epel-release -y
  4. </code><code># 默认安装python3.6开发包</code><code>
  5. yum install python3-devel -y</code>

  6. <code>Ubuntu系统:
  7. </code><code>apt-get install python3-dev</code>
复制代码


装好python-dev之后,安装依赖即可。
  1. <code class="hljs">pip3 install -r requirements.txt</code>
复制代码


也可以这么安装
  1. <code class="hljs">pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com</code>
复制代码


4.安装Volatility3
需要先更新下setuptools不然等下安装编译 Python的相关包安装会报错:
  1. <code class="hljs">pip3 install --upgrade setuptools</code>
复制代码


安装Volatility3
  1. <code class="hljs">python3 setup.py install</code>
复制代码


完成安装后,测试是否能正常使用
  1. <code class="hljs">python3 vol.py</code>
复制代码


查看运行是否有异常提示:
  1. <code class="hljs">python3 vol.py -vv</code>
复制代码


测试功能是否正常
  1. <code>python3 vol.py -f xxx.vmem windows.info
  2. </code><code>python3 vol.py -f xxx.vmem windows.hashdump</code>
复制代码


5.安装pyinstaller
  1. <code class="hljs">pip3 install pyinstaller==3.6</code>
复制代码


6.打包Volatility3
修改spec,默认只有vol.py,增加了hashdump和yarascan;还增加了vol_coll使打包出来的是一个文件夹。

  1. # This file is Copyright 2019 Volatility Foundation and licensed under the Volatility Software License 1.0
  2. # which is available at https://www.volatilityfoundation.org/license/vsl-v1.0
  3. #

  4. import os
  5. import sys

  6. from PyInstaller.building.api import PYZ, EXE,COLLECT
  7. from PyInstaller.building.build_main import Analysis
  8. from PyInstaller.utils.hooks import collect_submodules, collect_data_files, collect_dynamic_libs

  9. block_cipher = None

  10. binaries = []
  11. try:
  12.     import capstone

  13.     binaries = collect_dynamic_libs('capstone')
  14. except ImportError:
  15.     pass

  16.     # Volatility must be findable in sys.path in order for collect_submodules to work
  17.     # This adds the current working directory, which should usually do the trick
  18. sys.path.append(os.path.dirname(os.path.abspath(SPEC)))

  19. vol_analysis = Analysis(['vol.py',
  20.                          'volatility3/framework/plugins/windows/hashdump.py',
  21.                          'volatility3/framework/plugins/yarascan.py'],
  22.                         pathex = [],
  23.                         binaries = binaries,
  24.                         datas = collect_data_files('volatility3.framework') + \
  25.                         collect_data_files('volatility3.framework.automagic', include_py_files = True) + \
  26.                         collect_data_files('volatility3.framework.plugins', include_py_files = True) + \
  27.                         collect_data_files('volatility3.framework.layers', include_py_files = True) + \
  28.                         collect_data_files('volatility3.schemas') + \
  29.                         collect_data_files('volatility3.plugins', include_py_files = True),
  30.                         hiddenimports = collect_submodules('volatility3.framework.automagic') + \
  31.                         collect_submodules('volatility3.framework.plugins') + \
  32.                         collect_submodules('volatility3.framework.symbols'),
  33.                         hookspath = [],
  34.                         runtime_hooks = [],
  35.                         excludes = [],
  36.                         win_no_prefer_redirects = False,
  37.                         win_private_assemblies = False,
  38.                         cipher = block_cipher,
  39.                         noarchive = False)

  40. vol_pyz = PYZ(vol_analysis.pure, vol_analysis.zipped_data,
  41.               cipher = block_cipher)
  42. vol_exe = EXE(vol_pyz,
  43.               vol_analysis.scripts,
  44.               [('u', None, 'OPTION')],
  45.               exclude_binaries=True,
  46.               name = 'vol',
  47.               icon = os.path.join('doc', 'source', '_static', 'favicon.ico'),
  48.               debug = False,
  49.               bootloader_ignore_signals = False,
  50.               strip = False,
  51.               upx = True,
  52.               runtime_tmpdir = None,
  53.               console = True)
  54. vol_coll = COLLECT(vol_exe,
  55.                    vol_analysis.binaries,
  56.                    vol_analysis.zipfiles,
  57.                    vol_analysis.datas,
  58.                    strip=False,
  59.                    upx=True,
  60.                    upx_exclude=[],
  61.                    name = 'vol')
复制代码
打包,默认是放在dist目录下。
  1. <code class="hljs">pyinstaller vol-new.spec</code>
复制代码


需要把打包完成的vol文件夹中base_library.zip解压一下,解压至当前目录即可。
7.使用
从CentOS7中把vol压缩下,搞到目标esxi服务器上解压,给好权限应该就能用了。
PS:Volatility3做Windows内存文件分析时,需要联网到微软网站那边下一个字符库,所以需要目标esxi能出网。
8.踩坑过程
8.1. GLIBC版本问题
使用Ubuntu16及kali之类的系统,打包出来的vol在exsi中无法运行
编辑
查看esxi的GLIBC版本,发现为2.17:
编辑
尝试将高版本的so文件拷贝到esxi系统中,尝试将libc-2.27.so修改为libc.2.17.so,系统立马就GG了,还好mobax的sftp还能用:
编辑
需要找GLIBC版本一致,或更低版本的系统,打包vol才可以运行:
centos6.6服务器的glibc默认版本为2.12
centos7系统的默认glibc版本已经升级2.17
其中vultr中默认的CentOS7版本就可以:
strings /usr/lib64/libc.so.6 | grep GLIBC
编辑
以及centos7.9版本也是可以的
8.2. No module named 'encodings'
在esxi中运行打包好的vol会提示No module named 'encodings'
编辑
解决办法,把base_library.zip解压出来即可,注意需要解压到当前目录,不能解压到base_library文件夹里。
8.3. spec打包问题
左边是打包为单一文件,右边是打包为一个文件夹
编辑
8.4. 正常打包后功能异常
编辑
解决方法:
其实就是作者写vol.spec的时候,有些pip库没有打包上,增加上hashdump和yarascan就行了。
  1. <code>vol_analysis = Analysis(['vol.py',</code><code>                        
  2.              'volatility3/framework/plugins/windows/hashdump.py',</code><code>                        
  3.              'volatility3/framework/plugins/yarascan.py'],</code>
复制代码


9. 联网问题
在esxi中直接运行打包好的Volatility,在联网的情况下,已经可以完成hashdump。但是在无法联网的时候,无法下载到symbols文件,也就是pdb(program
database)文件,且该文件无法直接通过浏览器下载到。通过对项目的深入了解,发现作者有提供了下载pdb文件的解决办法。
作者并没有在readme中写明下载pdb文件的方法,在断网状态下调试脚本运行过程的时候,才发现作者留的小惊喜:

  1. (venv) PS D:\PythonDev\project\volatility3-develop> python vol.py -vv -f "F:\Attck\Win10-TH-2.0\Windows 10 x64-490103e9.vmem" windows.hashdump
  2. Volatility 3 Framework 2.4.1
  3. INFO     volatility3.cli: Volatility plugins path: ['D:\\PythonDev\\project\\volatility3-develop\\volatility3\\plugins', 'D:\\PythonDev\\project\\volatility3-develop\\volatility3\\framework\\plugins']
  4. INFO     volatility3.cli: Volatility symbols path: ['D:\\PythonDev\\project\\volatility3-develop\\volatility3\\symbols', 'D:\\PythonDev\\project\\volatility3-develop\\volatility3\\framework\\symbols']
  5. INFO     volatility3.framework.automagic: Detected a windows category plugin
  6. INFO     volatility3.framework.automagic: Running automagic: ConstructionMagic
  7. INFO     volatility3.framework.automagic: Running automagic: SymbolCacheMagic
  8. INFO     volatility3.framework.automagic: Running automagic: LayerStacker
  9. DEBUG    volatility3.framework.automagic.windows: Detecting Self-referential pointer for recent windows
  10. DEBUG    volatility3.framework.automagic.windows: DtbSelfRef64bit test succeeded at 0x1ad000
  11. DEBUG    volatility3.framework.symbols.windows.pdbconv: Failed with <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。>
  12. DEBUG    volatility3.framework.symbols.windows.pdbconv: Attempting to retrieve http://msdl.microsoft.com/download/symbols/ntkrnlmp.pdb/118018959D8D7CA5AAB45B75AED5A9761/ntkrnlmp.pd_
  13. DEBUG    volatility3.framework.symbols.windows.pdbconv: Failed with <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。>
  14. WARNING  volatility3.framework.symbols.windows.pdbutil: Symbol file could not be downloaded from remote server
  15. DEBUG    volatility3.framework.symbols.windows.pdbutil: Required symbol library path not found: ntkrnlmp.pdb\118018959D8D7CA5AAB45B75AED5A976-1
  16. INFO     volatility3.framework.symbols.windows.pdbutil: The symbols can be downloaded later using pdbconv.py -p ntkrnlmp.pdb -g 118018959D8D7CA5AAB45B75AED5A9761
  17. INFO     volatility3.framework.automagic: Running automagic: SymbolFinder
  18. INFO     volatility3.framework.automagic: Running automagic: KernelModule
复制代码



上述调试信息中,关键点是:
  1. <code>Symbol file could not be downloaded from remote server
  2. </code><code>Required symbol library path not found: ntkrnlmp.pdb\118018959D8D7CA5AAB45B75AED5A976-1
  3. </code><code>The symbols can be downloaded later using pdbconv.py -p ntkrnlmp.pdb -g 118018959D8D7CA5AAB45B75AED5A9761</code>
复制代码


也就是说用pdbconv.py可以下载到所需的pdb文件:
编辑
将下载好的symbols文件放入以下目录,重新运行vol.py进行hashdump即可:
  1. <code class="hljs">/tmp/vol/volatility3/framework/symbols/windows/ntkrnlmp.pdb/</code>
复制代码


编辑
  •         坑点

这里遇到了个小问题就是pycharm可以正常运行该脚本进行下载,但是本地命令行运行脚本会提示No module named 'volatility3',网上搜了下说是环境变量的问题,加上打印环境变量的语句,pycharm和命令行分别运行了下,确实是pycharm多了些路径:
  1. <code>print("当前工作目录:",os.getcwd())</code><code>
  2. print("python搜索模块的路径集合:",sys.path)</code>
复制代码


编辑
定位到问题后,根据网上的解决办法,在pdbconv.py中加上缺少的路径即可正常使用该脚本:
  1. <code>sys.path.append("D:\\PythonDev\\project\\volatility3-develop")</code><code>
  2. sys.path.append("D:\\Program\\PyCharm\\PyCharm 2022.2.3\\plugins\\python\\helpers\\pycharm_display")</code><code>
  3. sys.path.append("D:\\Program\\PyCharm\\PyCharm 2022.2.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend")</code>
复制代码


总结
目前不出网状态解一个windows的hash大概需要3-7分钟,如果优化这个工具确实有很高实用价值,后续会继续进行优化,争取能3分钟解决战斗。
发现问题,解决问题,总结经验,分享方法,共同进步。
附:python2版本与python3版本对比
vol2
Windows 7(ok)
编辑
Windows 10(不ok)
编辑
Linux环境下测试也是一样的结果:
编辑
Windows Server 2008(ok)
编辑
Windows Server 2012(不ok)
编辑
Windows Server 2016
估计是不ok的
vol3Windows 7(ok)
Windows 10(ok)
编辑
Windows Server 2012(ok)
编辑
Windows Server 2016(ok)
编辑
Windows Server 2019(ok)
编辑


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-28 19:54 , Processed in 0.019344 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表