关于pyinstaller与Xbash系列分析(续)
前言:
?《Xbash部分样本分析》一篇博客之后,研究了一下关于pyc字节码格式与pyinstaller。虽然相关资料比较少,但是不影响去学习,不得不说pyinstaller是Xbash系列跨平台危害罪魁祸首,因为PyInstaller支持Linux、Windows、Apple macOS平台可执行文件转化。意味着病毒可以在多平台上兼容运行,python去开发维护病毒难度较小,周期短对于分析人员来说也是有好处,比如把可执行文件提取成python源码。
?
?上述参考源于pyinstaller手册:https://pyinstaller.readthedocs.io/en/stable/index.html ? ????????????????????图片一:pyinstaller参数 1、-F,--onefile 创建一个文件捆绑的可执行文件 2、 -w,--windowed,--noconsole pe格式窗口程序GUI 3、 -c,--console,--nowindowed pe格式控制台程序 4、-a, --ascii不包含unicode支持 5、-D,--onedir 创建包含可执行文件的单文件夹包 ? 系统Centos 如果你没有安装pip,参考如下: 1、安装epel扩展:yum -y install epel-release 2、安装pip:yum -y install python-pip 安装pyinstaller: pip install pyinstaller Windows下参考也一样 ? ????????????????????图片二:python测试代码 2、使用pyinstaller命令进行打包,如下所示: ????????????????????图片三:pyinstaller打包 3、查看生成得数据,如下所示: ????????????????????图片四:dist/xxx ?生成的elf程序运行正常,而且pyinstaller维护了如上图所示得PYZ格式的数据文件,附加到了可执行文件的末尾,然后最前面是PYZ开头的格式。 ?官方提供了对应的脚本来提取pyc,名字叫archive_viewer.py代码下载:https://github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/utils/cliutils/archive_viewer.py 4、从上述网站中把代码粘贴下来,touch一个文件,+x权限后,复制即可使用,如下所示: ????????????????????图片五:archive_viewer.py 5、我们发现下面有很多数据,我们需要关注的s标志段中name是我们本身文件名: ????????????????????图片六:S段标志数据 6、archive_viewer.py都有什参数呢?很简单分析一下源码,如下所示: ????????????????????图片七:命令分析 我们需要用到X的命令去提取pyc,上图中为标记的命令U是go Up one level的含义。 7、开始提取pyc,如下所示: ????????????????????图片八:提取命令 8、这时候我们来看一看提取的pyc,widnows下用010就可以了,linux下用xxd可以观察,如下所示: ????????????????????图片九:提取pyc数据观察 ?9、pyc提取的到底对不对呢?怎样来确认?这时候我们需要利用python中的py_compile模块,这个模块中方法compile可以将py生成pyc,这样我们对比观察,如下所示: ????????????????????图片十:py_compile 代码: import py_compile py_compile.compile(r‘路径‘) 注意: 有时候会生成一个__pycompile__文件夹,里面会是pyc,有时候会在输入的路径下生成pyc,小心覆盖elf中提取的pyc。 10、我们看一下python原生态编译生成的字节码pyc如下: ????????????????????图片十一:compile编译pyc ?图片九与图片十一做比对,你一定会开头少了8个字节的数据,注意当前编译环境使用的python2.7.5,缺少了8个字节的数据,python3前面的字节编码字节也是不同的。 ?所以在当前环境下测试观察,那么使用pyinstaller中archive_viewer.py抽取的pyc比正常编译的字节码缺少了8个字节的数据,缺少的是什么?下面我们来看一看pyc格式解析。 ? 二、pyc格式解析: ????????????????????图片十二:部分pyc格式数据分析 ?当然pyc的格式不值上述那么多,因为详细的去看每一个数据段,不是一篇文章或者短时间内能够学习研究明白,那么我们来看一些重要的数据。 ?1、MAGIC,魔术头,注意版本区分不同所以魔术头的数值不同,比如python2一般是03f30d0a,python3.6一般是33790d0a,占用4个字节,前两个字节是版本,后两个字节是0d0a两个标志位. ????????????????????图片十三:补齐数据 ?注意:是在PyCodeObject对象之前补齐数据,而不是在原来的数据上修改!否则转换py的时候会报错的。 ?补齐数据之后我们需要做的是用工具去反编译成py文件,wdinows下推荐一款为EasyPythonDecompiler.exe的软件,而linux下更是数不胜数,那么这里使用linux下名为uncompyle2,decompyle2很多都可以。下面演示就使用EasyPythonDecompiler.exe来转换py,如下所示: ????????????????????图片十四:Decompile Success ?转换完成之后将会生成mypy.pyc_dis文件,如果pyc的格式不对就会失败,生成mypy.pyc_dis.failure,这时候我们拉入到IDE看一看python源码是否与图二中源码相同,如下所示: ????????????????????图片十五:匹配成功 ?上述一已经能成功的将pyinstaller打包elf格式的文件成功的转换成py,有何用呢?还记着Xbash系列病毒其中便有pyinstaller打包的病毒,如下所示: ????????????????????图片十六:提取恶意代码 三、Python恶意代码分析: ????????????????????图片十七:弱用户与弱密码 ?公网请求及初始化扫IP及描端口: ????????????????????图片十八:请求及端口初始化 ?初始化恶意线程环境及启动线程: ????????????????????图片十九:创建启动线程 ?线程回调分析: ????????????????????图片二十:线程回调分析 ?WEB扫描及数据库扫描: ????????????????????图片二十一:pass_crack ????????????????????图片二十二:check_pass ????????????????????图片二十三:check_pass ????????????????????图片二十四:mysql ????????????????????图片二十五:mysql删库勒索 ????????????????????图片二十六:postgresql删库勒索 ????????????????????图片二十七:mongodb删库勒索 ????????????????????图片二十八:redis删库勒索 ????????????????????图片二十九:hadoop Yarn Rm执行命令 ????????????????????图片三十:MQ利用执行put ⑥内网扫描: ????????????????????图片三十一:内网扫描 ????????????????????图片三十二:内网扫描 ?**通过上述恶意代码的分析,最可恶的是没有任何备份的情况下删库,且欺骗0.02BTC,即使给对方支付了费用,抱歉你的数据库仍无法恢复,对方会利用你的心性索要更多的BTC。 ?服务器中大量的弱账户与弱密码,给病毒带来了福利。扫描web、内网创建线程,一经发现字典匹配成功,那么会对数据库进行毁灭的操作。如何防范?如果你数据库账户名,密码规范化管理(复杂程度及长度),即使*了系统,也不能胡作非为,那么XbashY样本分析告一段落。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |