聲明
出品|先知社區(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-devel
yum install epel-release
yum install python35-devel
需要n多個系統依賴以及n多個pip依賴
pip3 install pefile==2018.8.8 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install backports.lzma -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install pycryptodome
pip 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?-y
Ubuntu系統:
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.info
python3 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 server
Required symbol library path not found: ntkrnlmp.pdb\118018959D8D7CA5AAB45B75AED5A976-1
The 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分鐘解決戰斗。發現問題,解決問題,總結經驗,分享方法,共同進步。
歡迎關注長白山攻防實驗室微信公眾號
定期更新優質文章分享