vCenter獲取鎖屏Hash之volatility

聲明

出品|先知社區(ID:LeeH)

以下內容,來自先知社區的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庫:

    yum install zlib &&\yum install zlib-devel &&\yum install bzip2-devel &&\yum install ncurses-devel &&\yum install sqlite-devel &&\yum install readline-devel &&\yum install gcc &&\yum install libffi &&\yum install libffi-devel &&\yum install gcc-c++\yum install openssl-devel\yum install tk-devel

    需要pip3

    yum install xz-develyum install epel-releaseyum install python35-devel

    需要n多個系統依賴以及n多個pip依賴

    pip3 install pefile==2018.8.8  -i http://pypi.douban.com/simple --trusted-host pypi.douban.compip3 install backports.lzma -i http://pypi.douban.com/simple --trusted-host pypi.douban.compip3 install pycryptodomepip install importlib-metadata==0.6

    思路二、打包Vol進行后利用

    1.選好合適的系統

    CentOS 7.9跟exsi的GLIBC庫版本一致,自帶python3.6,比較合適。

    安裝編譯后續可能會用到的依賴::

    yum install zlib &&\yum install zlib-devel &&\yum install bzip2-devel &&\yum install ncurses-devel &&\yum install sqlite-devel &&\yum install readline-devel &&\yum install gcc &&\yum install libffi &&\yum install libffi-devel &&\yum install gcc-c++ &&\yum install openssl-devel &&\yum install tk-devel

    2.下載Volatility3項目

    GitHub地址:https://github.com/volatilityfoundation/volatility3

    3.安裝pip依賴

    正常安裝到yara的時候應該會報錯,需要安裝python-dev庫才行

    CentOS系統:# 安裝EPEL源yum install epel-release -y# 默認安裝python3.6開發包yum?install?python3-devel?-yUbuntu系統:apt-get install python3-dev

    裝好python-dev之后,安裝依賴即可。

    pip3 install -r requirements.txt

    也可以這么安裝

    pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

    4.安裝Volatility3

    需要先更新下setuptools不然等下安裝編譯 Python的相關包安裝會報錯:

    pip3 install --upgrade setuptools

    安裝Volatility3

    python3 setup.py install

    完成安裝后,測試是否能正常使用

    python3 vol.py

    查看運行是否有異常提示:

    python3 vol.py -vv

    測試功能是否正常

    python3 vol.py -f xxx.vmem windows.infopython3 vol.py -f xxx.vmem windows.hashdump

    5.安裝pyinstaller

    pip3 install pyinstaller==3.6

    6.打包Volatility3

    修改spec,默認只有vol.py,增加了hashdump和yarascan;還增加了vol_coll使打包出來的是一個文件夾。打包,默認是放在dist目錄下。

    pyinstaller vol-new.spec

    需要把打包完成的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就行了。

    vol_analysis = Analysis(['vol.py',                        'volatility3/framework/plugins/windows/hashdump.py',                        'volatility3/framework/plugins/yarascan.py'],

    9. 聯網問題

    在esxi中直接運行打包好的Volatility,在聯網的情況下,已經可以完成hashdump。但是在無法聯網的時候,無法下載到symbols文件,也就是pdb(program

    database)文件,且該文件無法直接通過瀏覽器下載到。通過對項目的深入了解,發現作者有提供了下載pdb文件的解決辦法。

    作者并沒有在readme中寫明下載pdb文件的方法,在斷網狀態下調試腳本運行過程的時候,才發現作者留的小驚喜,上述調試信息中,關鍵點是:

    Symbol file could not be downloaded from remote serverRequired symbol library path not found: ntkrnlmp.pdb\118018959D8D7CA5AAB45B75AED5A976-1The symbols can be downloaded later using pdbconv.py -p ntkrnlmp.pdb -g 118018959D8D7CA5AAB45B75AED5A9761

    也就是說用pdbconv.py可以下載到所需的pdb文件:

    將下載好的symbols文件放入以下目錄,重新運行vol.py進行hashdump即可:

    /tmp/vol/volatility3/framework/symbols/windows/ntkrnlmp.pdb/

    坑點

    這里遇到了個小問題就是pycharm可以正常運行該腳本進行下載,但是本地命令行運行腳本會提示No module named 'volatility3',網上搜了下說是環境變量的問題,加上打印環境變量的語句,pycharm和命令行分別運行了下,確實是pycharm多了些路徑:

    print("當前工作目錄:",os.getcwd())print("python搜索模塊的路徑集合:",sys.path)

    定位到問題后,根據網上的解決辦法,在pdbconv.py中加上缺少的路徑即可正常使用該腳本:

    sys.path.append("D:\\PythonDev\\project\\volatility3-develop")sys.path.append("D:\\Program\\PyCharm\\PyCharm 2022.2.3\\plugins\\python\\helpers\\pycharm_display")sys.path.append("D:\\Program\\PyCharm\\PyCharm 2022.2.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend")


    總結

    目前不出網狀態解一個windows的hash大概需要3-7分鐘,如果優化這個工具確實有很高實用價值,后續會繼續進行優化,爭取能3分鐘解決戰斗。發現問題,解決問題,總結經驗,分享方法,共同進步。


    歡迎關注長白山攻防實驗室微信公眾號

    定期更新優質文章分享

    ?著作權歸作者所有,轉載或內容合作請聯系作者
    平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

    推薦閱讀更多精彩內容